A du (disk usage) megmutatja, mennyi helyet foglal a lemezen egy fájl vagy könyvtár. A gyors helykereséshez, a df paranccsal együtt, a Hogyan ellenőrizhető a lemezhasználat Linux szerveren? cikk ad receptet. Ez a cikk a du kapcsolóit és furcsaságait veszi sorra: miért mutat mást, mint az ls, hogyan kezeli a hardlinkeket és a ritka (sparse) fájlokat, és hogyan szűrheti a kimenetét.
A példákat AlmaLinux 10.2 rendszeren, a GNU coreutils 9.5-ös du parancsával futtattuk egy mintakönyvtáron (/var/www/pelda.hu), amelyben naplók, egy feltöltött videó, egy mentés, annak egy hardlinkje és egy 2 GB-os ritka lemezkép volt.
Alapok
du -sh /var/www/pelda.hu # egy könyvtár összesen
du -h /var/www/pelda.hu # minden alkönyvtár, rekurzívan
-s(summarize): csak az összeg, az alkönyvtárak nélkül;-h(human-readable): K, M, G egységek a blokkszámok helyett.
Más felhasználók könyvtáraiba a du sima felhasználóként nem lát be, és ezt hibaként jelzi (du: cannot read directory '/var/log/chrony': Permission denied). Ilyenkor is kiír egy összeget, de az kisebb a valóságnál: a teszten a du -sh /root sima felhasználóként 0-t írt ki, mellé a hibaüzenetet, és 1-es kilépési kóddal állt le. A rendszerkönyvtárakat sudo-val mérje, és a hibaüzeneteket ne rejtse el (2>/dev/null), amíg nem tudja, mit hagyott ki a du.
A * helyettesítés nem tartalmazza a ponttal kezdődő (rejtett) fájlokat és könyvtárakat. A du -sh * ezért kevesebbet mutathat, mint a du -sh .; a teszten egy 5 MB-os .rejtett-nagy fájl kimaradt a listából. A rejtett elemekkel együtt a du -h -d 1 . listáz.
Mélység és rendezés
sudo du -h -d 1 /var/www/pelda.hu | sort -h
85M /var/www/pelda.hu/logs
120M /var/www/pelda.hu/public_html
300M /var/www/pelda.hu/backup
505M /var/www/pelda.hu
A -d 1 (hosszan: --max-depth=1) csak a közvetlen alkönyvtárakat írja ki. A sort -h az emberi formátumú méreteket (K, M, G) helyesen rendezi; a sort -rh fordítva, a legnagyobbal kezdve, és a | head csak az első sorokat hagyja meg.
Fájlok is, nem csak könyvtárak
sudo du -ah /var/www/pelda.hu | sort -rh | head -5
Az -a (all) a fájlokat is kiírja. A teszten a lista a teljes könyvtárral, a 300 MB-os mentéssel és a 120 MB-os videóval kezdődött.
Összesítés több tételre: -c
sudo du -ch /var/www/pelda.hu/logs/*.log*
15M logs/access.log.1
15M logs/access.log.2
15M logs/access.log.3
40M logs/error.log
85M total
A -c a végére egy total sort ír. Hasznos, ha egy mintára illeszkedő fájlok (például az összes napló) együttes méretére kíváncsi.
Kizárás és küszöb
sudo du -sh --exclude='*.log*' /var/www/pelda.hu # naplók nélkül: 420M
sudo du -h -t 100M -d 3 /var/www/pelda.hu # csak a 100 MB fölöttiek
A --exclude mintára illeszkedő fájlokat és könyvtárakat hagy ki (többször is megadható). A mintát tegye aposztrófok közé, különben a shell még a du előtt kibontja. A -t (--threshold) elrejti a megadottnál kisebb tételeket, így egy mély könyvtárszerkezetben is csak a nagy tételek maradnak. Negatív értékkel fordítva működik: a -t -100M csak a legfeljebb 100 MB-os tételeket mutatja (a teszten a logs könyvtárat). A pozitív küszöbbel:
120M ./public_html/wp-content/uploads
120M ./public_html/wp-content
120M ./public_html
300M ./backup
505M .
Egy fájlrendszeren belül: -x
A gyökérkönyvtár mérésekor a du alapból átlép a többi csatolt fájlrendszerre is (például a külön /boot partícióra vagy egy hálózati meghajtóra). Az -x ezt megakadályozza:
sudo du -h -d 1 -x / | sort -h | tail
A teszten a du -shx / hibaüzenet nélkül, 1,3 GB-tal futott le, a du -sh / 1,4 GB-ot mutatott, és közben a /proc éppen eltűnő fájljai miatt hibákat írt ki (du: cannot access '/proc/1210/fd/4': No such file or directory). A különbség a külön partíción lévő /boot és /boot/efi, valamint a memóriában lévő /run. A csatolt fájlrendszereket a df -h sorolja fel.
A -d 1 csak a kiírt sorok számát korlátozza: a du ilyenkor is végigjárja a teljes könyvtárfát, hogy az összegeket kiszámolja. Egy nagy fájlrendszeren ezért a mélységkorlát nem gyorsítja a mérést, csak rövidebbé teszi a kimenetet. A 2>/dev/null a /proc és hasonló könyvtárak hibaüzeneteit nyeli el.
Más mértékegység: -B, -k, -m
du -s -BM logs # megabájtban: 85M
du -sk logs # kilobájtban, egység nélkül, szkriptekhez
du -sb logs # bájtban (látszólagos méret)
Szkriptekben a -k vagy a -b jobb, mint a -h, mert a kimenet számként feldolgozható.
Miért mutat mást, mint az ls?
Foglalt hely és látszólagos méret
Az ls -l a fájl látszólagos méretét mutatja (hány bájtot tartalmaz), a du a lemezen ténylegesen foglalt helyet. A kettő általában közel van egymáshoz, de két esetben nagyon eltér.
Ritka (sparse) fájlok
A virtuális lemezképek, adatbázis-fájlok és egyes naplók lehetnek ritkák: a fájl nagy, de a nulla tartalmú részei nem foglalnak helyet. A teszten egy truncate -s 2G paranccsal létrehozott lemezkép:
ls -lh backup/lemezkep.img # 2.0G
du -h backup/lemezkep.img # 0
du -h --apparent-size backup/lemezkep.img # 2.0G
Az --apparent-size a látszólagos méretet adja, mint az ls. A teljes mintakönyvtár így 505 MB helyett 2,5 GB-nak látszott. Ha egy ilyen fájlt átmásol egy olyan eszközzel, amely nem kezeli a ritka fájlokat, a másolat a teljes méretét elfoglalhatja (cp alapból kezeli, rsync-nél a --sparse kapcsoló kell).
Hardlinkek
Ha egy fájlnak két neve van (hardlink), a lemezen csak egyszer foglal helyet. Az ls -l a második oszlopban mutatja, hány neve van egy fájlnak, és a total sorban mindkettőt beszámolja; a du csak egyszer számolja:
-rw-r--r--. 2 root root 300M Oct 28 20:36 hardlink.tar.gz
-rw-r--r--. 1 root root 2.0G Oct 28 20:36 lemezkep.img
-rw-r--r--. 2 root root 300M Oct 28 20:36 mentes-2026-10.tar.gz
A teszten az ls -lh backup/ szerint a mappa 600M volt, a du szerint 300M. A du -h backup/* a második nevet ki sem írta, mert azt már megszámolta az elsőnél. Ha mégis minden nevet külön szeretne számolni, használja a -l (--count-links) kapcsolót: a mintakönyvtár így 805 MB lett. Hardlinkeket például egyes mentőprogramok használnak (az egymást követő mentések közös fájljai egyszer foglalnak helyet), ezért egy mentési könyvtár du-val mért mérete jóval kisebb lehet a fájlok összegénél.
Szimbolikus linkek
A du alapból magát a linket méri, nem azt, amire mutat. A teszten egy a backup könyvtárra mutató link mérete du -sh szerint 0, a -H kapcsolóval 300M volt:
sudo du -sh /tmp/mentes-link # 0
sudo du -shH /tmp/mentes-link # 300M
A -H csak a parancssorban megadott linket követi, a könyvtárfában lévőket nem. Az -L minden linket követ, ezért a mérés a vizsgált könyvtáron kívüli helyekre is kiterjedhet; csak indokolt esetben használja.
Fájlok száma: –inodes
sudo du --inodes -s /usr /var
A --inodes bájtok helyett a fájlok és könyvtárak számát adja. Akkor hasznos, ha a lemez a df -i szerint az inode-ok miatt telt be (sok apró gyorsítótár- vagy munkamenetfájl); így derül ki, melyik könyvtárban van a legtöbb fájl. Az inode-okról a Mit jelent egy inode? cikk ír.
Módosítás ideje: –time
sudo du -h --time -d 1 /var/www/pelda.hu
Minden sor mellé kiírja az adott könyvtárban lévő legutóbb módosított fájl idejét. Így látszik, melyik mappába ír valami éppen most (például egy elszabadult napló).
Interaktív nézet: ncdu
Az ncdu a du menüs változata: egyszer végigméri a könyvtárat, utána a nyilakkal lehet benne lépkedni, rendezni, és a d billentyűvel törölni is. AlmaLinuxon az EPEL tárolóban van (lásd: EPEL tároló telepítése AlmaLinuxon):
sudo dnf install ncdu
sudo ncdu /var/www/pelda.hu
Az alsó sor a tényleges (Total disk usage) és a látszólagos méretet (Apparent size) is mutatja, mint a du és a du --apparent-size. Az ncdu-ban a ? hozza elő a súgót, a q lép ki. Nagy könyvtárnál a -x kapcsoló itt is egy fájlrendszeren tartja (sudo ncdu -x /).
Ha a du kevesebbet mutat, mint a df
Ha a df szerint betelt a lemez, de a du összege jóval kevesebb, valószínűleg egy futó program még nyitva tart egy már törölt fájlt; ezt a Betelt a lemez, de a du nem mutatja cikk írja le. A nagy naplófájlok kezeléséről a nagy error_log fájlok megkereséséről szóló cikk szól.
Ha a takarítás után is kevés a hely, a KVM VPS-csomagok között nagyobb tárhelyűre válthat; cPanel tárhelyen pedig a Lemezhasználat ellenőrzése cPanelben cikk mutatja, hol látja ugyanezt grafikusan.

