2011-10-11 12 views
7

Ho letto nei libri di testo che UNIX/Linux non consente i collegamenti fisici alle directory ma i collegamenti software? È perché quando abbiamo cicli e se creiamo un hardlink, punterà ad alcuni valori garbage?Perché i collegamenti rigidi non sono consentiti alle directory in UNIX/Linux

Se i cicli sono stati l'unica ragione dietro non permettendo collegamenti fisici, allora perché softlink sono autorizzati a directory?

+1

Per evitare cicli. – bmargulies

+0

@bmargulies Allora perché è possibile con i softlink – user567879

+0

Perché il kernel non li segue nella traversal fondamentale della gerarchia di directory. Può camminare sull'albero, perché non attraversa i collegamenti morbidi quando cammina l'albero. – bmargulies

risposta

12

I collegamenti fissi non sono consentiti perché porterebbero a cicli. Una volta abilitati i cicli, è necessario eseguire una garbage collection mark-and-sweep per rilevare quando i cicli isolati di directory (non più raggiungibili dalla root) possono essere eliminati definitivamente - questo è estremamente costoso su disco.

link soft non causano questo problema perché non sollevano il conteggio dei riferimenti della directory mirato; in questo modo è ancora possibile scappare con il conteggio dei riferimenti (con un massimo di un riferimento :).

L'altro problema è che i programmi che attraversano il file system (ad esempio, find) devono evitare cicli. possono fare ciò ricordando ogni numero di inode che hanno visto, ma questo è costoso, se sono in grado di distinguere tra i collegamenti che potrebbero portare a cicli (ad esempio, collegamenti software) e collegamenti che non portano a cicli (voci di directory normali) e salta i softlink, non hanno più bisogno di rintracciare i numeri di inode.

+0

ho ottenuto il primo e il terzo comma destra. Ma non riuscivo a capire il secondo. Per favore, dare una spiegazione più chiara – user567879

+2

@ user567879, in altre parole, se si dispone di un collegamento software a una directory, non impedisce l'eliminazione e la rimozione della directory dal disco – bdonlan

+1

+1. Una spiegazione più dettagliata del 3 ° paragrafo: http://unix.stackexchange.com/questions/22394 – ignis

Problemi correlati