¿Cómo puedo vincular un archivo en Linux? [cerrado]

1941

Quiero hacer un enlace simbólico en Linux. He escrito este comando Bash donde la primera ruta es la carpeta a la que quiero vincular y la segunda ruta es la fuente compilada.

ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 

¿Es esto correcto?

chrissygormley
fuente
Probablemente debería hacer esta pregunta en unix.stackexchange.com
Guss
Quizás superuser.com .
Justin Liu

Respuestas:

3679

Para crear un nuevo enlace simbólico (fallará si el enlace simbólico ya existe):

ln -s /path/to/file /path/to/symlink

Para crear o actualizar un enlace simbólico:

ln -sf /path/to/file /path/to/symlink
hsz
fuente
382
@micapam La lnsintaxis es similar a la cpsintaxis, por ejemplo, el destino de origen .
Andrey
157
Aquí hay una mnemónica para usted: l (i) n (k) -s (ymbolic) <target> <nombre opcional> (el hecho de que el último parámetro sea opcional lo ayuda a descubrir que no es el objetivo) (por cierto, omitiendo el ruta al enlace simbólico crea un enlace en el directorio actual con el mismo nombre base que el destino)
UncleZeiv
32
@micapam Tal como cpes CoPy, lnes LiNk. Primera y tercera letra.
Cole Johnson
68
Pasé varios minutos tratando de descubrir por qué esto no funcionó para mí. Creó un enlace auto-enlazado. Parece que el archivo / ruta / a / debe ser absoluto y no relativo a la "carpeta actual". Quizás señalar esto en la respuesta?
Abhishek Anand
52
@AbhishekAnand que ha sido un par de años, pero yo sólo quería salir de la nota que hace el trabajo con rutas relativas; solo necesita ser relativo al directorio del enlace simbólico resultante y no al directorio actual. Lo que escribes como primer argumento de ruta es en realidad, textualmente, el texto que estará dentro del enlace simbólico; Por eso, cuando es relativo, debe ser relativo al enlace.
JoL
302
ln -s TARGET LINK_NAME

Donde el lo -shace simbólico.

cyborg
fuente
2
OBJETIVO Y LINKNAME son una mejor manera de recordar. por cierto para eliminar el uso del enlace simbólico:unlink LINK_NAME
Silvan
31
Me gusta la frase de esta manera: ln -s where-the-symlink-should-point where-to-place-the-symlink-itself.
totymedli
@Silvan puede eliminar un enlace simbólico a través de rm, pero la mayoría de las personas no saben cómo eliminar el final /.
FreeSoftwareServers
288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
codictorio
fuente
2
Mejor que la respuesta aceptada y cubierta con brevedad inequívoca.
Josh Habdas
3
Excepto que no es el nuevo nombre del enlace simbólico. Es el nombre o una ruta completa (relativa al directorio actual o absoluto) para el nuevo enlace simbólico, incluido el nombre.
David Spector
ln -s EXISTING_FILE_OR_DIRECTORY {ruta opcional a /} SYMLINK_NAME y no coloque una barra diagonal en el enlace simbólico, ya que no es un directorio
cómodo el
94
ln -s target linkName

Puedes echar un vistazo a la página de manual aquí:

http://linux.die.net/man/1/ln

rui
fuente
66
es bueno mencionar "objetivo" en lugar de solo "archivo"
Alyas
88

(Porque una imagen ASCII vale más que mil caracteres).

Una flecha puede ser un mnemotécnico útil, especialmente porque así es casi exactamente como se ve en la dirección de Emacs.

Y una imagen general para que no se confunda con la versión de Windows

Linux:

ln -s target <- linkName

Ventanas:

mklink linkName -> target

También puedes ver esto como

ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"

El from-hereno debería existir, sin embargo, que se va a crear, mientras que el to-hereya debería existir (IIRC).

(Siempre me confundo sobre si varios comandos y argumentos deben involucrar una ubicación preexistente o una que se haga).

EDITAR: Todavía se está hundiendo lentamente para mí; Tengo otra forma de escribir en mis notas.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)
Brady Trainor
fuente
En Emacs ' dired, es súper fácil, ya que coloca el cursor sobre su objetivo, presiona Sy escribe el directorio donde desea que se cree el enlace. Acorta la brecha entre imaginar el resultado deseado y escribir. Ver gnu.org/software/emacs/manual/html_node/emacs/… .
Brady Trainor
2
My mnemonic is ON: ln -s Original Newfile (enlace simbólico)
robstarbuck
esto funcionó para mí
Haider Ali
22

A la pregunta original:


'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'

De hecho, esto creará un enlace simbólico ( -s) del archivo / directorio:

<basebuild>/IpDome-kernel/kernel

a tu nuevo enlace

/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal

Aquí hay algunas maneras de ayudarlo a recordar:

Primero, está la páginaln del manual para . Puede acceder a esto buscando "man ln" en google, o simplemente abra una ventana de terminal y escriba man lny obtendrá la misma información. La página del manual dice claramente:

En [OPCIÓN] ... [-T] TARGET LINK_NAME (1er formulario)


Si tener que buscar o leer una página de manual cada vez no es para usted, tal vez le resulte más fácil recordar que todos los comandos nix funcionan de la misma manera:

cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link

cp copia un archivo que existe actualmente (el primer argumento) en un nuevo archivo (el segundo argumento).
mv mueve un archivo que existe actualmente (el primer argumento) a un nuevo lugar (el segundo argumento)

Del mismo modo, lnvincula un archivo que existe actualmente (el primer argumento) a un nuevo enlace (el segundo argumento) *


La última opción que me gustaría sugerir es que puede crear sus propias páginas de manual que sean fáciles de leer y fáciles de encontrar / recordar. Simplemente haga un script de shell simple que le brinde la pista que necesita. Por ejemplo :

En su archivo .bash_aliases puede colocar algo como:

commandsfx() {
    echo "Symlink:  ln -s /path/to/file /path/to/symlink"
    echo "Copy:     cp /file/to/copy /destination/to/send/copy"
}

alias 'cmds'=commandsfx

Luego, cuando lo necesite, desde la línea de comandos simplemente escriba cmdsy obtendrá la sintaxis adecuada de manera que pueda leerla y comprenderla rápidamente. Puede hacer que estas funciones sean tan avanzadas como desee para obtener la información que necesita, depende de usted. Incluso podría hacerlos interactivos para que solo tenga que seguir las indicaciones ... algo como:

makesymlink() {
    echo "Symlink name:"
    read sym
    echo "File to link to:"
    read fil
    ln -s $fil $sym
}

alias 'symlink'=makesymlink

* - bueno, obviamente, todos pueden tomar diferentes parámetros y hacer cosas diferentes y pueden trabajar en archivos y directorios ... pero la premisa es la misma
♦ - ejemplos que usan el shell bash

Miguel
fuente
18
ln [-Ffhinsv] source_file [target_file]

    link, ln -- make links

        -s    Create a symbolic link.

    A symbolic link contains the name of the file to which it is linked. 

    An ln command appeared in Version 1 AT&T UNIX.
miku
fuente
16

Creación de enlaces simbólicos o enlaces blandos en Linux:

Abra el indicador de Bash y escriba el comando mencionado a continuación para hacer un enlace simbólico a su archivo:

A) Vaya a la carpeta donde desea crear un enlace suave y escriba el comando como se menciona a continuación :

$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file

B) Pase a la ruta de su nuevo nombre de archivo y escriba :

$ ls -lrt (To see if the new-file is linked to the file or not)

Ejemplo:

user@user-DT:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
user@user-DT:[~/Desktop/soft]# ls -lrt
total 0
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_B
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_A
lrwxrwxrwx 1 user user 31 Dec 27 16:53 File_C -> /home/user/Desktop/soft/File_B


Note: Where, File_C -> /home/user/Desktop/soft/File_B  Means, File_C is symbolically linked to File_B
Ankit Raj
fuente
12

ln -s sourcepath linkpathname

Nota:

-s crea enlaces simbólicos en lugar de enlaces duros

simranjeet
fuente
11

Si está en el directorio donde desea crear un enlace simbólico, ignore la segunda ruta.

cd myfolder
ln -s target

Creará un enlace simbólico en el targetinterior myfolder.

Sintaxis general

ln -s TARGET LINK_NAME
Fizer Khan
fuente
11

Este es el desbordamiento de pila, así que supongo que quieres código:

Todo el código siguiente asume que desea crear un enlace simbólico llamado /tmp/linkenlaces a ese /tmp/realfile.

PRECAUCIÓN : ¡Aunque este código verifica si hay errores, NO verifica si /tmp/realfilerealmente existe! Esto se debe a que un enlace inactivo sigue siendo válido y, dependiendo de su código, es posible que (raramente) desee crear el enlace antes del archivo real.


Shell (bash, zsh, ...)

#!/bin/sh
ln -s /tmp/realfile /tmp/link

Muy simple, tal como lo haría en la línea de comando (que es el shell). Todo el manejo de errores lo realiza el intérprete de shell. Este código supone que tiene un intérprete de shell en funcionamiento /bin/sh.

Si es necesario, aún podría implementar su propio manejo de errores utilizando la $?variable que solo se establecerá en 0 si el enlace se creó correctamente.

C y C ++

#include <unistd.h>
#include <stdio.h>

int main () {
  if( symlink("/tmp/realfile", "/tmp/link") != 0 )
    perror("Can't create the symlink");
}

symlinksolo devuelve 0 cuando se puede crear el enlace. En otros casos, estoy usando perrorpara contar más sobre el problema.

Perl

#!/usr/bin/perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
  print STDERR "Can't create the symlink: $!\n"
}

Este código supone que tiene un intérprete perl 5 en /usr/bin/perl. symlinksolo devuelve 1 si se puede crear el enlace. En otros casos, estoy imprimiendo el motivo del error en la salida de error estándar.

Garo
fuente
1
Explicación agregada, también una palabra de advertencia para enlaces muertos. No estoy comprobando esto, porque no se puede suponer que no se desea y también porque las pruebas de archivos ya no están en el tema
Garo
8

Me gustaría presentar una versión más sencilla en inglés de las descripciones ya presentadas.

 ln -s  /path-text/of-symbolic-link  /path/to/file-to-hold-that-text

El comando "ln" crea un archivo de enlace, y el "-s" especifica que el tipo de enlace será simbólico. Se puede encontrar un ejemplo de un archivo de enlace simbólico en una instalación WINE (usando "ls -la" para mostrar una línea del contenido del directorio):

 lrwxrwxrwx 1 me power 11 Jan  1 00:01 a: -> /mnt/floppy

El material de información de archivo estándar está a la izquierda (aunque tenga en cuenta que el primer carácter es una "l" para "enlace"); el nombre del archivo es "a:" y el "->" también indica que el archivo es un enlace. Básicamente le dice a WINE cómo se debe asociar la "Unidad A:" de Windows con una unidad de disquete en Linux. Para crear realmente un enlace simbólico SIMILAR a eso (en el directorio actual, y hacer esto realmente para WINE es más complicado; use la utilidad "winecfg"):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists
vernonner3voltazim
fuente
7

Para crear un enlace simbólico / enlace suave, use:

ln -s {source-filename} {symbolic-filename}

p.ej:

ln -s file1 link1
Prem S
fuente
4

Hay dos tipos de enlaces:

enlaces simbólicos: consulte una ruta simbólica que indica la ubicación abstracta de otro archivo

enlaces duros: consulte la ubicación específica de los datos físicos.

En su caso, los enlaces simbólicos:

ln -s source target

puede consultar http://man7.org/linux/man-pages/man7/symlink.7.html

puedes crear enlaces demasiado duros

Un enlace fijo a un archivo no se puede distinguir de la entrada del directorio original; cualquier cambio en un archivo es efectivamente independiente del nombre utilizado para hacer referencia al archivo. Los enlaces duros normalmente no se refieren a directorios y pueden no abarcar sistemas de archivos.

ln source link
wpp
fuente
4

Los enlaces son básicamente de dos tipos:

Enlaces simbólicos (soft): enlace a una ruta simbólica que indica la ubicación abstracta de otro archivo

Enlaces duros: enlace a la ubicación específica de datos físicos.

Ejemplo 1:

ln /root/file1 /root/file2

Lo anterior es un ejemplo de un enlace duro donde puede tener una copia de sus datos físicos.

Ejemplo 2

ln -s /path/to/file1.txt /path/to/file2.txt

El comando anterior creará un enlace simbólico a file1.txt.

Si elimina un archivo de origen, no tendrá nada en el destino en software.

Cuando tu lo hagas:

ls -lai

Verá que hay un número de inodo diferente para los enlaces simbólicos.

Para obtener más detalles, puede leer la página de manual de ln en su sistema operativo Linux.

Prabhat Singh
fuente
hard link where you can have a copy of your physical data- Creo que no creamos copias de datos físicos. Solo otro nombre para los mismos datos físicos.
Alexander Radchenko
3

Encuentro un poco confuso las terminologías "objetivo" y "directorio" en la información del hombre.

El objetivo es la carpeta a la que estamos simpatizando y el directorio el enlace simbólico real (no el directorio al que simulará), si alguien está experimentando la misma confusión, no se sienta solo.

Esta es mi interpretación de crear un enlace simbólico (en Linux):

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

Puede navegar a la carpeta donde desea crear el enlace simbólico y ejecutar el comando o especificar la RUTA COMPLETA para su enlace simbólico en lugar de NAME-OF-YOUR-SYMLINK.

cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

O

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK

Espero que esto ayude a aquellos (todavía) ligeramente confundidos.

mmmdearte
fuente
-2

Cómo crear un enlace simbólico en vagabundo. Pasos:

  1. En el archivo vagabundo crea una carpeta sincronizada. por ejemplo, config.vm.synced_folder "F: / Sunburst / source / sunburst / lms", "/ source" F: / Sunburst / source / sunburst / lms: - donde está el código fuente, / source: - ruta del directorio dentro del vagabundo
  2. Vagabundo y escriba vagabundo ssh y vaya al directorio de origen, por ejemplo, cd source
  3. Verifique que la estructura de la carpeta del código fuente esté disponible en el directorio fuente. por ejemplo, / fuente / local
  4. Luego vaya al directorio de la máquina invitada donde están los archivos que están asociados con el navegador. Después de obtener una copia de seguridad del archivo. por ejemplo, sudo mv local local_bk
  5. Luego cree un enlace simbólico, por ejemplo, sudo ln -s / source / local local. nombre de enlace medio local (nombre de carpeta en la máquina invitada que va a vincular) si necesita eliminar el enlace simbólico: - Escriba sudo rm local
Vayodya Tamari
fuente