Questo è un post piccolo e divertente, completamente inutile e non pratico sulle directory nei sistemi *nix. Dopotutto, è venerdì.
Nei colloqui di lavoro spuntano spesso domande noiose sugli inode, tutto-è-file, a cui pochi possono rispondere in modo sensato. Ma se si scava un po' più a fondo, si possono trovare cose interessanti.
Per comprendere il post, alcuni punti chiave:
- tutto è file. una directory è anch'essa un file
- nell'inode sono memorizzati i metadati del file, ma il nome del file non è memorizzato lì
- il nome del file è memorizzato nei dati della directory
- la dimensione della directory, quella che viene mostrata con il comando ls e per impostazione predefinita è di 4KB, dipende dal numero di file nella directory e dalla lunghezza dei loro nomi
- è ovvio che più file ci sono, maggiore sarà la dimensione della directory
E adesso una cosa interessante: creiamo una directory con un milione di file, controlliamo la dimensione della directory e poi cancelliamo tutti i file e guardiamo la dimensione della directory.
$ mkdir niceDir && cd niceDir
# a seconda della velocità del supporto, il comando successivo potrebbe richiedere 2-10 minuti
$ 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 2 ago 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M 2 ago 13:37 .Come si può notare, la dimensione della directory non è cambiata, anche se sembrerebbe 🙂
Riparare la dimensione della directory (senza cancellarla) può essere fatto solo con fsck (e l'opzione -D) in uno stato smontato.
Ma quando ho iniziato a cercare perché fosse così, ho scoperto che 10 anni fa un comportamento simile era già in lkml. E secondo gli sviluppatori la correzione non vale semplicemente lo sforzo necessario.
Fonte: habr.com
