Traté de eliminar el '.' directorio. Pensé que podría eliminar mi directorio de trabajo sin tener que ir a un directorio principal.
El punto de mi pregunta es buscar una idea de cómo funciona el sistema Linux para eliminar archivos.
filesystems
directory
rm
Nombre de oro
fuente
fuente

rm .yrmdir .no funcionan, sino por qué se especifica que no funcionan, lo que es independiente de la existencia física de un enlace rígido.rm -rf .*solo para encontrar esto, incluyendo no solo.sino también.., y luego../.., y luego ...Respuestas:
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 larmdir(2)página del manual:Se puede encontrar una justificación en la
rmpágina del manual: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.fuente
..enlazan a él. Este es el caso único delink count > 2la gran mayoría de los sistemas operativos y sistemas de archivos, por lo que "algunos sistemas de archivos y / o sistemas operativos" es un eufemismo. Sin embargo, la única excepción no histórica conocida es Mac OS X con HFS + que agrega restricciones sobre quién y qué se puede hacer. Por supuesto, el comentario POSIX se dirige a esta rareza. Ver unix.stackexchange.com/questions/22394/…rm -r .*antes y lo voló todo en el directorio padre de forma recursiva ... Eso fue hace más de una década o dos, pero es bueno saber quermya no permite esto.Se hace así por integridad, ya que actualmente está dentro de ese directorio y
.es solo una referencia propia.Debe ir en su padre o llamar
rmdircon su ruta, que se puede hacer con:Si a menudo necesita eso, puede establecer un alias como:
.. que podría llamarse
rmcsolo para eliminar el directorio actual.fuente
rmdir .comando compromiso la integridad del sistema de archivos de una manera quermdir $(pwd)ormdir "$PWD"no lo hace?rm *y qué quiere decir con historial de shell? 2. La respuesta abordó la parte del por qué , 3. ¿Te importa elaborar?rmdir $(pwd),pwddescubre un nombre lógico para el directorio actual, por ejemplo/foo/bar/baz, y luegormdir, al ver esa ruta, elimina labazentrada del/foo/bardirectorio, siempre que se cumplan las condiciones. Esto tiene sentido. El comandormdir ., por otro lado, es una instrucción para eliminar la.entrada del directorio actual, que no está permitida (violaría la restricción de que cada directorio tiene una.entrada apuntando a sí misma) ni útil (no eliminaría el enlace que querías eliminar)