Pourquoi la taille du fichier "dot" "." dépasser 4096?

10

Aujourd'hui, j'ai trouvé un répertoire "vide" d'une taille de 4 Mo.

Il n'avait pas de contenu visible, j'ai donc essayé ls -lah. Cela m'a montré quelques fichiers cachés (pas très gros). En recherchant la raison pour laquelle le répertoire était si grand, j'ai trouvé que le fichier de points ( .) avait une taille de 3,9 Mo.

Qu'est-ce qui est stocké dans ce fichier? N'est-ce pas juste une sorte de lien vers le même répertoire?

Voici la sortie shell (anonymisée):

-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
la source

Réponses:

14

Le fichier dot, comme chaque répertoire, contient une liste de noms pour les fichiers de ce répertoire et leurs numéros d'inode. Donc, si vous aviez une fois beaucoup de fichiers dans ce répertoire (ce qui n'est pas improbable pour un répertoire "tmp"), l'entrée du répertoire aurait atteint cette taille.

Une fois les fichiers disparus, le système de fichiers ne réduit pas automatiquement le fichier de répertoire à nouveau.

Vous pouvez expérimenter cela vous-même en créant un nouveau répertoire vide, faites- ls -lay pour voir la taille initiale (4096 sur ma machine) puis en touchingérant beaucoup de fichiers, ce qui fera augmenter la taille du répertoire.

(Oui, je sais que je passe sous silence / je suis inexact sur beaucoup de détails ici. Mais l'OP n'a pas demandé d'explication complète sur le fonctionnement des systèmes de fichiers EXT *.)

Bristol
la source
2
Merci, cela semble expliquer le phénomène. Deux questions juste par curiosité: quand le fichier de répertoire se rétrécirait-il à nouveau? Et existe-t-il un moyen d'afficher le contenu de ce fichier?
Martin Hennings
3
(1) Voir aussi unix.stackexchange.com/questions/38639/… - réponse courte, supprimez le répertoire et recréez-le.
Bristol
2
(2) Malheureusement, plus. Cela était possible sur les anciennes versions UNIX.
Bristol
Vous pouvez également exécuter e2fsck -Dsur le système de fichiers, mais cela nécessite qu'il soit démonté.
psusi
@Bristol debugfspeut être perspicace
Volker Siegel