¿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?


Probablemente debería hacer esta pregunta en unix.stackexchange.com
Guss

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

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.


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

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


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)

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


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.

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

12

ln -s sourcepath linkpathname

Nota:

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


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

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.


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

7

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

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

p.ej:

ln -s file1 link1

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

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.


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.


-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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.