Rendere “umano” l’output del comando “du” (Disk Usage) e contemporaneamente riorganizzarlo per size

Ad un sistemista capita spessissimo, e potrebbe capitare anche a voi, di non poter usare una bella e comoda interfaccia grafica che metta a disposizione tanti bei programmini che semplificano la vita: di colpo ci si ritrova in un terminale a carattere (una banalissima, quanto utilissima console).

Dovete, per forza di cose, scoprire quale directory o file occupa più spazio disco rispetto agli altri: cosa usate?
Ovviamente “du“, risponderete voi, che diamine! (Con l’aggiunta di un “che domande sceme che fai!” detto non troppo fra i denti…)

Ok, allora fatemi vedere cosa ne viene fuori utilizzando le opzioni “k” (blocchi da 1K) e “s” (somma totale per riga).

Avvertenze:
“1 – [/usr]” è il mio “prompt” in console… indica solo dove vengono eseguiti i comandi.
* .* non sono uguali a *.* di msdos-iana memoria: notate bene che fra “*” e “.*” c’è un “blank” (spazio)

1-[/usr] du -ks * .*
4488 X11R6
628984 bin
4 games
14084 include
1233000 lib
2697144 lib64
161500 local
53316 sbin
2472516 share
594528 src
0 tmp
16 x86_64-suse-linux

Hmmmm… perfetto, direi… in un output semplice come questo non c’è che dire, a colpo d’occhio si capisce qual è la directory che occupa più spazio.

Ok, allora aggiungiamo un parametro che ci permetta di avere una visione d’insieme ancora migliore (“h”, trasforma l’output in formato “umano”):

1-[/usr] du -ksh * .*
4.4M X11R6
615M bin
4.0K games
14M include
1.2G lib
2.6G lib64
158M local
53M sbin
2.4G share
581M src
0 tmp
16K x86_64-suse-linux

Wow! Adesso si che è tutto chiaro! “K” sta per kilobytes, “M” per megabytes e “G” per gigabytes, giusto?
Ma immaginiamo un albero complesso con un centinaio di directory… ok, adesso vi mostro un output pazzesco… no?!
Ok, no, meglio lasciar perdere, vi farei impazzire a cercare il numero maggiore fra tutti.
Mi limito a dirvi come riorganizzare l’output in un colpo solo mandando l’output precedente in “pipe” (|) col comando “sort” (parametrizzato con “n” che effettua confronti numerici).
Questo comando varrà anche per decine, centinaia, migliaia, milioni, miliardi, fantastiliardi di directory…

1-[/usr] du -ksh * .* | sort -n
0 tmp
1.2G lib
2.4G share
2.6G lib64
4.0K games
4.4M X11R6
14M include
16K x86_64-suse-linux
53M sbin
158M local
581M src
615M bin

Hmmmm… ma non li riordina per dimensione!!! Che diamine! Se dovessi riordinare per size tutte le directory dell’Universo sarei nei guai!

Ok, allora bisogna lavorarci un po’ aggiungendo alcuni comandi che richiedono ulteriori ed approfondite spiegazioni.
Lasciatemi brevemente dire che, all’epoca degli antichi Romani, quando beltà spledea negli occhi di ragazza… eh?! Sto dilungandomi troppo? Va beh… allora scrivete questa riga nel vostro “/home/nome_utente/.bashrc” oppure, per metterlo a disposizione di tutti gli utenti del sistema, inseritela in /etc/bash.bashrc.local e potrete usare questo comando dalla vostra prossima login:

alias sdu=’du -sk * .* | sort -n | perl -ne ‘\”($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf(“%.1f”,$s);print “$_\t$f”; last};$s=$s/1024}’\”’

Attenzione: si tratta di una sola riga anche se la vedete su più righe.

Usandolo otterrete questo output:

1-[/usr] sdu
0 tmp
4.0K games
16K x86_64-suse-linux
4.4M X11R6
14M include
53M sbin
158M local
581M src
615M bin
1.2G lib
2.4G share
2.6G lib64

Bello vero? Tutto ordinato per size a partire dai “K” per arrivare ai “G”

Prerequisito fondamentale perché questo comando funzioni è che “perl” sia installato, mi raccomando! Di questo comando parleremo in un prossimo articolo.

Buon uso di “sdu“… come? Volete sapere che significa? Ah, si, “Sorted Disk Usage“.

Questa voce è stata pubblicata in Linux e contrassegnata con , , , , , . Contrassegna il permalink.