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
[geloest] Verständnisproblem bezüglich der Inodes
[geloest] Verständnisproblem bezüglich der Inodes
Zuletzt geändert von bumer am 30.03.2015 09:32:36, insgesamt 1-mal geändert.
Re: Verständnisproblem bezüglich der Inodes
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.
Das sind zwei Verknüpfungen. Wenn du nun noch einen Ordner in diesem Ordner anlegst bekommst du sogar drei Verknüpfungen:
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.
Bei Verzeichnissen ist es so, dass diese aus "." und ".." bestehen.
Code: Alles auswählen
ls -ai
stat .
Code: Alles auswählen
ls -ai
stat .
Re: Verständnisproblem bezüglich der Inodes
Ich denke, wir sollten damit anfangen, die Begriffe zu klaeren.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?
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.
Versuch mal `ls -lia ordner; ls -lid ordner' -- siehst du den zweiten Verzeichniseintrag?Anderes Szenario. Ein gerade erstellter Ordner hat bereits 2 Hardlinks. Wieso ist das so?
Doch, aber nur je Dateisystem. /sys ist bestimmt ein separates (sysfs) Dateisystem. Die Datei wird auch auf einem anderen Dateisystem liegen.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?
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.uname hat geschrieben:Also wenn ich es richtig sehe darfst du Datei-Inodes nicht mit Verzeichnis-Inodes gleichsetzen oder vergleichen.
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.Die Verknüpfungen im Ordner sind dann die Anzahl der echten Verzeichnisse + 2
Nochmal mit den obigen Begriffen: ``... wie bei regulaeren Dateien die Anzahl von Verzeichniseintraegen fuer die Inode (der Datei)''.und nicht wie bei Dateien die Anzahl verknüpften Dateien zu einer Inode.
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
Grund: Kleine Umformulierungen zum besseren Verstaendnis
Use ed once in a while!
Re: Verständnisproblem bezüglich der Inodes
Ich hab nochmal nachgedacht:
Zudem weiss man ja welche Eintraege das sind, naemlich:
... 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.
Welchen Wert haetten ihre Auflistung auch? Es gibt wenig was man mit ihnen machen koennte, was nicht auch ueber den ``normalen'' Eintrag moeglich waere.Meillo hat geschrieben: Vermutlich werden die Verzeichniseintraege, die `..' oder `.' sind ignoriert.
Zudem weiss man ja welche Eintraege das sind, naemlich:
Code: Alles auswählen
cd /path/to/dir
ls -lid ../"${PWD##*/}" . */..
Use ed once in a while!
Re: Verständnisproblem bezüglich der Inodes
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 '..').
`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 '..').
Klar, in dem Ordner sind ja bereits '.' und '..' enthalten.Meillo hat geschrieben:Versuch mal `ls -lia ordner; ls -lid ordner' -- siehst du den zweiten Verzeichniseintrag?Anderes Szenario. Ein gerade erstellter Ordner hat bereits 2 Hardlinks. Wieso ist das so?
In der Tat - alle 3 liegen auf verschiedenen Dateisystemen.Meillo hat geschrieben:Doch, aber nur je Dateisystem. /sys ist bestimmt ein separates (sysfs) Dateisystem. Die Datei wird auch auf einem anderen Dateisystem liegen.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?