¿Cuál es la diferencia entre un enlace rígido y un enlace simbólico?

447

Como dice el título, me gustaría saber la diferencia entre un enlace rígido y uno creado por el comando ln . El comando man ln proporciona información, pero no responde suficientemente a mi pregunta.

Además, sería bueno que alguien pudiera proporcionar una configuración en la que el enlace físico sea preferible a un enlace simbólico.

    
pregunta ste_kwr 29.02.2012 - 10:03

10 respuestas

31

En Linux / Unix, los accesos directos se conocen como enlaces

Los enlaces son de dos tipos: enlaces suaves (enlaces simbólicos) o enlaces duros.

  1. Enlaces suaves (enlaces simbólicos)

    Puede hacer enlaces a archivos y directorios, y puede crear enlaces (accesos directos) en diferentes particiones y con un número de inodo diferente del original.

    Si se elimina la copia real , el enlace no funcionará .

  2. Enlaces duros

    Los enlaces duros son solo para archivos; no puede vincular a un archivo en una partición diferente con un número de inodo diferente.

    Si se elimina la copia real , el vínculo funcionará , ya que accede a los datos subyacentes a los que estaba accediendo la copia real.

Pregunta: ¿Cómo hago un enlace suave?

Respuesta: se puede hacer un enlace suave con ln -s ; primero necesita definir la fuente y luego necesita definir el destino. (Tenga en cuenta que necesita definir las rutas completas tanto de origen como de destino; de lo contrario, no funcionará).

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

Como puede ver, tiene un inodo diferente y se puede crear en una partición diferente.

Pregunta: ¿Cómo hago el enlace duro?

Respuesta: se puede hacer un enlace rígido con ln ; primero necesita definir la fuente y luego necesita definir el destino. (Tenga en cuenta que necesita definir la ruta completa de origen y destino; de lo contrario, no funcionará).

Digamos que tengo un script en el directorio /script llamado firefox .

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

Como puede ver, tiene el mismo inodo. Si elimino el original, el enlace funcionará y actuará como el original.

Arriba, compruebo que el enlace funciona, y luego elimino el script original de Firefox.

Pregunta: Sería bueno que alguien pudiera proporcionar una configuración en la que el enlace físico sea preferible a un enlace simbólico.

Respuesta : según el diseño de la partición del disco, Hard Links tienen la limitación de que deben estar en la misma partición (-1 punto) y solo puede vincular a archivos (-1 punto) ), pero +1 punto si se elimina el original, el enlace funcionará y actuará como el original.

Por otro lado, un enlace suave puede señalar directorios o archivos (+1 punto) y no hay límite de partición (+1 punto), pero (- 1 punto) si la fuente se elimina, el enlace no funcionará.

    
respondido por el Qasim 09.05.2013 - 02:42
314

Un enlace fijo no es un puntero a un archivo, es una entrada de directorio (un archivo) que apunta al mismo inodo. Incluso si cambia el nombre del otro archivo, un enlace fijo aún apunta al archivo. Si reemplaza el otro archivo con una nueva versión (copiándolo), un enlace fijo no apuntará al nuevo archivo. Solo puede tener enlaces duros dentro del mismo sistema de archivos. Con los enlaces físicos no tiene el concepto de los archivos y enlaces originales, todos son iguales (piénselo como una referencia a un objeto). Es un concepto de muy bajo nivel.

Por otro lado, un enlace simbólico apunta a otra ruta (un nombre de archivo); resuelve el nombre del archivo cada vez que accede a él a través del enlace simbólico. Si mueve el archivo, el enlace simbólico no seguirá. Si reemplaza el archivo por otro, manteniendo el nombre, el enlace simbólico apuntará al nuevo archivo. Los enlaces simbólicos pueden abarcar los sistemas de archivos. Con los enlaces simbólicos, tiene una distinción muy clara entre el archivo real y el enlace simbólico, que no almacena información junto a la ruta del archivo al que apunta.

    
respondido por el vartec 18.05.2011 - 11:51
293

"Una imagen vale más que mil palabras".

Y, "Un ejemplo vale cien párrafos ..."

Crea dos archivos:

$ touch blah1   
$ touch blah2

Introduce algunos datos en ellos:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

Y como se esperaba:

$cat blah1; cat blah2
Cat
Dog

Creemos enlaces duros y blandos:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Veamos lo que acaba de pasar:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Cambiar el nombre de blah1 no importa:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-hard apunta al inodo, el contenido, del archivo, eso no se modificó.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

No se pudo encontrar el contenido del archivo porque el enlace suave apunta al nombre, que fue cambiado, y no a los contenidos.
Del mismo modo, si se borra blah1, blah1-hard aún conserva el contenido; si se borra blah2, blah2-soft es solo un enlace a un archivo no existente.

fuente: copiando descaradamente de StackOverflow!

    
respondido por el ABcDexter 21.07.2016 - 09:33
87

Ambos son punteros a los archivos; la diferencia es el tipo de puntero. Un enlace simbólico apunta a otro archivo por nombre . Tiene un bit de modo especial que lo identifica como un enlace simbólico, y su contenido es el nombre del archivo real. Como solo contiene un nombre, ese nombre no debe existir en realidad, o puede existir en un sistema de archivos diferente. Si reemplaza el archivo nombrado (cambia su contenido sin afectar su nombre), el enlace aún contiene el mismo nombre, por lo que ahora apunta al nuevo archivo. Puede identificar fácilmente un enlace simbólico y ver el nombre del archivo al que apunta.

Un enlace fijo apunta al archivo por número de inodo. Como tal, los enlaces duros no son diferentes del nombre de un archivo. No hay un nombre "real" contra un nombre de enlace fijo; todos los enlaces duros son nombres igualmente válidos para el archivo. Debido a esto, el archivo al que se vincula debe existir realmente y estar en el mismo sistema de archivos donde intenta crear el enlace. Si elimina el nombre original, entonces el enlace fijo aún apunta al mismo archivo. Debido a que todos los enlaces duros son nombres válidos para el archivo, no puede mirar uno y ver los otros nombres del archivo; para encontrar esto, debes buscar en cada archivo y comparar su número de inodo para encontrar el otro nombre que tenga el mismo número de inodo.

Puede decir cuántos nombres tiene un archivo de la salida de ls -l . El primer número después del modo de archivo es el recuento de enlaces. Un archivo con más de 1 enlace tiene otro nombre (s) en alguna parte, y por el contrario, un archivo con un conteo de enlaces de solo 1 no tiene (otros) enlaces duros.

    
respondido por el psusi 18.05.2011 - 17:23
57

Un enlace permanente solo puede funcionar en el mismo sistema de archivos, simplemente es un nombre diferente para el mismo inodo (los archivos son referenciados internamente por los inodos). Un archivo solo se eliminará del disco cuando desaparezca el último enlace a su inodo ( rm d o unlink d el último enlace). Los enlaces duros normalmente solo funcionan para archivos, no para directorios.

Un enlace simbólico (enlace simbólico) es un archivo especial que contiene una ruta a otro archivo. Esta ruta puede ser absoluta o relativa. los enlaces simbólicos pueden funcionar en todos los sistemas de archivos, e incluso pueden apuntar a diferentes archivos si, por ejemplo, desenchufa un disco duro externo y lo reemplaza con otro, que tiene un archivo diferente en la misma ruta. Un enlace simbólico puede apuntar a archivos o directorios.

    
respondido por el knittl 29.02.2012 - 10:20
20

Una de las respuestas del otro hilo (ahora enlazada desde la parte superior de su publicación) menciona esta página que creo que es una buena explicación de nivel medio. Si te pierdes en el arte del ascii, aquí está la versión de tl; dr:

  • Los archivos estándar son un puntero desde el sistema de archivos a un inodo que a su vez apuntan a datos físicos. El componente de archivo almacena su enlace al sistema de archivos (esencialmente su ruta) y un enlace al inodo.
  • Los enlaces duros son como los archivos. Son solo un puntero adicional directamente a un inodo.
  • Los enlaces simbólicos son archivos separados (que incluyen ínodo y datos separados) que almacenan una ruta del sistema de archivos a un archivo.

El kernel y los sistemas de archivos involucrados traducen todo de forma transparente.

De acuerdo con eso:

  • Los enlaces duros solo permiten el mismo sistema de archivos de enlace. Los enlaces simbólicos pueden apuntar a cualquier ruta.
  • Los enlaces duros (esencialmente) apuntan a datos absolutos. Los enlaces simbólicos pueden señalar rutas relativas (por ejemplo, ../parent.file )
  • Por extensión, si mueve el puntero de destino de un enlace físico (que, recuerde, es esencialmente un enlace fijo que apunta a un inodo), el enlace permanente aún funciona. Mover el objetivo de un enlace simbólico generalmente rompería el enlace simbólico.
  • Resolver un enlace físico sería más rápido pero de manera inconmensurable. Esa porción insignificante de velocidad se obtiene a costa de un sistema de archivos inflexible.

Podría haberme confundido un poco, pero al leer varias cosas, estoy luchando por encontrar la diferencia entre un archivo estándar y un enlace permanente. La forma en que lo estoy leyendo es que cada archivo consta de un enlace permanente (que almacena el nombre del archivo), que enlaza con un inodo que apunta a los datos físicos.

Agregar un enlace fijo solo proporciona un inodo con un puntero adicional basado en el sistema de archivos. ¿Es eso correcto?

    
respondido por el Oli 18.05.2011 - 17:10
15

Cuándo usar Soft Link:

Enlace a través de sistemas de archivos: si desea vincular archivos a través de los sistemas de archivos, solo puede usar enlaces simbólicos / enlaces blandos.

Enlaces al directorio: si desea vincular directorios, debe usar enlaces suaves, ya que no puede crear un enlace fijo a un directorio.

Cuándo usar Hard Link:

Espacio de almacenamiento: los enlaces duros requieren una cantidad de espacio muy insignificante, ya que no se crean nuevos inodos al crear enlaces duros. En enlaces blandos, creamos un archivo que consume espacio (generalmente 4 KB, según el sistema de archivos)

Rendimiento: el rendimiento será ligeramente mejor al acceder a un enlace fijo, ya que está accediendo directamente al puntero del disco en lugar de pasar por otro archivo. Mover la ubicación del archivo: si mueve el archivo fuente a otra ubicación en el mismo sistema de archivos, el enlace duro seguirá funcionando, pero el enlace no funcionará.

Redundancia: si desea asegurarse de la seguridad de sus datos, debe utilizar el enlace físico, como en el enlace físico, los datos están seguros, hasta que se eliminen todos los enlaces a los archivos, en lugar de eso en un enlace suave, Perderá los datos si se elimina la instancia maestra del archivo.

    
respondido por el Osama 07.09.2014 - 01:48
7

La confusión se establece cuando intentas encontrar la diferencia entre "el nombre del archivo" y un enlace fijo porque no hay ninguno.

Cada archivo que crea consta de datos en el disco y un enlace rígido , que es un nombre de archivo en un directorio y un puntero a los datos en el disco. Fin de la historia. Cuando se elimina el último (o único) enlace duro, el sistema operativo sabe que los datos ya no son necesarios.

De esto se puede ver que los datos reales nunca se eliminan, solo los enlaces duros son. Y cuando se llena lo suficiente en el disco, los datos de otro archivo pueden sobreescribirse. Hasta entonces, los datos del archivo eliminado podrían recuperarse, pero es difícil de encontrar sin el enlace rígido.

Los enlaces simbólicos, como se explicó anteriormente, simplemente te dicen "hay un archivo llamado <targetname> en una carpeta llamada <targetfolder> ". Señalan el enlace duro. Ellos no saben dónde están los datos. El enlace duro lo sabe.

    
respondido por el Gonesoft 01.03.2015 - 12:28
3

Para una excelente novato -y- ex-Windoze -usuario- amigable explicación, con buenos diagramas y una Preguntas frecuentes echa un vistazo a esta página enlace . Sus derechos de autor restricciones me impiden extraer sus cosas, así que basta con que proporcione el enlace aquí.

Este es mi segundo o incluso el tercer intento de captar el enigma del soft / hard-link, siempre tirando la toalla y posponiendo mi comprensión a algún punto de tiempo indefinido en el futuro, tan pronto como las explicaciones y las páginas de manual obtener profundamente kerneled y over-technical con inodos y todo ...

¡Disfruta!

    
respondido por el nutty about natty 10.02.2013 - 17:03
0

Es muy simple. Los archivos (¡y directorios!) Se almacenan en direcciones en el dispositivo de bloque (HDD o lo que sea). Normalmente tiene un solo nombre asignado a una dirección, y así es como obtiene su archivo. Un enlace fijo es un segundo nombre, un tercero, etc. asignado a la misma dirección. Un enlace simbólico en su lugar se refiere al símbolo, el nombre, y también lo es un segundo nombre asignado al primer nombre. En lo que respecta al kernel, una vez que lee el enlace simbólico, se detiene y vuelve al principio con el valor objetivo como el nombre del archivo (más o menos), por lo que los enlaces simbólicos relativos son posibles pero muy poco útiles. El nombre del objetivo no se utiliza por encima del nivel del sistema de archivos, excepto si se consulta explícitamente en el código de espacio de usuario.

    
respondido por el Jim Driscoll 03.07.2016 - 17:39

Lea otras preguntas en las etiquetas