Wie geht Linux mit einem Bewegungsbefehl unter der Haube um?
Nehmen wir an, ich ziehe nach Hause
/home/me
und ich verschiebe dies in ein anderes Verzeichnis
/home/foo/me
Wie werden alle Dateien und Verzeichnispfade me
geändert? Ich weiß, dass mein Desktop
Verzeichnis me
jetzt /home/foo/me/Desktop
genauso gut ist, Documents
/home/foo/me/Documents
aber aktualisiert das Dateisystem explizit jeden Verzeichnispfad me
, um die Änderung widerzuspiegeln? Das klingt nicht sehr effizient und es ist wahrscheinlich nicht so.
Wo kann ich mehr darüber erfahren?
filesystem
Jeff
quelle
quelle
Antworten:
Um zu verstehen, wie es Ordner verschiebt, müssen Sie möglicherweise etwas über das Dateisystem unter Linux wissen. Alle Dateien und Ordner werden als Teil einer Datenstruktur gespeichert, die als " Inode " bezeichnet wird. Jede Datei hat eine Inode-Nummer, ebenso Ordner.
Verwenden Sie den Befehl, um den Inode Ihres Ordners anzuzeigen
ls -ial foldername
. Die erste Spalte zeigt die Inode-Nummer der Datei. Für jeden Ordner gibt es zwei eindeutige Namen.
und..
das Verzeichnis des eigenen darstellen, und das übergeordnete Verzeichnis ist.Sie können ein Experiment durchführen, um ein Verzeichnis (z. B. / home / me / source) mit Unterverzeichnissen und Dateien in ein anderes Verzeichnis (z. B. / home / me / somewhere / else) zu verschieben. Die Inode-Nummer von / home / me / source und der gesamte Inhalt bleiben vor und nach dem Verschieben gleich. Der einzige Unterschied ist die Inode-Nummer von. Diese
..
teilt sich ursprünglich die Inode-Nummer von / home / me und wird jetzt zur Inode-Nummer von / home / me / somewhere / else. In einfacher Formulierung, aktualisiert Linux den Link zum Verzeichnis Quelle und dann ist es geschaffen.Der Inhalt auf der Festplatte wird ohnehin nicht geändert, nur der Inode-Index wird aktualisiert, wenn der Ordner verschoben wird. Dies ist natürlich nicht der Fall, wenn Sie den Ordner an einen anderen physischen Speicherort verschieben.
quelle
Wenn Sie daran interessiert sind, wie Programme wie
mv
undcp
funktionieren, denken Sie daran, dass sie Open Source sind und Sie die genaueste Erklärung erhalten, indem Sie den Code durchlesen. Hier finden Sie Links zu allen Kerndienstprogrammen. Insbesondere können Sie finden mv hierquelle
you can get the most accurate explanation by reading through the code.
Ich bin anderer Ansicht; Ich hatte lange keine Erfahrung mit C und auch jetzt noch bevorzuge ich es nicht. Außerdem wird der Quellcode häufig optimiert und enthält mehr Randfälle als benötigt. Eine symbolische Erklärung hilft oft mehr.