GNU/Linux >> Znalost Linux >  >> Linux

Vše důležité, co potřebujete vědět o Hard Link v Linuxu

Než uvidíte pevné odkazy, doporučuji vám seznámit se s inody v Linuxu. Souborový systém Linux má dvě hlavní součásti:soubor datových bloků, kde jsou data uložena, a databázový systém pro správu tohoto fondu dat. Inode je jako index tohoto databázového systému.

Tvrdý odkaz na soubor ukazuje na inode souboru namísto odkazování na soubor samotný. Tímto způsobem pevný odkaz získá všechny atributy původního souboru a ukazuje na stejný datový blok jako původní soubor.

Pokud si pamatujete symbolický odkaz nebo měkký odkaz, víte, že ukazuje na soubor. Pevný odkaz je ručně vytvořená položka v adresáři, která ukazuje na již existující inode.

Vysvětlím vám to pomocí správných diagramů. Vezměme si například tuto adresářovou strukturu:

Takže v podstatě kořenový adresář obsahuje adresáře dir_1 a dir_2. Adresář dir_1 obsahuje soubory file_1 a file_2, zatímco dir_2 obsahuje soubor_3 a pevný odkaz na soubor 2.

Podívejme se, jak věci vypadají v souborovém systému. Vše je reprezentativní. Ve skutečnosti bude mít kořenový adresář tisíce souborů. Zde předpokládáme, že má pouze dva adresáře.

Pamatujete si strukturu adresářů Linuxu? Začnete kořenem (/). Kořenový adresář má vždy inode 2.

Pokud musíte přistupovat k souboru 3, absolutní cesta by byla /dir_2/file_3. Zde si to můžete přečíst takto:začnete na inode 2 (root vždy indoe 2) a následujete šipku k jeho datovému bloku. Tento datový blok obsahuje informace o inodu dir_2 (v našem příkladu inode 27).

Nyní se podíváte do inodu 27. Jeho typem je adresář. Následujete jeho datový blok, který má informace o inodu souboru_3 (inode 88). Podíváte se do inodu 88. Jeho typ je soubor a pokud budete postupovat podle jeho datového bloku, dostanete se k obsahu souboru.

Všimli jste si, že samotný adresář neobsahuje data svého souboru? Adresáře jsou v podstatě soubory, které obsahují informace o inodech jejich souborů a podadresářů.

Určitě vás zajímá počet odkazů na obrázku výše. To je mimořádně důležité, zvláště když máte co do činění s pevným odkazem. Počet odkazů je počet položek adresáře, které ukazují na inode. Vezměte si například inode 27 pro dir_2. Inode 27 je jednou v datovém bloku kořenového adresáře a jednou ve vlastním datovém bloku (speciální adresář .). A proto má počet odkazů 2.

Všimli jste si, že všechny soubory mají počet odkazů 1 kromě file_2? Pokud má soubor počet odkazů větší než 1, znamená to, že existují pevné odkazy „na tento soubor“. Protože pevné odkazy ukazují na stejný inode (v našem příkladu inode 17) jako cílový soubor, získáte 2 výpisy adresářů pro inode 17 (v datovém bloku dir_1 a dir_2).

K vytvoření pevného odkazu můžete použít příkaz ln:

ln target_file link_name

Tím se vytvoří pevný odkaz s názvem název_linku na cílový_soubor. Uvidíte, že název_linku vypadá jako běžný soubor a jeho atributy jsou stejné jako u cílového souboru.

Pokud použijete příkaz ls -li (volba -i zobrazuje číslo inodu), uvidíte, že počet odkazů je 2. Počet odkazů je za polem oprávnění souboru.

134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  link_target_file

Oba mají samozřejmě stejné inodové číslo 134195.

Nyní, když máte dobrou představu o pevných odkazech v Linuxu, pojďme věci trochu dále.

Pokud smažete cílový soubor, stále můžete přistupovat k jeho obsahu prostřednictvím pevného odkazu. Je to proto, že cílový soubor i pevný odkaz mají stejný inode, a proto ukazují na stejný datový blok.

Mazání souborů v Linuxu je v podstatě odpojení. Předpokládejme, že odstraníte soubor_1 pomocí příkazu rm. Linuxové jádro zjistí, že soubor_1 odpovídá inodu 16. Odebere položku file_1 ze seznamu dir_1 a sníží počet odkazů inodu 16 o 1. Nyní, když je počet odkazů inodu 16 0, jádro ví, že na to nikdo neodkazuje. inode, takže je bezpečné odebrat inode a smazat datový blok s ním spojený.

Nyní řekněte, že smažete soubor_2. Jádro odstraní soubor_2 ze seznamu dir_1 a přejde na inode 17. Sníží počet odkazů na inode 17 a sníží jej na 1. Protože počet odkazů není nula, jádro nesmaže inode ani data spojená s to. Pokud tedy přistoupíte k pevnému odkazu, můžete stále přistupovat k datům, i když byl původní soubor smazán.

Můžete vytvořit měkký odkaz na adresář, ale když se pokusíte vytvořit pevný odkaz na adresář, zobrazí se tato chyba:

ln: newdir/test_dir: hard link not allowed for directory

Proč nejsou pro adresář povoleny pevné odkazy? Je to proto, že použití pevných odkazů pro adresář může narušit souborový systém. Teoreticky můžete vytvořit pevný odkaz na adresáře pomocí volby -d nebo -F. Ale většina distribucí Linuxu to neumožní, i když jste uživatel root.

Pojďme se znovu podívat na pevný odkaz, který jsem vytvořil dříve:

134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  link_target_file

Mají stejné atributy, ale můžete hádat, který je odkaz na základě názvu ve výše uvedeném příkladu, ale co když název nebyl zřejmý? Jak byste věděli, že jejich jména byla target_1 a target_2?

Pokud jsou soubor a odkaz(y) v jiném adresáři, můžete zkusit zkontrolovat mtime a další parametry, abyste věděli, kdy byl obsah adresáře změněn, ale ani to není jisté. Pokud je soubor a pevný odkaz ve stejném adresáři a historie byla vymazána, nejsem si jistý, jak můžete zjistit, který je původní soubor a který je pevný odkaz.

Pokud zjistíte, že soubor má více než jeden počet odkazů, možná vás budou zajímat další pevné odkazy, které jsou s ním spojeny.

Jedním ze způsobů, jak to zjistit, je použití čísla inodu souboru. K získání čísla inodu můžete použít příkaz ls -i nebo stat.

Jakmile získáte číslo inodu, můžete pomocí příkazu find zobrazit všechny odkazy s ním spojené.

find . -inum inode_number

Bylo těžké porozumět pevným odkazům?

Doufám, že to nebylo příliš ‚těžké‘ a že lépe rozumíte konceptu pevného odkazu v Linuxu. Pokud máte pochybnosti nebo návrhy k tomuto tématu, zanechte prosím níže komentář.


Linux
  1. Vše, co potřebujete vědět o Ubuntu 13.04

  2. Co je SteamOS? Vše důležité, co potřebujete vědět o této „herní distribuci“

  3. Linux tmp Directory:Vše, co potřebujete vědět

  1. Linuxová komprese souborů:Vše, co potřebujete vědět

  2. Oprávnění souborů Linux:Vše, co potřebujete vědět

  3. Swappiness v Linuxu:Vše, co potřebujete vědět

  1. Vše, co potřebujete vědět o systému souborů Linux

  2. Vše, co potřebujete vědět o Linux Chmod Command

  3. Vše, co potřebujete vědět o Linuxových kontejnerech (LXC)