ant

ENLACES
3.10

sig

3.10 Manejando enlaces de ficheros

Los enlaces le permiten dar a un único fichero múltiples nombres. Los ficheros son identificados por el sistema por su numero de inodo, el cual es el único identificador del fichero para el sistema de ficheros. Un directorio es una lista de números de inodo con sus correspondientes nombres de fichero. Cada nombre de fichero en un directorio es un enlace a un inodo particular.

3.10.1 Enlaces duros (Hard links)

La orden ln es usada para crear múltiples enlaces para un fichero. Por ejemplo, supongamos que tiene un fichero azul en un directorio. Usando ls -i, veremos el numero de inodo para el fichero.
# ls -i azul
22192 azul
#
Aqui, el fichero azul tiene el número de inodo 22192 en el sistema de ficheros. Podemos crear otro enlace a azul, llamado mar:
# ln azul mar
Con ls -i veremos que los dos ficheros tienen el mismo inodo.
# ls -i azul mar
22192 azul 22192 mar
#
Ahora, accediendo a azul o a mar accederemos al mismo fichero. Si hace cambios en azul, estos cambios también serán efectuados en mar. Para todos los efectos, azul y mar son el mismo fichero. Estos enlaces son conocidos como enlaces duros (Hard links) porque directamente crean el enlace al inodo. Nótese que solo podemos crear enlaces duros entre ficheros del mismo sistema de ficheros; enlaces simbólicos (ver mas adelante) no tienen esta restricción.

Cuando borra un fichero con rm, está solamente borrando un enlace a un fichero. Si usa el comando
# rm foo
solo el enlace de nombre azul es borrado; azul todavía existirá. Un fichero es solo definitivamente borrado del sistema cuando no quedan enlaces a él. Usualmente, los ficheros tienen un único enlace, por lo que el uso de rm los borra. Pero si el fichero tiene múltiples enlaces, el uso de rm solo borrará un único enlace; para borrar el fichero, deberá borrar todos los enlaces del fichero.

La orden ls -l muestra el numero de enlaces a un fichero (entre otra información).
# ls -l azul mar
-rw-r--r-- 2 root root 12 Ago 5 16:50 azul
-rw-r--r-- 2 root root 12 Ago 5 16:51 mar

#
La segunda columna en el listado, "2", especifica el numero de enlaces al fichero. Así resulta que un directorio no es más que un fichero que contiene información sobre la translación enlace a inodo. También, cada directorio tiene al menos dos enlaces duros en el: "." (un enlace apuntando a si mismo) y ".." (un enlace apuntando al directorio padre). En el directorio raíz (/), el enlace ".." simplemente apunta a /.

3.10.2 Enlaces simbólicos

Los enlaces simbólicos son otro tipo de enlace, que es diferente al enlace duro. Un enlace simbólico permite dar a un fichero el nombre de otro, pero no enlaza el fichero con un inodo.

La orden ln -s crea un enlace simbólico a un fichero. Por ejemplo, si usamos la orden
# ln -s azul mar
crearemos un enlace simbólico bar apuntando al fichero foo. Si usamos ls -i, veremos que los dos ficheros tienen inodos diferentes, en efecto.
# ls -i azul mar
22192 azul 22195 mar
#
De cualquier modo, usando ls -l vemos que el fichero mar es un enlace simbólico apuntando a azul.
# ls -l azul mar
-rw-r--r-- 1 root root 12 Aug 5 16:50 azul
lrwxrwxrwx 1 root root 03 Aug 5 16:51 mar -> azul

#
Los bits de permisos en un enlace simbólico no se usan (siempre aparecen como rwxrwxrwx). En su lugar, los permisos del enlace simbólico son determinados por los permisos del fichero "apuntado" por el enlace (en nuestro ejemplo, el fichero azul).

Funcionalmente, los enlaces duros y simbólicos son similares, pero hay algunas diferencias. Por una parte, puede crear un enlace simbólico a un fichero que no existe; lo mismo no es cierto para enlaces duros. Los enlaces simbólicos son procesados por el núcleo de forma diferente a los duros, lo cual es solo una diferencia técnica, pero a veces importante. Los enlaces simbólicos son de ayuda puesto que identifican al fichero al que apuntan; con enlaces duros no hay forma fácil de saber que fichero está enlazado al mismo inodo.

Los enlaces se usan en muchas partes del sistema Linux. Los enlaces simbólicos son especialmente importantes para las imagenes de las librerias compartidas en /lib.