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
rm
pá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 > 2
la 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 querm
ya 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
rmdir
con su ruta, que se puede hacer con:Si a menudo necesita eso, puede establecer un alias como:
.. que podría llamarse
rmc
solo 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)
,pwd
descubre un nombre lógico para el directorio actual, por ejemplo/foo/bar/baz
, y luegormdir
, al ver esa ruta, elimina labaz
entrada del/foo/bar
directorio, 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)