[LUG.ro] ln

Emiliano Gavilán emilianogavilan en gmail.com
Jue Ago 27 12:14:47 ART 2009


On Wed, Aug 26, 2009 at 09:34:07PM -0300, Guillermo Ibanez wrote:
> Estimados, les comento un problema que tuve con el comando ln, quizás  
> me puedan echar algunas luces.
> 
> Estoy trabajando con unos archivos c++ y, dado que soy muy  
> desordenado, he decidido valerme de ln para que el mismo archivo sea  
> accesible desde distintos directorios (se que ese no es el camino  
> indicado, pero no importa, no es el punto del mail).
> 
> Básicamente, a un mismo archivo le hago links duros para evitar la  
> multiplicidad de versiones en distintos proyectos.
> 
> Daba la casualidad que  estaba editando un archivo en un directorio y  
> compilándolo (por desorden personal) en otro, pero al corregir los  
> errores con el editor de textos seguía dándome esos mismos errores en  
> el compilador.
> 
> Me arriesgué, cerré el que estaba editando y lo abrí el del directorio  
> en que estaba compilando, encontrando que en efecto dicho archivo no  
> tenía realizados los cambios antes hechos.
> 
> Yo entendìa que cuando, por ejemplo uno hace:
> 
> ln archivoA  archivoB
> 
> tanto archivoA y archivoB eran dos entradas, de la misma jerarquía que  
> apuntaban a un mismo archivo físico (al que originalmente apuntaba  
> archivoA), pero después de esa experiencia comienzo a dudar.....

Es fácil de comprobar que es así usando la opción -i de ls:

emiliano en merlot:~$ touch archivoA
emiliano en merlot:~$ ls -i archivoA 
318912 archivoA
emiliano en merlot:~$ ln -s archivoA archivoB 
emiliano en merlot:~$ ls -i archivo* 
318912 archivoA  318923 archivoB@
emiliano en merlot:~$ ln -f archivoA archivoB
emiliano en merlot:~$ ls -i archivo*
318912 archivoA  318912 archivoB

Como se vé, un link simbólico (-s) crea un archivo diferente 
(diferente inodo) en el filesystem. Sin embargo un link duro
apunta al mismo inodo, por lo tanto al mismo contenido en disco.
Más pistas:

emiliano en merlot:~$ ls -l > archivoA
emiliano en merlot:~$ md5sum archivoA
49091ca775856337b9138aa37e297a83  archivoA
emiliano en merlot:~$ md5sum archivoB
49091ca775856337b9138aa37e297a83  archivoB
emiliano en merlot:~$ ls -l >> archivoB
emiliano en merlot:~$ md5sum archivoB
567061a5c7f087d5d743b3dfb7360e06  archivoB
emiliano en merlot:~$ md5sum archivoA
567061a5c7f087d5d743b3dfb7360e06  archivoA

por lo que archivoA y archivoB tienen siempre el mismo contenido.

Saludos

Emiliano


Más información sobre la lista de distribución Lugro