GNU/Linux >> Linux Esercitazione >  >> Linux

Perché una nuova directory ha un numero di collegamenti fisici pari a 2 prima che venga aggiunto qualcosa?

Diciamo che ho appena creato la directory newDirectory e quindi eseguo il comando ls -ld. Vedo che il numero di hard link è 2. Cosa rende esattamente l'hard link 2 dall'inizio? Inoltre, il numero di sottodirectory nella directory corrente è uguale al numero di collegamenti reali – 2?

Risposta accettata:

Storicamente, il primo filesystem Unix creava due voci in ogni directory:. che punta alla directory stessa e .. indicando il suo genitore. Ciò ha fornito un modo semplice per attraversare il filesystem, sia per le applicazioni che per il sistema operativo stesso.

Quindi ogni directory ha un numero di collegamenti di 2+n dove n è il numero di sottodirectory. I collegamenti sono la voce per quella directory nella sua genitore, il . voce e il .. voce in ogni sottodirectory. Ad esempio, supponiamo che questo sia il contenuto del sottoalbero radicato in /parent , tutte le directory:

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

Quindi dir ha un numero di link di 5:la dir voce in /parent , il . voce in /parent/dir , e i tre .. voci in ciascuno di /parent/dir/sub1 , /parent/dir/sub2 e /parent/dir/sub3 . Da /parent/dir/sub1 non ha sottodirectory, il numero di collegamenti è 2 (il sub1 voce in /parent/dir e il . voce in /parent/dir/sub1 ).

Per ridurre al minimo la quantità di case speciali per la directory radice, che non ha un genitore "corretto", la directory radice contiene un .. ingresso che punta a se stesso. In questo modo, anche questo ha un numero di collegamenti pari a 2 più il numero di sottodirectory, di cui 2 sono /. e /.. .

I filesystem successivi hanno avuto la tendenza a tenere traccia delle directory principali in memoria e di solito non hanno bisogno di . e .. esistere come voci effettive; i tipici sistemi Unix moderni trattano . e .. come valori speciali come parte del codice del filesystem indipendente dal tipo di filesystem. Alcuni filesystem includono ancora . e .. voci, o fingere di farlo anche se non appare nulla sul disco.

La maggior parte dei filesystem riporta ancora un numero di collegamenti di 2+n per le directory indipendentemente dal fatto che . e .. le voci esistono, ma ci sono delle eccezioni, ad esempio btrfs non lo fa.


Linux
  1. Creare forzatamente una directory hard link?

  2. Creazione di una nuova directory in C

  3. Come creare un collegamento a una directory

  4. Python ha la sincronizzazione?

  5. Perché il mio collegamento simbolico crea un file e non una cartella?

C'è qualcosa di più veloce di `find . | wc -l` per contare i file in una directory?

Perché usare echo prima di installare un nuovo software?

Perché Bash non fornisce nessun file o directory di questo tipo per un programma che si trova nel mio PERCORSO?

Perché `xdg-mime query filetype ...` non riesce a trovare un nuovo tipo di file aggiunto?

Perché Linux riscalda il mio computer?

Perché pvremove ha una forza duplicata nella pagina man?