Un enlace duro se define como un puntero a un inodo. Un enlace suave , también conocido como enlace simbólico , se define como un archivo independiente que apunta a otro enlace sin las restricciones de los enlaces duros.
¿Cuál es la diferencia entre un archivo y un enlace duro? Un enlace duro apunta a un inodo, entonces, ¿qué es un archivo? La entrada de inodo en sí? ¿O un inodo con un enlace duro?
Digamos que creo un archivo con toque. Luego se crea una entrada de inodo en la tabla de inodo . Y creo un enlace duro, que tiene el mismo número de inodo que el archivo. Entonces, ¿creé un nuevo archivo? ¿O el archivo se define como un inodo?
files
filesystems
symlink
hard-link
Levent Divilioglu
fuente
fuente
Respuestas:
La respuesta muy corta es:
Los archivos y directorios Unix funcionan exactamente como los archivos y directorios en el mundo real (y no como las carpetas en el mundo real); Los sistemas de archivos Unix están (conceptualmente) estructurados de esta manera:
Teniendo en cuenta esta metáfora, y específicamente teniendo en cuenta que los directorios de Unix funcionan como directorios del mundo real y no como carpetas del mundo real, explican muchas de las "rarezas" que los recién llegados suelen encontrar, como: ¿por qué puedo eliminar un archivo que no hago? No tiene acceso de escritura? Bueno, por un lado, no está eliminando el archivo, está eliminando uno de los muchos nombres posibles para el archivo, y para hacerlo, solo necesita acceso de escritura al directorio, no al archivo. Como en el mundo real.
O, ¿por qué puedo tener enlaces simbólicos colgantes? Bueno, el enlace simbólico simplemente contiene un nombre de ruta. No hay nada que diga que en realidad tiene que haber un archivo con ese nombre.
La diferencia entre un archivo y un enlace duro es la misma que la diferencia entre usted y la línea con su nombre en la guía telefónica.
Un archivo es un dato anónimo. Eso es. Un archivo no es un inodo, un archivo tiene un inodo, al igual que usted no es un Número de Seguro Social, tiene un SSN.
Un enlace duro es un nombre para un archivo. Un archivo puede tener muchos nombres.
Sí.
No. Un enlace duro no tiene un número de inodo, ya que no es un archivo. Solo los archivos tienen números de inodo.
El enlace fijo asocia un nombre con un número de inodo.
Sí.
No. El archivo tiene un inodo, no es un inodo.
fuente
Un enlace duro es una entrada de directorio. Un archivo puede tener múltiples entradas de directorio, si está presente bajo diferentes nombres o en diferentes directorios. Una entrada de directorio se denomina "enlace duro" cuando se relaciona con otras entradas de directorio para el mismo archivo.
El inodo contiene los metadatos del archivo además de su nombre y contenido (ubicación de los contenidos, permisos, marcas de tiempo, etc.). Hay un inodo por archivo. (No todos los sistemas de archivos colocan los metadatos en un espacio del disco claramente identificable al que podría llamar "inodo", pero es una arquitectura común). Una entrada de directorio vincula un nombre a un inodo. Es posible que más de una entrada de directorio se vincule al mismo inodo, de ahí el término "enlace". Dicho enlace se llama "enlace duro" por oposición a "enlaces blandos" o "enlaces simbólicos" que no dicen "para este nombre, use este inodo" sino "para este nombre, busque ese otro nombre".
Piense en los archivos como habitaciones y entradas de directorio como puertas. "Abrir el archivo
/foo/bar
" significa "ir al corredor/foo
e ir a la habitaciónbar
". "Ir a la habitaciónbar
" realmente significa "abrir la puerta marcadabar
y entrar en la habitación", pero "ir a la habitaciónbar
" es una manera sencilla de decir lo mismo de una manera más corta. Es posible tener más de una puerta que conduzca a la misma habitación.Cuando crea un enlace rígido a un archivo existente (
ln existing new
), está creando un segundo enlace al mismo archivo, es decir, está creando una nueva entrada de directorio que vincula al archivo ya existente. Después de la creación, las dos entradas de directorio tienen el mismo estado: no hay una que sea "primaria" y una que sea "secundaria", son solo dos enlaces al mismo archivo.También puede eliminar todos los enlaces a un archivo sin eliminar el archivo en sí. Esto sucede si elimina un archivo (es decir, elimina todas sus entradas de directorio) mientras un programa todavía tiene el archivo abierto. El archivo permanece en el sistema de archivos, solo se elimina cuando el último proceso que tenía abierto el archivo lo cierra. En la metáfora de habitaciones y puertas, una habitación que no tiene puertas todavía ocupa espacio.
fuente
Además de todas las otras respuestas, quiero señalar las siguientes propiedades importantes:
Un softlink es una referencia verdadera, es decir, es un archivo pequeño que contiene un nombre de ruta. La resolución de un enlace suave ocurre de manera transparente para la aplicación: si un proceso abre un archivo, digamos
/this/path/here
cuál es un enlace simbólico que apunta,/that/other/path
entonces el sistema/that/other/path
operativo realiza todo el manejo de la apertura . Además, si/that/other/path
resulta ser un enlace simbólico en sí mismo, el SO también se ocupa de esto. De hecho, el sistema operativo sigue la cadena de enlaces simbólicos hasta que encuentra algo más (por ejemplo, un archivo normal) o hasta que alcanzaSYMLOOP_MAX
(veasysconf(3)
) muchas entradas, en cuyo caso el sistema operativo (más precisamente: la llamada al sistema correspondiente) devuelve un error y estableceerrno
aELOOP
. Por lo tanto, una referencia circular comoxyz -> xyz
no detendrá el proceso. (Para sistemas Linux, verpath_resolution(7)
detalles completos).Tenga en cuenta que un proceso puede verificar si un nombre de ruta es un enlace simbólico o no mediante el uso de
lstat(2)
y puede modificar sus atributos de archivo (almacenados en la tabla de inodo) a través delchown(2)
y otros (consultesymlink(7)
la historia completa).Ahora, en términos de permiso, notará que los enlaces simbólicos siempre tienen permisos 777 (
rwxrwxrwx
en notación simbólica). Esto se debe al hecho de que, de todos modos, se pueden omitir otros permisos accediendo al archivo real. Por el contrario, 777 para un enlace simbólico no hace que el archivo con enlace simbólico sea accesible si no estaba accesible en primer lugar. Por ejemplo, un enlace simbólico con permisos 777 que apunta a un archivo con permisos 640 hace que el archivo no sea accesible para "otros" (el público en general). En otras palabras, un archivoxyz
es accesible a través de un enlace simbólico si y solo si es directamente accesible, es decir, sin direccionamiento indirecto. Por lo tanto, los permisos del enlace simbólico no tienen ningún efecto de seguridad.Una de las principales diferencias visibles entre los enlaces duros y los enlaces simbólicos (también conocidos como enlaces blandos) es que los enlaces simbólicos funcionan en todos los sistemas de archivos, mientras que los enlaces duros están confinados a un solo sistema de archivos. Es decir, un archivo en la partición A se puede vincular simbólicamente desde la partición B, pero no se puede vincular desde allí. Esto queda claro por el hecho de que un enlace duro es en realidad una entrada en un directorio, que consiste en un nombre de archivo y un número de inodo, y que los números de inodo son únicos solo por sistema de archivos.
El término enlace duro es en realidad algo engañoso. Mientras que para los enlaces simbólicos, el origen y el destino son claramente distinguibles (el enlace simbólico tiene su propia entrada en la tabla de inodo), esto no es cierto para los enlaces duros. Si crea un enlace duro para un archivo, la entrada original y el enlace duro no se pueden distinguir en términos de lo que estaba allí primero. (Dado que se refieren al mismo inodo, comparten sus atributos de archivo como propietario, permisos, marcas de tiempo, etc.) Esto lleva a la afirmación de que cada entrada de directorio es en realidad un enlace rígido, y que vincular un archivo solo significa crear un segundo ( o tercero, o cuarto ...) enlace duro. De hecho, cada inodo almacena un contador para el número de enlaces duros a ese inodo.
Finalmente, tenga en cuenta que los usuarios comunes pueden no enlazar directorios. Esto se debe a que esto debe hacerse con la mayor precaución: un usuario incauto puede introducir ciclos en el árbol de archivos, por lo demás estrictamente jerárquico, que todas las herramientas habituales (como
fsck
) y el sistema operativo en sí no están preparados para manejar.fuente
Una respuesta simple:
Una entrada de archivo en un directorio es un enlace duro a ese archivo.
Algunos archivos tienen más de uno de estos enlaces duros, ya que se permiten varios enlaces duros al mismo archivo.
fuente
En los primeros días de Unix, los archivos internos eran inodos en una unidad de disco particular. Los nombres de los archivos eran una forma más amigable de acceder a ellos.
Un enlace duro estaba asignando más de un nombre de archivo a un inodo. Podrías crear un archivo, vincularlo con un segundo nombre y borrar el primer nombre y no se podía distinguir de haber creado el archivo con el segundo nombre en primer lugar.
De hecho, la llamada al sistema que un programa necesita usar para eliminar un archivo es 'unlink (2)'. Los datos no desaparecen hasta que el apellido se desvincula del inodo. (y el inodo no está abierto por un proceso en alguna parte)
Esto es lo que facilita que Linux actualice las cosas mientras todavía ejecuta programas. Si un proceso ejecuta un ejecutable y se produce una actualización, el nombre del programa se reutiliza, pero el inodo que contiene la versión anterior todavía existe para que pueda continuar ejecutándose. Y cuando se detiene el último proceso que ejecuta esa versión anterior, se libera el almacenamiento de la versión anterior.
Los enlaces blandos surgieron porque cuando tienes un árbol de archivos unitario, con múltiples puntos de montaje, no puedes hacer un enlace duro de un disco duro a un inodo en otro. Entonces se inventaron los enlaces blandos.
fuente
early days
¿Por qué es diferente ahora? su respuesta no parece reflejar esa opinión de todos modos?Un archivo son los datos escritos en el disco. Estos datos están referenciados por su inodo, que contiene metadatos sobre el archivo que le dice al sistema qué bloques en el disco utiliza este archivo, entre otras cosas. Un enlace fijo apunta al número de inodo de este archivo.
Entonces, técnicamente, sí, está creando un nuevo archivo, pero todo lo que contiene este archivo es el número de inodo para el archivo al que hace referencia y su nombre. Es mejor pensar que se trata de un puntero al inodo o un puntero al archivo.
fuente
Archivo es un concepto ampliamente utilizado sobre entradas en un sistema de archivos.
Por lo general, incluye Directorio , Archivo normal (enlace duro) y Enlace simbólico (enlace suave). E incluso puede incluir dispositivo y zócalo.
Dado que incluso el enlace simbólico generalmente se cuenta como un archivo, un enlace duro también se puede contar como un archivo. Puede decir que es un archivo independientemente de si se trata de un enlace rígido o suave.
El concepto es un poco ambiguo, por lo que también está bien decir que una entrada de inodo es un archivo, aunque es posible que desee hacer referencia a los datos.
Si es un programador de C ++ o Java, es posible que desee leer sobre std :: filesystem :: file_type , java.io.File y java.nio.file.Files .
Los detalles sobre las diferencias entre el enlace duro y el enlace blando se pueden encontrar en el enlace en el comentario infijo.
fuente
La diferencia entre un "archivo" con un nombre de pila y un "enlace duro" es uno de historia. Se crea un archivo (normal) con un nombre dado usando una llamada al sistema creat, se crea un enlace duro usando una llamada al sistema de enlace.
Sin embargo, mientras los humanos hablan y recuerdan el historial de entradas de directorio y los llaman archivos y enlaces duros en consecuencia, el sistema de archivos no lo hace. Las entradas de directorio de "archivo original" y "enlace duro" son totalmente indistinguibles en calidad: ambas establecen una referencia entre un nombre de archivo y el inodo de un archivo, y una vez que desaparece la última referencia (las referencias no son solo nombres de archivo para un archivo pero también descriptores de archivo con los que se puede acceder a un archivo abierto), el archivo para el inodo sin referencia se considera eliminado y se recuperan el inodo y el espacio de archivo asociado.
Entonces, cuando los humanos contrastan los "archivos" y los "enlaces duros", el primero surgió con un "conteo de enlaces de 1", y todos los demás surgieron con un conteo de enlaces más grande. La diferencia es académica, y de hecho cambiar el nombre de un archivo a la vez consistió en crear un enlace rígido para el nombre de destino y luego eliminar el enlace para el nombre de origen. Hoy en día, generalmente se usa una sola llamada al sistema que lo hace atómicamente.
fuente