Acesta este un post complet inutil, inutil în aplicații practice, dar amuzant despre directoarele din sistemele *nix. E vineri.
În timpul interviurilor, apar adesea întrebări plictisitoare despre inoduri, totul este fișiere, la care puțini oameni pot răspunde cu minte. Dar dacă sapi puțin mai adânc, poți găsi lucruri interesante.
Pentru a înțelege postarea, câteva puncte:
- totul este un dosar. directorul este, de asemenea, un fișier
- inodul stochează metadatele din fișier, dar numele fișierului nu este stocat acolo
- numele fișierului este stocat în datele directorului
- Mărimea directorului, aceeași care este afișată în ls și este implicit de 4Kb, depinde de numărul de fișiere din director și de lungimea numelor acestora
- Evident, cu cât mai multe fișiere, cu atât dimensiunea directorului este mai mare
Și acum lucrul interesant: creăm un director cu un milion de fișiere, verificăm dimensiunea directorului, apoi ștergem toate fișierele și ne uităm la dimensiunea directorului.
$ 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 .
După cum puteți vedea, dimensiunea directorului nu s-a schimbat, deși s-ar părea :)
Puteți remedia dimensiunea unui director (fără a-l șterge) doar folosind fsck (și opțiunea -D) într-o stare nemontată.
Dar când m-am dus să caut de ce a fost așa, sa dovedit că în urmă cu 10 ani un astfel de comportament a avut deja
Sursa: www.habr.com