¿Cómo puedo crear un enlace simbólico en la Terminal?

Respuestas:

543
┌── ln(1) link, ln -- make links
   ┌── Create a symbolic link.
                            ┌── the optional path to the intended symlink
                               if omitted, symlink is in . named as destination
                               can use . or ~ or other relative paths
                      ┌─────┴────────┐
ln -s /path/to/original /path/to/symlink
      └───────┬───────┘
              └── the path to the original file/folder
                  can use . or ~ or other relative paths
$ echo content > original
$ ln -s original symlink
$ ls -la original symlink
-rw-r--r--  1 grgarside  staff    8 28 Jan 18:44 original
lrwxr-xr-x  1 grgarside  staff    8 28 Jan 18:44 symlink -> original
$ cat symlink
content

Para obtener más información sobre ln (1), consulte la página de manual .

La ruta al enlace simbólico es opcional; si se omite, el valor lnpredeterminado es hacer un enlace con el mismo nombre que el destino, en el directorio actual:

$ cd ~/Documents
$ ln -s ../Pictures
$ ls -l Pictures
lrwxr-xr-x  1 user  staff  11 Feb  1 17:05 Pictures -> ../Pictures

Para crear un enlace simbólico para reemplazar un directorio del sistema (por ejemplo, si desea que /Usersapunte a otra unidad de disco), debe desactivar la Protección de integridad del sistema . Puede volver a habilitarlo después de configurar el enlace simbólico.

grg
fuente
63
¡Si tan solo las páginas del manual fueran tan claras como tu respuesta!
Adrian Lynch
permiso denegado: S ¿me puede dar una pista? tratando de crear un enlace simbólico para usuarios para que pueda usarlo en otro disco duro y ssd solo tiene enlace simbólico. gracias
Ewoks
2
@patrix He editado mi respuesta para aclarar; siéntase libre de editar más.
grg
44
Dato curioso: el original no necesita existir realmente. El comando ln -s "This directory is no longer in use" READMEsería perfectamente legítimo, y cualquiera que lo ejecutara ls -lvería el mensaje.
Edward Falk
1
Para referencia futura: no es necesario mover / Usuarios en macOS para ahorrar espacio. Puede cambiar las rutas del directorio de inicio de los usuarios individualmente en las Preferencias del sistema en Usuarios y grupos haciendo clic con el botón derecho en las entradas de la lista de usuarios.
Peter W.
73

El comando se llama ln. Si se usa con la opción -s, creará un enlace simbólico en el directorio actual:

ln -s /any/file/on/the/disk linked-file
nohillside
fuente
1
¿El archivo vinculado tiene que existir primero? Me sale un error de archivo no encontrado en el destino.
AlxVallejo
2
El archivo no (recibe un mensaje de error si lo hace), sino todos los directorios en cualquier ruta. Si está atascado, siéntase libre de hacer una nueva pregunta con el botón Hacer pregunta en la esquina superior derecha. Incluya un enlace a esta pregunta para proporcionar contexto.
nohillside
El enlace simbólico no debe existir antes de ejecutar este comando. Pero se requiere un camino válido hasta donde yo sé. Si la carpeta del archivo de salida no existe antes de ejecutar este comando, también obtendrá un No such file or directoryerror.
Deniz Kaplan
34

Sé que esta pregunta es explícitamente sobre la Terminal, pero si estás en GUI Land y no quieres ingresar a Terminal Land, puedes usar SymbolicLinker . Esto pone una opción de "Hacer enlace simbólico" en el menú Servicios en Finder.

Un menú contextual para una carpeta, que muestra un submenú "Servicios", con "Crear enlace simbólico" resaltado

Un menú contextual para un enlace simbólico, con "Hacer enlace simbólico" resaltado

Ben Leggiero
fuente
3
Me encantaría saber por qué esto fue rechazado para poder hacer respuestas de mayor calidad a partir de ahora :)
Ben Leggiero
10
probablemente porque la pregunta era "¿Cómo puedo crear un enlace simbólico en la Terminal?" Pero no te estoy rechazando :)
vedrano
1
@EdwardFalk Creo que en El Capitán, puede mantener presionado Command+ Optionmientras arrastra un archivo ... actualizará la respuesta más tarde
Ben Leggiero
1
@BenLeggiero Eso hace un alias.
Andy Stewart
2
@BenLeggerio, la diferencia se explica aquí: apple.stackexchange.com/questions/2991/…
MiB
28

Es sólo ln -s <source> <destination>.

TheSqrtMinus1
fuente
5

ln -s /some/dir/ ~/Desktop/dir

También puede crear un enlace simbólico para el directorio con el mismo comando

ln -s "$(pwd)" ~/Desktop/dir

Para crear un enlace simbólico al directorio actual en el que se encuentra.

Gerald
fuente
2
Un simple .(punto) dará el pwd. No se necesitan argumentos sofisticados :)
mylogon
@mylogon jajaja me gusta pensar demasiado a veces. simplificado mi respuesta!
Gerald
@mylogon Me acabo de dar cuenta de que .no funciona en macOS. No probé Linux todavía. el uso ./resultó en esto foo -> ./fooque apunta a sí mismo.
Gerald
¿Cuál es el comando completo que escribiste?
mylogon