GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verstehen Sie die UNIX/Linux-Inodes-Grundlagen mit Beispielen

Mehrere Länder stellen den Menschen, die in diesem Land leben, eine eindeutige Identifikationsnummer (z. B. Sozialversicherungsnummer in den USA) zur Verfügung. Dies erleichtert die eindeutige Identifizierung einer Person. Dies erleichtert die Erledigung des gesamten Papierkrams, der für eine Person von verschiedenen Regierungsbehörden und Finanzinstituten erforderlich ist.

Ähnlich wie bei der Sozialversicherungsnummer gibt es ein Konzept von Inode-Nummern, die eindeutig für alle Dateien auf Linux- oder *nix-Systemen existieren.

Inode-Grundlagen

Eine Inode-Nummer zeigt auf einen Inode. Ein Inode ist eine Datenstruktur, die die folgenden Informationen über eine Datei speichert:

  • Größe der Datei
  • Geräte-ID
  • Benutzer-ID der Datei
  • Gruppen-ID der Datei
  • Informationen zum Dateimodus und Zugriffsrechte für Besitzer, Gruppe und andere
  • Dateischutz-Flags
  • Die Zeitstempel für die Dateierstellung, -änderung usw.
  • Linkzähler um die Anzahl der Hardlinks zu ermitteln
  • Zeiger auf die Blöcke, die den Inhalt der Datei speichern

Bitte beachten Sie, dass die obige Liste nicht vollständig ist. Außerdem wird der Name der Datei nicht in Inodes gespeichert (dazu kommen wir später).

Wenn eine Datei in einem Verzeichnis erstellt wird, werden der Datei der Dateiname und die Inode-Nummer zugewiesen. Diese beiden Einträge sind jeder Datei in einem Verzeichnis zugeordnet. Der Benutzer könnte denken, dass das Verzeichnis die vollständige Datei und alle damit verbundenen zusätzlichen Informationen enthält, aber dies ist möglicherweise nicht immer der Fall. Wir sehen also, dass ein Verzeichnis einen Dateinamen mit seiner Inode-Nummer verknüpft.

Wenn ein Benutzer versucht, auf die Datei oder irgendwelche Informationen bezüglich der Datei zuzugreifen, dann verwendet er/sie den Dateinamen, um dies zu tun, aber intern wird der Dateiname zuerst mit seiner Inode-Nummer abgebildet, die in einer Tabelle gespeichert ist. Dann wird über diese Inode-Nummer auf den entsprechenden Inode zugegriffen. Es gibt eine Tabelle (Inode-Tabelle), in der diese Zuordnung von Inode-Nummern zu den jeweiligen Inodes bereitgestellt wird.

Warum kein Dateiname in Inode-Informationen?

Wie bereits erwähnt, gibt es im Inode keinen Eintrag für den Dateinamen, sondern der Dateiname wird als separater Eintrag parallel zur Inode-Nummer gehalten. Der Grund für das Trennen des Dateinamens von den anderen Informationen, die sich auf dieselbe Datei beziehen, besteht darin, feste Links zu Dateien aufrechtzuerhalten. Das bedeutet, sobald alle anderen Informationen vom Dateinamen getrennt sind, können wir verschiedene Dateinamen haben, die auf denselben Inode zeigen.

Zum Beispiel:

$ 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

In der obigen Ausgabe haben wir eine Datei ‚a‘ und dann einen festen Link a1 erstellt. Wenn jetzt der Befehl „ls -al“ ausgeführt wird, können wir die Details von „a“ und „a1“ sehen. Wir sehen, dass beide Dateien nicht zu unterscheiden sind. Sehen Sie sich den zweiten Eintrag in der Ausgabe an. Dieser Eintrag gibt die Anzahl der Hardlinks zu der Datei an. In diesem Fall hat der Eintrag für beide Dateien den Wert „2“.

Beachten Sie, dass Hardlinks nicht auf verschiedenen Dateisystemen und auch nicht für Verzeichnisse erstellt werden können.

Wann werden Inodes erstellt?

Wie wir alle jetzt wissen, ist Inode eine Datenstruktur, die Informationen einer Datei enthält. Da Datenstrukturen Speicher belegen, stellt sich die offensichtliche Frage, wann die Inodes in einem System erstellt werden. Nun, Speicherplatz für Inodes wird zugewiesen, wenn das Betriebssystem oder ein neues Dateisystem installiert wird und wenn es seine anfängliche Strukturierung durchführt. Auf diese Weise können wir also sehen, dass in einem Dateisystem die maximale Anzahl von Inodes und damit die maximale Anzahl von Dateien festgelegt ist.

Nun bringt das obige Konzept eine weitere interessante Tatsache hervor. Einem Dateisystem kann auf zwei Arten der Platz ausgehen:

  • Es bleibt kein Platz zum Hinzufügen neuer Daten
  • Alle Inodes werden verbraucht.

Nun, der erste Weg ist ziemlich offensichtlich, aber wir müssen uns den zweiten Weg ansehen. Ja, es ist möglich, dass ein Fall auftritt, in dem wir freien Speicherplatz haben, aber dennoch keine neuen Daten im Dateisystem hinzufügen können, da alle Inodes verbraucht sind. Dies kann passieren, wenn das Dateisystem eine sehr große Anzahl sehr kleiner Dateien enthält. Dies wird alle Inodes verbrauchen und obwohl es aus Sicht des Festplattenlaufwerks freien Speicherplatz geben würde, wäre aus Sicht des Dateisystems kein Inode verfügbar, um eine neue Datei zu speichern.

Der obige Anwendungsfall ist möglich, aber seltener anzutreffen, da die durchschnittliche Dateigröße auf einem typischen System mehr als 2 KB beträgt, was es anfälliger dafür macht, dass zuerst der Festplattenspeicher knapp wird. Trotzdem gibt es einen Algorithmus, der verwendet wird, um eine Anzahl von Inodes in einem Dateisystem zu erstellen. Dieser Algorithmus berücksichtigt die Größe des Dateisystems und die durchschnittliche Dateigröße. Der Benutzer kann die Anzahl der Inodes anpassen, während er das Dateisystem erstellt.

Befehle für den Zugriff auf Inode-Nummern

Im Folgenden sind einige Befehle für den Zugriff auf die Inode-Nummern für Dateien aufgeführt:

1) Ls -i Befehl

Wie wir bereits in unserem Artikel Unix LS-Befehl:15 Praktische Beispiele erklärt haben, wird das Flag -i verwendet, um die Inode-Nummer für jede Datei auszugeben.

$ 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

Beachten Sie, dass die Inode-Nummer für „a“ und „a1“ dieselbe ist, da wir „a1“ als festen Link erstellt haben.

2) Df -i-Befehl

Der Befehl df -i zeigt die Inode-Informationen des Dateisystems an.

$ 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

Das Flag -i wird zum Anzeigen von Inode-Informationen verwendet.

3) Statistikbefehl

Der Stat-Befehl wird verwendet, um Dateistatistiken anzuzeigen, die auch die Inode-Nummer einer Datei anzeigen

$ 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

Beispiel-Nutzungsszenario einer Inode-Nummer

  1. Angenommen, es gibt einen Dateinamen mit einem Sonderzeichen darin. Beispiel: "ab*
  2. Versuchen Sie, es normal mit dem Befehl rm zu entfernen, Sie können es nicht entfernen.
  3. Anhand der Inode-Nummer dieser Datei können Sie sie jedoch entfernen.

Sehen wir uns diese Schritte in diesem Beispiel an:

1) Überprüfen Sie, ob die Datei existiert:

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

Wir haben also eine Datei mit dem Namen „ab*“ in diesem Verzeichnis

2) Versuchen Sie, es normal zu entfernen:

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

Sehen Sie, dass ich einige Male versucht habe, die Datei zu entfernen, es aber nicht konnte.

3) Entfernen Sie die Datei mit der Inode-Nummer:

Wie wir bereits in unserem Artikel mit Beispielen für Suchbefehle besprochen haben, können Sie mithilfe der Inode-Nummer nach einer Datei suchen und sie löschen.

$ 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

Also haben wir den find-Befehl verwendet, der die Inode-Nummer der Datei angibt, die wir löschen müssen. Die Datei wurde gelöscht. Obwohl wir die Datei auch anders hätten löschen können, indem wir den Befehl rm \”ab* verwendet hätten, anstatt das obige komplizierte find-Befehlsbeispiel zu verwenden, habe ich ihn dennoch verwendet, um eine der Verwendung von Inode-Nummern für Benutzer zu demonstrieren.


Linux
  1. 10 Schneller Linux-Tail-Befehl mit Beispielen

  2. Sortierbefehl in Linux mit Beispielen

  3. Mehr als 10 Linux-VI-Befehle mit Beispielen

  4. chattr-Befehl unter Linux mit Beispielen

  5. tail-Befehlsbeispiele in UNIX/Linux

Linux-Dateizeitstempel mit Beispielen erklärt

Verwendung des Linux-mv-Befehls mit Beispielen

Was sind Inodes unter Linux?

Linux-Mount-Befehl mit Beispielen

gawk Linux-Befehl mit Beispielen

Linux-make-Befehl mit Beispielen