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 el enlace duro 2 desde el principio? ¿También es el número de subdirectorios en el directorio actual igual al número de enlaces duros - 2?
38
Respuestas:
Históricamente , el primer sistema de archivos Unix creó dos entradas en cada directorio:
.
apuntando al directorio en sí y..
apuntando a su padre. Esto proporcionó una manera fácil de atravesar el sistema de archivos, tanto para aplicaciones como para el sistema operativo mismo.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, la propia
.
entrada del directorio y la..
entrada en cada subdirectorio. Por ejemplo, suponga que este es el contenido del subárbol enraizado en/parent
todos los directorios:Luego
dir
tiene un recuento de enlaces de 5: ladir
entrada en/parent
, la.
entrada en/parent/dir
y las tres..
entradas en cada uno de/parent/dir/sub1
,/parent/dir/sub2
y/parent/dir/sub3
. Como/parent/dir/sub1
no tiene subdirectorio, su número de enlaces es 2 (lasub1
entrada/parent/dir
y la.
entrada/parent/dir/sub1
).Para minimizar la cantidad de mayúsculas y minúsculas especiales para el directorio raíz, que no tiene un padre "adecuado", el directorio raíz contiene una
..
entrada que apunta a sí mismo. De esta manera, también tiene un conteo de enlaces de 2 más el número de subdirectorios, siendo 2/.
y/..
.Los sistemas de archivos posteriores han tendido a realizar un seguimiento de los directorios principales en la memoria y, por lo general, no necesitan
.
y..
existen como entradas reales; Los sistemas Unix modernos típicos 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 aún incluyen entradas.
y..
, o pretenden hacerlo aunque no aparezca nada en el disco.La mayoría de los sistemas de ficheros todavía informan de un número de enlaces de 2 + n para los directorios independientemente de si
.
y..
existen entradas, pero hay excepciones, por ejemplo btrfs no hace esto.fuente
..
señalar al padre no afecta el recuento de enlaces del directorio actual. El recuento de 2 proviene.
y el nombre del directorio (original) en sí mismo. La forma en que lo pones es un poco ambiguo, y hace que parezca.
y..
son los dos...
sólo debe utilizarse para explicar cómo las matemáticas se resuelve a2+n
:).
interior". Si aún no está claro para usted, lamento no poder aclararlo más. Todo lo que podría hacer mejor es copiar y pegar su respuesta aquí en los comentarios.Hay uno para el directorio en sí y otro para el
.
interior.Eso tiene sentido, ya que cada subdirectorio crea un
..
enlace rígido, y más allá de eso, no puede crear enlaces rígidos a directorios. 1 Sin embargo, no confiaría en esto por nada serio, especialmente. ya que es fácil contar los subdirectorios y obtener el número real.Si solo está mirando la
ls
salida para tener una idea de cuántos subs hay, entonces le da una idea decente.1 O al menos, no puedes con
ln
. No lo he intentado mediante programación, yman 2 link
es ambiguo: no hay un error obvio para vincular a un directorio, aunque hay un par que podría aplicarse (EMLINK
,EPERM
). Entonces, a menos que haya algún estándar en alguna parte que diga que los únicos enlaces duros posibles a un directorio son.
y..
, nuevamente, solo trataría ese recuento de enlaces duros como una pista casual.fuente