Los enlaces duros del directorio rompen el sistema de archivos de múltiples maneras
Te permiten crear bucles
Un enlace rígido a un directorio puede vincularse a un padre de sí mismo, lo que crea un bucle del sistema de archivos. Por ejemplo, estos comandos podrían crear un bucle con el enlace posterior l
:
mkdir -p /tmp/a/b
cd /tmp/a/b
ln -d /tmp/a l
Un sistema de archivos con un bucle de directorio tiene una profundidad infinita:
cd /tmp/a/b/l/b/l/b/l/b/l/b
Evitar un bucle infinito al atravesar dicha estructura de directorios es algo difícil (aunque, por ejemplo, POSIX requiere find
evitar esto).
Un sistema de archivos con este tipo de enlace duro ya no es un árbol, porque un árbol no debe, por definición, contener un bucle.
Rompen la ambigüedad de los directorios principales
Con un bucle de sistema de archivos, existen varios directorios principales:
cd /tmp/a/b
cd /tmp/a/b/l/b
En el primer caso, /tmp/a
es el directorio padre de /tmp/a/b
.
En el segundo caso, /tmp/a/b/l
es el directorio padre de /tmp/a/b/l/b
, que es el mismo que /tmp/a/b
.
Entonces tiene dos directorios principales.
Multiplican archivos
Los archivos se identifican por rutas, después de resolver los enlaces simbólicos. Entonces
/tmp/a/b/foo.txt
/tmp/a/b/l/b/foo.txt
Son archivos diferentes.
Hay infinitos caminos más del archivo. Son iguales en términos de su número de inodo, por supuesto. Pero si no espera explícitamente bucles, no hay razón para verificarlo.
Un directorio hardlink también puede apuntar a un directorio secundario, o un directorio que no es ni secundario ni primario de ninguna profundidad. En este caso, un archivo que es hijo del enlace se replicaría en dos archivos, identificados por dos rutas.
Su ejemplo
$ ln /Some/Direcoty /home/nischay/Hard-Directory
$ echo foo > /home/nischay/Hard-Directory/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ echo bar >> /Some/Direcoty/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ cat /Some/Direcoty/foobar.txt
foo
bar
¿Cómo pueden funcionar los enlaces a directorios?
Una ruta que puede contener enlaces suaves e incluso bucles de directorio vinculados a menudo se usa solo para identificar y abrir un archivo. Se puede utilizar como una ruta lineal normal.
Pero hay otras situaciones, cuando se utilizan rutas para comparar archivos. En este caso, los enlaces simbólicos en la ruta se pueden resolver primero, convirtiéndolo en una representación mínima y comúnmente acordada, creando una ruta canónica :
Esto es posible, porque los enlaces blandos se pueden expandir a rutas sin el enlace. Después de hacer eso con todos los enlaces blandos en una ruta, la ruta restante es parte de un árbol, donde una ruta siempre es inequívoca.
El comando readlink
puede resolver una ruta a su ruta canónica:
$ readlink -f /some/symlinked/path
Los enlaces blandos son diferentes de los que usa el sistema de archivos
Un enlace suave no puede causar todos los problemas porque es diferente de los enlaces dentro del sistema de archivos. Puede distinguirse de los enlaces duros y resolverse en una ruta sin enlaces simbólicos si es necesario.
En cierto sentido, agregar enlaces simbólicos no altera la estructura básica del sistema de archivos, lo mantiene, pero agrega más estructura como una capa de aplicación.
De man readlink
:
NAME
readlink - print resolved symbolic links or canonical
file names
SYNOPSIS
readlink [OPTION]... FILE...
DESCRIPTION
Print value of a symbolic link or canonical file name
-f, --canonicalize
canonicalize by following every symlink in
every component of the given name recursively;
all but the last component must exist
[ ... ]