ddはUnix系のシステムにあるプログラム(コマンド)で、データのコピーや変換をブロックデバイスを直接読み書きして行うことが特徴である。dataset definitionの略であるが、IBMのメインフレームのJob Control Language(ジョブ制御言語、JCL)の「DD文」(DD statement)に由来するため(Job Control Language#DD文も参照)、引数の構文が、Unixの一般的なコマンドの引数のそれとは激しく異なっている(datasetというのはメインフレーム用語)。

ddの主な機能は指定されたバイト数もしくはブロック数のデータのコピーであり、この機能は、ハードディスク(全体もしくはパーティション単位、またはブートセクター等)のバックアップや、/dev/zeroや/dev/randomを用いて指定された領域を完全消去するために利用される。同様にディスクの(可能な限り)全状態をそのままクローンしたい、コンピュータ・フォレンジックスなどの場合にも使われる。

ddコマンドが行うようなディスクの直接の読み書きには、通常は管理者権限が必要であり、従って危険なコマンドであっても簡単に実行できてしまう状態で作業していることが多い。そしてddは、例えば、入力と出力の指定をうっかり逆にしただけで(具体的には "of" と "if" の、QWERTYキーボードでは隣の1文字の違いである)、大事なデータをバックアップする代わりに、まっさらなディスクの内容をそれに上書きして消してしまう、という恐ろしいことを起こし得る。そのためしばしばベテランは、data destroyer(あるいはdisk destroyer、destroyer=破壊者)の略である、などという。なお、copy commandあるいはcopy and convertの略でccにしようとしたが、C言語コンパイラ(ないしコンパイラドライバ)のccがあったのでひとつずらしてddにした、という説が流布していたが、これは誤りであることがUNIXの開発者であるデニス・リッチー氏による投稿で確定している。alt.folklore.computersでの議論

コマンドラインに指定できるオプション 入出力を指定するオプション if=[file] : 標準入力の代わりに、ファイル file から読み込む of=[file] : 標準出力の代わりに、ファイル file へ書き出す コピーするサイズを指定するオプション count=[blocks] : ibs バイトのブロック blocks 個分だけ入力ファイルをコピーする 読み書きの開始位置を指定するオプション skip=[blocks] : ibs バイトのブロック blocks 個分だけ入力ファイルの先頭をスキップする seek=[blocks] : 出力の先頭にある obs バイトのブロック blocks 個分を書き出さない 1回の読み書きのデータサイズを指定するオプション bs=[bytes] : 一 度に bytes バイトずつ読み込みと書き出しをする ibs=[bytes] : 一度に bytes バイトずつ読み込む。デフォルトは 512 obs=[bytes] : 一度に bytes バイトずつ書き出す。デフォルトは 512 オンザフライのデータ変換を指定するオプション conv=[CONVERSION] noerror : 読み込みエラーが発生しても継続する sync : 入力ブロックサイズがibsに指定されていないバイト数に満たないとき、パディングを行う

使用例 ハードディスク上のパーティションを、別のディスクにコピーする dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror

ハードディスク全体を完全消去する dd if=/dev/urandom of=/dev/hda

CDをiso仮想イメージファイルに変換する dd if=/dev/cdrom of=/home/sam/myCD.iso bs=2048 conv=sync,notrunc

ハードディスクのMBRをバックアップする dd if=/dev/sda of=/home/sam/MBR.image bs=446 count=1 OSイメージをUSBメモリに書き込む dd if=image.iso of=/dev/sda bs=4M status=progress

関連項目 ddrescue : 不良セクタのあるディスクの扱いを得意とするデータコピー・プログラム パーティション ディスクセクタ データの完全消去

外部リンク dd(1) man page(JM Project)

参考文献