Řekněme, že jen vytvořím adresář newDirectory a pak udělám příkaz ls -ld. Vidím, že počet pevných odkazů je 2. Co přesně dělá pevný odkaz 2 od začátku? Je také počet podadresářů v aktuálním adresáři roven počtu pevných odkazů – 2?
Přijatá odpověď:
Historicky první souborový systém Unix vytvořil v každém adresáři dvě položky:.
ukazující na samotný adresář a ..
ukazující na svého rodiče. To poskytlo snadný způsob, jak procházet souborovým systémem, a to jak pro aplikace, tak pro samotný OS.
Každý adresář má tedy počet odkazů 2+n, kde n je počet podadresářů. Odkazy jsou záznamem pro tento adresář v jeho nadřazeném adresáři, vlastním .
adresáře záznam a ..
záznam v každém podadresáři. Předpokládejme například, že toto je obsah podstromu zakořeněného v /parent
, všechny adresáře:
/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3
Poté dir
má počet odkazů 5:dir
záznam v /parent
, .
záznam v /parent/dir
a tři ..
záznamy v každém z /parent/dir/sub1
, /parent/dir/sub2
a /parent/dir/sub3
. Od /parent/dir/sub1
nemá žádný podadresář, jeho počet odkazů je 2 (sub1
záznam v /parent/dir
a .
záznam v /parent/dir/sub1
).
Aby se minimalizovalo množství velkých a malých písmen pro kořenový adresář, který nemá „správného“ rodiče, obsahuje kořenový adresář ..
vstup ukazující na sebe. Tímto způsobem má také počet odkazů 2 plus počet podadresářů, přičemž 2 jsou /.
a /..
.
Pozdější souborové systémy měly tendenci sledovat nadřazené adresáře v paměti a obvykle nepotřebují .
a ..
existovat jako skutečné položky; typické moderní unixové systémy zacházejí s .
a ..
jako speciální hodnoty jako součást kódu souborového systému nezávislého na typu souborového systému. Některé systémy souborů stále obsahují .
a ..
záznamy nebo předstírat, že se na disku nic neobjeví.
Většina souborových systémů stále hlásí počet odkazů 2+n pro adresáře bez ohledu na to, zda .
a ..
záznamy existují, ale existují výjimky, například btrfs to nedělá.