Estoy usando Ubuntu 12.04. Cuando intento crear un enlace duro para cualquier directorio, falla. Puedo crear enlaces duros para archivos dentro del límite del sistema de archivos. Sé la razón por la que no podemos crear enlaces duros para archivos más allá del sistema de archivos.
Intenté estos comandos:
$ ln /Some/Direcoty /home/nischay/Hard-Directory
hard link not allowed for directory
$ sudo ln /Some/Direcoty /home/nischay/Hard-Directory
[sudo] password for nischay:
hard link not allowed for directory
Solo quiero saber la razón detrás de esto. ¿Es lo mismo para todas las distribuciones de GNU / Linux y sabores de Unix (BSD, Solaris, HP-UX, IBM AIX) o solo en Ubuntu o Linux?
filesystem
directory
hard-link
Nischay
fuente
fuente
ln -F <src> <dst>
y se puede trabajar. Ciertamente, solía funcionar para el superusuario en versiones anteriores de Unix. ¿Alguien recuerda si eso fue UCB o System V? Sí, podrían pasar cosas malas, pero generalmente no. Según recuerdo,rmdir
sabía que no debía seguir eliminando más allá de un enlace duro. Sin embargo, los usuarios pueden confundirse y eliminar cosas por error.rmdir
manejar enlaces duros de una manera especial? Un enlace duro es solo un enlace normal, pero uno adicional. Ni siquiera es fácil averiguar si existen enlaces extra inusuales sin grabaciones adicionales.rmdir
puede decir si el directorio tiene enlaces desde otros lugares. La eliminación recursivarm -r
, debe codificarse con cuidado, para asegurarse de que actuará correctamente incluso si hay errores como "permiso denegado". Por cierto, UCB = BSD, doh!ln -F
en directorios y lo tengo funcionando. Pero no te atreves a eliminar el directorio después por miedo a corromper el sistema de archivos.Respuestas:
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
:Un sistema de archivos con un bucle de directorio tiene una profundidad infinita:
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:
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
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
¿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: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
:fuente
"En general, no debería usar enlaces duros de todos modos" es demasiado amplio. Debe comprender la diferencia entre enlaces duros y enlaces simbólicos, y usar cada uno según corresponda. Cada uno viene con su propio conjunto de ventajas y desventajas:
Los enlaces simbólicos pueden:
Los enlaces duros pueden:
Los enlaces duros son especialmente útiles para realizar aplicaciones de "copia en escritura". Le permiten mantener una copia de seguridad de la estructura de un directorio, mientras solo usan espacio para los archivos que cambian entre dos versiones.
El comando
cp -al
es especialmente útil a este respecto. Realiza una copia completa de una estructura de directorio, donde todos los archivos están representados por enlaces duros a los archivos originales. Luego puede proceder a actualizar los archivos en la estructura, y solo los archivos que actualice ocuparán espacio adicional. Esto es especialmente útil cuando se mantienen copias de seguridad multigeneracionales.fuente
ln -s "Don't use this directory" README
es legítimo De hecho, si lo piensa, un directorio puede usarse como una base de datos relacional y no contener ningún archivo real.Para su información, puede lograr lo mismo que los enlaces duros para directorios utilizando mount:
Esto es muy peligroso porque la mayoría de las herramientas y programas no serán conscientes del enlace . Una vez hice algo como en el ejemplo anterior y luego procedí a
rm -rf /home/user
. Afortunadamente, no había nada relevante en/var/www
.fuente
mount --bind <src> <dest>
. Use con cuidado para no limpiar elsrc
;)mount: unknown filesystem type 'bind'
mount -o bind src dest
rm -rf
problema. superuser.com/questions/320415/...La razón por la cual no se permiten directorios de enlace rígido es un poco técnica. Esencialmente, rompen la estructura del sistema de archivos . Por lo general, no debe usar enlaces duros de todos modos. Los enlaces simbólicos permiten la mayor parte de la misma funcionalidad sin causar problemas (p
ln -s target link
. Ej .).fuente