Comprender los enlaces físicos

Comprender los enlaces físicos

Creé un archivo en el directorio de inicio.

touch demo
echo "This is demo" > demo

Ahora creé un enlace físico en /tmp

ln /home/leo/demo demoLink

Ahora, al verificar el inodo usando

ls -ltri demoLink

Muestra el mismo número de inodo que el archivo original. Puedo digerir eso. ¡Pero el tipo de archivo del Hard Link es Regular! ¿Cómo es un archivo normal? ¿En qué se diferencia del archivo original? Leí que un archivo es una masa de datos anónima. Entonces, ¿estos dos archivos apuntan a los mismos datos? ¿El tamaño del archivo tanto del enlace físico como del archivo original es el mismo?

Respuesta1

El enlace físico no es en realidad un "enlace". El primer, segundo, tercer y enésimo enlace físico al mismo inodo de archivo son todos iguales entre sí. No hay diferencia entre una "entrada original" y un "enlace físico".

Digamos que si uno crea el archivo1 y luego agrega el enlace físico archivo2 al mismo inodo del archivo, no existe ningún método para descubrir qué enlace al inodo dado es original.

Es decir

cryo@CryoNest:~ $ touch file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file1

cryo@CryoNest:~ $ ln file1 file2

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ rm file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ ln file2 file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

Como puede ver, el número de inodo (9505656) y todos los atributos almacenados en el inodo son iguales para todos los enlaces físicos. Incluyendo tamaño, fecha, modo, etc.

Preste atención al tercer campo, se trata de una serie de enlaces al inodo. Este campo se puede utilizar para comprender situaciones "místicas" cuando uno "borra" un archivo (en realidad, una de las entradas del directorio de enlaces físicos) pero el uso del espacio no cambia :)

Si uno quiere encontrar todos los enlaces físicos del archivo dado, la herramienta "buscar" tiene la opción "-inum"

cryo@CryoNest:~ $ ln file1 tmp/file3

cryo@CryoNest:~ $ find . -maxdepth 2 -inum 9505656 -ls
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./tmp/file3
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./file1

información relacionada