GNU/Linux >> Znalost Linux >  >> Linux

Proč má nový adresář počet pevných odkazů 2, než se do něj něco přidá?

Ř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á.


Linux
  1. Vynutit vytvoření pevných odkazů na adresář?

  2. Jak vytvořit odkaz na adresář

  3. Má Python synchronizaci?

  1. Proč můj symbolický odkaz vytváří soubor a ne složku?

  2. Proč ENOENT znamená Žádný takový soubor nebo adresář?

  3. Existuje něco rychlejšího než `najít . | wc -l` pro počítání souborů v adresáři?

  1. Proč používat echo před instalací nového softwaru?

  2. Proč Bash nedává žádný takový soubor nebo adresář pro program, který je v mé PATH?

  3. Proč `xdg-mime query filetype ...` nedokáže najít nový přidaný typ souboru?