Perché la dimensione del file "punto" potrebbe "." superare 4096?


10

Oggi ho trovato una directory "vuota" con una dimensione di 4 MB.

Non aveva contenuti visibili, quindi ho provato ls -lah. Questo mi ha mostrato alcuni file nascosti (non molto grandi). Cercando il motivo per cui la directory era così grande, ho scoperto che il file dot ( .) aveva una dimensione di 3,9 MB.

Cosa viene memorizzato in quel file? Non è solo una specie di collegamento alla stessa directory?

Ecco l'output della shell (anonimizzato):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 (mockbuild@builder6.centos.org) (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
...

Risposte:


14

Il file dot, come ogni directory, contiene un elenco di nomi per i file in questa directory e i loro numeri di inode. Quindi se una volta avessi avuto molti file in quella directory (non è improbabile per una directory "tmp"), la voce della directory sarebbe cresciuta fino a raggiungere queste dimensioni.

Dopo che i file sono spariti, il file system non riduce di nuovo automaticamente il file della directory.

Puoi provare tu stesso creando una nuova directory vuota, fallo ls -lain essa per vedere la dimensione iniziale (4096 sulla mia macchina) e poi touchingaggiare molti file, che aumenteranno la dimensione della directory.

(Sì, lo so che sto sbagliando / essendo impreciso su molti dettagli qui. Ma l'OP non ha chiesto una spiegazione completa di come funzionano i file system EXT *.)


2
Grazie, questo sembra spiegare il fenomeno. Due domande solo per curiosità: quando il file della directory si ridurrebbe di nuovo? E c'è un modo per mostrare il contenuto di quel file?
Martin Hennings,

3
(1) Vedere anche unix.stackexchange.com/questions/38639/… - risposta breve, eliminare la directory e ricrearla.
Bristol,

2
(2) Purtroppo, non più. Questo era possibile nelle vecchie versioni UNIX.
Bristol,

Puoi anche eseguire e2fsck -Dsul filesystem, ma ciò richiede che sia smontato.
psusi

@Bristol debugfspotrebbe essere perspicace
Volker Siegel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.