Soft y Hard Links

Los archivos y directorios estan formados basicamente por tres cosas:

  1. datos. En el caso de ser un directorio, en realidad es un archivo especial con un listado de nombres a mas archivos y directorios.
  2. un inode que identifica a esos datos. Es un numero unico, como si fuera el numero IP en una red.
  3. y finalmente el nombre del archivo o directorio asociado al inode.

El punto 3 es interesante porque es posible crear mas nombres que esten asociados a un mismo numero inode que obviamente apunta a los mismos datos.
A eso se lo conoce como Hard Link.
Tiene como gran ventaja que, si se borra el archivo original, sus datos aun se van a conservar porque siguen asociados a otro nombre de archivo que apunta a su inode.
Por desgracia esto solo funciona con archivos y no con directorios.

Pero resulta que existe otro tipo de link conocido como Symbolic o Soft Link.
En este caso es un nombre asociado a una ruta completa de otro archivo o directorio y no al inode de los datos.
Este tipo de link es similar a un archivo de acceso directo de Windows.
Es decir, si borras el archivo original, el link no va a funcionar.

Para crear links se utiliza el programa ln.
para hard: ln original destino
para soft: ln -s original destino

Para que lo entiendas mejor te doy un ejemplo.
Empiezo creando un archivo de texto llamado "original.txt"

luciano@pc-luciano ~/temp $ echo Hola > original.txt
luciano@pc-luciano ~/temp $ ls -li
total 4

3025 -rw-r--r-- 1 luciano luciano 5 2011-11-14 00:40 original.txt

 

Tenemos un nuevo archivo cuyo inode es 3025
Ahora voy a crear dos links, uno hard y otro soft

luciano@pc-luciano ~/temp $ ln original.txt hard.txt
luciano@pc-luciano ~/temp $ ln -s original.txt soft.txt
luciano@pc-luciano ~/temp $ ls -li
total 8
 
3025 -rw-r--r-- 2 luciano luciano  5 2011-11-14 00:40 original.txt
 
3025 -rw-r--r-- 2 luciano luciano  5 2011-11-14 00:40 hard.txt
41148 lrwxrwxrwx 1 luciano luciano 12 2011-11-14 00:41 soft.txt -> original.txt

 

Como veras "hard.txt" y "original.txt" comparten el mismo inode. Ambos apuntan a los mismos datos.
En cambio "soft.txt" tiene otro inode pero apunta a la ruta con el archivo original.txt
Si muestro el contenido de los tres archivos voy a ver lo mismo:

luciano@pc-luciano ~/temp $ cat original.txt
Hola
luciano@pc-luciano ~/temp $ cat hard.txt
Hola
luciano@pc-luciano ~/temp $ cat soft.txt
Hola

 

Ahora voy a eliminar el archivo "original.txt"
"hard.txt" aun sigue funcionando porque sigue asociado al mismo inode que apunta a los datos originales.
Pero no sucede lo mismo con "soft.txt" porque apunta al nombre "original.txt" que ya no existe.

luciano@pc-luciano ~/temp $ rm original.txt
luciano@pc-luciano ~/temp $ cat hard.txt
Hola
luciano@pc-luciano ~/temp $ cat soft.txt
cat: soft.txt: No such file or directory

 

Finalmente genero de nuevo el archivo "original.txt" (con otro contenido a modo de ejemplo)

luciano@pc-luciano ~/temp $ echo CHAU > original.txt
luciano@pc-luciano ~/temp $ ls -li
total 8
41515 -rw-r--r-- 1 luciano luciano  5 2011-11-14 00:44 original.txt
 3025 -rw-r--r-- 1 luciano luciano  5 2011-11-14 00:40 hard.txt
41148 lrwxrwxrwx 1 luciano luciano 12 2011-11-14 00:41 soft.txt -> original.txt
luciano@pc-luciano ~/temp $ cat original.txt
CHAU
luciano@pc-luciano ~/temp $ cat hard.txt
Hola
luciano@pc-luciano ~/temp $ cat soft.txt
CHAU

Como se ve "soft.txt" funciona de nuevo y "hard.txt" sigue apuntando al contenido anterior de "original.txt".

 

Comentarios