Sí y no :-)
En UNIX, el contenido de un archivo son distintas de las entradas de directorio para ese archivo. Puede hacer que múltiples entradas de directorio apunten a los mismos contenidos (busque inode para obtener una descripción de cómo funciona) y aquí está el truco:
Todas esas entradas de directorio son iguales. Aunque se haya creado primero, no hay nada especial. Si lo elimina, el contenido no desaparecerá, solo la entrada del directorio. El contenido desaparecerá una vez que el inodo tenga cero entradas de directorio apuntando a él (y todos los procesos cierran el archivo; he sido mordido antes al tratar de borrar el espacio en disco eliminando archivos de registro solo para encontrar eso, porque un proceso todavía tiene el archivo abierto, el contenido del archivo no se recupera aunque ninguna entrada de directorio los señale).
Eso es para enlaces duros.
Los enlaces suaves son un poco más complicados. Crean un tipo de "archivo" (un inodo separado) que contiene la ruta al archivo de destino. Y esos enlaces son no iguales. Eliminar el original te dejará con un enlace suave que no apunta a ninguna parte.
Como los inodos son únicos en un sistema de archivos dado, los enlaces duros no pueden referirse a datos en un sistema de archivos diferente.
Los enlaces de software no tienen esa limitación ya que almacenan la ruta al archivo de destino, no su inode.
La siguiente transcripción puede ayudar:
$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
hello
$ cat f2
hello
$ cat f3
hello
$ rm f1
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
cat: f1: No such file or directory
$ cat f2
hello
$ cat f3
cat: f3: No such file or directory
he utilizado sólo los últimos cuatro dígitos del número de i-nodo para mantener la entrada corta (y no golpear con números de inodo como 43910096366994672
) pero se puede ver que f1
y f2
tienen exactamente el mismo inodo mientras que f3
es diferente.También puede ver que el contenido del archivo creado originalmente como f1
sobrevive a su eliminación porque f2
todavía hace referencia a él.
Sin embargo, como f3
hace referencia al nombre en lugar de su inodo, se produce un error al intentar usarlo.
Aparte: Tienes que encanta cuando UNIX juguetes con usted como esta:
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
casi tan divertido como crear un archivo llamado espacioretrocesox y luego viendo a alguien tratar de eliminarlo :-)
'rm \'? No veo cómo el retroceso (^?) Lo haría más complicado :) –
Unode