11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capitolo 12. Filtri, programmi e coman<strong>di</strong> esterni<br />

In modo simile, dd può copiare l’intero contenuto <strong>di</strong> un floppy, persino <strong>di</strong> uno formattato su un SO<br />

“straniero” , sul <strong>di</strong>sco fisso come file immagine.<br />

dd if=/dev/fd0 of=/home/bozo/projects/floppy.img<br />

Altre applicazioni <strong>di</strong> dd comprendono l’inizializzazione <strong>di</strong> file <strong>di</strong> swap temporanei (Esempio 28-2)<br />

e <strong>di</strong> ram<strong>di</strong>sk (Esempio 28-3). Può anche eseguire una copia <strong>di</strong> basso livello <strong>di</strong> un’intera partizione<br />

<strong>di</strong> un <strong>di</strong>sco fisso, sebbene ciò non sia particolarmente raccomandabile.<br />

Ci sono persone (presumibilmente che non hanno niente <strong>di</strong> meglio da fare con il loro tempo) che<br />

pensano costantemente ad applicazioni interessanti <strong>di</strong> dd.<br />

Esempio 12-55. Cancellare in modo sicuro un file<br />

#!/bin/bash<br />

# blot-out.sh: Cancella "ogni" traccia del file.<br />

# Questo script sovrascrive il file <strong>di</strong> riferimento alternativamente con byte<br />

#+ casuali e con zeri, prima della cancellazione finale.<br />

# Dopo <strong>di</strong> che, anche un esame <strong>di</strong>retto dei settori del <strong>di</strong>sco, usando i meto<strong>di</strong><br />

#+ convenzionali, non riuscirà a rivelare i dati originari del file.<br />

PASSI=7 # Numero <strong>di</strong> sovrascritture.<br />

# Aumentando questo valore si rallenta l’esecuzione dello<br />

#+ script, specialmente con i file <strong>di</strong> gran<strong>di</strong> <strong>di</strong>mensioni.<br />

DIMBLOCCO=1 # L’I/O con /dev/urandom richiede <strong>di</strong> specificare la <strong>di</strong>mensione<br />

#+ del blocco, altrimenti si ottengono risultati strani.<br />

E_ERR_ARG=70 # Co<strong>di</strong>ce d’uscita per errori generici.<br />

E_FILE_NON_TROVATO=71<br />

E_CAMBIO_IDEA=72<br />

if [ -z "$1" ] # Nessun nome <strong>di</strong> file specificato.<br />

then<br />

echo "Utilizzo: ‘basename $0‘ nomefile"<br />

exit $E_ERR_ARG<br />

fi<br />

file=$1<br />

if [ ! -e "$file" ]<br />

then<br />

echo "Il file \"$file\" non è stato trovato."<br />

exit $E_FILE_NON_TROVATO<br />

fi<br />

echo; echo -n "Sei assolutamente sicuro <strong>di</strong> voler cancellare \"$file\" (s/n)? "<br />

read risposta<br />

case "$risposta" in<br />

[nN]) echo "Hai cambiato idea, vero?"<br />

exit $E_CAMBIO_IDEA<br />

335

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!