Linux / Comando ln: crear enlaces duros y simbólicos

ln es un comando para crear enlaces duros o enlaces simbólicos entre archivos. El comportamiento predeterminado es crear un enlace duro, y usando -s se crea un enlace simbólico que guarda la cadena de ruta del destino.

En este texto se explican las diferencias estructurales entre los dos tipos de enlaces, la sintaxis básica, la selección entre enlaces simbólicos relativos o absolutos, cómo reemplazar enlaces existentes y cómo verificar el estado de un enlace.

¿Qué es el comando ln?

Un enlace duro es otro nombre para el mismo inodo: el registro que identifica un archivo y sus metadatos dentro de un sistema de archivos. Un enlace simbólico es un archivo independiente que guarda una ruta y puede apuntar a otro sistema de archivos o a un directorio. Si elimina uno de varios enlaces duros, los demás conservan el acceso a los datos; si desaparece la ruta de destino de un enlace simbólico, este puede quedar roto.

Sintaxis básica

ln [OPCIONES] DESTINO NOMBRE_DEL_ENLACE
ln [OPCIONES] DESTINO... DIRECTORIO

Si el nombre de archivo o ruta contiene espacios, se debe poner entre comillas, y los nombres que comienzan con un guion se deben especificar después de -- si es posible. Las opciones soportadas pueden variar según la distribución y la versión de GNU Coreutils, por lo que consulte la descripción del sistema actual con ln --help y man ln.

Uso básico de ln

Crear un enlace duro

Se especifica el destino y el nombre nuevo sin opciones. Ambas rutas apuntan al mismo inodo y si se modifica el contenido por un nombre, también se refleja en el otro.

ln original.txt hard-link.txt
stat -c '%i %h %n' original.txt hard-link.txt

Crear un enlace simbólico

Se utiliza -s. La cadena de destino que se guarda en el enlace se puede crear independientemente de si existe o no.

ln -s /opt/myapp/current app-current
readlink app-current

Crear varios enlaces en un directorio

Los dos ejemplos siguientes son alternativas: no los ejecute seguidos sobre los mismos nombres. Cree primero el directorio links. Guardan literalmente las rutas file1 y file2, que se interpretan desde dentro de links. Si los archivos están en el directorio padre, use rutas como ../file1 o -sr para calcular rutas relativas. Crear un enlace no garantiza que exista su destino.

ln -s file1 file2 links/
ln -s -t links file1 file2

Verificar la ruta a la que apunta un enlace simbólico

ln -s normalmente no muestra mensajes de éxito. La cadena de destino registrada dentro del enlace se verifica con readlink.

printf 'demo\n' > original.txt
ln -s original.txt shortcut.txt
readlink shortcut.txt

La salida de ejemplo es original.txt. Las rutas relativas se interpretan en función del directorio donde se encuentra el enlace, por lo que mover el enlace a otra ubicación puede romper el destino.

Opciones principales

Opciones Descripción
-s, --symbolic Crear un enlace simbólico en lugar de un enlace duro.
-r, --relative Cree enlaces simbólicos relativos con respecto a la ubicación del enlace. Se utiliza junto con -s.
-f, --force Eliminar el nombre del enlace existente y crear un nuevo enlace.
-i Compruebe antes de reemplazar el nombre del enlace existente.
-n Si el destino es un enlace simbólico que apunta a un directorio, se trata como el propio enlace.
-T Trate el nombre del enlace como una ruta exacta, no como un directorio.
-b Hacer una copia de seguridad del archivo existente que se reemplazará.
-v Mostrar el enlace creado.

Las opciones largas facilitan entender su significado y también ayudan a revisar scripts. Sin embargo, en scripts donde la portabilidad es importante, primero verifique si el sistema objetivo soporta esas opciones de extensión GNU.

Ejemplos de uso práctico

Crear enlace simbólico relativo

Un enlace relativo es útil si necesita mover el mismo árbol de directorios a otra ubicación. La ruta relativa se interpreta en función del directorio donde se colocará el archivo de enlace, no de la ubicación actual de la shell.

ln -s ../releases/2026-09 app/current
ln -sr /srv/app/releases/2026-09 /srv/app/current

Reemplazo seguro de enlaces existentes

Compruebe primero el nombre existente y el nuevo destino. En GNU, -sfnT sustituye la ruta exacta, pero -f también puede retirar un archivo normal: no comprueba por usted que sea un enlace. No use esta combinación sobre un nombre importante o desconocido.

readlink current
ln -sfnT releases/2026-10 current
readlink current

Verificar tipo de enlace y destino

Use ls -l y readlink para ver el enlace y la cadena almacenada. readlink -f puede aceptar que no exista el último componente de la ruta. Para exigir que exista todo el destino, use readlink -e o test -e. stat sin desreferenciar muestra los metadatos del enlace simbólico.

ls -l app-current
readlink app-current
readlink -f app-current
stat app-current

Comparación con comandos relacionados con ln

Comando / método Rol principal Situaciones adecuadas
Enlace duro Otro nombre para el mismo inodo Archivo normal en el mismo sistema de archivos
Enlace simbólico Archivo separado que almacena la cadena de ruta del destino Directorio·Otro sistema de archivos·Puntero de distribución
cp Copia de datos independiente Cuando se debe cambiar por separado del original
Montaje bind Montar la ruta en otra ubicación Cuando se necesita la exposición del directorio a nivel del sistema de archivos

Precauciones al usar

Recordar el orden de los argumentos

El formato predeterminado es ln DESTINO NOMBRE_DEL_ENLACE. Si se confunde con la dirección de copia del lenguaje natural, se pueden crear enlaces diferentes a los deseados.

El criterio de un enlace relativo es la ubicación del enlace

Incluso si se ingresa la ruta relativa tal como se ve en el directorio actual, el enlace puede romperse si se crea en otro directorio. ln -sr o use la ruta relativa calculada.

Los enlaces duros no pueden atravesar los límites del sistema de archivos

Los enlaces duros comparten el mismo inodo del sistema de archivos, por lo que no se pueden crear en otros puntos de montaje. Los enlaces duros de directorios también suelen estar limitados.

FAQ

¿El valor predeterminado de ln es un enlace simbólico?

No. El valor predeterminado es un enlace duro, y se necesita -s para crear un enlace simbólico.

Si se elimina el archivo original, ¿el enlace duro también desaparece?

No. Mientras queden otros enlaces duros que apunten al mismo inodo, los datos se mantienen.

¿Cómo puedo verificar si un enlace simbólico está roto?

Al observar la ruta guardada como readlink ENLACE, puede verificar si el destino final existe como readlink -e o test -e.

¿Cuál es mejor, un enlace absoluto o relativo?

Si necesita mover todo el árbol que incluye enlaces, un enlace relativo puede ser mejor; si necesita que la ubicación del enlace apunte a una ruta del sistema fija incluso si la ubicación del enlace cambia, un enlace absoluto puede ser adecuado.

La Lista de comandos de uso frecuente en Linux permite comparar otras operaciones con archivos. Para comprobar las opciones de enlace y su alcance, consulte la Documentación oficial de GNU Coreutils ln y el Manual oficial de GNU Coreutils.