GNU/Linux >> Znalost Linux >  >> Linux

Pochopte základy UNIX / Linux Inodes s příklady

Několik zemí poskytuje jedinečné identifikační číslo (například číslo sociálního pojištění v USA) lidem, kteří v dané zemi žijí. To usnadňuje jednoznačnou identifikaci jednotlivce. Díky tomu je snazší vyřídit veškerou papírovou práci, kterou jednotlivci potřebují různé vládní agentury a finanční instituce.

Podobně jako u čísla sociálního zabezpečení existuje koncept čísel Inode, která jedinečně existují pro všechny soubory v systémech Linux nebo *nix.

Základy Inode

Číslo inodu ukazuje na inode. Inode je datová struktura, která uchovává následující informace o souboru:

  • Velikost souboru
  • ID zařízení
  • ID uživatele souboru
  • ID skupiny souboru
  • Informace o režimu souboru a přístupová oprávnění pro vlastníka, skupinu a další
  • Příznaky ochrany souborů
  • Časová razítka pro vytvoření, úpravu atd.
  • počítadlo odkazů k určení počtu pevných odkazů
  • Ukazatele na bloky obsahující obsah souboru

Upozorňujeme, že výše uvedený seznam není vyčerpávající. Také název souboru není uložen v Inodes (k tomu se dostaneme později).

Když je soubor vytvořen v adresáři, pak je souboru přiřazen název souboru a číslo Inode. Tyto dvě položky jsou spojeny s každým souborem v adresáři. Uživatel si může myslet, že adresář obsahuje úplný soubor a všechny další informace, které se k němu vztahují, ale nemusí tomu tak být vždy. Vidíme tedy, že adresář spojuje název souboru se svým číslem Inode.

Když se uživatel pokusí získat přístup k souboru nebo k jakékoli informaci související se souborem, použije k tomu název souboru, ale interně je název souboru nejprve mapován s jeho číslem Inode uloženým v tabulce. Prostřednictvím tohoto čísla Inode je pak přístupný odpovídající Inode. Existuje tabulka (tabulka inodů), kde je toto mapování čísel inodů s příslušnými inody poskytnuto.

Proč není v informacích Inode uveden název souboru?

Jak bylo zmíněno dříve, v Inode není žádná položka pro název souboru, spíše je název souboru uchováván jako samostatná položka paralelně k číslu Inode. Důvodem oddělení názvu souboru od ostatních informací souvisejících se stejným souborem je udržování pevných odkazů na soubory. To znamená, že jakmile jsou všechny ostatní informace odděleny od názvu souboru, můžeme mít různé názvy souborů, které ukazují na stejný Inode.

Například:

$ touch a

$ ln a a1

$ ls -al
drwxr-xr-x 48 himanshu himanshu 4096 2012-01-14 16:30 .
drwxr-xr-x 3 root root 4096 2011-03-12 06:24 ..
-rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a
-rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a1

Ve výše uvedeném výstupu jsme vytvořili soubor „a“ a poté vytvořili pevný odkaz a1. Nyní, když je spuštěn příkaz ‚ls -al‘, můžeme vidět podrobnosti o ‚a‘ i ‚a1‘. Vidíme, že oba soubory jsou k nerozeznání. Podívejte se na druhý záznam ve výstupu. Tato položka určuje počet pevných odkazů na soubor. V tomto případě má položka hodnotu „2“ pro oba soubory.

Všimněte si, že pevné odkazy nelze vytvořit na různých systémech souborů a také je nelze vytvořit pro adresáře.

Kdy jsou vytvořeny Inody?

Jak už všichni víme, Inode je datová struktura, která obsahuje informace o souboru. Protože datové struktury zabírají úložiště, vyvstává zřejmá otázka, kdy jsou v systému vytvořeny inody? Prostor pro Inodes je přidělen, když je nainstalován operační systém nebo nový souborový systém a když provádí svou počáteční strukturaci. Tímto způsobem tedy můžeme vidět, že v souborovém systému je nastaven maximální počet inodů a tedy i maximální počet souborů.

Výše uvedený koncept nyní přináší další zajímavý fakt. V souborovém systému může dojít k nedostatku místa dvěma způsoby:

  • Nezbývá místo pro přidávání nových dat
  • Všechny inody jsou spotřebovány.

První způsob je docela zřejmý, ale musíme se podívat na druhý způsob. Ano, je možné, že nastane případ, kdy máme volný úložný prostor, ale přesto nemůžeme přidat žádná nová data do souborového systému, protože všechny inody jsou spotřebovány. To se může stát v případě, kdy souborový systém obsahuje velké množství souborů velmi malé velikosti. To spotřebovává všechny inody a ačkoli by z pohledu pevného disku bylo volné místo, ale z hlediska souborového systému není k dispozici žádný Inode pro uložení jakéhokoli nového souboru.

Výše uvedený případ použití je možný, ale méně se s ním setkáváme, protože na typickém systému je průměrná velikost souboru více než 2 kB, což je náchylnější k nedostatku místa na pevném disku. Existuje však algoritmus, který se používá k vytvoření počtu inodů v systému souborů. Tento algoritmus bere v úvahu velikost souborového systému a průměrnou velikost souboru. Uživatel může vyladit počet inodů při vytváření systému souborů.

Příkazy pro přístup k číslům Inode

Níže jsou uvedeny některé příkazy pro přístup k číslům Inode pro soubory:

1) Příkaz Ls -i

Jak jsme vysvětlili dříve v našem článku Unix LS Command:15 Practical Examples, parametr -i se používá k vytištění čísla Inode pro každý soubor.

$ ls -i
1448240 a 1441807 Desktop 1447344 mydata 1441813 Pictures 1442737 testfile 1448145 worm
1448240 a1 1441811 Documents 1442707 my_ls 1442445 practice 1442739 test.py
1447139 alpha 1441808 Downloads 1447278 my_ls_alpha.c 1441810 Public 1447099 Unsaved Document 1
1447478 article_function_pointer.txt 1575132 google 1447274 my_ls.c 1441809 Templates 1441814 Videos
1442390 chmodOctal.txt 1441812 Music 1442363 output.log 1448800 testdisk.log 1575133 vlc

Podívejte se, že číslo Inode pro „a“ a „a1“ je stejné, jako jsme vytvořili „a1“ jako pevný odkaz.

2) Příkaz Df -i

Příkaz df -i zobrazí informace o inodech systému souborů.

$ df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            1875968  293264 1582704   16% /
none                  210613     764  209849    1% /dev
none                  213415       9  213406    1% /dev/shm
none                  213415      63  213352    1% /var/run
none                  213415       1  213414    1% /var/lock
/dev/sda2            7643136  156663 7486473    3% /home

Parametr -i se používá pro zobrazení informací Inode.

3) Příkaz Stat

Příkaz Stat se používá k zobrazení statistiky souboru, který také zobrazuje číslo inodu souboru

$ stat a
File: `a'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 1448240 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 1000/himanshu) Gid: ( 1001/ family)
Access: 2012-01-14 16:30:04.871719357 +0530
Modify: 2012-01-14 16:29:50.918267873 +0530
Change: 2012-01-14 16:30:03.858251514 +0530

Příklad scénáře použití čísla Inode

  1. Předpokládejme, že existuje název souboru s nějakým speciálním znakem. Například: “ab*
  2. Zkuste jej odstranit normálně pomocí příkazu rm, nebudete jej moci odstranit.
  3. Pomocí čísla inodu tohoto souboru jej však můžete odstranit.

Podívejme se na tyto kroky v tomto příkladu:

1) Zkontrolujte, zda soubor existuje:

$ ls -i
1448240 a 1447274 my_ls.c
1448240 a1 1442363 output.log
1448239 "ab* 1441813 Pictures
1447139 alpha

V tomto adresáři tedy máme soubor s názvem „ab*

2) Zkuste jej normálně odstranit:

$ rm "ab*
> ^C
$ rm "ab*
> ^C
$

Podívejte se, že jsem se několikrát pokusil soubor odstranit, ale nepodařilo se to.

3) Odstraňte soubor pomocí čísla Inode:

Jak jsme probrali dříve v našem článku s příklady příkazů find, můžete vyhledat soubor pomocí čísla inodu a smazat jej.

$ find . -inum 1448239 -exec rm -i {} \;
rm: remove regular empty file `./"ab*'? y
$ ls -i
1448240 a 1447274 my_ls.c
1448240 a1 1442363 output.log
1447139 alpha 1441813 Pictures

Použili jsme tedy příkaz find určující číslo Inode souboru, který potřebujeme smazat. Soubor byl smazán. I když jsme mohli soubor smazat jinak také pomocí příkazu rm \”ab* místo použití komplikovaného příkladu příkazu find výše, přesto jsem ho použil k demonstraci jednoho z použití čísel Inode pro uživatele.


Linux
  1. Třídit příkaz v Linuxu s příklady

  2. příkaz chattr v Linuxu s příklady

  3. příklady příkazů tail v UNIX/Linux

  1. 10 Quick Linux Tail Command s příklady

  2. Výukový program příkazu Linux/UNIX Awk s příklady

  3. 10+ Linux VI příkazy s příklady

  1. 17 Užitečný příkaz Tar s praktickými příklady v Linuxu

  2. Linux Zip a Unzip Command s příklady

  3. Rozdílový příkaz v Linuxu s příklady