Utilisateur:logophile F/dd (Unix)
dd
est une commande unix permettant de copier un fichier en effectuant des conversions, en ne sélectionnant qu'une partie de données à copier. Il est particulièrement adapté à la copie sur des périphériques blocs tel que des disques durs ou des lecteurs CD-ROM.
Origine du nom
modifierPlusieurs théories existent pour justifier le nom de cette commande.
L'une dit que l'on voulait nommer cette commande cc
pour Copy and Convert, mais ce nom de commande était déjà utilisée par le compilateur C, on a utilisé la lettre de l'alphabet suivant la lettre 'c' : dd
.
Selon le manuel d'utilisation de certaines distributions Unix, ce serait l'acronyme de data dump.
Et selon la page anglophone de Wikipedia sur dd
, ce nom viendrait de "dataset definition" et serait une commande de l'IBM JCL (donc antérieure à Unix et au langage C) qui aurait gardé la syntaxe de cette machine.
Certains lui attribuent le rétro-acronyme satirique Data Destroyer (destructeur de données), car en effet, une simple erreur de manipulation de cette commande sur un disque dur peut détruire irrémédiablement les données sans aucun avertissement.
Syntaxe
modifierLa syntaxe de dd
est différente des autres commandes unix traditionnelles. dd utilise des options de la forme option=valeur au lieu de -option valeur.
Les principales options de dd
sont les suivantes :
if=fichier_entree
(Input File) : lit ce fichier en entrée. Cela peut être un fichier régulier comme un périphérique de type bloc. Par défaut, c'est l'entrée standard qui est utilisée (par exemple le clavier).of=fichier_sortie
(Output File) : écrit dans ce fichier en sortie.bs=t_b
(Block Size) : copie les données par blocs det_b
octets.count=n_b
: ne copie quen_b
blocs.skip=n_e
: ignore lesn_e
premiers blocs du fichier d'entrée[1] (Ne copie le fichier d'entrée qu'à partir du bloc de rangn_e
+1.)seek=n_s
: ignore lesn_s
premiers blocs du fichier de sortie[1] (Ne commence à écrire dans le fichier de sortie qu'à partir du bloc de rangn_s
+1.)ibs=n_o
: fixe la taille des blocs d'entrée àn_o
octets. Par défaut 512 octets.conv=t_c1,t_c2
: effectue une ou plusieurs conversion(s) des typest_c1
,t_c2
, etc.- Par exemple,
ascii
converti de l'EBCDIC en ASCII. ebcdic
: ASCII vers EBCDIC.ibm
: EBCDIC vers ASCII avec les règles IBM.swab
: inverse les deux octets de chaque mot de 2 octets.lcase
: convertit en minuscules.ucase
: convertit en majuscules.sync
: complète les blocs d'entrée avec des zéros pour obtenir des blocs deibs
octets.noerror
: continue même s'il y a des erreurs.block
: enregistrements de longueur variable, par exemple ceux terminés par un retour à la ligne, vers des enregistrements de longueur fixe.unblock
: enregistrements de longueur fixe vers des enregistrements de longueur variable.notrunc
: ne tronque pas le fichier de sortie.
- Par exemple,
-help
: message d'aide.cbs=t_t
: taille du tampon det_t
octets (longueur d'enregistrement logique). Seulement pour les conversionsascii
,ebcdic
,ibm
,block
,unblock
.
Exemples
modifierIl faut toujours faire attention lorsqu'on utilise dd
. Le simple fait d'oublier une option ou d'échanger if
et of
peut avoir des conséquences désastreuses.
Pour faire une image de sauvegarde d'un CD ou d'un DVD :
$> dd if=/dev/cdrom of=image-cd.iso
Pour formater une disquette à partir d'une image :
$> dd if=image-disquette.bin of=/dev/fd0
Pour découper un fichier en tranche de 100 Mio ; pour cet usage, la commande split
est cependant plus appropriée :
$> dd bs=10K count=10K if=grosfichier of=grosfichier-part1
$> dd bs=10K count=10K skip=10K if=grosfichier of=grosfichier-part2
$> dd bs=10K count=10K skip=20K if=grosfichier of=grosfichier-part3
$> dd bs=10K count=10K skip=30K if=grosfichier of=grosfichier-part4
# et ainsi de suite
Pour faire une copie de la table de partition du disque hda :
$> dd if=/dev/hda of=copie-table-partition bs=512 count=1
Pour détruire les données d'un disque dur hda en le remplissant de zéros (non-recommandé) ; voir aussi la commande shred :
$> dd if=/dev/zero of=/dev/hda
Pour inverser (échanger) chaque paire d'octets du fichier nuxi et écrire la sortie dans le fichier unix :
$> dd if=nuxi of=unix conv=swab
GNU ddrescue
modifierGNU ddrescue est une variante améliorée de la commande UNIX dd
qui a la particularité de ne pas s'arrêter lorsqu'une lecture échoue, ce qui permet, entre autres, la récupération d'une partie d'un disque endommagé. Cette version est entretenue par le projet GNU[2].
Notes & Références
modifier- Ellen Siever, Stephen Figgins et Aaron Weber (trad. François Cerbelle, Gérald Colangelo, Dominique Colombani, Joëlle Cornavin & François Jeanmougin), LINUX EN CONCENTRE : Manuel de référence [« LINUX in a Nutshell »], O'Reilly, , 4e éd. (ISBN 2-84177-277-2, présentation en ligne)
- (en) GNU ddrescue 1.14 a été réalisé le 12 janvier 2011.