\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{mer. juin 30 17:52:10 CEST 2010}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={dd},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Copie de fichier et conversions},
CreationDate={D:20100630175210},
ModDate={D:20100630175210},
Keywords={coreutils;GNU}
}}
\begin{document}
 
\begin{center}
{\Huge dd }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Copie de fichier et conversions}
 
\vspace{10mm}
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} if=FILE]{lit FILE au lieu de l'entrée standard}
\item[\hspace{1mm} of=FILE]{Écrit dans FILE au lieu de la sortie standard. par défaut tronque aux octets '0'}
\item[\hspace{1mm} ibs=BYTES]{Définis la taille de block en entrée (défaut 512 octets)}
\item[\hspace{1mm} obs=BYTES]{Définis la taille de block en sortie (défaut 512 octets)}
\item[\hspace{1mm} bs=BYTES]{Définit la taille de block en entrée et en sortie. ça force dd à lire et écrire par block.}
\item[\hspace{1mm} cbs=BYTES]{définit la taille de block de conversion. En convertissant des enregistrements de longueur variable à des longueurs fixes (conv=block) ou inversé (conv=unblock), utilise BYTES comme longueur d'enregistrement.}
\item[\hspace{1mm} skip=BLOCKS]{saute BLOCKS dans le fichier d'entée avant de copier}
\item[\hspace{1mm} seek=BLOCKS]{saute BLOCKS dans le fichier de sortie avant de copier}
\item[\hspace{1mm} count=BLOCKS]{copie BLOCKS dans le fichier d'entrée.}
\item[\hspace{1mm} status=noxfer]{n'affiche pas le taux de transfert et les statistiques de volume quand dd se termine.}
\item[\hspace{1mm} conv=CONVERSION\texttt{[},CONVERSION\texttt{]}...]{Convertit le fichier comme spécifié par CONVERSION :}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} ascii]{Convertit EBCDIC vers ASCII.}
\item[\hspace{6mm} ebcdic]{Convertit ASCII vers EBCDIC}
\item[\hspace{6mm} ibm]{Convertit ASCII vers EBCDIC alternatif}
\item[\hspace{6mm} block]{pour chaque ligne dans l'entrée, sort cbs octets, remplaçant un newline par un espace et en complétant avec des espaces si nécessaire.}
\item[\hspace{6mm} unblock]{remplace les espaces à la fin dans chaque block d'entrée de taille cbs par un newline.}
\item[\hspace{6mm} lcase]{Change les lettres majuscules en minuscules}
\item[\hspace{6mm} ucase]{Change les lettres minuscules en majuscules}
\item[\hspace{6mm} swab]{inverse chaque pair d'octets en entrée.}
\item[\hspace{6mm} noerror]{Continue même en cas d'erreurs}
\item[\hspace{6mm} nocreat]{ne crée pas de fichier de sorite, il doit déjà exister.}
\item[\hspace{6mm} excl]{échoue si le fichier de sorite existe déjà.}
\item[\hspace{6mm} notrunc]{Ne tronque pas le fichier de sortie}
\item[\hspace{6mm} sync]{complète chaque block d'entrée à la taille de ibs, en complétant avec des '0', ou des espace si block ou unblock est spécifié.}
\item[\hspace{6mm} fdatasync]{Synchronise les données en sortie juste avant de finir. Cela force une écrite physique.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} iflag=FLAG\texttt{[},FLAG\texttt{]}...]{Accède au fichier d'entrée en utilisant les flags spécifiés.}
\item[\hspace{1mm} oflag=FLAG\texttt{[},FLAG\texttt{]}...]{Accède au fichier de sortie en utilisant les flags spécifiés.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} append]{Écrit en mode ajout.}
\item[\hspace{6mm} cio]{Utilise le mode I/O courant pour les données. effectue effectue un I/O direct, outrepassant les requis POSIX.}
\item[\hspace{6mm} direct]{Utilise I/O direct pour les données, annulant le buffer cache.}
\item[\hspace{6mm} directory]{Échoue à moins que le fichier soit un répertoire. bcp d'OS ne permettent pas I/O sur un répertoire.}
\item[\hspace{6mm} dsync]{Utilise I/O synchronisé pour les données. Pour le ficheir de sortie, çà force l'écriture physique pour chaque écriture.}
\item[\hspace{6mm} sync]{Utilise I/O synchronisé pour les données et les métadonnées.}
\item[\hspace{6mm} nonblock]{Utilise I/O non-blocking}
\item[\hspace{6mm} noatime]{Ne met pas à jours le atime des fichiers.}
\item[\hspace{6mm} nofollow]{ne suit pas les liens symboliques}
\item[\hspace{6mm} nolinks]{échoue si le fichier à de multiples liens dures.}
\item[\hspace{6mm} binary]{Utilise I/O binaire, pour les plate-formes distinguant les fichier binaire des fichiers texte.}
\item[\hspace{6mm} text]{Utilise I/O text.}
\item[\hspace{6mm} fullblock]{accumule les blocks complet en entrée.}
\end{description}
 
\hspace{1mm}  \textbf{BYTES} et \textbf{BLOCKS} peuvent s'exprimer avec un multiplicateur : \textbf{b} vaut 512, \textbf{c} vaut 1, \textbf{w} vaut 2, ou n'importe quel autre multiplicateur.
\vspace{5mm} \\
\hspace{1mm}  Envoyer un signal \textbf{INFO} (ou \textbf{USR1} pour les système ne supportant pas INFO) à un processus \textbf{dd} en cour le force à afficher des statisques d'I/O sur l'erreur standard, puis reprend la copie.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} copie en block de 512 octets entre un disque et une cassette, mais saute le label de 4 KiB au début du disque : \\
\hspace{1mm} \textbf{disk=/dev/rdsk/c0t1d0s2} \\
\hspace{1mm} \textbf{tape=/dev/rmt/0} \\
\hspace{1mm} \textbf{(dd bs=4k skip=1 count=0 \&\& dd bs=512k) <\$disk >\$tape} \\
\hspace{1mm} \textbf{(dd bs=4k seek=1 count=0 \&\& dd bs=512k) <\$tape >\$disk} \\
\hspace{1mm} Copier une partition de disque dur sur un autre disque dur \\
\hspace{1mm} \textbf{dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror} \\
\hspace{1mm} Cloner un disque dur en entier \\
\hspace{1mm} \textbf{dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror} \\
\hspace{1mm} Copier un grand disque sur un autre disque plus petit. La seule différence entre une grande partition et une petite partition, hormis la taille, est la table de partition. Si vous copiez sda vers sdb, un disque entier avec une seule partition, sdb étant plus petit que sda, alors vous devez faire : \\
\hspace{1mm} \textbf{dd if=/dev/sda skip=2 of=/dev/sdb seek=2 bs=4k conv=noerror} \\
\hspace{1mm} Réaliser l'image ISO d'un CD \\
\hspace{1mm} \textbf{dd if=/dev/hdc of=/home/sam/moncd.iso bs=2048 conv=notrunc} \\
\hspace{1mm} Créer une clé USB bootable \\
\hspace{1mm} \textbf{dd if=/home/uubu/insert.iso of=/dev/sdb ibs=4b obs=1b conv=notrunc,noerror} \\
\hspace{1mm} Copier seulement le MBR d'un disque dur \\
\hspace{1mm} \textbf{dd if=/dev/sda of=/home/sam/MBR.image bs=446 count=1} \\
\hspace{1mm} Ecrire par dessus toute la place libre d'une partition \\
\hspace{1mm} \textbf{dd if=/dev/urandom > fichieroccupanttoutlespacelibre} \\
 
\vspace{1cm}{\huge Astuces }
 
\
 
\hspace{1mm} Pour voir la mémoire vive \\
\hspace{1mm} \textbf{dd if=/proc/kcore | hexdump -C | less} \\
\hspace{1mm} Quels systèmes de fichiers sont installés \\
\hspace{1mm} \textbf{dd if=/proc/filesystems | hexdump -C | less} \\
\hspace{1mm} Tous les modules chargés \\
\hspace{1mm} \textbf{dd if=/proc/kallsyms | hexdump -C | less} \\
\hspace{1mm} Table des interruptions \\
\hspace{1mm} \textbf{dd if=/proc/interrupts | hexdump -C | less} \\
\hspace{1mm} Depuis combien de temps fonctionne le système \\
\hspace{1mm} \textbf{dd if=/proc/uptime | hexdump -C | less} \\
\hspace{1mm} Partitions et tailles en Ko \\
\hspace{1mm} \textbf{dd if=/proc/partitions | hexdump -C | less} \\
\hspace{1mm} Etat de la mémoire \\
\hspace{1mm} \textbf{dd if=/proc/meminfo | hexdump -C | less} \\
\hspace{1mm} Créer un disque de sauvegarde (dcfldd est un programme qui ajoute aux fonctionnalités de dd l'affichage d'une barre de progression) \\
\hspace{1mm} \textbf{dcfldd if=/dev/sda of=/dev/sdb bs=4096 conv=notrunc,noerror} \\
\hspace{1mm} pour réaliser un backup de root puis : \\
\hspace{1mm} \textbf{dd if=/home/sam/root.img of=/dev/sda2 (root) bs=4096 conv=notrunc,noerror} \\
\hspace{1mm} Créer un lecteur virtuel \\
\hspace{1mm} \textbf{dd if=/dev/zero of=/dev/ram7 bs=1k count=16384} \\
\hspace{1mm} puis : \\
\hspace{1mm} \textbf{mkfs.ext3 -m0 /dev/ram7 4096} \\
\hspace{1mm} Copier la mémoire RAM dans un fichier \\
\hspace{1mm} \textbf{dd if=/dev/mem of=/home/sam/mem.bin bs=1024} \\
\hspace{1mm} Lire le BIOS \\
\hspace{1mm} \textbf{dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8} \\
 
\vspace{1cm}{\huge Utilitaires dérivés }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} ddrescue]{permet de récupérer des secteurs défectueux}
\item[\hspace{1mm} sdd]{Utile quand la taille des blocs d'entrée est différente de celle des blocs de sortie, et réussira dans des cas où dd échoue}
\end{description}
\end{flushleft}
\end{document}
