devdev / in the loop

Il comando du, esempi e flag

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
Questo articolo ti è stato utile?
Server – LETTURA 5 MINUTI rsync: come escludere file e cartelle
Rsync (Remote sync) è uno strumento molto potente per poter sincronizzare due cartelle, e per poter effettuare backup incrementali. In…
Server – LETTURA 4 MINUTI Come bloccare un IP con .htaccess
Bloccare l’accesso ad un sito può essere utile per vari motivi: bloccare script malevoli, proteggersi dagli stalker o da quegli…
Server – LETTURA 12 MINUTI Che cos’è la High Availability
In questi anni stiamo vedendo un incremento verticale delle strutture ad alta efficacia, sia in termini di performance che di…
Server – LETTURA 5 MINUTI WordPress: PHP 7.2 vs PHP 7.3 (performance e benchmark)
PHP 7.3 è stato rilasciato alla fine del 2018, quindi comincia ad essere maggiormente diffuso sui sistemi in produzione. Oggi…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.