
Analisi del file system con uno script shell
Il codice per creare un resoconto dettagliato dei file e delle directory presenti all’interno del disco rigido o in una parte specifica di questo.
(pagina 1 di 4)

Ovviamente
per quanto riguarda la programmazione
shell, Bash in particolare, ci occuperemo
dell’analisi di un file system o di una parte di
esso, e della successiva creazione di un resoconto
dettagliato del tipo di file e directory che troviamo
al suo interno. Ci occuperemo, in pratica, di creare
un sistema agevole e veloce per reperire tali informazioni e delle strategie
per presentarle efficacemente in un ambiente testuale. Il modo più rapido
per elencare file o directory presenti nel file system è il comando find;
in realtà, questo comando andrebbe studiato a fondo da chiunque voglia
cimentarsi con la scrittura di script per l’ambiente Unix, in quanto la ricca
dotazione di opzioni ne fa un tool indispensabile per la gestione dei file.
Ricordiamo che, come in molti ambiti dello scripting Unix, la gestione dei
file con nomi contenenti spazi è difficoltosa: il comando find permette, in
accoppiata con xargs, di gestire questa situazione. La soluzione generica
è quella seguente:
find -print0 | xargs -0 -I {}
L’opzione -print0 separa i file con un carattere
invisibile, in modo da non trattare lo
spazio come separatore; il comando xargs
legge tali file separandoli con lo stesso carattere (opzione -0), e sostituisce
il nome del file ad una stringa arbitraria, in questo caso “{}” (opzione -I);
il comando espresso verrà attuato su ogni elemento e potrà contenere la
stringa appena menzionata per poter interagire con il file.
Ad esempio, il comando seguente
find -type f -print0 | xargs -0 -I {} wc -l {}
esegue “wc -l” su ogni file. La sintassi proposta è caldamente consigliata
per ogni script che faccia uso di find, in quanto, in particolare oggi, i file
system sono sempre pieni di file con nomi contenenti spazi: basti pensare a
tutti i file musicali o ai video che possediamo, la maggior parte dei quali ha
degli spazi nel nome. Nello script che analizzeremo, innanzitutto creeremo
tre liste di elementi del file system e le salveremo su tre file temporanei:
nessuno vieta di creare file temporanei all’interno di uno script, basta avere
l’accortezza di scegliere nomi non comuni e di rimuovere i file alla fine
dello script. I tre elenchi creati nello script sono: una lista di tutti i file contenuti
nella directory indicata, preceduti dalla dimensione in byte, un elenco
di tutti i tipi di file incontrati ed un elenco delle directory immediatamente
contenute nella directory analizzata, precedute dalla loro dimensione in
kilobyte. Il secondo passo consiste nel presentare queste informazioni in
modo completo e facilmente leggibile. Abbiamo optato per un istogramma
che permetta di capire velocemente la distribuzione dei file e delle directory
per dimensione. Più avanti
ci occuperemo dell’analisi dettagliata del codice che lo compone, mentre
la sua esecuzione non presenta particolari problemi. Può essere eseguito da
root o da utente comune, dipende dalla directory che desideriamo analizzare
e, quindi, dai permessi che abbiamo su questa. Il nome dello script è fs_stat.sf. Copiamolo in una qualsiasi directory, assegniamogli i permessi
di esecuzione con chmod +x fs_stat.sh e poi eseguiamolo. Ad esempio, per
analizzare il contenuto della directory /usr il comando diventa:
./fs_stat.sh /usr/
Sempre
lo stesso script ma eseguito questa volta come utente comune; in questo
caso l’analisi è limitata alla propria directory home.
Stampa delle Statistiche fs_stat.sh