Eliminar el directorio actual no afecta la integridad del sistema de archivos o su organización lógica. La prevención de la .
eliminación se realiza siguiendo el estándar POSIX que se indica en la rmdir(2)
página del manual:
Si el argumento de ruta se refiere a una ruta cuyo componente final es punto o punto-punto, rmdir () fallará.
Se puede encontrar una justificación en la rm
página del manual:
La utilidad rm tiene prohibido eliminar los nombres punto y punto-punto para evitar las consecuencias de hacer algo como:
rm -r. *
Por otro lado, eliminar explícitamente el directorio actual (es decir, indicando su ruta completa o relativa) es una operación permitida en Unix, al menos desde SVR3, ya que estaba prohibido con Unix versión 7 hasta SVR2. Esto es muy similar a lo que sucede cuando elimina un archivo que se está leyendo o escribiendo activamente. Los procesos que acceden al archivo de eliminación continúan sus operaciones de lectura y escritura como si nada hubiera pasado. Después de haber eliminado un directorio actual del proceso, este directorio ya no es accesible a través de su ruta, pero su inodo permanece presente en el sistema de archivos hasta que el proceso muere o cambia su propio directorio.
Tenga en cuenta que el proceso no podrá utilizar una ruta relativa a su directorio actual para cambiar su cwd (por ejemplo cd ..
) porque ya no hay un..
entrada en su directorio actual.
Cuando alguien escribe rmdir .
, es probable que espere que se elimine la entrada del directorio actual, pero cuando se elimina un directorio (usando su ruta), en realidad se eliminan tres entradas de directorio .
,..
, y el propio directorio.
Eliminar solo .
y no la entrada de directorio de este directorio crearía un directorio no compatible, pero como ya se indicó, está prohibido por el estándar.
Como @Emmanuel señaló correctamente, hay una segunda razón por la cual .
no está permitido eliminar . Hay al menos un sistema operativo compatible con POSIX (Mac OS X con HFS +) que, con fuertes restricciones, admite la creación de enlaces duros a directorios existentes. En tal caso, no hay una forma clara desde dentro del directorio para saber qué enlace rígido es el que se espera eliminar.