dd 指定したサイズごとにデータをコピー、変換する
dd if=入力 of=出力 [bs=サイズ] [count=回数]試してみる
dd if=source.txt of=copy.txtif で指定したファイルを、of で指定したファイルにコピーします。
dd if=/dev/zero of=zeros.img bs=1M count=22MB(1MBのブロックを2個)の、中身がすべて 0 のファイルを作ります。
ls -l zeros.img2097152 バイトのファイルができたことを確認します。
dd if=/dev/urandom of=random.bin bs=1k count=4 status=none乱数の4KBのファイルを作ります。status=none で経過の表示を出しません。
dd if=source.txt bs=1 skip=3 count=4 status=none | od -c | head -n 2skip で先頭の3バイトを飛ばし、4バイトだけ取り出して表示します。
dd if=source.txt of=upper.txt conv=ucase status=noneconv=ucase で、英小文字を大文字に変換しながらコピーします。
主なオプション
if=ファイル | 入力ファイル。省略すると標準入力 |
|---|---|
of=ファイル | 出力ファイル。省略すると標準出力 |
bs=サイズ | 読み書きするブロックの大きさ(k、M、G などの単位が使える) |
count=回数 | bs の大きさのブロックを、この回数だけコピーする |
skip=回数 | 入力の先頭から、ブロックをこの数だけ飛ばす |
seek=回数 | 出力の先頭から、ブロックをこの数だけ飛ばす |
conv=変換 | 変換を指定する(ucase、lcase、notrunc、sync など) |
status=progress | 経過を表示する |
解説
書式が特殊
多くのコマンドと違い、dd のオプションは - を付けず、名前=値 の形で書きます。入力は if=(input file)、出力は of=(output file)です。両方を省略すると、標準入力から読んで標準出力へ書きます。
よく使う用途
/dev/zero(0 が無限に出てくる)や /dev/urandom(乱数が出てくる)を入力にして、指定した大きさのファイルを作ります。ファイルを、ディスクの装置にそのまま書き込んだり、ディスクのイメージを作ったりするのにも使われます。ブートセクタ(先頭の512バイト)のバックアップなどの用途もあります。
サイズの計算
コピーするデータの大きさは、bs × count です。bs=1M count=2 は 2MB です。単位は、1k は 1024 バイトで、1kB は 1000 バイトという違いがあります。
危険性
of= に装置のファイル(/dev/sda など)を指定すると、そのディスクの内容が上書きされ、元に戻せません。if と of の指定を間違えないよう、実行前によく確認しましょう。
経過の表示
dd は終了時に、コピーした量と速度を標準エラー出力に表示します。status=progress で途中経過を、status=none で表示なしにできます。