Die Größe der Verzeichnisse ist unseren Aufwand nicht wert

Dies ist ein völlig nutzloser, in der praktischen Anwendung unnötiger, aber lustiger kleiner Beitrag über Verzeichnisse in *nix-Systemen. Es ist Freitag.

Bei Vorstellungsgesprächen tauchen oft langweilige Fragen zu Inodes, Alles-ist-Dateien, auf, die nur wenige Menschen vernünftig beantworten können. Aber wenn man etwas tiefer gräbt, kann man interessante Dinge finden.

Um den Beitrag zu verstehen, ein paar Punkte:

  • alles ist eine Datei. Verzeichnis ist auch eine Datei
  • Der Inode speichert Metadaten aus der Datei, aber der Dateiname wird dort nicht gespeichert
  • Der Dateiname wird im Verzeichnis data gespeichert
  • Die Größe des Verzeichnisses, die auch in ls angezeigt wird und standardmäßig 4 KB beträgt, hängt von der Anzahl der Dateien im Verzeichnis und der Länge ihrer Namen ab
  • Je mehr Dateien vorhanden sind, desto größer ist natürlich die Verzeichnisgröße

Hier kommt nun der interessante Teil: Wir erstellen ein Verzeichnis mit einer Million Dateien, prüfen die Größe des Verzeichnisses, löschen dann alle Dateien und schauen uns die Größe des Verzeichnisses an.

$ mkdir niceDir && cd niceDir
# в зависимости от скорости носителя, следующая команда может занять 2-10 минут
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug  2 13:37 .

Wie Sie sehen, hat sich die Verzeichnisgröße nicht geändert, obwohl es den Anschein hat :)

Sie können die Größe eines Verzeichnisses nur im nicht gemounteten Zustand mit fsck (und der Option -D) korrigieren (ohne es zu löschen).

Aber als ich nach den Gründen dafür suchte, stellte sich heraus, dass es bereits vor 10 Jahren ein solches Verhalten gegeben hatte diskutiert in lkml. Und laut den Entwicklern ist der Fix den Aufwand einfach nicht wert.

Source: habr.com

Kommentar hinzufügen