Una entrada de directorio da nombre a un inodo. Un enlace duro crea otra entrada de directorio para el mismo inodo, mientras que un enlace simbólico crea un inodo distinto cuyo contenido es una ruta que debe resolverse. Esta diferencia controla la identidad, la duración y el comportamiento entre sistemas de archivos.
El Sistema de Archivos · Lección 12
Enlaces simbólicos
Aprende cómo difieren los enlaces simbólicos y duros en la resolución de rutas, la identidad de inodos y el alcance del sistema de archivos.
Crear y examinar un enlace simbólico
Crea un enlace simbólico con ln -s TARGET LINK_NAME:
$ printf '%s\n' 'example' > myfile
$ ln -s -- myfile myfilelink
$ ls -li myfile myfilelink
151 -rw-r--r-- 1 user user 8 ... myfile
93403 lrwxrwxrwx 1 user user 6 ... myfilelink -> myfile
El enlace simbólico tiene su propio inodo y almacena el texto myfile. Cuando un programa sigue myfilelink, la resolución de rutas continúa hacia el destino. Muestra el texto almacenado sin seguirlo mediante:
$ readlink myfilelink
¿Qué orden crea el enlace simbólico myfilelink con el texto de destino myfile?
Destinos relativos y absolutos
Un destino absoluto comienza en /. Un destino relativo se resuelve respecto al directorio que contiene el enlace simbólico, no respecto al directorio actual del shell en el momento en que alguien lo abra posteriormente.
$ mkdir -p tree/data tree/current
$ printf '%s\n' 'value' > tree/data/item
$ ln -s ../data/item tree/current/item
Mover toda la jerarquía tree conserva esta relación relativa. Mover solo el enlace o el destino puede romperla. Un enlace simbólico puede contener un destino inexistente y entonces se denomina colgante o roto.
¿Desde dónde se resuelve el destino relativo de un enlace simbólico?
Crear un enlace duro
Crea otro nombre para un archivo normal existente sin -s:
$ ln -- myfile myhardlink
$ ls -li myfile myhardlink
151 -rw-r--r-- 2 user user 8 ... myfile
151 -rw-r--r-- 2 user user 8 ... myhardlink
Ambos nombres se corresponden con el mismo sistema de archivos y número de inodo. El recuento de enlaces pasa a ser 2. Ningún nombre es intrínsecamente el «original»; cambiar el contenido mediante uno modifica el objeto compartido, y eliminar un nombre deja el otro.
Los enlaces duros no pueden cruzar límites de sistemas de archivos porque un número de inodo solo tiene significado dentro del suyo. Linux también impide normalmente que los usuarios creen enlaces duros a directorios y puede restringir enlaces a archivos que no poseen para evitar ciclos y problemas de seguridad.
¿Qué comparten dos enlaces duros a un archivo normal?
Duración y eliminación
Eliminar un enlace simbólico elimina ese objeto de enlace, no su destino:
$ rm -- myfilelink
Eliminar el nombre de un enlace duro reduce el recuento de enlaces del inodo compartido. El sistema de archivos solo puede recuperar el objeto cuando el recuento llega a cero y ningún descriptor abierto ni otra referencia del sistema de archivos lo mantiene vivo.
Evita una barra final al eliminar un enlace simbólico a un directorio, porque la resolución de rutas con barra final puede seguir la semántica de directorios según la orden. Examina con ls -ld -- LINK y elimina deliberadamente el nombre del enlace.
¿Qué ocurre normalmente al eliminar el propio enlace simbólico?
Seguir enlaces de forma segura
Los enlaces simbólicos pueden desviar un programa privilegiado fuera de un directorio esperado o cambiar entre la validación y el uso. Los programas seguros deben evitar carreras de comprobar y después abrir, y utilizar interfaces relativas a directorios, que no sigan enlaces o que restrinjan la resolución según el lenguaje y el sistema operativo.
Para una inspección habitual:
ls -ld ENLACEmuestra el propio enlace.readlink LINKimprime el texto de destino almacenado.stat LINKsuele comunicar los metadatos del enlace, mientras questat -L LINKlo sigue en GNU coreutils.find -Lsigue enlaces y puede encontrar ciclos; utilízalo solo deliberadamente.
Los permisos mostrados como lrwxrwxrwx no son una concesión general de acceso. El acceso se decide mediante el recorrido de directorios, la política de seguimiento y los permisos del destino; la propiedad del enlace también importa para algunas reglas de directorios protegidos.
¿Qué imprime de forma predeterminada readlink LINK?
Utiliza Gestionar archivos y directorios en Linux para practicar con enlaces en archivos desechables y comparar números de inodo.
Lección completada
Has completado Enlaces simbólicos
Ahora puedes elegir y examinar el tipo correcto de enlace del sistema de archivos.
Utiliza
ln -s DESTINO ENLACEpara un enlace simbólico basado en rutas.Resuelve los destinos relativos desde el directorio que contiene el enlace.
Utiliza
ln EXISTING LINKpara otro nombre de inodo en el mismo sistema de archivos.Distingue desenlazar un enlace simbólico de desenlazar uno duro.
Evita seguir enlaces de forma insegura en operaciones privilegiadas o recursivas.
Guarda tu progreso
Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.
Crear una cuenta gratuita