Come trovare files e directories di grandi dimensioni, in Linux
Un bravo amministratore Linux deve periodicamente controllare quali sono i files e le cartelle che occupano più spazio su disco.
A me, ad esempio, capita spesso di dover monitorare file di LOG, e devo aver modo di controllare in modo agevole se esistono file log che stanno assumento dimensioni troppo elevate.
In questo articolo ti spiego come trovare questi elementi nel filesystem Linux, utilizzando i comandi du e find.
Utilizzo del comando "du" per trovare directories e files che occupano il maggiore spazio disco
Ad esempio, per individuare directories e files che occupano maggiore spazio disco all'interno della directory dove collochiamo le nostre pagine web, cioè "/var/www/html", utilizziamo:
# du -a /var/www/html
Il risultato sarà un elenco molto lungo di tutte le directories e files presenti nella cartella "/var/www/html" con il relativo peso.
...................
8 /var/www/html/op/pub/js/tinymce/plugins/visualblocks/css
12 /var/www/html/op/pub/js/tinymce/plugins/visualblocks
4 /var/www/html/op/pub/js/tinymce/plugins/visualchars/plugin.min.js
4 /var/www/html/op/pub/js/tinymce/plugins/visualchars
4 /var/www/html/op/pub/js/tinymce/plugins/wordcount/plugin.min.js
4 /var/www/html/op/pub/js/tinymce/plugins/wordcount
444 /var/www/html/op/pub/js/tinymce/plugins
4 /var/www/html/op/pub/js/tinymce/skins/lightgray/content.min.css
4 /var/www/html/op/pub/js/tinymce/skins/lightgray/content.inline.min.css
36 /var/www/html/op/pub/js/tinymce/skins/lightgray/skin.ie7.min.css
36 /var/www/html/op/pub/js/tinymce/skins/lightgray/skin.min.css
12 /var/www/html/op/pub/js/tinymce/skins/lightgray/fonts/tinymce-small.eot
12 /var/www/html/op/pub/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf
28 /var/www/html/op/pub/js/tinymce/skins/lightgray/fonts/tinymce-small.svg
12 /var/www/html/op/pub/js/tinymce/skins/lightgray/fonts/tinymce-small.woff
...................
Non è però questo il risultato che vogliamo ottenere.
A noi servono directories e files che occupano il maggiore spazio su disco, per cui ordiniamo ("sort") il risultato per peso ("-n") in ordine decrescente ("-r") cioè dal più grande al più piccolo
# du -a /var/www/html | sort -n -r
Il risultato sarà un elenco ordinato, ma che contiene ancora tutte le directories e files
Limitiamoci ai primi 5 elementi:
# du -a /var/www/html | sort -n -r | head -n 5
Ecco il risultato
94472 /var/www/html
47760 /var/www/html/site1
46700 /var/www/html/site2
29984 /var/www/html/site1/common
29792 /var/www/html/site1/write
Ricapitolando
- du: mostra l'elenco delle directories e subdirectories con relativo spazio occupato
- - a: visualizza anche i files
- sort: ordina le righe ottenute
- -n: ordina le righe ottenute "numericamente" (invece che alfabeticamente)
- -r: inverte il risultato
- head: stampa a video le prime 10 righe del risultato:
- -n: stampa a video prime "n" righe che vogliamo visualizzare, nel nostro esempio 5.
Il peso di files e directories è espresso in bytes.
Per ottenere un peso in un formato più leggibile, in Kilobytes, Megabytes, Gigabytes, utilizziamo l'opzione "-h" ("human readable")
# du -h /var/www/html | sort -n -r | head -n 5
Ecco il risultato
1020K /var/www/html/contents/8/289
1020K /var/www/html/contents/4/32600.mp4
1020K /var/www/html/contents/4/15966.mp4
1020K /var/www/html/contents/4/15148.mp4
1020K /var/www/html/contents/1/850.jpg
Vediamo adesso altri utilizzi del comando "du".
L'esempio seguente mostra le 5 directories, che, nel nostro filesystem, stanno consumando più spazio su disco:
# du -ahs * | sort -rh | head -5
Questo esempio invece moltra cartelle e files più grandi, comprese le sottodirectory:
# du -Sh | sort -rh | head -5
Per ulteriori specifiche relative all'utilizzo del comando "du" si rimanda all'articolo dedicato.
Utilizziamo il comando "find" per troviamo i files con peso maggiore
Se desideriamo visualizzare solo i file più grandi, all'interno della nostra cartella web, eseguiamo il seguente comando:
# find /var/www/html/ -type f -exec du -Sh {} + | sort -rh | head -n 5
Oppure in alternativa
# find /var/www/html/ -type f -printf "%s %p\n" | sort -rn | head -n 5
Il risultato sarà
2,6M /var/www/html/sito1/pub/js/ViewerJS/pdf.worker.js
1,9M /var/www/html/sito1/pub/js/news.js
1,5M /var/www/html/sito1/write/lista.csv
1,3M /var/www/html/sito1/log/ws.log
1,1M /var/www/html/sito1/log/ws2.log
Nota: Se non indichiamo il path della directory da analizzare, il comando "find" considera la directory in cui ci troviamo nel filesystem:
# find -type f -exec du -Sh {} + | sort -rh | head -n 5
Il risultato sarà
28K ./.bash_history
16K ./sent
4,0K ./.tcshrc
4,0K ./.rnd
4,0K ./.cshrc
Se vogliamo conoscere i file che occupano maggiore spazion nella cartella "/var/www/html":
# find /var/www/html/ -type f -exec du -Sh {} + | sort -rh | head -n 5