[geloest] Verständnisproblem bezüglich der Inodes

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

[geloest] Verständnisproblem bezüglich der Inodes

Beitrag von bumer » 24.03.2015 15:57:22

Hallo,

Ein Ordner hat laut `ls -li` 10 Hardlinks. Die Suche mit `find / -inum 1234` nach seiner Inode-Nr. spuckt aber nur den besagten Ordner aus. Müssten da nicht 10 Dateien erscheinen?

Anderes Szenario. Ein gerade erstellter Ordner hat bereits 2 Hardlinks. Wieso ist das so? Die Suche mit `find / -inum 1234` nach seiner Inode-Nr. spuckt den besagten Ordner aus, eine Datei, die absolut nichts mit dem Ordner zu tun hat und eine Datei unter /sys/. Wie kann das sein? Ist ein Inode nicht unique?

>>> Was mir unklar ist:

1. Komischerweise treffen diese Ungereimtheiten nur auf Ordner zu.

2. Wie kann es sein, dass ein Ordner 10 Hardlinks aufweist, bei der Suche nach den Hardlinks aber, wird nur der Ordner ausgegeben.

3. Wie kann es sein, dass 3 unterschiedliche Dateien (bzw. ein Ordner, eine Datei und ein Eintag unter /sys/) mit dem gleichen Inode existieren?

Grüße,
bumer
Zuletzt geändert von bumer am 30.03.2015 09:32:36, insgesamt 1-mal geändert.

uname
Beiträge: 12400
Registriert: 03.06.2008 09:33:02

Re: Verständnisproblem bezüglich der Inodes

Beitrag von uname » 24.03.2015 16:15:41

Also wenn ich es richtig sehe darfst du Datei-Inodes nicht mit Verzeichnis-Inodes gleichsetzen oder vergleichen.

Bei Verzeichnissen ist es so, dass diese aus "." und ".." bestehen.

Code: Alles auswählen

ls -ai
stat .
Das sind zwei Verknüpfungen. Wenn du nun noch einen Ordner in diesem Ordner anlegst bekommst du sogar drei Verknüpfungen:

Code: Alles auswählen

ls -ai
stat .
Diese Regel gilt auch bei meinen 31 Backup-Generationen. Somit möchte ich mal behaupten, dass zwar die Dateien per Hardlink verknüpft sind, die Ordner aber alle eigenständig sind. Das macht auch Sinn, da die Namen bzw. Ursprungspfade ja auch abweichen. Die Verknüpfungen im Ordner sind dann die Anzahl der echten Verzeichnisse + 2 und nicht wie bei Dateien die Anzahl verknüpften Dateien zu einer Inode.

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Verständnisproblem bezüglich der Inodes

Beitrag von Meillo » 24.03.2015 16:51:11

bumer hat geschrieben: Ein Ordner hat laut `ls -li` 10 Hardlinks. Die Suche mit `find / -inum 1234` nach seiner Inode-Nr. spuckt aber nur den besagten Ordner aus. Müssten da nicht 10 Dateien erscheinen?
Ich denke, wir sollten damit anfangen, die Begriffe zu klaeren. ;-)

In Unix gibt es Dateien. Diese sind entweder vom Typ ``regulaere Datei'' oder vom Typ ``Verzeichnis'' (die anderen Faelle lasse ich mal aussen vor). Das was du einen Ordner nennst, ist also eine Datei vom Typ Verzeichnis.

Diese Dateien sind im Kern Inode-Verwaltungsstrukturen. Jede Inode hat eine Nummer, die gemeinhein leider ebenfalls als Inode bezeichnet wird, korrekterweise aber die Inode-Nummer ist. Daneben sind in der Inode die Zugriffsrechte und aehnliches gespeichert, und die Inode beinhaltet eine Liste von Datenbloecken in denen die eigentlichen Daten der Datei (regulaere Datei oder Verzeichnis) gespeichert sind.

Und dann gibt es noch Verzeichniseintraege, das sind die Namen der Dateien (regulaere Dateien oder Verzeichnisse). Diese Verzeichniseintraege bestehen aus einer Inode-Nummer und dem Name unter dem diese Inode in diesem Verzeichnis verzeichnet ist. Diese Verzeichniseintraege sind der Inhalt der Dateien vom Typ Verzeichnis.

So, jetzt nochmal zu deinen Aussagen:

``Ein Ordner hat laut `ls -li 10 Hardlinks'' heisst mit obigen Begriffen: Eine Datei vom Typ Verzeichnis ist zehnmal in Verzeichnissen verzeichnet.

``Die Suche ... nach seiner Inode-Nr. spuckt aber nur den besagten Ordner aus.'' koennte bedeuten: Die Suche nach seiner Inode-Nr. spuckt nur einen ihrer Verzeichniseintraege aus.

Vermutlich werden die Verzeichniseintraege, die `..' oder `.' sind ignoriert.
Anderes Szenario. Ein gerade erstellter Ordner hat bereits 2 Hardlinks. Wieso ist das so?
Versuch mal `ls -lia ordner; ls -lid ordner' -- siehst du den zweiten Verzeichniseintrag?
Die Suche mit `find / -inum 1234` nach seiner Inode-Nr. spuckt den besagten Ordner aus, eine Datei, die absolut nichts mit dem Ordner zu tun hat und eine Datei unter /sys/. Wie kann das sein? Ist ein Inode nicht unique?
Doch, aber nur je Dateisystem. /sys ist bestimmt ein separates (sysfs) Dateisystem. Die Datei wird auch auf einem anderen Dateisystem liegen.



uname hat geschrieben:Also wenn ich es richtig sehe darfst du Datei-Inodes nicht mit Verzeichnis-Inodes gleichsetzen oder vergleichen.
Das Konzept ist schon das gleiche. Es gibt halt ein paar oberflaechliche Unterschiede. So werden z.B. fuer Verzeichnisse automatisch `.' und `..' angelegt und verwaltet. Daneben darf man normalerweise keine Hardlinks auf Verzeichnisse setzen (d.h. man darf fuer Verzeichnisse keine zusaetzlichen Verzeichniseintraege anlegen) ... noch nicht mal als root.
Die Verknüpfungen im Ordner sind dann die Anzahl der echten Verzeichnisse + 2
Jedes Unterverzeichnis hat einen Eintrag `..', der auf unser betrachtetes Verzeichnis verweist. Unser Verzeichnis selbst hat einen Eintrag `.'. Und das Elternverzeichnis hat einen benamten Eintrag auf uns. Das sind die von die erwaehnten Hardlinks.
und nicht wie bei Dateien die Anzahl verknüpften Dateien zu einer Inode.
Nochmal mit den obigen Begriffen: ``... wie bei regulaeren Dateien die Anzahl von Verzeichniseintraegen fuer die Inode (der Datei)''.

Dem ``und nicht'' will ich aber nochmals widersprechen, denn in beiden Faellen passiert technisch gesehen genau das gleiche. Der Unterschied liegt nur in der Wahrnehmung und in der etwas unterschiedlichen Verwendung an der Oberflaeche.
Zuletzt geändert von Meillo am 24.03.2015 19:07:59, insgesamt 1-mal geändert.
Grund: Kleine Umformulierungen zum besseren Verstaendnis
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Verständnisproblem bezüglich der Inodes

Beitrag von Meillo » 24.03.2015 19:30:37

Ich hab nochmal nachgedacht:
Meillo hat geschrieben: Vermutlich werden die Verzeichniseintraege, die `..' oder `.' sind ignoriert.
Welchen Wert haetten ihre Auflistung auch? Es gibt wenig was man mit ihnen machen koennte, was nicht auch ueber den ``normalen'' Eintrag moeglich waere.

Zudem weiss man ja welche Eintraege das sind, naemlich:

Code: Alles auswählen

cd /path/to/dir
ls -lid ../"${PWD##*/}" . */..
... beim Rumspielen merke ich gerade aber, dass das nur so einfach klappt, falls wir uns komplett auf einem einzigen Dateisystem befinden. Wenn entweder Ober- oder Unterverzeichnisse auf einem anderen Dateisystem liegen oder Symlinks sind, dann klappt das nicht mehr so schoen. Naja.
Use ed once in a while!

bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Re: Verständnisproblem bezüglich der Inodes

Beitrag von bumer » 26.03.2015 17:14:42

Vielen Dank Meillo und uname, ich denke ich habe es verstanden:

`ls -la` , zweites Feld (trifft nur auf Ordner zu):
. = Anzahl der Ordner im aktuellen Verzeichnis (inkl. '.' und '..').
.. = Anzahl der Ordner im übergeordneten Verzeichnis (inkl. '.' und '..').
Bei "normalen" Ordnern = Anzahl der Ordner im besagten Ordner (inkl. '.' und '..').
Meillo hat geschrieben:
Anderes Szenario. Ein gerade erstellter Ordner hat bereits 2 Hardlinks. Wieso ist das so?
Versuch mal `ls -lia ordner; ls -lid ordner' -- siehst du den zweiten Verzeichniseintrag?
Klar, in dem Ordner sind ja bereits '.' und '..' enthalten.
Meillo hat geschrieben:
Die Suche mit `find / -inum 1234` nach seiner Inode-Nr. spuckt den besagten Ordner aus, eine Datei, die absolut nichts mit dem Ordner zu tun hat und eine Datei unter /sys/. Wie kann das sein? Ist ein Inode nicht unique?
Doch, aber nur je Dateisystem. /sys ist bestimmt ein separates (sysfs) Dateisystem. Die Datei wird auch auf einem anderen Dateisystem liegen.
In der Tat - alle 3 liegen auf verschiedenen Dateisystemen.

Antworten