Il comando du
è uno standard Linux/Unix (e Mac) che ci permette di ottenere informazioni su file e cartelle in modo molto rapido.
Come la maggior parte dei comandi, ha molti opzioni e flag per ottenere l’output che ci interessa davvero. In questo articolo vedremo gli usi basilari e anche qualche flag interessante che può velocizzarci il lavoro.
Partiamo dal comando base, nudo e crudo, senza opzioni:
luca$ du 56 ./database/migrations 8 ./database/seeders 8 ./database/factories 96 ./database 56 ./bootstrap/cache 64 ./bootstrap ... 32498 /devdev
Vediamo qualche riga di output date dal comando base. Il valore sulla sinistra (56, 8, etc.) indica il peso della directory e accanto, naturalmente, la directory. L’ultima riga, ci ripropone la directory iniziale /devdev
con la somma dei pesi, e serve da “riassunto” di tutte le directory contenuta in esse. Non c’è indicazione dell’unità di misura (56..cosa?): diamo uno sguardo alle opzioni per ottenere un output più umano.
-h, –human-readable
Il flag -h rende gli output che indicano il peso delle directory in un formato human-readable, espresso in Bytes/Kilobytes. Se rilanciamo il comando dh -h sulla directory precedente, otterremo qualcosa del genere, con le dimensioni espresse in Kilo/Mega/Gigabytes:
luca$ du -h 12K ./database/migrations 4K ./database/seeders 4K ./database/factories
-s, –summarize
Il flag -s
è ideale da usare soprattutto in congiunzione con quello -h
. Combinando i loro poteri, otterremo il peso complessivo di una directory espresso in formato umano:
luca$ du -sh 126K /devdev/
Il formato di questo output è naturalmente identico a quello di -h
.
-a, –all
C’era da aspettarselo: come suggerisce il nome, il flag -a
mostrerà non sono le directory, ma anche tutti i file contenuti in esse. In combinazione con -h
, otterremo qualcosa del genere
luca$ du -ah 12K ./database/migrations >4K ./database/seeders 1K ./database/seeders/Seeder.php 4K ./database/factories
–time
Questo flag mostra la data di ultima modifica di file e directory. Potrebbe essere particolarmente utile per capire in quale directory un utente ha lavorato oppure quale file è stato cambiato. Eccolo in congiunzione con -ah
:
luca$ du -ah --time 1K 2024-01-07 11:30 ./database/seeders/Seeder.php 1K 2024-01-07 16:48 ./database/connectors 4K 2024-01-07 11:34 ./database/migrations
Ordinare per dimensione
Per ordinare i risultati per dimensione, dobbiamo utilizzare il comando du
in combinazione con il comando sort
. Nella sua forma più semplice, potremmo fare questo:
luca$ du -h /devdev | sort -rh 45M /db 32M /seeders 3M /helpers 1M /classes 1M /users 50K /license
Abbiamo usato le opzioni -r
e -h
per il comando sort
. L’opzione -r
dice a sort
di rovesciare l’output di du
, in modo da mostrare i risultati in modo discendente, dal più pesante al più leggero. L’opzione -h
, invece, è tutto analoga a quella di du -h
, e serve per avere i pesi in formato umano.
Trovare i 5 file più grandi
Per trovare i 5 file più grandi in una directory, possiamo “tagliare” i risultati del precedente comando, utilizzando il comando head
:
luca$ du -h /devdev | sort -rh | head -n 10 45M /db 32M /seeders 3M /helpers 1M /classes 1M /users
Specificare la profondità di ricerca
Di default, il comando du
itera tutte le sottodirectory delle sottodirectory delle sottodirectory.. insomma avete capito. Questa ricorsività può essere controllata, dicendo a du
di “scendere” al massimo di n livelli di sottocartelle. Per farlo, è sufficiente utilizzare l’opzione --max--depth
come in questo caso, nel quale il listing si fermerà al secondo livello:
du -h --max-depth=2 /devdev | sort -rh
Specificare il tipo di file
Se volessimo, ad esempio, cercare tutti i file di tipo .mkv, magari ordinandoli per dimensione per capire cosa ci intasa il disco, possiamo utilizzare il comando du
in questo modo:
du -h /filmazzi/*.mkv | sort -rh 5.0G /filmazzi/Il.risveglio.della.forza.mkv 4.8G /filmazzi/Il.ritorno.dello.jedi.mkv 4.4G /filmazzi/L.Impero.colpisce.ancora.mkv