Warum könnte die Größe der "Punkt" -Datei "." 4096 überschreiten?

10

Heute habe ich ein "leeres" Verzeichnis mit einer Größe von 4MB gefunden.

Es hatte keinen sichtbaren Inhalt, also versuchte ich es ls -lah. Dies zeigte mir einige versteckte Dateien (nicht sehr groß). Auf der Suche nach dem Grund, warum das Verzeichnis so groß war, stellte ich fest, dass die .Punktdatei ( ) eine Größe von 3,9 MB hatte.

Was wird in dieser Datei gespeichert? Ist das nicht nur eine Art Link zum selben Verzeichnis?

Hier ist die Shell-Ausgabe (anonymisiert):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 ([email protected]) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...
Martin Hennings
quelle

Antworten:

14

Die Punktdatei enthält wie jedes Verzeichnis eine Liste mit Namen für die Dateien in diesem Verzeichnis und deren Inode-Nummern. Wenn Sie also einmal viele Dateien in diesem Verzeichnis gehabt hätten (nicht unwahrscheinlich für ein "tmp" -Verzeichnis), wäre der Verzeichniseintrag auf diese Größe angewachsen.

Nachdem die Dateien verschwunden sind, verkleinert das Dateisystem die Verzeichnisdatei nicht automatisch erneut.

Sie können selbst damit experimentieren, indem Sie ein neues leeres Verzeichnis erstellen, die ls -laAnfangsgröße (4096 auf meinem Computer) touchanzeigen und dann viele Dateien eingeben, wodurch die Verzeichnisgröße zunimmt.

(Ja, ich weiß, dass ich hier viele Details beschönige / ungenau bin. Aber das OP hat nicht nach einer vollständigen Erklärung der Funktionsweise von EXT * -Dateisystemen gefragt.)

Bristol
quelle
2
Danke, dies scheint das Phänomen zu erklären. Zwei Fragen nur aus Neugier: Wann würde die Verzeichnisdatei wieder schrumpfen? Und gibt es eine Möglichkeit, den Inhalt dieser Datei anzuzeigen?
Martin Hennings
3
(1) Siehe auch unix.stackexchange.com/questions/38639/… - kurze Antwort, löschen Sie das Verzeichnis und erstellen Sie es neu.
Bristol
2
(2) Leider nicht mehr. Dies war früher bei alten UNIX-Versionen möglich.
Bristol
Sie können auch e2fsck -Dauf dem Dateisystem ausgeführt werden, dies erfordert jedoch, dass die Bereitstellung aufgehoben wird.
Psusi
@Bristol debugfskann aufschlussreich sein
Volker Siegel