# Dd (Unix)

dd è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX, che copia dei dati in blocchi, opzionalmente effettuando conversioni.

## Descrizione

Nei sistemi Unix tutti i driver hardware (come gli hard disk) sono trattati come file normali all'interno del file system. dd esegue le normali operazioni tra file (leggi, scrivi, copia) su questi file speciali e permette anche di convertire i dati nella fase di copiatura, inclusa la conversione dall'encoding ASCII a quello EBCDIC. Può anche essere usato per creare file sparsi.

## Sintassi

La sintassi generale è:
A differenza degli altri comandi dei sistemi Unix, i parametri sono tutti nella forma nome=valore (senza spazi né prima né dopo il segno "=") e possono essere specificati in qualunque ordine.

## Opzioni

Tra i parametri principali vi sono:

### if=nome_file

    Legge i dati dal file nome_file invece che dallo standard input.

### of=nome_file

    Scrive i dati sul file nome_file invece che sullo standard output.

### bs=dimensioni(bytes)

    Legge e scrive dati in blocchi delle dimensioni specificate.

### ibs=dimensioni

    Legge i dati in blocchi delle dimensioni specificate (default: 512).

### obs=dimensioni

    Scrive i dati in blocchi delle dimensioni specificate (default: 512).

### count=numero_blocchi

    Copia solo il numero specificato di blocchi.

### skip=numero_blocchi

    Legge e scarta il numero di blocchi indicato prima di iniziare a copiare.

### seek=numero_blocchi

    Avanza del numero di blocchi indicato prima di iniziare a scrivere.

### conv=conversione[,conversione …]

    Effettua durante la copia le conversioni elencate (separate da virgole). Tra le principali conversioni vi sono:

   ### ascii

       Converte dalla codifica EBCDIC alla codifica ASCII.

   ### ebcdic

       Converte dalla codifica ASCII alla codifica EBCDIC.

   ### ibm

       Converte dalla codifica ASCII ad una variante della codifica EBCDIC.

   ### lcase

       Converte i caratteri in minuscolo.

   ### ucase

       Converte i caratteri in maiuscolo.

   ### excl

       Fallisce se il file di output esiste già; dd deve creare il file di output in sé.

   ### nocreat

       Non crea il file di output; il file di output deve esistere necessariamente.

   ### notrunc

       Non tronca il file di output.

   ### fsync

       Sincronizza i dati di output e i metadata poco prima del completamento. Questo forza fisicamente la scrittura dei dati di output e dei metadata.

   ### sync

       riempie ogni blocco di input con NUL fino alla dimensione di ibs; quando usato insieme a block o unblock riempie con spazi invece di NUL
Le dimensioni dei blocchi sono specificate in numero di byte (es. 42), oppure possono essere specificate con altre unità di misura specificando dei suffissi:
* come numero di blocchi da 512 byte specificando il suffisso b (es. 33b);
* come numero di KiB specificando il suffisso k (es. 1024k);
La versione GNU di dd ha supporto per ulteriori suffissi, conversioni e parametri ed è possibile inviare il segnale SIGUSR1 ad un processo dd in esecuzione per fargli mostrare sullo standard error la quantità di dati fino a quel momento copiati senza interromperlo.

## Esempi di utilizzo

Effettua una copia di una partizione del disco /dev/hda1 nel file backup_partizione_1 (nei sistemi GNU/Linux):
Prealloca un file chiamato dati da 20 MiB:
Effettua una copia dei dati che risiedono sul dispositivo /dev/sr0, che nei sistemi GNU/Linux corrisponde solitamente al primo lettore CD/DVD SCSI, pertanto recuperando di fatto da esso l'immagine .iso di un CD/DVD:
Per effettuare la masterizzazione di un file immagine iso si inserisce nel campo 'if=' il nostro file immagine e nel campo 'of=' il nostro masterizzatore CD/DVD, 'bs=8M' definisce la grandezza del nostro blocco dati:
Effettua un wipe del disco sovrascrivendo tutti zero:
Un altro metodo per effettuare il wipe potrebbe essere la sovrascrittura con dati casuali: