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
Source: habr.com