Ten en cuenta que en las ciencias un error casi siempere suele tener diversas resoluciones, pero te mostramos lo más óptimo y eficiente.
Solución:
“Una imagen vale mas que mil palabras.”
Y, “Un ejemplo vale más que cien párrafos…”
Crea dos archivos:
$ touch blah1
$ touch blah2
Introduzca algunos datos en ellos:
$ echo "Cat" > blah1
$ echo "Dog" > blah2
Y como era de esperar:
$cat blah1; cat blah2
Cat
Dog
Vamos a crear enlaces duros y suaves:
$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft
Veamos lo que acaba de pasar:
$ ls -l
blah1
blah1-hard
blah2
blah2-soft -> blah2
Cambiar el nombre de blah1 no importa:
$ mv blah1 blah1-new
$ cat blah1-hard
Cat
blah1-hard apunta al inodo, el contenido del archivo; eso no se modificó.
$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft
cat: blah2-soft: No such file or directory
No se pudo encontrar el contenido del archivo porque el enlace suave apunta al nombre, que se cambió, y no al contenido.
De manera similar, si se elimina blah1, blah1-hard aún conserva el contenido; si se elimina blah2, blah2-soft es solo un enlace a un archivo que no existe.
fuente: ¡copiándolo descaradamente de StackOverflow!
Un enlace fijo no es un puntero a un archivo, es una entrada de directorio (un archivo) que apunta al mismo inodo. Incluso si cambia el nombre del otro archivo, un enlace fijo seguirá apuntando al archivo. Si reemplaza el otro archivo con una nueva versión (copiándolo), un enlace fijo no apuntará al nuevo archivo. Solo puede tener enlaces duros dentro del mismo sistema de archivos. Con los enlaces duros, no tiene el concepto de los archivos y enlaces originales, todos son iguales (piense en ello como una referencia a un objeto). Es un concepto de muy bajo nivel.
Por otro lado, un enlace simbólico en realidad apunta a otra ruta (un nombre de archivo); resuelve el nombre del archivo cada vez que accede a él a través del enlace simbólico. Si mueve el archivo, el enlace simbólico no seguirá. Si reemplaza el archivo con otro, manteniendo el nombre, el enlace simbólico apuntará al nuevo archivo. Los enlaces simbólicos pueden abarcar sistemas de archivos. Con los enlaces simbólicos, tiene una distinción muy clara entre el archivo real y el enlace simbólico, que no almacena información junto a la ruta sobre el archivo al que apunta.
Ambos son punteros a archivos; la diferencia es la clase de puntero Un enlace simbólico apunta a otro archivo por nombre. Tiene un bit de modo especial que lo identifica como un enlace simbólico y su contenido es el nombre del archivo real. Debido a que solo contiene un nombre, ese nombre en realidad no tiene que existir, o puede existir en un sistema de archivos diferente. Si reemplaza el archivo nombrado (cambia su contenido sin afectar su nombre), entonces el enlace aún contiene el mismo nombre, y ahora apunta al nuevo archivo. Puede identificar fácilmente un enlace simbólico y ver el nombre del archivo al que apunta.
Un vínculo fijo apunta al archivo por número de inodo. Como tal, los enlaces duros no son diferentes al primer nombre de un archivo. No hay un nombre “real” frente a un nombre de enlace fijo; todos los enlaces duros son nombres igualmente válidos para el archivo. Debido a esto, el archivo al que vincula debe existir y estar en el mismo sistema de archivos en el que intenta crear el vínculo. Si elimina el nombre original, el vínculo físico seguirá apuntando al mismo archivo. Debido a que todos los enlaces físicos son nombres igualmente válidos para el archivo, no puede mirar uno y ver los otros nombres para el archivo; para encontrar esto, debe mirar cada archivo y comparar su número de inodo para encontrar los otros nombres que tienen el mismo número de inodo.
Puede saber cuántos nombres tiene un archivo a partir de la salida de ls -l
. El primer número después del modo de archivo es el recuento de enlaces. Un archivo con más de 1 enlace tiene otros nombres en alguna parte y, a la inversa, un archivo con un número de enlaces de solo 1 no tiene (otros) enlaces duros.