¿Qué es un enlace duro en Linux?

9

He buscado y estoy tratando de entender la diferencia entre un enlace duro y un enlace simbólico (enlace suave).

Encontré que este enlace es bastante útil. Pero todavía no estoy muy claro. Entiendo que el enlace suave no es una copia del archivo original, pero ¿es un enlace duro una copia o no?

icn
fuente

Respuestas:

15

Para usar una analogía de la entrega de correo, un enlace simbólico es algo así como una dirección de reenvío ... cuando algo intenta abrir un enlace simbólico, abre el "archivo" (no literalmente un archivo) almacenado allí, y ve que en su lugar, debería mirar un archivo con un nombre diferente, por lo que abre el otro archivo.

Un enlace duro es más como tener dos direcciones para el mismo lugar. (Por supuesto, esto no es realmente posible en el mundo físico). Cuando algo intenta leer cualquier nombre de archivo (dirección), obtienen el mismo archivo físico (ubicación).

Por lo tanto, un enlace duro no es una copia, porque el archivo solo se almacena una vez (pero con varios nombres). Pero se comporta como una copia, porque puede acceder a la misma información desde dos nombres de archivo.

Flimzy
fuente
+1 para una analogía muy agradable, que me habría simplificado las cosas cuando estaba tratando de entender esto.
John Gardeniers
1
+1, pero dos detalles menores: 1) Es posible tener varias direcciones para el mismo lugar en el mundo real, solo que no es común. 2) Quizás la diferencia más importante entre un enlace duro y una copia es que, si tiene /fooy /bar, el cambio /footambién cambiará /barsi son enlaces duros (porque son dos nombres para el mismo archivo), pero no si son copias (porque son dos archivos completamente independientes).
Dave Sherohman
3

No. Un enlace duro (segundo y todos los posteriores) a un archivo es un puntero a los mismos inodes en el disco.

Ignacio Vazquez-Abrams
fuente
3

Cuando crea un enlace duro, significa que el mismo archivo aparece en dos lugares diferentes. Un archivo es realmente solo una referencia a un conjunto de bloques de datos en los discos, por lo que un enlace duro agrega otra referencia. Los archivos rara vez se eliminan realmente; las referencias simplemente se eliminan, por lo que es imposible acceder a los datos. Es por eso que cuando elimina un archivo que creó como un enlace duro, el otro archivo original permanece y viceversa.

Por otro lado, un enlace simbólico es una dirección para acceder a un archivo con un nombre determinado. Le dice a cualquier programa, "Si quieres usar este archivo, está ahí". Es por eso que si elimina el objetivo del enlace simbólico, el enlace simbólico se rompe. Y si elimina el enlace, el objetivo no se ve afectado.

Michael Lowman
fuente
2

Un archivo en el sistema * nix tiene dos partes. uno la porción de datos y otro es inodo. inode almacena la información meta (información relevante para los datos como la ubicación donde se almacena en el HDD). El enlace duro crea una copia exacta de este inodo. Mientras que el enlace sym crea un inodo que apunta al inodo del inodo real. Por lo tanto, los datos de inodo en el enlace duro son los mismos que los de destino, pero diferentes datos en el enlace sim. Para resumir, los enlaces simbólicos y los enlaces duros difieren en su contenido de datos de inodo, no en los datos del archivo. Esta es mi comprensión de la diferencia entre sym link y hard link. Al principio me costó mucho entender esto, ya que es algo más desarrollador y no soy desarrollador. Oh, conocedores, corríjanme si estoy equivocado.

bagavadhar
fuente
3
Un "directorio" en * nix es una lista de nombres de archivos y números de inodo. Los enlaces duros son dos entradas de directorio que tienen el mismo número de inodo y, por lo tanto, se refieren exactamente al mismo inodo, no a copias del inodo. Un enlace simbólico es una entrada de directorio que apunta a otra entrada de directorio (por nombre), no a ningún inodo en particular. (Ok, en realidad tiene un inodo, pero que i-nodo se refiere a la entrada de directorio, no a los datos de archivo.)
Randy Orrison