Como dice el título, me gustaría saber la diferencia entre un enlace duro y un enlace suave creado por el comando ln
. El comando man ln
proporciona información, pero no responde suficientemente mi pregunta.
Además, sería bueno si alguien pudiera proporcionar una configuración donde el enlace duro podría ser preferible a un enlace simbólico.
symbolic-link
ste_kwr
fuente
fuente
Respuestas:
En Linux / Unix, los atajos se conocen como enlaces
Los enlaces son de dos tipos: enlaces blandos (enlaces simbólicos) o enlaces duros.
Enlaces blandos (enlaces simbólicos)
Puede crear 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á .
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 enlace 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 debe definir el origen y luego debe definir el destino. (Tenga en cuenta que debe definir las rutas completas de origen y destino; de lo contrario, no funcionará).Como puede ver, tiene un inodo diferente y se puede hacer en una partición diferente.
Pregunta: ¿Cómo hago el enlace duro?
Respuesta: Se puede hacer un enlace duro con
ln
; primero debe definir el origen y luego debe definir el destino. (Tenga en cuenta que debe definir la ruta completa de origen y destino; de lo contrario, no funcionará).Digamos que tengo un script en el
/script
directorio llamadofirefox
.Como puede ver, tiene el mismo inodo. Si elimino el original, el enlace funcionará y actuará como el original.
Arriba verifico que el enlace funciona y luego elimino el script original de Firefox.
Tu pregunta: Sería bueno si alguien pudiera proporcionar una configuración donde el enlace duro podría ser preferible a un enlace simbólico.
Respuesta : Dependiendo del diseño de la partición del disco, los enlaces duros tienen la limitación de que deben estar en la misma partición (-1 punto) y solo pueden vincularse a archivos (-1 punto) ), pero +1 punto si se elimina el enlace original funcionará y actúa como el original.
Por otro lado, un enlace suave puede apuntar a directorios o archivos (+1 punto) y no hay limitación de partición (+1 punto), pero (-1 punto) si se elimina la fuente, el enlace no funcionará.
fuente
Un enlace duro 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 todavía apunta al archivo. Si reemplaza el otro archivo con una nueva versión (copiándolo), un enlace duro no apuntará al nuevo archivo. Solo puede tener enlaces duros dentro del mismo sistema de archivos. Con los enlaces duros no tiene el concepto de los archivos y enlaces originales, todos son iguales (piense en ello como una referencia a un objeto). Es un concepto de muy bajo nivel.
Por otro lado, un enlace simbólico en realidad 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 con otro, manteniendo el nombre, el enlace simbólico apuntará al nuevo archivo. Los enlaces simbólicos pueden abarcar 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 sobre el archivo al que apunta.
fuente
"Una imagen vale mas que mil palabras."
Y, "Un ejemplo vale cien párrafos ..."
Crea dos archivos:
Ingrese algunos datos en ellos:
Y como se esperaba:
Creemos enlaces duros y blandos:
Veamos que acaba de pasar:
Cambiar el nombre de blah1 no importa:
blah1-hard señala el inodo, el contenido del archivo, que no se modificó.
No se pudo encontrar el contenido del archivo porque el enlace suave apunta al nombre, que fue cambiado, y no al contenido.
Del mismo modo, si se elimina blah1, blah1-hard aún conserva el contenido; si se elimina blah2, blah2-soft es solo un enlace a un archivo no existente.
fuente: ¡copiarlo descaradamente de StackOverflow!
fuente
git
es una mala idea , en caso de que alguien (frustrado por los enlaces blandos) se pregunte ... podría aplicarse también a otros sistemas de versiones.Ambos son punteros a archivos; La diferencia es el tipo de puntero. Un enlace simbólico apunta a otro archivo por su nombre . Tiene un bit de modo especial que lo identifica como un enlace simbólico, y su contenido es el nombre del archivo real. Debido a que solo contiene un nombre, ese nombre en realidad no tiene que existir, o puede existir en un sistema de archivos diferente. Si reemplaza el archivo con nombre (cambie su contenido sin afectar su nombre), entonces el enlace aún contiene el mismo nombre, y 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 al nombre de un archivo. No hay un nombre "real" frente al nombre del enlace duro; Todos los enlaces duros son nombres igualmente válidos para el archivo. Debido a esto, el archivo al que debe enlazar debe existir y estar en el mismo sistema de archivos donde está intentando crear el enlace. Si elimina el nombre original, el enlace físico aún señala el mismo archivo. Debido a que todos los enlaces duros son nombres igualmente válidos para el archivo, no puede mirar uno y ver los otros nombres para el archivo; Para encontrar esto, debe buscar en cada archivo y comparar su número de inodo para encontrar los otros nombres que tienen el mismo número de inodo.
Puede saber 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 (s) nombre (s) en alguna parte y, por el contrario, un archivo con un recuento de enlaces de solo 1 no tiene (otros) enlaces duros.fuente
If you replace the named file, then the link still contains the same name, and so now it points to the new file
- Creo que esto no está bien explicado. ¿Quiere decir que si reemplazo el archivo donde obtuve un enlace simbólico, los enlaces que contienen el nombre permanecen intactos? Pero solo apuntaría al archivo reemplazado cuando su nombre de archivo (es decir, el nuevo archivo que reemplazó al anterior) es el mismo que el reemplazado (es decir, el archivo antiguo que fue reemplazado por el nuevo), ¿correcto?Un enlace duro solo puede funcionar en el mismo sistema de archivos, es simplemente un nombre diferente para el mismo inodo (los inodos hacen referencia internamente a los archivos). Un archivo solo se eliminará del disco cuando el último enlace a su inodo haya desaparecido (usted
rm
ounlink
el último enlace). Los enlaces duros generalmente solo funcionan para archivos, no directorios.Un enlace simbólico (enlace simbólico) es un archivo especial que contiene una ruta a otro archivo. Este camino puede ser absoluto o relativo. los enlaces simbólicos pueden funcionar en todos los sistemas de archivos e incluso pueden apuntar a diferentes archivos, si por ejemplo desconecta un disco duro externo y lo reemplaza por otro, que tiene un archivo diferente en la misma ruta. Un enlace simbólico puede apuntar a archivos o directorios.
fuente
-d, -F, --directory
interruptores. Y sí, yo he visto la nota en laln(1)
página :)ln
no se puede usar para hacer enlaces duros a directorios. Sin embargo, existen enlaces a directorios, el ejemplo más destacado es.
y..
. No quería incluir eso en mi respuesta original, ya que eso solo complicaría las cosas.Una de las respuestas del otro hilo (ahora vinculado desde la parte superior de su publicación) menciona esta página, que creo que es una explicación bastante buena de nivel medio. Si te estás perdiendo en el arte ascii, aquí está la versión tl; dr:
El kernel y los sistemas de archivos involucrados traducen todo de manera transparente.
Entonces, basado en eso:
../parent.file
)Podría haberme confundido un poco, pero leyendo varias cosas, estoy luchando por encontrar la diferencia entre un archivo estándar y un enlace duro. La forma en que lo estoy leyendo es que cada archivo consta de un enlace duro (que almacena el nombre del archivo), que se vincula a un inodo que apunta a datos físicos.
Agregar un enlace duro solo proporciona un inodo con un puntero adicional basado en el sistema de archivos. ¿Está bien?
fuente
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 estar utilizando enlaces suaves, ya que no puede crear un enlace fijo a un directorio.
Cuándo usar Hard Link:
Espacio de almacenamiento: los enlaces duros ocupan una cantidad muy pequeña de espacio, ya que no se crean nuevos inodos al crear enlaces duros. En enlaces blandos creamos un archivo que consume espacio (generalmente 4KB, dependiendo del sistema de archivos)
Rendimiento: el rendimiento será ligeramente mejor al acceder a un enlace duro, 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 de origen a otra ubicación en el mismo sistema de archivos, el enlace físico seguirá funcionando, pero el enlace suave fallará.
Redundancia: si desea garantizar la seguridad de sus datos, debe usar un enlace duro, ya que en el enlace duro, los datos están seguros, hasta que se eliminen todos los enlaces a los archivos, en lugar de eso en el enlace suave, perderá los datos si se elimina la instancia maestra del archivo.
fuente
La confusión se establece cuando intenta encontrar la diferencia entre "el nombre del archivo" y un enlace duro porque no hay ninguno.
Cada archivo que crea consta de datos en el disco y un enlace duro , 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.
A partir de esto, puede ver que los datos reales nunca se eliminan, solo se eliminan los enlaces duros. Y cuando se llena lo suficiente en el disco, los datos pueden sobrescribirse con los datos de otro archivo. Hasta entonces, los datos del archivo eliminado podrían recuperarse, pero es un poco difícil de encontrar sin el enlace duro.
Los enlaces simbólicos, como se explicó anteriormente, simplemente le dicen "hay un archivo llamado
<targetname>
en una carpeta llamada<targetfolder>
". Señalan el enlace duro. No saben dónde están los datos. El enlace duro lo sabe.fuente
Es muy sencillo. 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 duro es un segundo, tercer, etc. nombre asignado a la misma dirección. En cambio, un enlace simbólico se refiere al símbolo (el nombre) y, por lo tanto, se asigna un segundo nombre al primer nombre. En lo que respecta al núcleo, una vez que lee el objetivo del enlace simbólico, se detiene y vuelve al principio con el valor del 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 de destino no se usa por encima del nivel del sistema de archivos, excepto si se consulta explícitamente en el código del espacio de usuario.
fuente