Comandos LinuxExplicados en español
/
Ficha06 / 104
Categoría
Archivos
Ejemplos
6
Ver también
ls · rm · cp · mv

ln

link (enlace)

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.

Sintaxisln [opciones] ORIGEN NOMBRE_DEL_ENLACE
Precaución

El 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.

§ 1

Despiece

6 ejemplos
Crear un enlace simbólico

Crear un enlace simbólico

4 piezas
Lámina01 / 06
Comandoln -s documento.txt alias.txt
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1lnComandoEl comando que crea enlaces.
2-sOpciónEnlace simbólico: guarda la ruta en vez de los datos.
3documento.txtArgumentoEl archivo o carpeta al que va a apuntar el enlace.
4alias.txtArgumentoEl nombre nuevo que vas a usar.
Resultado

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

4 piezas
Lámina02 / 06
Comandoln -sfn /opt/app-2.1 /opt/app
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1lnComandoEl comando que crea enlaces.
2-sfnOpcións 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.1ArgumentoLa carpeta nueva, a la que vas a apuntar.
4/opt/appArgumentoEl nombre estable que usan los demás comandos.
Resultado

/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

4 piezas
Lámina03 / 06
Comandoln -s /mnt/disco-externo datos
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1lnComandoEl comando que crea enlaces.
2-sOpciónEnlace simbólico, el único que puede apuntar a una carpeta.
3/mnt/disco-externoArgumentoLa ruta de la carpeta que quieres dejar a la mano.
4datosArgumentoEl nombre corto del enlace, en la carpeta donde estás.
Resultado

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

3 piezas
Lámina04 / 06
Comandoln documento.txt copia-fisica.txt
Piezas3
Escala1:1
N.ºPiezaTipoQué hace
1lnComandoEl comando que crea enlaces.
2documento.txtArgumentoEl archivo que ya tiene que existir.
3copia-fisica.txtArgumentoEl segundo nombre para el mismo archivo.
Resultado

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

5 piezas
Lámina05 / 06
Comandoln -s -t /tmp notas.txt
Piezas5
Escala1:1
N.ºPiezaTipoQué hace
1lnComandoEl comando que crea enlaces.
2-sOpciónEnlace simbólico.
3-tOpciónCrea el enlace dentro de la carpeta que sigue.
4/tmpArgumentoLa carpeta donde se va a crear el enlace.
5notas.txtArgumentoEl archivo al que va a apuntar.
Resultado

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

4 piezas
Lámina06 / 06
Comandoln -sr /var/www/proyecto /var/www/html/proyecto
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1lnComandoEl comando que crea enlaces.
2-srOpcións crea el enlace simbólico y r guarda la ruta relativa al lugar donde queda el enlace.
3/var/www/proyectoArgumentoLa carpeta real.
4/var/www/html/proyectoArgumentoEl lugar donde va el enlace.
Resultado

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.

§ 2

Opciones

Las que sí vas a usar
OpciónQué hace
-s--symbolicCrea un enlace simbólico, el que casi siempre quieres. El enlace guarda la ruta, no el contenido.
-f--forceBorra el archivo de destino si ya existe, sin preguntar. Sirve para actualizar el enlace de una app.
-n--no-dereferenceTrata 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--verboseMuestra el enlace que va creando.
-r--relativeCon -s, guarda la ruta relativa al lugar del enlace. El enlace sigue funcionando si mueves las dos carpetas juntas.
-t--target-directoryIndica en qué carpeta crear los enlaces; cada uno toma el nombre del archivo original.
-i--interactivePregunta qué hacer cuando el destino ya existe, en vez de reemplazarlo automáticamente.
-T--no-target-directoryTrata siempre el segundo argumento como el nombre del enlace, nunca como carpeta destino. Es la opción segura para scripts.
§ 3

Fallas comunes

FallaRemedio
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.
§ 4

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.
§ 5

Ver también