En los sistemas de estilo Unix, la estructura de datos que representa los objetos del sistema de archivos (en otras palabras, los datos sobre un archivo), se almacena en lo que se llama un "inodo".
Un nombre de archivo es solo un enlace a este inodo, y se conoce como un "enlace duro". No hay diferencia entre el primer nombre que se le da a un archivo y cualquier enlace posterior. Entonces la respuesta es "sí": un enlace duro es un archivo normal y, de hecho, un archivo normal es un enlace duro.
El ls
comando le mostrará cuántos enlaces duros hay al archivo.
Por ejemplo:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Aquí hemos creado un archivo llamado /tmp/hello.txt
. En 1
la salida de ls -l
indica que hay 1 enlace duro a este archivo. Este enlace duro es el nombre del archivo en sí /tmp/hello.txt
.
Si ahora creamos otro enlace duro a este archivo:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
ahora puede ver que ambos nombres de archivo indican que hay 2 enlaces duros al archivo. Ninguno de estos es el nombre de archivo "apropiado", ambos son igualmente válidos. Podemos ver que ambos apuntan al mismo inodo (en este caso, 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Existe una idea errónea de que esto es diferente para los directorios. He escuchado a personas decir que el número de enlaces devueltos por ls
un directorio es el número de subdirectorios, incluidos .
y ..
que es incorrecto . O, al menos, si bien le dará el número correcto, ¡es correcto por los motivos equivocados!
Si creamos un directorio y hacemos un ls -ld
, obtenemos:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
Esto muestra que hay 2 enlaces duros a este directorio. Estos son:
/tmp/testdir
/tmp/testdir/.
Tenga en cuenta que no/tmp/testdir/..
es un enlace a este directorio, es un enlace a . Y esto le dice por qué funciona la cosa del "número de subdirectorios". Cuando creamos un nuevo subdirectorio:/tmp
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
ahora puede ver que hay 3 enlaces duros al /tmp/testdir
directorio. Estos son:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Por lo tanto, cada nuevo subdirectorio aumentará el número de enlaces en uno, debido a la ..
entrada que contiene.