2011-10-11 9 views
7

Leí en los libros de texto que UNIX/Linux no permite enlaces duros a directorios, pero sí enlaces blandos? ¿Es porque cuando tenemos ciclos y creamos enlaces físicos, apuntará a algunos valores basura?¿Por qué los enlaces duros no están permitidos en los directorios de UNIX/Linux

Si los ciclos fueron la única razón detrás de no permitir enlaces rígidos, ¿por qué los softlinks están permitidos en los directorios?

+1

Para evitar ciclos. – bmargulies

+0

@bmargulies Entonces, ¿por qué es posible con softlinks – user567879

+0

? Porque el kernel no los sigue en el recorrido fundamental de la jerarquía del directorio. Puede caminar por el árbol, ya que no atraviesa enlaces blandos al caminar por el árbol. – bmargulies

Respuesta

12

Los enlaces duros no están permitidos porque darían lugar a ciclos. Una vez que permite que se formen los ciclos, debe realizar una recolección de elementos no utilizados para detectar cuándo los ciclos de directorios aislados (que ya no se pueden acceder desde la raíz) pueden finalmente eliminarse; esto es extremadamente costoso en el disco.

Los enlaces de software no provocan este problema porque no aumentan el recuento de referencias del directorio de destino; por lo tanto, todavía puede salirse con la cuenta de referencia (con un máximo de una referencia :).

El otro problema es que los programas que atraviesan el sistema de archivos (p. Ej., find) deben evitar ciclos. Ellos podrían hacer esto recordando cada número de inodo que han visto, pero esto es caro - si pueden distinguir entre enlaces que podrían conducir a ciclos (es decir, softlinks) y enlaces que no darán lugar a ciclos (entradas normales de directorio) y omita los softlinks, ya no necesitan rastrear los números de inodo.

+0

llegué el primer y tercer párrafo derecha. Pero no pude entender el segundo. ¿Podría dar una explicación más clara? – user567879

+2

@ user567879, en otras palabras, si tiene un enlace suave a un directorio, no impide que el directorio se elimine y se elimine del disco – bdonlan

+1

+1. Una explicación más detallada del 3er párrafo: http://unix.stackexchange.com/questions/22394 – ignis

Cuestiones relacionadas