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

¿Qué comando se usa para crear un enlace simbólico/enlace suave?

Respuestas (7)

┌── 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 acerca de ln(1), consulte la página de manual .

La ruta al enlace simbólico es opcional; si se omite, lnpor defecto crea 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 /Usersapuntar a otra unidad de disco), debe deshabilitar la Protección de integridad del sistema . Puede volver a habilitarlo después de configurar el enlace simbólico.

¡Ojalá las páginas del manual fueran tan claras como su respuesta!
permiso denegado :S ¿puedes darme una pista? tratando de crear un enlace simbólico para los usuarios para poder usarlo en otro disco duro y ssd solo tiene un enlace simbólico. Gracias
@Ewoks /Users está protegido por SIP. Puede deshabilitar la Protección de integridad del sistema para configurar el enlace simbólico (y volver a habilitarlo después si lo desea). He agregado esto a la respuesta.
No necesita deshabilitar SIP para enlazar carpetas/archivos protegidos por SIP, por ejemplo, ln -s /Users /Users/myuser/all-usersfunciona perfectamente. Solo necesita deshabilitar SIP si desea crear el enlace simbólico en una carpeta protegida por SIP (como lo haría si quisiera crear cualquier otra entrada de directorio allí).
@patrix Interpreté el comentario como que deseaba reemplazar /Users con un enlace simbólico en lugar de crear un enlace simbólico que apuntara a /Users. ¿No es esto lo que se pretendía?
@grgarside Así es como entiendo a los Ewoks también. Pero no es así como leí tu edición de la respuesta.
@patrix He editado mi respuesta para aclarar; siéntase libre de editar más.
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.
Para referencia futura: no necesita mover /Users en macOS para ahorrar espacio. Puede cambiar las rutas del directorio de inicio de los usuarios individualmente en Preferencias del sistema en Usuarios y grupos haciendo clic con el botón derecho en las entradas de la lista de usuarios.
Siempre creé enlaces simbólicos rotos mientras lo intentaba ln -s ./original/source/ ../path/to/symlink, por lo que el .operador realmente arruinó las cosas para mí usando la ruta completa con ~la solución.
@caramba nunca lo he probado ./original/source/; Yo original/sourceusaría
eres un mago

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
¿El archivo vinculado tiene que existir primero? Aparece un error de archivo no encontrado en el objetivo.
El archivo no (obtiene un mensaje de error si lo hace), pero todos los directorios en cualquier ruta. Si está atascado, siéntase libre de hacer una nueva pregunta usando el botón Hacer pregunta en la parte superior derecha. Incluya un enlace a esta pregunta para proporcionar contexto.
El enlace simbólico no debería existir antes de ejecutar este comando. Pero se requiere una ruta válida 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.
@AlxVallejo Seguí recibiendo el mismo error, causado por un error tonto, ¡estaba usando ls(por costumbre) en lugar de ln! (asegúrate de comprobarlo)

Sé que esta pregunta se refiere explícitamente a la Terminal, pero si está en GUI Land y no desea ingresar a Terminal Land, puede usar SymbolicLinker . Esto coloca la opción "Crear enlace simbólico" en el menú Servicios del Finder.

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

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

Me encantaría saber por qué esto fue rechazado para poder hacer respuestas de mayor calidad a partir de ahora :)
probablemente porque la pregunta era "¿Cómo puedo crear un enlace simbólico en la Terminal?" Pero no te estoy votando negativo :)
¿Significa esto que simplemente no hay forma de hacer esto desde Mac Gui sin instalar el software? Además, no puedo dejar de pensar que esto podría haberse hecho con Automator.
@EdwardFalk Creo que en El Capitán, puedes mantener presionado Command+ Optionmientras arrastras un archivo... actualizaré la respuesta más tarde
@BenLeggiero Eso hace un alias.
@BenLeggerio, la diferencia se explica aquí: apple.stackexchange.com/questions/2991/…
Esto absolutamente debería ser factible con Automator...
@Wowfunhappy ¡Siéntete libre de publicar tu propia respuesta detallando cómo hacerlo! 😁

ln -s <source> <destination>es solo

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

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

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

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

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

Como advertencia para cualquier persona, debe usar nombres de ruta completos . Esto no me quedó claro de inmediato, ya que sentí que podía vincular rutas relativas en una carpeta en la que estaba ejecutando el comando. Podría estar equivocado (soy un novato en macOS).

Por ejemplo, si trato de vincular mi carpeta de Imágenes dentro de mi carpeta de Descargas, mientras estoy en el directorio de inicio de mi usuario , esto no funcionará:

Users\stevebauman >_ ln -s Pictures Downloads

En su lugar, debe utilizar:

Users\stevebauman >_ ln -s /Users/stevebauman/Pictures /Users/stevebauman/Downloads
No exactamente: el enlace debe expandirse desde donde está para que ln -s ../Pictures Pictures funcione. El enlace funciona como si hicieras un cd donde almacenas el enlace.

A menos que la ruta de origen sea relativa a su destino, use una ruta absoluta a su ruta de origen y escríbala entre comillas simples

$ ln -s '/any file/could have (special chars)/or spaces/test' '/some/other place/file'

Siempre puede averiguar la ruta actual completa sin escape a algo yendo a esa carpeta en la terminal, luego escribiendo

$ pwd