Cualquier archivo en un sistema de archivos UNIX diseñado convencionalmente cuyo recuento de referencia (por ejemplo, la suma del recuento de enlaces duros y el número de identificadores de archivos abiertos *) alcanza 0 se elimina. Sin embargo, en los sistemas UNIX modernos, la rmdirllamada al sistema elimina un directorio vacío en una sola operación en lugar de quitar .y ..de uno en uno.
Sin embargo, en sistemas UNIX históricos, esta llamada al sistema no existía. En cambio, el rmdir comando era un programa setuid (el código fuente se puede encontrar aquí ) que verificó que un directorio estaba vacío (aparte de las entradas especiales), y luego se eliminó ..y ., en ese orden, y luego eliminó el directorio en sí, todo con el unlinkllamada al sistema que solo se permitió usar root en los directorios (de ahí por qué el comando se configuró). Entonces, en esos sistemas, el recuento de enlaces de un directorio sería momentáneamente 1 después de que .se eliminó, pero antes de que el directorio se eliminara del directorio padre, entonces sería 0.
El rmcomando, por cierto, evitó que incluso root elimine directorios. Y rm -rllamaría al rmdircomando para eliminar directorios después de vaciar sus contenidos.
En estos sistemas históricos, el mal uso de la unlinkllamada de un programa que se ejecuta como root, que se ejecuta en una condición de carrera con rmdiro mv, o que crea un archivo en un proceso cuyo directorio actual ha sido eliminado (los sistemas modernos evitan esto), podría dar lugar a archivos o directorios colgantes que tienen un recuento de enlaces duros por encima de 0 pero no existen en el árbol de directorios. Esta condición fue detectada por dcheck, y todavía es una de las comprobaciones fsckya que sigue siendo físicamente posible en la mayoría de los sistemas de archivos.
Por cierto, no se requiere que los sistemas de archivos implementen directorios (incluidos .y ..) como archivos normales que tienen enlaces duros. En estos sistemas de archivos, el recuento de enlaces duros de un directorio siempre se informará como 0(pero, por supuesto, su existencia dentro del directorio principal califica para un "recuento de referencia" de 1).
El comportamiento de un directorio eliminado (por ejemplo, cuando es examinado por un proceso que ya lo tiene abierto o como su directorio actual) y el significado exacto del "conteo de enlaces" de un directorio no están especificados. En Mac OS X, por ejemplo, informará un recuento de enlaces duros de 2 , aunque no tenga enlaces duros reales. A pesar de que .y ..no aparecen en el listado, el directorio se puede abrir y statpuede ser llamado con el nombre .o ... En Linux, el número de enlaces es 0, pero .y ..también siguen siendo trabajo.
Mac OS X también informa el número de todos los archivos en un directorio como el recuento de enlaces, en lugar de solo el número de subdirectorios. Pero es 2 incluso cuando .y ..se han ido.
* Esto incluye descriptores abiertos normales, secciones mapeadas en memoria (incluyendo, por ejemplo, la ejecución de archivos binarios y bibliotecas compartidas) y procesar directorios actuales.
.., solo cuando tiene un subdirectorio, ¿correcto? Entonces,..no siempre está presente para un directorio, ¿verdad?..está presente en cada directorio que es un subdirectorio. que es todo pero/que también tiene uno, así que todos los directorios...consigo mismo. ¿Cuáles son los enlaces duros al directorio? el archivo con el nombre de ruta y.? (2) ¿por qué ignoras los puntos de montaje?..apuntará al padre. Como caso especial, el enlace del directorio raíz apunta a sí mismo. Esto permite quecd ..\..comandos similares funcionen como se espera, sin importar dónde se encuentre. Puedes probar con elstatcomando.... Es por.y el nombre en el directorio principal que apunta a él. La única excepción es la raíz, que no tiene padre. Pero se..apunta a sí mismo, por lo que también tiene un recuento de enlaces = 2.