¿Qué sucede cuando eliminas un enlace duro?

Respuestas:

110

En Unix, todos los archivos normales son enlaces duros. Los enlaces duros en un sistema de archivos Unix (y la mayoría (¿todos?)) Son referencias a lo que se llama un inode. El inodetiene un contador de referencia, cuando se tiene un "enlace" para el archivo (que es el modus operandi normal) el contador es 1. Cuando se crea una segunda, tercera, cuarta, etc. enlace, el contador se incrementa (aumento) de cada tiempo por uno. Cuando elimina ( rm) un enlace, el contador se reduce (reduce) en uno. Si el contador de enlaces llega a 0, el sistema de archivos elimina inodey marca el espacio como disponible para su uso.

En resumen, mientras no elimine el último enlace, el archivo permanecerá.

Edit:El archivo permanecerá incluso si se elimina el último enlace . Esta es una de las formas de garantizar que la seguridad de los datos contenidos en un archivo no sea accesible para ningún otro proceso. La eliminación completa de los datos del sistema de archivos solo se realiza si los datos tienen 0 enlaces a ella como se indica en sus metadatos y no está siendo utilizada por ningún proceso.

Este en mi humilde opinión es, con mucho, la forma más fácil de entender los enlaces duros (y su diferencia con los enlaces blandos).

xenoterracida
fuente
77
Además, la llamada al sistema para eliminar un archivo es unlink().
Mouviciel
1
Esto no cubre la situación en la que el archivo está abierto cuando se edita el último enlace unlink.
cjm
55
@OrangeDog, no exactamente, porque los enlaces duros no pueden cruzar sistemas de archivos, y /proces un sistema de archivos separado (virtual).
cjm
2
/ proc también refleja las estructuras de datos internas del kernel (es una forma para que el kernel de Linux exponga ciertos datos en un formato razonablemente bien definido sin dar acceso directo a la memoria del kernel). Por lo tanto, es más exacto decir que el kernel realiza un seguimiento del hecho de que el archivo está abierto y expone esa información a través de procfs.
un CVn
1
Y sí, llamar unlink()para eliminar un archivo me dejó perplejo cuando comencé a jugar con la programación en C en MS-DOS en algún momento de la primera mitad de la década de 1990. :)
un CVn
12

La prueba fue más fácil de lo que pensaba: creé un archivo de texto, luego lo vinculé por hardware. Al eliminar el vínculo físico, no se elimina el archivo al que está vinculado y el archivo al que se vinculó permanece donde está.

trusktr
fuente
1
esto es cierto, pero no es una imagen completa
xenoterracide
3
La clave es que crear el archivo de texto también agrega un enlace duro. En los sistemas de archivos * NIX, todos los archivos (inodes) deben estar vinculados al menos una vez a la estructura del directorio.
Deja de dañar a Monica el
0

Todos los archivos en su disco son en realidad punteros a los datos reales en su disco. ingrese la descripción de la imagen aquí

cuando crea un enlace rígido para ese archivo, el archivo editado con enlace rígido apuntará a los mismos datos a los que apuntaba el archivo original.

ingrese la descripción de la imagen aquí

como en este ejemplo, a.txt apuntaba a los datos (bytes) del archivo que está en la unidad, cuando se crea el enlace duro b.txt señalará a lo que a.txt apuntaba.

por lo tanto, eliminar uno de ellos no afectará al otro que están separados el uno del otro.

PERO, cuando elimine ambos, el sistema verá que los datos que están en el disco no tienen ningún archivo que lo señale, por lo que el sistema lo considerará como un espacio libre y lo sobrescribirá cuando lo desee.

ZOLDIK
fuente
2
Creo que es importante aclarar que FILE "A.txt"es idéntico a LINK "B.txt", particularmente como ha llamado a uno FILEy al otro a LINK. El enlace es realmente la flecha negra.
roaima
Sí, pensé que no quedaría claro que b.txt es un archivo vinculado ...
ZOLDIK