GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué un nuevo directorio tiene un recuento de enlaces duros de 2 antes de que se le agregue algo?

Digamos que acabo de crear el directorio newDirectory y luego hago el comando ls -ld. Veo que el número de enlaces duros es 2. ¿Qué hace exactamente que el enlace duro sea 2 desde el principio? ¿También es el número de subdirectorios en el directorio actual igual al número de enlaces duros - 2?

Respuesta aceptada:

Históricamente, el primer sistema de archivos Unix creaba dos entradas en cada directorio:. apuntando al directorio mismo, y .. apuntando a su padre. Esto proporcionó una manera fácil de atravesar el sistema de archivos, tanto para las aplicaciones como para el propio sistema operativo.

Por lo tanto, cada directorio tiene un recuento de enlaces de 2+n, donde n es el número de subdirectorios. Los enlaces son la entrada para ese directorio en su padre, el propio . del directorio entrada, y el .. entrada en cada subdirectorio. Por ejemplo, suponga que este es el contenido del subárbol enraizado en /parent , todos los directorios:

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

Luego dir tiene un recuento de enlaces de 5:el dir entrada en /parent , el . entrada en /parent/dir , y los tres .. entradas en cada uno de /parent/dir/sub1 , /parent/dir/sub2 y /parent/dir/sub3 . Desde /parent/dir/sub1 no tiene subdirectorio, su recuento de enlaces es 2 (el sub1 entrada en /parent/dir y el . entrada en /parent/dir/sub1 ).

Para minimizar la cantidad de mayúsculas y minúsculas para el directorio raíz, que no tiene un padre "adecuado", el directorio raíz contiene un .. entrada apuntando a sí mismo. De esta forma, también tiene un recuento de enlaces de 2 más el número de subdirectorios, siendo los 2 /. y /.. .

Los sistemas de archivos posteriores tienden a realizar un seguimiento de los directorios principales en la memoria y, por lo general, no necesitan . y .. existir como entradas reales; los típicos sistemas Unix modernos tratan . y .. como valores especiales como parte del código del sistema de archivos independiente del tipo de sistema de archivos. Algunos sistemas de archivos todavía incluyen . y .. entradas, o pretender aunque no aparezca nada en el disco.

La mayoría de los sistemas de archivos aún informan un recuento de enlaces de 2+n para directorios independientemente de si . y .. existen entradas, pero hay excepciones, por ejemplo, btrfs no hace esto.


Linux
  1. ¿Por qué no se permiten enlaces físicos a directorios en Unix/linux?

  2. En `while Ifs=Read..`, ¿por qué Ifs no tiene efecto?

  3. ¿Por qué '/' tiene una entrada '..'?

  4. Creando un nuevo directorio en C

  5. ¿Hay algo más rápido que `find . | wc -l` para contar archivos en un directorio?

¿Python tiene sincronización?

¿Por qué mi enlace simbólico crea un archivo y no una carpeta?

¿Por qué ENOENT significa No existe tal archivo o directorio?

¿Qué es una GPU Matrox y por qué el servidor UNIX de mi universidad tiene una?

¿Por qué `xdg-mime query filetype...` no encuentra un nuevo tipo de archivo agregado?

¿Por qué no puedo crear un vínculo físico desde un archivo de dispositivo que no sea el directorio /dev?