ln
Crea un enlace, como un acceso directo, hacia un archivo o carpeta.
Crea un enlace: un nombre que apunta a otro archivo o carpeta, parecido al acceso directo de Windows pero resuelto por el propio sistema, así que funciona con cualquier programa. Lo usas para no repetir rutas largas, para que /opt/app apunte siempre a la versión más nueva de una app y para dejar un archivo disponible en otro lugar sin moverlo ni duplicarlo.
ln [opciones] ORIGEN NOMBRE_DEL_ENLACEEl enlace simbólico no guarda una copia: si mueves o borras el archivo de origen, el enlace se queda roto y nada abre. Y la opción -f borra el destino sin preguntar, así que revisa antes a dónde apuntaba con ls -l.
Despiece
6 ejemplosCrear un enlace simbólico
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | ln | Comando | El comando que crea enlaces. |
| 2 | -s | Opción | Enlace simbólico: guarda la ruta en vez de los datos. |
| 3 | documento.txt | Argumento | El archivo o carpeta al que va a apuntar el enlace. |
| 4 | alias.txt | Argumento | El nombre nuevo que vas a usar. |
alias.txt queda como enlace a documento.txt. No se copió nada: si abres alias.txt ves el contenido del original y todo cambio que le hagas se refleja. Con ls -l ves la flecha: alias.txt -> documento.txt.
Apuntar a la versión nueva de una app
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | ln | Comando | El comando que crea enlaces. |
| 2 | -sfn | Opción | s crea el enlace simbólico, f reemplaza el que ya hubiera y n hace que ese nombre se trate como archivo, sin seguir el enlace viejo. |
| 3 | /opt/app-2.1 | Argumento | La carpeta nueva, a la que vas a apuntar. |
| 4 | /opt/app | Argumento | El nombre estable que usan los demás comandos. |
/opt/app ahora apunta a /opt/app-2.1 y todos los comandos que usan /opt/app usan la versión nueva. Esa combinación, -sfn, es el estándar para cambiar de versión sin desinstalar nada. Si /opt es del sistema, corre el comando con sudo.
Enlazar una carpeta
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | ln | Comando | El comando que crea enlaces. |
| 2 | -s | Opción | Enlace simbólico, el único que puede apuntar a una carpeta. |
| 3 | /mnt/disco-externo | Argumento | La ruta de la carpeta que quieres dejar a la mano. |
| 4 | datos | Argumento | El nombre corto del enlace, en la carpeta donde estás. |
datos queda como acceso a la carpeta del disco externo. cd datos entra a ella y ls datos lista su contenido, igual que si usaras la ruta completa. Si el disco no está montado, verás la carpeta /mnt/disco-externo vacía.
Crear un enlace duro
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | ln | Comando | El comando que crea enlaces. |
| 2 | documento.txt | Argumento | El archivo que ya tiene que existir. |
| 3 | copia-fisica.txt | Argumento | El segundo nombre para el mismo archivo. |
Sin -s, ln crea un enlace duro: un segundo nombre del mismo archivo, no una copia. Los dos comparten los mismos datos, así que si editas uno el otro también cambia, y si borras uno el otro sigue ahí. Con ls -li ves que los dos tienen el mismo número de inode.
Crear el enlace en otra carpeta
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | ln | Comando | El comando que crea enlaces. |
| 2 | -s | Opción | Enlace simbólico. |
| 3 | -t | Opción | Crea el enlace dentro de la carpeta que sigue. |
| 4 | /tmp | Argumento | La carpeta donde se va a crear el enlace. |
| 5 | notas.txt | Argumento | El archivo al que va a apuntar. |
El enlace aparece en /tmp con el nombre notas.txt. Con -t puedes mandar varios archivos a la misma carpeta: ln -s -t /tmp a.txt b.txt.
Guardar la ruta relativa
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | ln | Comando | El comando que crea enlaces. |
| 2 | -sr | Opción | s crea el enlace simbólico y r guarda la ruta relativa al lugar donde queda el enlace. |
| 3 | /var/www/proyecto | Argumento | La carpeta real. |
| 4 | /var/www/html/proyecto | Argumento | El lugar donde va el enlace. |
En vez de la ruta absoluta, el enlace guarda ../proyecto. Así sigue funcionando aunque muevas las dos carpetas juntas, que es justo lo que pasa cuando rsync o un despliegue copian el proyecto de un lado a otro.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -s--symbolic | Crea un enlace simbólico, el que casi siempre quieres. El enlace guarda la ruta, no el contenido. |
| -f--force | Borra el archivo de destino si ya existe, sin preguntar. Sirve para actualizar el enlace de una app. |
| -n--no-dereference | Trata el nombre del enlace como archivo normal aunque apunte a una carpeta. Sin esto, ln -sf mete el enlace nuevo adentro de esa carpeta. |
| -v--verbose | Muestra el enlace que va creando. |
| -r--relative | Con -s, guarda la ruta relativa al lugar del enlace. El enlace sigue funcionando si mueves las dos carpetas juntas. |
| -t--target-directory | Indica en qué carpeta crear los enlaces; cada uno toma el nombre del archivo original. |
| -i--interactive | Pregunta qué hacer cuando el destino ya existe, en vez de reemplazarlo automáticamente. |
| -T--no-target-directory | Trata siempre el segundo argumento como el nombre del enlace, nunca como carpeta destino. Es la opción segura para scripts. |
Fallas comunes
| Falla | Remedio |
|---|---|
| Poner los dos argumentos al revés: ln -s alias.txt documento.txt. | El orden es primero el origen y después el nombre del enlace: ln -s documento.txt alias.txt. Al revés ln se queja de que el destino ya existe o te crea un enlace que no apunta a nada. |
| Usar ln -sf sobre un enlace que apunta a una carpeta, sin -n. | ln sigue el enlace viejo y guarda el nuevo adentro de esa carpeta, dejando el enlace viejo como estaba. Con -n (o -T) el nombre se trata como archivo normal y sí se reemplaza: ln -sfn /opt/app-2.1 /opt/app. |
| Borrar el archivo de origen y esperar que el enlace siga funcionando. | El enlace simbólico guarda la ruta, no una copia: si el destino desaparece, cat o cd avisan No such file or directory y ls -l deja ver que la ruta no existe. El enlace duro sí sobrevive mientras exista otro nombre del mismo archivo. |
| Intentar hacer un enlace duro a una carpeta o entre dos discos. | ln sin -s solo acepta archivos que ya existen, nunca carpetas, y los dos nombres tienen que estar en el mismo sistema de archivos, por eso no funciona entre tu carpeta personal y un disco montado. Para carpetas y rutas, usa -s. |
Preguntas frecuentes
- ¿Cuál es la diferencia entre un enlace simbólico y uno duro?
- El simbólico (ln -s) guarda la ruta y puede apuntar a carpetas, a archivos de otro disco o a algo que todavía no existe; si el destino se borra, el enlace se rompe. El duro (ln sin -s) es un segundo nombre del mismo archivo: comparten los datos, no se pueden hacer con carpetas y solo entre archivos del mismo sistema de archivos.
- ¿Cómo veo a qué apunta un enlace?
- Con ls -l nombre, que muestra la flecha -> con la ruta de destino. readlink nombre imprime solo esa ruta, y readlink -f te da la ruta completa final. Si el enlace está roto, ls -l deja ver que la ruta de destino no existe y, si tu ls trae color, el nombre sale en rojo.
- ¿Cómo cambio la versión de una app sin desinstalar nada?
- Con enlaces simbólicos: ln -sfn /opt/app-2.1 /opt/app hace que /opt/app apunte a la versión nueva. La f reemplaza el enlace que ya existía y la n evita que el enlace nuevo termine dentro de la carpeta vieja. Para volver atrás, corres lo mismo con la ruta anterior.
- ¿Por qué ln -s me dice File exists?
- Porque en ese nombre ya hay algo. Usa ln -sf /ruta/carpeta nombre para reemplazarlo, pero recuerda que -f borra el destino sin preguntar, así que revisa antes a dónde apuntaba con ls -l. En un script es más seguro usar -sfn.
- ¿Por qué ln me dice Permission denied?
- Porque no tienes permiso de escribir en la carpeta donde quieres crear el enlace. Enlazar hacia algo de /opt o /usr no requiere sudo, pero crear el enlace dentro de esas carpetas sí, porque son de root: sudo ln -s /opt/app-2.1 /opt/app. El permiso que importa es el de la carpeta destino, no el del origen.