Dit is een volkomen nutteloze, praktische, maar grappige kleine post over mappen in *nix-systemen. Het is tenslotte vrijdag.
Tijdens sollicitatiegesprekken komen vaak saaie vragen over inodes voorbij, waar bijna niemand logisch op kan antwoorden. Maar als je iets dieper graaft, kun je interessante dingen ontdekken.
Voor het begrijpen van de post hier een paar punten:
- alles is een bestand. een map is ook een bestand
- in de inode worden de metadata van het bestand opgeslagen, maar de bestandsnaam wordt daar niet opgeslagen
- de bestandsnaam wordt opgeslagen in de gegevens van de map
- de grootte van de map, die wordt weergegeven in ls en standaard 4KB is, hangt af van het aantal bestanden in de map en de lengte van hun namen
- vanzelfsprekend geldt: hoe meer bestanden, hoe groter de mapgrootte
En nu het interessante: we maken een map met een miljoen bestanden, controleren de grootte van de map, en vervolgens wissen we alle bestanden en bekijken we de grootte van de map.
$ mkdir niceDir && cd niceDir
# afhankelijk van de snelheid van het opslagmedium kan de volgende opdracht 2-10 minuten duren
$ 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
totaal 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .Zoals je kunt zien, is de grootte van de map niet veranderd, hoewel dat wel zou lijken š
De grootte van de map herstellen (zonder te verwijderen) kan alleen met fsck (en de optie -D) in ontkoppelde toestand.
Maar toen ik ging zoeken waarom dit zo is, bleek dat dit gedrag 10 jaar geleden al in lkml kwam. En volgens de ontwikkelaars is het corrigeren ervan de inspanning gewoon niet waard.
Bron: habr.com
