GNU/Linux >> Znalost Linux >  >> Linux

Proč nejsou v Unixu/linuxu povoleny pevné odkazy na adresáře?

V učebnicích jsem četl, že Unix/Linux neumožňuje pevné odkazy na adresáře, ale umožňuje měkké odkazy. Je to proto, že když máme cykly a když vytvoříme pevné odkazy a po nějaké době smažeme původní soubor, bude to ukazovat na nějakou nesmyslnou hodnotu?

Pokud byly cykly jediným důvodem nepovolování pevných odkazů, proč jsou pak povoleny měkké odkazy na adresáře?

Přijatá odpověď:

To je jen špatný nápad, protože neexistuje způsob, jak rozpoznat rozdíl mezi pevným odkazem a původním názvem.

Povolení pevných odkazů na adresáře by narušilo řízenou acyklickou grafovou strukturu souborového systému, případně by vytvořilo adresářové smyčky a visící podstromy adresářů, což by způsobilo fsck a jakékoli jiné procházení stromem souborů náchylné k chybám.

Nejprve, abychom tomu porozuměli, promluvme si o inodech. Data v souborovém systému jsou uložena v blocích na disku a tyto bloky jsou shromažďovány dohromady pomocí inodu. Můžete si představit inode jako soubor.
Inodům však chybí názvy souborů. Zde přicházejí odkazy.

Odkaz je pouze ukazatel na inode. Adresář je inode, který obsahuje odkazy. Každý název souboru v adresáři je pouze odkazem na inode. Otevření souboru v Unixu také vytvoří odkaz, ale je to jiný typ odkazu (nejedná se o pojmenovaný odkaz).

Pevný odkaz je jen další položka adresáře ukazující na tento inode. Když ls -l , číslo za oprávněními je pojmenovaný počet odkazů. Většina běžných souborů bude mít jeden odkaz. Vytvořením nového pevného odkazu na soubor budou oba názvy souborů ukazovat na stejný inode. Poznámka:

% ls -l test
ls: test: No such file or directory
% touch test
% ls -l test
-rw-r--r--  1 danny  staff  0 Oct 13 17:58 test
% ln test test2
% ls -l test*
-rw-r--r--  2 danny  staff  0 Oct 13 17:58 test
-rw-r--r--  2 danny  staff  0 Oct 13 17:58 test2
% touch test3
% ls -l test*
-rw-r--r--  2 danny  staff  0 Oct 13 17:58 test
-rw-r--r--  2 danny  staff  0 Oct 13 17:58 test2
-rw-r--r--  1 danny  staff  0 Oct 13 17:59 test3
            ^
            ^ this is the link count

Nyní můžete jasně vidět, že neexistuje nic takového jako pevný odkaz. Pevný odkaz je stejný jako běžný název. Ve výše uvedeném příkladu test nebo test2 , který je původní soubor a který je pevný odkaz? Nakonec to opravdu nepoznáte (ani podle časových razítek), protože oba názvy ukazují na stejný obsah, stejný inode:

% ls -li test*  
14445750 -rw-r--r--  2 danny  staff  0 Oct 13 17:58 test
14445750 -rw-r--r--  2 danny  staff  0 Oct 13 17:58 test2
14445892 -rw-r--r--  1 danny  staff  0 Oct 13 17:59 test3

-i příznak na ls zobrazuje čísla inodů na začátku řádku. Všimněte si, jak test a test2 mají stejné číslo inodu,
ale test3 má jiný.

Související:Najít soubory, pro které existuje více variací tohoto názvu souboru společně ve stejném adresáři?

Nyní, pokud vám bylo povoleno to udělat pro adresáře, dva různé adresáře v různých místech v souborovém systému by mohly ukazovat na stejnou věc. Ve skutečnosti může podadresář ukazovat zpět na svého prarodiče a vytvářet smyčku.

Proč je tato smyčka znepokojivá? Protože když procházíte, neexistuje způsob, jak zjistit, že procházíte smyčkou (bez sledování čísel inodů při procházení). Představte si, že píšete du příkaz, který potřebuje rekurzovat přes podadresáře, aby zjistil využití disku. Jak by du vědět, kdy to narazil do smyčky? du je náchylný k chybám a hodně vede účetnictví bude muset udělat, jen aby zvládl tento jednoduchý úkol.

Symlinky jsou úplně jiné zvíře v tom, že se jedná o speciální typ „souboru“, který má mnoho API souborového systému tendenci automaticky následovat. Všimněte si, že symbolický odkaz může ukazovat na neexistující cíl, protože ukazují podle názvu a ne přímo na inode. Tento koncept u pevných odkazů nedává smysl, protože pouhá existence „pevného odkazu“ znamená, že soubor existuje.

Proč tedy může du vypořádat se se symbolickými odkazy snadno a ne s pevnými odkazy? Výše jsme viděli, že pevné odkazy jsou k nerozeznání od běžných záznamů v adresáři. Symbolické odkazy jsou však speciální, detekovatelné a přeskočitelné! du si všimne, že symbolický odkaz je symbolický odkaz, a zcela jej přeskočí!

% ls -l 
total 4
drwxr-xr-x  3 danny  staff  102 Oct 13 18:14 test1/
lrwxr-xr-x  1 danny  staff    5 Oct 13 18:13 [email protected] -> test1
% du -ah
242M    ./test1/bigfile
242M    ./test1
4.0K    ./test2
242M    .

Linux
  1. Vysvětlení pevných odkazů a měkkých odkazů v Linuxu

  2. Linux – proč používáme Su – a nejen Su?

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

  1. Linux – Proč Setuid nefunguje?

  2. Linux – standardní a/nebo společné adresáře na operačních systémech Unix/linux?

  3. Linux – vytvoření duplikátu cesty v Unixu?

  1. Linux – Jsou různá jádra Linux/unix zaměnitelná?

  2. Jak vytvořit měkké a pevné odkazy v Linuxu

  3. Rozdíl mezi měkkými a pevnými odkazy v Linuxu