Pregunta ¿Cuál es la diferencia entre un enlace simbólico y un enlace fijo?


Recientemente me preguntaron esto durante una entrevista de trabajo. Fui honesto y dije que sabía cómo se comporta un enlace simbólico y cómo crear uno, pero no entiendo el uso de un enlace rígido y cómo se diferencia de uno simbólico.


634
2017-10-09 04:05


origen


Respuestas:


Debajo de los archivos del sistema de archivos están representados por inodos (o es inodos múltiples no estoy seguro)

Un archivo en el sistema de archivos es básicamente un enlace a un inodo.
Un enlace duro entonces simplemente crea otro archivo con un enlace al mismo inodo subyacente.

Cuando elimina un archivo, elimina un enlace al inodo subyacente. El inodo solo se elimina (o se puede eliminar / sobre escribir) cuando se han eliminado todos los enlaces al inodo.

Un enlace simbólico es un enlace a otro nombre en el sistema de archivos.

Una vez que se ha realizado un enlace duro, el enlace es al inodo. borrar el cambio de nombre o mover el archivo original no afectará el enlace duro ya que se vincula al inodo subyacente. Cualquier cambio en los datos en el inodo se refleja en todos los archivos que se refieren a ese inodo.

Nota: Los enlaces duros solo son válidos dentro del mismo sistema de archivos. Los enlaces simbólicos pueden abarcar los sistemas de archivos, ya que son simplemente el nombre de otro archivo.


665
2017-10-09 04:07



Alguna buena intuición que podría ayudar, usando cualquier consola Linux (ish).

Crea dos archivos:

$ touch blah1; touch blah2

Ingrese algunos datos en ellos:

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

(En realidad, podría haber usado el eco en primer lugar, ya que crea los archivos si no existen ... pero eso no importa).

Y como se esperaba

$cat blah1; cat blah2
Cat
Dog

Vamos a crear 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 fue cambiado.

$ 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 se modificó, 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.


378
2017-10-07 13:54



Como dice el refrán, una imagen vale más que mil palabras. Así es como lo visualizo:

enter image description here

Así es como llegamos a esa imagen:

  1. Crea un nombre myfile.txt en el sistema de archivos que apunta a un nuevo inodo (que contiene los metadatos del archivo y apunta a los bloques de datos que contienen su contenido, es decir, el texto "¡Hola, mundo!"):

    $ echo 'Hello, World!' > myfile.txt
    
  2. Crear un enlace duro my-hard-link al archivo myfile.txt, lo que significa "crear un archivo que debe apuntar al mismo inodo que myfile.txt puntos a":

    $ ln myfile.txt my-hard-link
    
  3. Crear un enlace suave my-soft-link al archivo myfile.txt, lo que significa "crear un archivo que debe apuntar al archivo myfile.txt":

    $ ln -s myfile.txt my-soft-link
    

Mira lo que sucederá ahora si myfile.txt es eliminado (o movido): my-hard-link sigue apuntando a los mismos contenidos, y por lo tanto no se ve afectado, mientras que my-soft-link ahora apunta a nada. Otras respuestas discuten los pros / contras de cada uno.


332
2018-04-22 01:45



Los enlaces duros son útiles cuando se mueve el archivo original. Por ejemplo, mover un archivo de / bin a / usr / bin o a / usr / local / bin. Cualquier enlace simbólico al archivo en / bin se rompería con esto, pero un vínculo físico, que es un enlace directamente al inodo del archivo, no importaría.

Los enlaces duros pueden ocupar menos espacio en disco ya que solo ocupan una entrada de directorio, mientras que un enlace simbólico necesita su propio ínodo para almacenar el nombre al que apunta.

Los enlaces duros también toman menos tiempo para resolverse: los enlaces simbólicos pueden apuntar a otros enlaces simbólicos que están en directorios enlazados. Y algunos de ellos podrían estar en NFS u otros sistemas de archivos de alta latencia, y podrían resultar en la resolución del tráfico de la red. Los enlaces duros, que siempre están en el mismo sistema de archivos, siempre se resuelven en una sola consulta y nunca implican latencia de red (si es un enlace fijo en un sistema de archivos NFS, el servidor NFS resolvería y sería invisible para el sistema del cliente). A veces esto es importante. No para mí, pero puedo imaginar sistemas de alto rendimiento donde esto podría ser importante.

También creo que cosas como mmap (2) e incluso open (2) usan la misma funcionalidad que hardlinks para mantener activo el inodo de un archivo, de modo que incluso si el archivo se desenlaza (2) ed, el inodo permanece para permitir el acceso continuo del proceso. y solo una vez que el proceso se cierra, el archivo realmente se va. Esto permite archivos temporales mucho más seguros (si puede lograr que el abrir y desenlazar suceda de forma atómica, que puede haber una API POSIX para la que no estoy recordando, entonces realmente tiene un archivo temporal seguro) donde puede leer / escribir sus datos sin que nadie pueda acceder a ellos. Bueno, eso era cierto antes de que / proc le diera a todos la capacidad de ver sus descriptores de archivos, pero esa es otra historia.

Hablando de eso, recuperar un archivo que está abierto en el proceso A, pero desvinculado en el sistema de archivos gira en torno al uso de enlaces duros para recrear los enlaces de inodo para que el archivo no desaparezca cuando el proceso que lo abre se cierra o se va.


63
2017-10-09 05:22



Una forma simple de ver la diferencia entre un enlace rígido y un enlace simbólico es a través de un simple ejemplo. Un enlace fijo a un archivo señalará el lugar donde se almacena el archivo, o el inode de ese archivo. Un enlace simbólico apuntará al archivo real en sí.

Entonces, si tenemos un archivo llamado "a" y creamos un enlace rígido "b" y un enlace simbólico "c" que todos hacen referencia al archivo "a":

echo "111" > a
ln a b
ln -s a c

La salida de "a", "b" y "c" será:

cat a --> 111
cat b --> 111
cat c --> 111

Ahora eliminemos el archivo "a" y veamos qué sucede con el resultado de "a", "b" y "c":

rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory

¿Entonces qué pasó?

Debido a que el archivo "c" apunta a presentar "a" en sí mismo, si se elimina el archivo "a", entonces el archivo "c" no tendrá nada que señalar, de hecho, también se eliminará.

Sin embargo, el archivo "b" apunta al lugar de almacenamiento, o el inodo, del archivo "a". Entonces, si se elimina el archivo "a", ya no apuntará al inodo, sino porque el archivo "b" lo hará, el inodo continuará almacenando los contenidos pertenecientes a "a" hasta que ya no aparezcan más enlaces duros.


32
2017-12-08 20:09



Enlace suave:

blando o simbólico es más bien un atajo al archivo original ... si elimina el original, el atajo falla y si solo elimina el atajo no pasa nada al original.

Enlace de sintaxis: ln -s Pathof_Target_file link

Salida:  link -> ./Target_file

Prueba:  readlink linkTambién en ls -l link salida verá la primera letra en lrwxrwxrwx como l que es una indicación de que el archivo es un enlace suave.

Eliminar el enlace:  unlink link 

Nota: Si lo desea, su softlink puede funcionar incluso después de moverlo a otro lugar desde el directorio actual. Asegúrese de dar una ruta absoluta y no relativa al crear un enlace suave. es decir, (comenzando desde / root / user / Target_file y no ./Target_file)

Hard Link:

El enlace físico es más bien una copia duplicada o varias rutas al mismo archivo. Haga algo para file1 y aparece en el archivo 2. Eliminar uno todavía mantiene al otro bien.

El inode (o archivo) solo se elimina cuando se han eliminado todos los enlaces (duros) o todas las rutas al inodo (del mismo archivo).

Una vez que se ha hecho un enlace duro, el enlace tiene el ínodo del archivo original. Eliminar el cambio de nombre o mover el archivo original no afectará al enlace duro, ya que se vincula al inodo subyacente. Cualquier cambio en los datos en el inodo se refleja en todos los archivos que se refieren a ese inodo.

Sintaxis del enlace duro: ln Target_file link

Salida: Se creará un archivo con un enlace de nombre con el mismo número de inodo que en el archivo de destino.

Prueba:  ls -i link Target_file  (revisa sus inodos)

Eliminar el enlace:  rm -f link (Eliminar el enlace como un archivo normal)

Nota: Los enlaces simbólicos pueden abarcar los sistemas de archivos, ya que son simplemente el nombre de otro archivo. Mientras que los enlaces duros solo son válidos dentro del mismo sistema de archivos.

Los enlaces simbólicos tienen algunas características que faltan enlaces duros:

  • Punto de enlace rígido para el contenido del archivo. mientras que el enlace suave apunta a la nombre del archivo.
  • mientras que el tamaño del enlace duro es el tamaño del contenido, mientras que el enlace suave es teniendo el tamaño del nombre de archivo.
  • Los enlaces duros comparten el mismo inodo. Los enlaces suaves no.
  • Los enlaces duros no pueden cruzar los sistemas de archivos. Los enlaces suaves lo hacen.
  • usted sabe de inmediato dónde apunta un vínculo simbólico mientras con el disco duro enlaces, necesita explorar todo el sistema de archivos para encontrar archivos compartiendo el mismo inodo
  • los enlaces duros no pueden apuntar a directorios.

Motivo por el que los enlaces no pueden atravesar sistemas de archivos o particiones:

En un disco duro hay muchos sectores.

Digamos que un archivo comienza en inode (sector) 4001 y termina en 5000. El archivo es "/export/home/john/mail.doc"

Entonces: 1. Un enlace fijo a "mail.doc" que se llama "hardLinkToMail" contiene el valor: "4001". 2. Un enlace suave a "mail.doc" que se llama "softLinkToMail" contiene el valor: "/export/home/john/mail.doc".

En 1) el enlace duro solo puede apuntar al mismo disco. No puede apuntar a otra unidad. Todas las unidades tienen un inodo de valor "4001", ¿cómo puede distinguir el enlace duro entre todos los discos? ¿Qué unidad es "4001"?

En 2) el enlace suave contiene una cadena. La cadena puede apuntar a otro sistema de archivos en otra unidad, porque se especifica la ruta completa.


30
2018-05-02 06:55



Enlaces simbólicos vinculan a un nombre de ruta. Esto puede estar en cualquier parte del árbol de archivos de un sistema, y ​​ni siquiera tiene que existir cuando se crea el enlace. La ruta de destino puede ser relativa o absoluta.

Los enlaces duros son punteros adicionales para un inodo, lo que significa que solo pueden existir en el mismo volumen que el objetivo. Los enlaces duros adicionales a un archivo son indistinguibles del nombre "original" utilizado para hacer referencia a un archivo.


26
2017-10-09 04:09



Te dirijo a Wikipedia:

Algunos puntos:

  • Los enlaces simbólicos, a diferencia de los enlaces duros, pueden cruzar sistemas de archivos (la mayoría de las veces).
  • Los enlaces simbólicos pueden apuntar a directorios.
  • Los enlaces duros apuntan a un archivo y le permiten referirse al mismo archivo con más de un nombre.
  • Siempre que haya al menos un enlace, los datos estarán disponibles.

18
2017-10-09 04:11



Los enlaces duros son muy útiles cuando se realizan copias de seguridad incrementales. Ver rsnapshot, por ejemplo. La idea es copiar usando enlaces duros:

  • Copia el número de copia de seguridad n a n + 1
  • copia de seguridad n - 1 a n
  • ...
  • Copia de respaldo 0 a la copia de seguridad 1
  • actualice la copia de seguridad 0 con cualquier archivo modificado.

La nueva copia de seguridad no ocupará ningún espacio adicional aparte de los cambios que haya realizado, ya que todas las copias de seguridad incrementales apuntarán al mismo conjunto de inodos para los archivos que no han cambiado.


8
2017-10-09 06:54



Enlaces duros puede ser útil, porque te permite acceder al archivo desde múltiples ubicaciones diferentes. accede al inode directamente. Algunos las restricciones son:

  1. Los enlaces duros deben existir todos en el mismo dispositivo.
  2. No podemos crear enlaces duros a directorios.
  3. El número de alias del archivo original tiene. Cuando se elimina el apellido, los contenidos también se eliminan.

Lo bueno de los enlaces duros es que no existe diferencia entre el primer disco duro enlace y el segundo enlace duro. Ambos son solo enlaces duros, y si el primer enlace duro que alguna vez existió para un archivo se elimina, eso no afecta los otros enlaces duros que aún existen. El sistema operativo Linux usa enlaces en muchas ubicaciones para hacer que los archivos sean más accesibles. 

Donde como un enlace simbólico (también conocido como enlace suave) no se vincula directamente al inodo sino al nombre del archivo. La principal desventaja es que cuando el el archivo original se elimina, el enlace simbólico deja de ser válido y ya no funciona.

Alguna información sobre Inode:

Linux almacena datos administrativos sobre archivos en inodos. Cada archivo en Linux tiene una inode, y en el inodo, se almacena información importante sobre el archivo:

  1. El bloque de datos donde se almacenan los contenidos del archivo
  2. La fecha de creación, acceso y modificación
  3. Permisos
  4. Propietarios de archivos

Solo una información importante no se almacena en el inodo: el nombre. Nombres se almacenan en el directorio, y cada nombre de archivo sabe a qué inodo tiene que dirigirse acceder a más información de archivo. Es interesante saber que un inodo no sabe qué nombre tiene; simplemente sabe cuántos nombres están asociados con el inodo. Estos nombres se conocen como enlaces duros. Cuando creas un archivo, le das un nombre. Básicamente, este nombre es un enlace difícil.


5
2018-06-19 20:19