¿Cuál es la diferencia entre un enlace simbólico y un enlace duro?
769
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 duro y cómo difiere de uno simbólico.
sobre 'no entiendo el uso de un enlace duro', se puede usar en sistemas de compilación que copian mucho los binarios. Crear un enlace duro en lugar de una copia real acelera las cosas. MSBuild 4.0 lo admite.
unix.stackexchange tiene una buena lista de viñetas ... muy útil porque presenta todas las restricciones de manera muy concisa y es fácil de leer. (muchos de estos puntos abarcan casos extremos / advertencias que solo se mencionan en los comentarios de esta pregunta ... o no se mencionan en absoluto)
Trevor Boyd Smith,
Respuestas:
781
Debajo del sistema de archivos, los archivos están representados por inodos. (¿O son múltiples inodos? 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 / sobrescribir) 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 hecho un enlace duro, el enlace es al inodo. Eliminar, renombrar 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 sistemas de archivos, ya que son simplemente el nombre de otro archivo.
Estoy seguro de que los nodos i dependen de la variante particular del sistema operativo; Sin embargo, creo que generalmente es un solo i-nodo. El i-node tiene información sobre el archivo e información sobre dónde se almacenan los datos en el disco. Los archivos grandes tendrán punteros indirectos a tablas adicionales.
terson
76
Es posible que desee agregar la característica útil de que los enlaces simbólicos pueden cruzar sistemas de archivos, los enlaces duros no pueden (deben referirse a un archivo en el mismo sistema de archivos).
@zen: puede desmontar / volver a montar un sistema de archivos en cualquier momento que no se esté utilizando. Para la partición raíz, esto es un poco complicado, pero se puede hacer (no recomendado). Para hacerlo desde la raíz, generalmente es mejor arrancar desde un CD de rescuse primero modificar los montajes y reiniciar. Pero deberías hacer este tipo de preguntas en superusuario.
Martin York
464
Una buena intuición que podría ayudar, usando cualquier consola Linux (ish).
Crea dos archivos:
$ touch foo; touch bar
Ingrese algunos datos en ellos:
$ echo "Cat" > foo
$ echo "Dog" > bar
(En realidad, podría haber usado echo en primer lugar, ya que crea los archivos si no existen ... pero eso no importa).
Y como se esperaba:
$cat foo; cat bar
Cat
Dog
Creemos enlaces duros y blandos:
$ ln foo foo-hard
$ ln -s bar bar-soft
Veamos que acaba de pasar:
$ ls -l
foo
foo-hard
bar
bar-soft -> bar
Cambiar el nombre de foo no importa:
$ mv foo foo-new
$ cat foo-hard
Cat
foo-hard señala el inodo, el contenido del archivo, que no se modificó.
$ mv bar bar-new
$ ls bar-soft
bar-soft
$ cat bar-soft
cat: bar-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 al contenido.
Del mismo modo, si foose elimina, foo-hardaún conserva el contenido; si barse elimina, bar-softes solo un enlace a un archivo no existente.
¿Esto implica que un "archivo" y un "enlace duro" son lo mismo, ambos apuntando a un inodo? al eliminar un archivo o un enlace duro, el contenido aún existe mientras uno todavía apunte al inodo, ¿verdad?
Daniel W.
1
@DanFromGermany Correcto. Se puede acceder al contenido siempre que lo apunte al menos un enlace duro (es decir, un archivo).
Adam Matan
66
touch blah1; touch blah2se puede acortar atouch blah1 blah2
Dmitri Zaitsev
11
@DmitriZaitsev Cierto, pero será menos legible para principiantes IMO.
Adam Matan
8
Creo que esta es la respuesta mejor comprensible con respecto a muchas respuestas que he leído. Una muestra es mejor que un montón de texto explicativo.
Scott Chu
435
Como dice el refrán, una imagen vale más que mil palabras. Así es como lo visualizo:
Así es como llegamos a esa imagen:
Cree un nombre myfile.txten el sistema de archivos que apunte a un nuevo inodo (que contenga los metadatos del archivo y apunte a los bloques de datos que contienen su contenido, es decir, el texto "¡Hola, Mundo!":
$ echo 'Hello, World!' > myfile.txt
Cree un enlace duro my-hard-linkal archivo myfile.txt, lo que significa "crear un archivo que debe apuntar al mismo inodo que myfile.txtapunta a":
$ ln myfile.txt my-hard-link
Cree un enlace suave my-soft-linkal archivo myfile.txt, que significa "crear un archivo que debe apuntar al archivo myfile.txt":
$ ln -s myfile.txt my-soft-link
Mire lo que sucederá ahora si myfile.txtse elimina (o se mueve): my-hard-linktodavía apunta al mismo contenido y, por lo tanto, no se ve afectado, mientras que my-soft-linkahora apunta a nada. Otras respuestas discuten los pros / contras de cada uno.
@ThunderWiring Por "punto", me refiero a cualesquiera que sean las referencias del enlace. En el caso de un enlace duro, hace referencia a un inodo directamente (es decir, el mismo inodo al que hace referencia myfile.txt). Para el enlace suave, de referencia no es el nodo-i (que contiene los datos), sino más bien de referencia es la ruta del sistema de archivos a myfile.txt(por ejemplo /home/Documents/myfile.txt)
akivajgordon
44
Realmente me gusta tu respuesta visual @akivajgordon, ¡realmente me ayudó a comprender mejor las diferencias!
wmock
77
¡Diez mil palabras!
SaganRitual
13
Tal vez soy lento, pero su imagen acaba de aclarar 20 años de misterio en unos 2 segundos.
jdk1.0
3
La respuesta más útil, estoy enojado, esto está enterrado tan profundamente en esta publicación. Te daría cien puntos de internet, pero lamentablemente solo puedo darte uno.
Dagrooms
71
Los enlaces duros son útiles cuando el archivo original se mueve. Por ejemplo, mover un archivo de / bin a / usr / bin o / usr / local / bin. Cualquier enlace simbólico al archivo en / bin se rompería por esto, pero un enlace duro, que es un enlace directo al inodo para el archivo, no importaría.
Los enlaces duros pueden ocupar menos espacio en el disco, ya que solo ocupan una entrada de directorio, mientras que un enlace simbólico necesita su propio inodo para almacenar el nombre al que apunta.
Los enlaces duros también tardan menos tiempo en resolverse: los enlaces simbólicos pueden apuntar a otros enlaces simbólicos que están en directorios enlazados. Y algunos de estos podrían estar en NFS u otros sistemas de archivos de alta latencia y, por lo tanto, podrían resolver el tráfico de red. Los enlaces duros, estando siempre en el mismo sistema de archivos, siempre se resuelven en una sola búsqueda, y nunca implican latencia de red (si se trata de un enlace duro en un sistema de archivos NFS, el servidor NFS haría la resolución, 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 los enlaces duros para mantener activo el inodo de un archivo, de modo que incluso si el archivo se desvincula (2) ed, el inodo permanece para permitir el acceso continuo del proceso, y solo una vez que el proceso se cierra, el archivo realmente desaparece. Esto permite archivos temporales mucho más seguros (si puede hacer que la apertura y desvinculación sucedan atómicamente, lo que puede haber una API POSIX para la que no recuerdo, 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 les diera a todos la posibilidad de ver los descriptores de sus archivos, pero esa es otra historia.
Hablando de eso, la recuperación de un archivo que está abierto en el proceso A, pero que no está vinculado 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 tiene abierto lo cierra o desaparece.
suave o simbólico es más un atajo al archivo original ... si borra el original, el atajo falla y si solo borra el atajo no pasa nada al original.
Enlace suave Sintaxis :ln -s Pathof_Target_file link
Salida:link -> ./Target_file
Prueba:readlink link
también en la ls -l linksalida verá la primera letra lrwxrwxrwxcomo l, lo que indica 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 (a partir de / root / user / Target_file y no ./Target_file)
Enlace duro:
El enlace duro es más una copia espejo o múltiples rutas al mismo archivo. Haga algo en el archivo1 y aparecerá en el archivo 2. Eliminar uno todavía mantiene el otro bien.
El inodo (o archivo) solo se elimina cuando se han eliminado todos los enlaces (rígidos) o todas las rutas al inodo (mismo archivo).
Una vez que se ha hecho un enlace duro, el enlace tiene el inodo del archivo original. Eliminar 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.
Sintaxis de enlace duro :ln Target_file link
Salida: se creará un archivo con el enlace de nombre con el mismo número de inodo que Targetfile.
Prueba:ls -i link Target_file (verifique sus inodos)
Eliminar el enlace:rm -f link (Eliminar el enlace como un archivo normal)
Nota : Los enlaces simbólicos pueden abarcar 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. Faltan enlaces duros:
Enlace duro apunta al contenido del archivo. mientras que Soft link apunta al nombre del archivo.
mientras que el tamaño del enlace duro es el tamaño del contenido mientras que el enlace suave tiene el tamaño del nombre del archivo.
Los enlaces duros comparten el mismo inodo. Los enlaces blandos no.
Los enlaces duros no pueden cruzar sistemas de archivos. Los enlaces blandos sí.
Si sabe de inmediato dónde apunta un enlace simbólico con enlaces duros, debe explorar todo el sistema de archivos para encontrar archivos que compartan el mismo inodo.
# find / -inum 517333
/home/bobbin/sync.sh
/root/synchro
los enlaces duros no pueden apuntar a directorios.
Los enlaces duros tienen dos limitaciones:
Los directorios no pueden estar vinculados. Linux no permite que esto mantenga la estructura de árbol acíclica de los directorios.
No se puede crear un enlace duro en los sistemas de archivos. Ambos archivos deben estar en los mismos sistemas de archivos, porque los diferentes sistemas de archivos tienen diferentes tablas de inodo independientes (dos archivos en diferentes sistemas de archivos, pero con el mismo número de inodo serán diferentes).
"mientras que el tamaño del enlace duro es el tamaño del contenido mientras que el enlace suave tiene el tamaño del nombre del archivo". Solo para aclarar, hacer otro enlace duro solo afecta el espacio libre en unos pocos bytes.
Ingo
34
Una manera simple de ver la diferencia entre un enlace duro y un enlace simbólico es a través de un ejemplo simple. Un enlace fijo a un archivo apuntará al lugar donde está almacenado el archivo, o al inodo de ese archivo. Un enlace simbólico apuntará al archivo en sí.
Entonces, si tenemos un archivo llamado "a" y creamos un enlace rígido "b" y un enlace simbólico "c" que se refieren 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 la salida 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 al archivo "a" en sí, si el archivo "a" se elimina, 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 al inodo, del archivo "a". Por lo tanto, si se elimina el archivo "a", ya no apuntará al inodo, pero debido a que el archivo "b" sí lo hace, el inodo continuará almacenando cualquier contenido que pertenezca a "a" hasta que no haya más enlaces duros.
Puede ser útil señalar que, un archivo es un objeto muy abstracto y tiene, con todas las cosas abstractas, la verdadera intención de las implementaciones de alto nivel puede faltar a la explicación adecuada sin correr el riesgo de volar las abstracciones.
Cholthi Paul Ttiopic
28
Los enlaces simbólicos enlazan 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 a un inodo, lo que significa que solo pueden existir en el mismo volumen que el objetivo. Los enlaces duros adicionales a un archivo no se pueden distinguir del nombre "original" utilizado para hacer referencia a un archivo.
Además, cuando elimina el archivo al que se vincula, se rompe un enlace simbólico, un enlace duro sigue siendo válido, ya que "mantiene" el archivo en el sistema de archivos.
En teoría (y en algunos casos incluso en la práctica) los enlaces duros también pueden apuntar a directorios (de hecho, "." Es un enlace rígido al directorio actual y ".." es un enlace rígido al directorio padre). Pero pueden ser peligrosos, por lo que la mayoría de los UNIX no los permiten (o requieren que tome medidas especiales para hacerlo). Apple los usa para su implementación en la máquina del tiempo, por ejemplo: earthlingsoft.net/ssp/blog/2008/03/x5_time_machine
Joachim Sauer
3
Estás señalando un enlace a un artículo ... ¿eso te convierte en un enlace simbólico?
Ian Campbell
@JoachimSauer ¿Cree que el nuevo sistema de archivos de Apple eliminará la necesidad de que Time Machine use enlaces duros a los directorios?
cjm
Encontré la explicación de wikipedia significativamente más corta y más concreta que las explicaciones en las respuestas mejor calificadas.
Lakesare
9
Los enlaces duros son muy útiles cuando se realizan copias de seguridad incrementales. Ver rsnapshot , por ejemplo. La idea es hacer una copia 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 respaldo 1
actualice la copia de seguridad 0 con cualquier archivo modificado.
La nueva copia de seguridad no ocupará 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.
Supongo que tu foto de enlace suave no es correcta. Punto: el inodo del enlace suave no debe apuntar al inodo del archivo original. Porque si cambia el nombre del archivo original, el enlace suave relacionado está muerto
percy507
@ percy507 sí, tienes razón, pero todavía me parece una explicación muy agradable e intuitiva. Imagínense que la flecha entre los inodos no está allí ...
Michael Litvin
5
Añado a la pregunta de Nick: ¿cuándo son útiles o necesarios los enlaces duros ? La única aplicación que me viene a la mente, en la que los enlaces simbólicos no funcionarían, es proporcionar una copia de un archivo del sistema en un entorno chrooteado.
Sistema distribuido con puntos de montaje en diferentes lugares en diferentes sistemas. Por supuesto, esto podría diseñarse fuera del sistema siendo consistente.
Un enlace simbólico es un objeto del sistema de archivos que apunta a otro objeto del sistema de archivos. El objeto al que se apunta se llama objetivo.
Los enlaces simbólicos son transparentes para los usuarios; los enlaces aparecen como archivos o directorios normales, y el usuario o la aplicación pueden actuar sobre ellos de la misma manera.
Los enlaces simbólicos están diseñados para ayudar en la migración y la compatibilidad de aplicaciones con los sistemas operativos UNIX. Microsoft ha implementado sus enlaces simbólicos para funcionar igual que los enlaces UNIX.
Los enlaces simbólicos pueden ser enlaces absolutos o relativos. Los enlaces absolutos son enlaces que especifican cada parte del nombre de la ruta; los enlaces relativos se determinan en relación con el lugar donde los especificadores de enlaces relativos están en una ruta especificada
Un ejemplo de enlace simbólico absoluto
X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"
Un ejemplo de enlaces simbólicos relativos
X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"
Un enlace duro es la representación del sistema de archivos de un archivo mediante el cual más de una ruta hace referencia a un solo archivo en el mismo volumen .
Para crear un enlace duro en Windows, navegue hasta donde se creará el enlace e ingrese este comando:
mklink /H Link_name target_path
Tenga en cuenta que puede eliminar los enlaces duros en cualquier orden, independientemente del orden en que se crearon. Además, los enlaces duros no se pueden crear cuando
las referencias están en diferentes unidades locales
Las referencias incluyen unidad de red. En otras palabras, una de las referencias es una unidad de red
el enlace duro que se creará está en la misma ruta que el objetivo
NTFS admite otro tipo de enlace llamado unión. MSDN lo define de la siguiente manera:
Una unión (también llamada enlace flexible) difiere de un enlace duro en que los objetos de almacenamiento a los que hace referencia son directorios separados, y una unión puede enlazar directorios ubicados en diferentes volúmenes locales en la misma computadora . De lo contrario, las uniones operan de manera idéntica a los enlaces duros.
Las partes en negrita en la sección de enlace duro y la sección de unión muestran la diferencia básica entre las dos.
Comando para crear una unión en ventanas, navegue hasta donde se creará el enlace y luego ingrese:
El rendimiento de lectura de los enlaces duros es mejor que los enlaces simbólicos (micro-rendimiento)
Los enlaces simbólicos se pueden copiar, controlar por versión, etc. En otras palabras, son un archivo real. En el otro extremo, un enlace duro es algo en un nivel ligeramente inferior y encontrará que, en comparación con los enlaces simbólicos, hay menos herramientas que proporcionan medios para trabajar con los enlaces duros como enlaces duros y no como archivos normales
Simplemente, enlace duro: es solo agregar un nuevo nombre a un archivo, es decir, un archivo puede tener muchos nombres al mismo tiempo, todos los nombres son iguales entre sí, nadie lo prefiere, el enlace duro no significa copiar todo el contenido de archivo y crear un nuevo archivo no es eso, solo crea un nombre alternativo para ser conocido.
Enlace simbólico (enlace simbólico): es un puntero de archivo a otro archivo, si el enlace simbólico apunta a un archivo existente que luego se elimina, el enlace simbólico continúa apuntando al mismo nombre de archivo aunque el nombre ya no nombra ningún archivo.
Lo que usted considera un "archivo" ordinario es en realidad dos cosas separadas: los datos de un archivo y una entrada de directorio. Cuando crea un enlace duro para un archivo, en realidad crea una segunda entrada de directorio que se refiere a los mismos datos. Ambas entradas de directorio tienen exactamente la misma funcionalidad; cada uno se puede usar para abrir el archivo para leerlo. Entonces, realmente no tiene "un archivo más un enlace duro", tiene "datos de archivo con dos entradas de directorio". Lo que usted considera como eliminar un archivo en realidad elimina una entrada de directorio, y cuando se elimina la última entrada de directorio para los datos, también se eliminan los datos en sí. Para los archivos normales que solo tienen una entrada de directorio, la eliminación de la entrada del directorio eliminará los datos como siempre. (Mientras se abre un archivo, el sistema operativo crea un enlace temporal al archivo,
Como ejemplo, cree un archivo A.txt, un enlace duro B.txt y elimine A.txt. Cuando creó A.txt, se crearon algunos datos y una entrada de directorio A.txt. Cuando creó el enlace físico, se creó otra entrada de directorio B.txt, apuntando a los mismos datos exactos. Cuando elimina A.txt, todavía tiene todos los datos y una sola entrada de directorio B.txt, exactamente como si hubiera creado un archivo B.txt en primer lugar.
Un enlace suave es solo un archivo (casi) ordinario, excepto que no contiene datos, sino la ruta de otra entrada de directorio. Si elimina el archivo al que hace referencia el enlace flexible, entonces el enlace flexible contendrá una ruta que ya no apuntará a una entrada de directorio; está roto. Si elimina el enlace suave, es como eliminar cualquier otro archivo, el archivo al que apunta no se ve afectado.
Dado que los enlaces duros se pueden crear en el mismo sistema de archivos, podemos buscar todos los enlaces duros sin -Lusar la opción (con-xdev opción) en el mismo sistema de archivos / punto de montaje. Guarda la búsqueda innecesaria en diferentes puntos de montaje.
Por lo tanto, buscar en el enlace duro es algo más rápido que buscar en los enlaces suaves (rectifique si estoy equivocado o no claro).
Los enlaces simbólicos dan otro nombre a un archivo, de manera similar a los enlaces duros. Pero un archivo se puede eliminar incluso si quedan enlaces simbólicos restantes.
Acabo de encontrar una manera fácil de entender los enlaces duros en un escenario común, la instalación de software.
Un día descargué un software a la carpeta Downloadspara instalarlo. Después de que lo hice sudo make install, algunos ejecutables fueron cpeditados a la carpeta bin local. Aquí, cpcrea un enlace duro . Estaba contento con el software, pero pronto me di cuenta de que Downloadsno es un buen lugar a largo plazo. Así que mvedité la carpeta del software al sourcedirectorio. Bueno, todavía puedo ejecutar el software como antes sin preocuparme por ningún enlace de destino, como en Windows. Esto significa que el enlace duro encuentra el inodo directamente y otros archivos.
EN esta respuesta cuando digo un archivo me refiero a la ubicación en la memoria
Todos los datos que se guardan se almacenan en la memoria utilizando una estructura de datos llamada inodes. Cada inodo tiene un número de número. El número de inodo se utiliza para acceder al inodo. Todos los enlaces duros a un archivo pueden tener diferentes nombres pero compartir el mismo número de inodo. Como todos los enlaces duros tienen el mismo número de entrada (que tienen acceso al mismo inodo), todos apuntan a la misma memoria física.
Un enlace simbólico es un tipo especial de archivo. Dado que también es un archivo, tendrá un nombre de archivo y un número de inodo. Como se dijo anteriormente, el número de inodo accede a un inodo que apunta a datos. Ahora, lo que hace que un enlace simbólico sea especial es que los inodenumbers en enlaces simbólicos acceden a esos inodes que apuntan a "una ruta" a otro archivo. Más específicamente, el número de inodo en el enlace simbólico accede a esos inodes que apuntan a otro enlace duro.
cuando nos estamos moviendo, copiando, eliminando un archivo en la GUI, estamos jugando con los enlaces duros del archivo, no con la memoria física. Cuando eliminamos un archivo, estamos eliminando el enlace rígido del archivo. no estamos borrando la memoria física. Si se eliminan todos los enlaces duros al archivo, entonces no será posible acceder a los datos almacenados, aunque todavía puede estar presente en la memoria
Respuestas:
Debajo del sistema de archivos, los archivos están representados por inodos. (¿O son múltiples inodos? 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 / sobrescribir) 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 hecho un enlace duro, el enlace es al inodo. Eliminar, renombrar 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 sistemas de archivos, ya que son simplemente el nombre de otro archivo.
fuente
Una buena intuición que podría ayudar, usando cualquier consola Linux (ish).
Crea dos archivos:
Ingrese algunos datos en ellos:
(En realidad, podría haber usado echo en primer lugar, ya que crea los archivos si no existen ... pero eso no importa).
Y como se esperaba:
Creemos enlaces duros y blandos:
Veamos que acaba de pasar:
Cambiar el nombre de foo no importa:
foo-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
foo
se elimina,foo-hard
aún conserva el contenido; sibar
se elimina,bar-soft
es solo un enlace a un archivo no existente.fuente
touch blah1; touch blah2
se puede acortar atouch blah1 blah2
Como dice el refrán, una imagen vale más que mil palabras. Así es como lo visualizo:
Así es como llegamos a esa imagen:
Cree un nombre
myfile.txt
en el sistema de archivos que apunte a un nuevo inodo (que contenga los metadatos del archivo y apunte a los bloques de datos que contienen su contenido, es decir, el texto "¡Hola, Mundo!":Cree un enlace duro
my-hard-link
al archivomyfile.txt
, lo que significa "crear un archivo que debe apuntar al mismo inodo quemyfile.txt
apunta a":Cree un enlace suave
my-soft-link
al archivomyfile.txt
, que significa "crear un archivo que debe apuntar al archivomyfile.txt
":Mire lo que sucederá ahora si
myfile.txt
se elimina (o se mueve):my-hard-link
todavía apunta al mismo contenido y, por lo tanto, no se ve afectado, mientras quemy-soft-link
ahora apunta a nada. Otras respuestas discuten los pros / contras de cada uno.fuente
myfile.txt
). Para el enlace suave, de referencia no es el nodo-i (que contiene los datos), sino más bien de referencia es la ruta del sistema de archivos amyfile.txt
(por ejemplo/home/Documents/myfile.txt
)Los enlaces duros son útiles cuando el archivo original se mueve. Por ejemplo, mover un archivo de / bin a / usr / bin o / usr / local / bin. Cualquier enlace simbólico al archivo en / bin se rompería por esto, pero un enlace duro, que es un enlace directo al inodo para el archivo, no importaría.
Los enlaces duros pueden ocupar menos espacio en el disco, ya que solo ocupan una entrada de directorio, mientras que un enlace simbólico necesita su propio inodo para almacenar el nombre al que apunta.
Los enlaces duros también tardan menos tiempo en resolverse: los enlaces simbólicos pueden apuntar a otros enlaces simbólicos que están en directorios enlazados. Y algunos de estos podrían estar en NFS u otros sistemas de archivos de alta latencia y, por lo tanto, podrían resolver el tráfico de red. Los enlaces duros, estando siempre en el mismo sistema de archivos, siempre se resuelven en una sola búsqueda, y nunca implican latencia de red (si se trata de un enlace duro en un sistema de archivos NFS, el servidor NFS haría la resolución, 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 los enlaces duros para mantener activo el inodo de un archivo, de modo que incluso si el archivo se desvincula (2) ed, el inodo permanece para permitir el acceso continuo del proceso, y solo una vez que el proceso se cierra, el archivo realmente desaparece. Esto permite archivos temporales mucho más seguros (si puede hacer que la apertura y desvinculación sucedan atómicamente, lo que puede haber una API POSIX para la que no recuerdo, 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 les diera a todos la posibilidad de ver los descriptores de sus archivos, pero esa es otra historia.
Hablando de eso, la recuperación de un archivo que está abierto en el proceso A, pero que no está vinculado 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 tiene abierto lo cierra o desaparece.
fuente
Enlace suave :
suave o simbólico es más un atajo al archivo original ... si borra el original, el atajo falla y si solo borra el atajo no pasa nada al original.
Enlace suave Sintaxis :
ln -s Pathof_Target_file link
Salida:
link -> ./Target_file
Prueba:
readlink link
también en lals -l link
salida verá la primera letralrwxrwxrwx
como l, lo que indica 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 (a partir de / root / user / Target_file y no ./Target_file)
Enlace duro:
El enlace duro es más una copia espejo o múltiples rutas al mismo archivo. Haga algo en el archivo1 y aparecerá en el archivo 2. Eliminar uno todavía mantiene el otro bien.
El inodo (o archivo) solo se elimina cuando se han eliminado todos los enlaces (rígidos) o todas las rutas al inodo (mismo archivo).
Una vez que se ha hecho un enlace duro, el enlace tiene el inodo del archivo original. Eliminar 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.
Sintaxis de enlace duro :
ln Target_file link
Salida: se creará un archivo con el enlace de nombre con el mismo número de inodo que Targetfile.
Prueba:
ls -i link Target_file
(verifique sus inodos)Eliminar el enlace:
rm -f link
(Eliminar el enlace como un archivo normal)Nota : Los enlaces simbólicos pueden abarcar 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. Faltan enlaces duros:
Si sabe de inmediato dónde apunta un enlace simbólico con enlaces duros, debe explorar todo el sistema de archivos para encontrar archivos que compartan el mismo inodo.
# find / -inum 517333
los enlaces duros no pueden apuntar a directorios.
Los enlaces duros tienen dos limitaciones:
fuente
Una manera simple de ver la diferencia entre un enlace duro y un enlace simbólico es a través de un ejemplo simple. Un enlace fijo a un archivo apuntará al lugar donde está almacenado el archivo, o al inodo de ese archivo. Un enlace simbólico apuntará al archivo en sí.
Entonces, si tenemos un archivo llamado "a" y creamos un enlace rígido "b" y un enlace simbólico "c" que se refieren al archivo "a":
La salida de "a", "b" y "c" será:
Ahora eliminemos el archivo "a" y veamos qué sucede con la salida de "a", "b" y "c":
¿Entonces qué pasó?
Debido a que el archivo "c" apunta al archivo "a" en sí, si el archivo "a" se elimina, 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 al inodo, del archivo "a". Por lo tanto, si se elimina el archivo "a", ya no apuntará al inodo, pero debido a que el archivo "b" sí lo hace, el inodo continuará almacenando cualquier contenido que pertenezca a "a" hasta que no haya más enlaces duros.
fuente
Los enlaces simbólicos enlazan 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 a un inodo, lo que significa que solo pueden existir en el mismo volumen que el objetivo. Los enlaces duros adicionales a un archivo no se pueden distinguir del nombre "original" utilizado para hacer referencia a un archivo.
fuente
Te diría a Wikipedia:
Algunos puntos:
fuente
Los enlaces duros son muy útiles cuando se realizan copias de seguridad incrementales. Ver rsnapshot , por ejemplo. La idea es hacer una copia usando enlaces duros:
La nueva copia de seguridad no ocupará 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.
fuente
Enlace duro Vs Enlace suave se puede explicar fácilmente por esta imagen.
fuente
Añado a la pregunta de Nick: ¿cuándo son útiles o necesarios los enlaces duros ? La única aplicación que me viene a la mente, en la que los enlaces simbólicos no funcionarían, es proporcionar una copia de un archivo del sistema en un entorno chrooteado.
fuente
De MSDN ,
Enlace simbólico
Un ejemplo de enlace simbólico absoluto
Un ejemplo de enlaces simbólicos relativos
Enlace duro
Para crear un enlace duro en Windows, navegue hasta donde se creará el enlace e ingrese este comando:
Tenga en cuenta que puede eliminar los enlaces duros en cualquier orden, independientemente del orden en que se crearon. Además, los enlaces duros no se pueden crear cuando
Unión
NTFS admite otro tipo de enlace llamado unión. MSDN lo define de la siguiente manera:
Las partes en negrita en la sección de enlace duro y la sección de unión muestran la diferencia básica entre las dos.
Comando para crear una unión en ventanas, navegue hasta donde se creará el enlace y luego ingrese:
fuente
También:
fuente
Simplemente, enlace duro: es solo agregar un nuevo nombre a un archivo, es decir, un archivo puede tener muchos nombres al mismo tiempo, todos los nombres son iguales entre sí, nadie lo prefiere, el enlace duro no significa copiar todo el contenido de archivo y crear un nuevo archivo no es eso, solo crea un nombre alternativo para ser conocido.
Enlace simbólico (enlace simbólico): es un puntero de archivo a otro archivo, si el enlace simbólico apunta a un archivo existente que luego se elimina, el enlace simbólico continúa apuntando al mismo nombre de archivo aunque el nombre ya no nombra ningún archivo.
fuente
Lo que usted considera un "archivo" ordinario es en realidad dos cosas separadas: los datos de un archivo y una entrada de directorio. Cuando crea un enlace duro para un archivo, en realidad crea una segunda entrada de directorio que se refiere a los mismos datos. Ambas entradas de directorio tienen exactamente la misma funcionalidad; cada uno se puede usar para abrir el archivo para leerlo. Entonces, realmente no tiene "un archivo más un enlace duro", tiene "datos de archivo con dos entradas de directorio". Lo que usted considera como eliminar un archivo en realidad elimina una entrada de directorio, y cuando se elimina la última entrada de directorio para los datos, también se eliminan los datos en sí. Para los archivos normales que solo tienen una entrada de directorio, la eliminación de la entrada del directorio eliminará los datos como siempre. (Mientras se abre un archivo, el sistema operativo crea un enlace temporal al archivo,
Como ejemplo, cree un archivo A.txt, un enlace duro B.txt y elimine A.txt. Cuando creó A.txt, se crearon algunos datos y una entrada de directorio A.txt. Cuando creó el enlace físico, se creó otra entrada de directorio B.txt, apuntando a los mismos datos exactos. Cuando elimina A.txt, todavía tiene todos los datos y una sola entrada de directorio B.txt, exactamente como si hubiera creado un archivo B.txt en primer lugar.
Un enlace suave es solo un archivo (casi) ordinario, excepto que no contiene datos, sino la ruta de otra entrada de directorio. Si elimina el archivo al que hace referencia el enlace flexible, entonces el enlace flexible contendrá una ruta que ya no apuntará a una entrada de directorio; está roto. Si elimina el enlace suave, es como eliminar cualquier otro archivo, el archivo al que apunta no se ve afectado.
fuente
Una entrada de directorio es vincular una estructura:
el ino es el número de inodo, el nombre es el nombre del archivo, la estructura del inodo puede ser como:
por ejemplo, crea un archivo / 1, la entrada del directorio puede ser como:
la estructura del inodo puede ser como:
luego crea un enlace duro (puede ser / 100), la entrada del directorio puede ser como:
la estructura del inodo puede ser como:
luego crea un enlace simbólico (puede ser / 200) al archivo 1, la entrada del directorio puede ser así:
la estructura del inodo puede ser como:
fuente
Además de todas las respuestas anteriores, la diferencia en la búsqueda del archivo de enlace duro y softlink se puede entender a continuación:
Tengo un archivo
f6
en mi directorio actual, así como un directorio llamadot2
.Archivo nombrado
f1
y./t2/f2
son enlaces simbólicos af6
.Archivo nombrado
f7
y./t2/f8
son enlaces duros def6
.Para encontrar enlaces suaves y duros podemos usar:
Para encontrar solo hardlink podemos usar:
Dado que los enlaces duros se pueden crear en el mismo sistema de archivos, podemos buscar todos los enlaces duros sin
-L
usar la opción (con-xdev
opción) en el mismo sistema de archivos / punto de montaje. Guarda la búsqueda innecesaria en diferentes puntos de montaje.Por lo tanto, buscar en el enlace duro es algo más rápido que buscar en los enlaces suaves (rectifique si estoy equivocado o no claro).
fuente
Los enlaces simbólicos dan otro nombre a un archivo, de manera similar a los enlaces duros. Pero un archivo se puede eliminar incluso si quedan enlaces simbólicos restantes.
fuente
Mis dos centavos en uso:
Los enlaces blandos pueden usarse para acortar nombres de rutas largas, es decir:
Los cambios realizados a
/short/file.txt
se aplicarán en el archivo original.Los enlaces duros se pueden usar para mover archivos grandes:
ln /myapp/dev/application.bin /myapp/prd/application.bin
Copia instantánea a una carpeta diferente, y el archivo original (activado
/myapp/dev
) puede moverse o eliminarse, sin tocar el archivo/myapp/prd
fuente
Acabo de encontrar una manera fácil de entender los enlaces duros en un escenario común, la instalación de software.
Un día descargué un software a la carpeta
Downloads
para instalarlo. Después de que lo hicesudo make install
, algunos ejecutables fueroncp
editados a la carpeta bin local. Aquí,cp
crea un enlace duro . Estaba contento con el software, pero pronto me di cuenta de queDownloads
no es un buen lugar a largo plazo. Así quemv
edité la carpeta del software alsource
directorio. Bueno, todavía puedo ejecutar el software como antes sin preocuparme por ningún enlace de destino, como en Windows. Esto significa que el enlace duro encuentra el inodo directamente y otros archivos.fuente
EN esta respuesta cuando digo un archivo me refiero a la ubicación en la memoria
Todos los datos que se guardan se almacenan en la memoria utilizando una estructura de datos llamada inodes. Cada inodo tiene un número de número. El número de inodo se utiliza para acceder al inodo. Todos los enlaces duros a un archivo pueden tener diferentes nombres pero compartir el mismo número de inodo. Como todos los enlaces duros tienen el mismo número de entrada (que tienen acceso al mismo inodo), todos apuntan a la misma memoria física.
Un enlace simbólico es un tipo especial de archivo. Dado que también es un archivo, tendrá un nombre de archivo y un número de inodo. Como se dijo anteriormente, el número de inodo accede a un inodo que apunta a datos. Ahora, lo que hace que un enlace simbólico sea especial es que los inodenumbers en enlaces simbólicos acceden a esos inodes que apuntan a "una ruta" a otro archivo. Más específicamente, el número de inodo en el enlace simbólico accede a esos inodes que apuntan a otro enlace duro.
cuando nos estamos moviendo, copiando, eliminando un archivo en la GUI, estamos jugando con los enlaces duros del archivo, no con la memoria física. Cuando eliminamos un archivo, estamos eliminando el enlace rígido del archivo. no estamos borrando la memoria física. Si se eliminan todos los enlaces duros al archivo, entonces no será posible acceder a los datos almacenados, aunque todavía puede estar presente en la memoria
fuente