Cercar fitxers a Linux

La comanda du a Linux: quant espai ocupen fitxers i directoris



La comanda du (disk usage) mostra quant espai de disc ocupen els fitxers i els directoris. Si df et diu que el disc és ple, du et diu què l’omple. Recorre els directoris i suma la mida de tot el que hi ha a dins, subdirectori per subdirectori.

Sintaxi

du [opcions] [fitxer o directori...]

Sense arguments, analitza el directori actual. Sense opcions, mostra cada subdirectori en blocs d’1 KiB, cosa que costa de llegir; per això gairebé sempre es fa servir amb -h i -s o -d.

Opcions més útils

OpcióQuè fa
-hMides llegibles (K, M, G)
-sNomés el total de cada argument, sense desglossar subdirectoris
-d N, --max-depth=NDesglossa fins a N nivells de profunditat
-aMostra també els fitxers, no només els directoris
-cAfegeix una línia amb el total general
-xNo surt del sistema de fitxers (no compta discos muntats a dins)
--exclude=patróNo compta els fitxers o directoris que coincideixen
-t midaNomés mostra el que ocupa com a mínim aquesta mida (p. ex. -t 100M)
--apparent-sizeLa mida real de les dades, no l’espai que ocupen al disc
-k, -mMides en KiB o MiB

Exemples

Sense opcions, en KiB i desglossat per subdirectoris (fixa’t que l’ordre és el del recorregut, no alfabètic):

$ du projecte
3060	projecte/src
492	projecte/docs
1200	projecte/.git/pack
1200	projecte/.git
4756	projecte

El mateix, llegible:

$ du -h projecte
3.0M	projecte/src
492K	projecte/docs
1.2M	projecte/.git/pack
1.2M	projecte/.git
4.7M	projecte

Només el total d’un directori:

$ du -sh projecte
4.7M	projecte

Quant ocupa cada element del directori actual, ordenat de més petit a més gran (sort -h entén les unitats K, M, G):

$ du -h -d 1 projecte | sort -h
492K	projecte/docs
1.2M	projecte/.git
3.0M	projecte/src
4.7M	projecte

Cada element per separat i un total:

$ du -shc projecte/*
492K	projecte/docs
4.0K	projecte/LLEGEIX.txt
3.0M	projecte/src
3.5M	total

Fixa’t que el total és 3,5 M i no 4,7 M: el comodí * del shell no inclou els fitxers i directoris ocults (aquí, .git). du sí que els compta quan li passes el directori sencer.

Fitxers i directoris de més de 1 MiB:

$ du -ah -t 1M projecte
3.0M	projecte/src/app.bin
3.0M	projecte/src
1.2M	projecte/.git/pack/p
1.2M	projecte/.git/pack
1.2M	projecte/.git
4.7M	projecte

Sense comptar un directori:

$ du -sh --exclude=.git projecte
3.5M	projecte

Els 10 directoris que més ocupen de /var, sense sortir del disc (amb sudo, perquè hi ha directoris que un usuari normal no pot llegir):

sudo du -xh -d 1 /var | sort -h | tail -10

Mida al disc o mida real

Per defecte, du mostra l’espai que ocupa al disc, que es reserva en blocs (normalment de 4 KiB). Un fitxer de 5 bytes ocupa un bloc sencer:

$ du -h projecte/LLEGEIX.txt
4.0K	projecte/LLEGEIX.txt
$ du -h --apparent-size projecte/LLEGEIX.txt
5	projecte/LLEGEIX.txt

La diferència també apareix amb els fitxers dispersos (sparse), com les imatges de màquines virtuals: poden tenir una mida aparent de 50 GB i ocupar-ne molt menys al disc.

Compte amb…

  • du i df no sempre coincideixen. Si esborres un fitxer gran que algun programa encara té obert (un log, per exemple), du ja no el compta però df sí, perquè l’espai no s’allibera fins que el programa el tanca. Ho veuràs amb sudo lsof +L1.
  • -a no vol dir «fitxers ocults»: vol dir «mostra també els fitxers, no només els directoris». Els ocults, du sempre els compta.
  • En directoris enormes tarda: ha de recórrer-ho tot. Per explorar un disc ple, és més còmode ncdu, que fa el mateix recorregut una vegada i et deixa navegar pels resultats (sudo apt install ncdu).

Comandes relacionades