La mejor forma de comprender qué hay detrás de esta noción de vínculo es por medio de un ejemplo. Creemos un archivo (regular):
$ pwd /home/reina/ejemplo $ ls $ touch a $ ls -il a 32555 -rw-rw-r-- 1 reina reina 0 sep 10 08:12 a
La opción -i
del comando
ls imprime el número de inodo, que es el primer
campo de la salida. Como puede ver, antes de crear el archivo
a
, no había archivo alguno en el directorio.
El otro campo de interés es el tercero, que es el contador de
vínculos del archivo (bueno, de hecho, del inodo).
El comando touch a puede separarse en dos acciones distintas:
la creación de un inodo, al cual el sistema le atribuyó el número 32555, y cuyo tipo es el de un archivo regular;
la creación de un vínculo a este inodo,
llamado a
, en el directorio corriente,
/home/reina/ejemplo
. Por lo tanto, el
archivo /home/reina/ejemplo/a
es un
vínculo al inodo numerado 32555, y por el momento es sólo uno:
el contador de vínculos muestra un 1.
$ ln a b $ ls -il a b 32555 -rw-rw-r-- 2 reina reina 0 sep 10 08:12 a 32555 -rw-rw-r-- 2 reina reina 0 sep 10 08:12 b $
habremos creado otro vínculo al mismo inodo.
Como puede ver, no hemos creado archivo alguno denominado
b
, sino que sólo hemos agregado otro vínculo
al inodo numerado 32555 en el mismo directorio y lo denominamos
b
. Puede ver en la salida de ls
-il que el contador de vínculos para el inodo ahora es 2,
y ya no es 1.
$ rm a $ ls -il b 32555 -rw-rw-r-- 1 reina reina 0 sep 10 08:12 b $
vemos que incluso cuando hemos borrado el
“archivo original”, el inodo todavía existe. Pero
ahora el único vínculo a él es el archivo denominado
/home/reina/ejemplo/b
.
Por lo tanto, bajo UNIX® un archivo no tiene nombre alguno; en su lugar, tiene uno o más vínculos en uno o más directorios.
También los directorios se
almacenan en inodos, pero su contador de vínculos, contrariamente
a todos los otros tipos de archivos, es el número de subdirectorios
que contiene. Existen al menos dos vínculos por directorio: el
directorio en sí mismo (.
) y su directorio
padre (..
).
Ejemplos típicos de archivos
que no están vinculados (es decir, no tienen nombre) son las
conexiones de red; Usted nunca verá el archivo correspondiente a su
conexión con el sitio
web de Mandrakelinux en su árbol de archivos, sin
importar que directorio intente. Similarmente, cuando usa una
tubería en el shell
, el
inodo que corresponde a la misma existe, pero no está vinculado.
Otro uso de los inodos sin nombre es en los archivos temporales.
Usted crea un archivo temporal, y luego lo elimina. El archivo
existe mientras está abierto, pero nadie lo puede abrir (ya que no
hay nombre por el cual abrirlo). De esta forma, si la aplicación
falla, el archivo temporal se elimina automáticamente.