2010-05-11 13 views
8

Solo quería aclarar si un enlace difícil/simbólico es realmente un archivo creado?Enlace duro y enlaces simbólicos en Unix

que ejecutó el comando:

ln source hardlink 
ln -s source softlink 

- El comando ls muestra este 2 enlaces como un archivo.

Así que mi pregunta es, ¿ln/ln -s realmente crea un archivo?

Saludos, darkie15

Respuesta

13

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 :-)

+0

'rm \ '? No veo cómo el retroceso (^?) Lo haría más complicado :) – Unode

3

Ninguno de los dos crea un archivo.

Un archivo en el disco se identifica con un "inode". Los directorios asignan nombres de archivos a inodos. Un enlace fijo significa "crear un nuevo nombre de archivo en este directorio que apunta al mismo inodo que el archivo que yo nombro".

Un enlace simbólico significa "crear un nuevo nombre de archivo en este directorio que apunte al inodo al que apuntan estos otros archivos".

Como mangoman señala en un comentario, un enlace simbólico crea un archivo con el nombre del enlace objetivo, pero no debe prestarle atención. Es un archivo especial que no es de su incumbencia.

+2

en caso de enlace suave, se crea un archivo que contiene la ruta absoluta al destino. –

Cuestiones relacionadas