A du parancs részletesen: példák a lemezhasználat elemzéséhez

Linux 7 perc olvasás

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.

A du kapcsolói AlmaLinux 10 rendszeren: mappaméretek -d 1 és sort -h szerint, a látszólagos méret 2.5G, az ls -lh szerint 600M a backup mappa, a du a hardlinket egyszer számolja, a ritka lemezkép 0

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 ncdu 1.22 a mintakönyvtáron: a backup, public_html és logs mappa mérete sávokkal, alul a teljes lemezhasználat 505.0 MiB és a látszólagos méret 2.5 GiB

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.

Vissza: Linux leírások (62)