Go to main content

マニュアルページ セクション 8: システム管理コマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

dd(8)

名前

dd - ファイルの変換とコピー

形式

/usr/bin/dd [operand=value]...

説明

dd は、指定した入力ファイルに可能な変換を行なって、指定した出力へコピーします。デフォルトでは、標準入力および標準出力が使用されます。raw 入出力装置の特性を利用するために入出力のブロックサイズで指定することが可能です。サイズは、バイト単位で指定し、数字の後に kb、または w を付加することができ、それぞれ 1024、512、または 2 の倍数として指定します。また、数字を x で区切ることにより乗算を表すことができます。

dd は、指定された入力ブロックサイズを用いて、入力データを 1 ブロックずつ読み込みます。その後、実際に渡されたデータブロックを処理します。そのサイズは、指定されたブロックサイズより小さい場合があります。dd は指定された変換処理をブロックに対して行い、結果のデータを、指定された出力ブロックサイズに従ってブロック単位で書き出します。

cbs は、asciiasciibunblockebcdicebcdicbibmibmb、または block 変換が指定されている場合にかぎり使用されます。最初の 2 つの指定では、cbs 文字は変換バッファーにコピーされ、任意の指定文字のマッピングが行われます。また後続の空白文字は切り捨てられ、行を送信する前に復帰改行が追加されます。残りの 3 つの指定では、復帰改行までの文字が変換バッファーに読み込まれ、サイズ cbs の出力レコードを構成するために空白文字が追加されます。ASCII ファイルは復帰改行文字を含むものとします。cbs が指定されていないかまたは 0 であると、asciiasciibebcdicebcdicbibmibmb の各オプションは入力ファイルのブロック構造を変更せずに文字セットを変換します。unblock および block の各オプションは単純なファイルコピーを行います。

終了後に、dd は全体および部分的な入出力ブロック数を報告します。

オペランド

次のオペランドがサポートされています。

if=file

入力パス名。デフォルトは標準入力です。

of=file

出力パス名。デフォルトは標準出力です。seek=expr 変換が指定されていないとき、conv=notrunc も指定されていなければ、コピー処理の実行前に出力ファイルは切り捨てられます。seek=expr が指定され、conv=notrunc が指定されていなければ、コピー処理の結果としては dd がシークする出力ファイル中のブロックは保持されますが、出力ファイルのその他の部分は保持されません。シークするサイズと入力ファイルのサイズの合計が出力ファイルの元のサイズより小さい場合、コピー処理により出力ファイルは小さくなります。

ibs=n

入力ブロックサイズを n バイトとします。デフォルト値は 512 です。

obs=n

出力ブロックサイズを n バイトとします。デフォルト値は 512 です。

bs=n

入力ブロックサイズと出力ブロックサイズをともに n バイトとします。この設定は ibs=obs= 設定よりも優先されます。syncnoerrornotrunc 以外の変換が 1 つも指定されない場合、各入力ブロックは複数の短いブロックを 1 つにまとめる処理は行われず、それぞれ単独のブロックとして出力側にコピーされます。

cbs=n

blockunblock 用の変換ブロックサイズを n バイトに指定します。デフォルト値は 0 です。cbs= を指定しないかまたは 0 を指定した場合、blockunblock を使うと結果は不確定です。

このオプションは ASCII または EBCDIC 変換を指定した場合にだけ有効です。asciiasciib オペランドを指定した場合、後続のスペース文字を消去する前に文字が ASCII に変換されるという点を除き、入力処理は unblock オペランド指定時と同じです。ebcdicebcdicbibm、または ibmb オペランドを指定した場合、末尾にスペース文字を追加した後で文字が EBCDIC または IBM EBCDICに変換されるという点を除き、入力処理は block オペランド指定時と同じです。

files=n

終了する前に、n 個の入力ファイルをコピーして連結します (入力が磁気テープまたは同様な装置の場合だけ有効です)。

skip=n

コピーを開始する前に、指定された入力ブロックサイズを用いて n 個の入力ブロックを読み飛ばします。シーク可能なファイルに対しては、システムはそれらのブロックを読み込むか、あるいはシークを行います。シーク不可能なファイルに対しては、ブロックを読み込んで、そのデータを捨てます。

iseek=n

コピーを行う前に、入力ファイルの先頭から n 個のブロックをシークします (skip の動作が遅いディスクファイルに適しています)。

oseek=n

コピーを行う前に、出力ファイルの先頭から n 個のブロックをシークします。

seek=n

コピーを行う前に、出力ファイルの先頭から n 個のブロックをスキップします (指定された出力ブロックサイズを使用)。シーク不可能なファイルに対しては、既存のブロックを読み込み、現在のファイルの終わり位置から指定されたオフセット位置までの間にスペースがあれば、そのスペースを NULL バイトで埋めます。シーク可能なファイルに対しては、指定されたオフセット位置までをシークするか、またはシーク不可能なファイルの場合と同様にブロックを読み込みます。

count=n

n 個の入力ブロックだけをコピーします。

conv=value[,value. . . ]

1 つ以上の value をコンマで区切って記述します。各 value は次のいずれかです。

ascii

EBCDIC を ASCII に変換します。

asciib

BSD 互換の文字変換を使用して、EBCDIC を ASCII に変換します。

ebcdic

ASCII を EBCDIC に変換します。復帰改行のない固定長の ASCII レコードを変換する場合は、前もって dd conv=unblock でパイプラインを整えてください。

ebcdicb

BSD 互換の文字変換を使用して、ASCII を EBCDIC に変換します。復帰改行のない固定長の ASCII レコードを変換する場合は、前もって dd conv=unblock でパイプラインを整えてください。

ibm

ASCII から EBCDIC への変換とわずかに異なるマップを使用します。復帰改行のない固定長の ASCII レコードを変換する場合は、前もって dd conv=unblock でパイプラインを整えてください。

ibmb

BSD 互換の文字変換を使用して ASCII から EBCDIC への変換とわずかに異なるマップを使用します。復帰改行のない固定長の ASCII レコードを変換する場合は、前もって dd conv=unblock でパイプラインを整えてください。

ascii (または asciib)、ebcdic (または ebcdicb)、ibm (または ibmb) のうち 2 つ以上を同時に指定することはできません。

block

入力データを、入力ブロック境界に関係なく、復帰改行文字または EOF で終わる可変長レコードの集まりと見なします。各レコードは、変換ブロックサイズで指定した長さの固定長レコードに変換されます。入力行に復帰改行文字があれば削除されます。変換ブロックサイズより短い行に関しては、ブロックを埋めるためにスペース文字が付加されます。変換ブロックサイズより長い行に関しては、ブロックサイズを満たす最大長になるように文字が捨てられます。切り捨てられた行の総数が報告されます。

unblock

固定長のレコードを可変長に変換します。変換ブロックサイズと等しい長さ分のバイト (それより短いデータしか残っていなければそのすべて) を読み込み、後続のスペース文字を削除して、復帰改行文字を付加します。

blockunblock を同時に指定することはできません。

lcase

LC_CTYPE カテゴリ中のキーワードの tolower で指定された大文字を、対応する小文字にマップします。マッピングを指定されなかった文字は、この変換によって変更されることはありません。

ucase

LC_CTYPE カテゴリ中のキーワードの toupper で指定された小文字を、対応する大文字にマップします。マッピングを指定されなかった文字は、この変換によって変更されることはありません。

lcaseucase を同時に指定することはできません。

swab

入力データを 2 バイトずつの対になっているものとし、各々の対についてバイトの値を交換します。入力レコードの長さが奇数バイトの場合には、最終バイトは無視されます。

noerror

入力エラーが発生しても処理を停止しません。入力エラーが起こると、標準エラー出力に診断メッセージと、入力および出力ブロック数が出力されます。ブロック数の形式は、正常に終了したときに出力されるものと同じです。sync 変換が指定されたときは、入力データのうち得られなかったバイトは NULL バイトに置き換えられて通常どおりに処理されます。そうでない場合、入力ブロックは出力上には現れません。

notrunc

出力ファイルを切り捨てません。今回の dd 呼び出しで明示的に書き込まれなかったブロックも出力ファイル中に保持します。(前述の of=file オペランドの説明を参照)。

sync

入力ブロックに NULL バイトを付加して、サイズが ibs= で指定した値に等しくなるようにします。なお block または unblock も指定されている場合には、NULL バイトの代わりにスペース文字を付加します。

conv= 以外のオペランドが複数回指定されたときは、最後に記述された operand=value が有効となります。

bs=cbs=ibs=obs= に関しては、バイト単位でサイズを指定する式をアプリケーション側で提供しなければなりません。式 expr は次のいずれかです。

  1. 正の 10 進数。

  2. 正の 10 進数の後に 1024 倍を示す k を付加したもの。

  3. 正の 10 進数の後に 512 倍を示す b を付加したもの。

  4. 2 つ以上の正の 10 進数 (kb を付加してもしなくてもよい) を文字 x で区切ったもの。その 2 つの値を乗算した結果を表します。

オペランドはすべて、入力データを読み込む前に処理されます。

使用例 1 テープドライブ 0 から 1 へのコピー

次のコマンドは、標準的なデバイス命名規約を用いて、テープドライブ 0 から 1 へコピーします。

example% dd if=/dev/rmt/0h  of=/dev/rmt/1h
使用例 2 標準入力の先頭の 10 バイトの削除

次のコマンドは、標準入力の先頭の 10 バイトを削除します。

example% dd ibs=10  skip=1
使用例 3 テープを ASCII ファイルに読み込む

次のコマンドは、テープブロックごとに 10 個の 80 バイト EBCDIC カードイメージにブロック化した EBCDIC テープを ASCII ファイル x に読み込みます。

example% dd if=/dev/tape of=x ibs=800 cbs=80 conv=ascii,lcase
使用例 4 テープの書き込みに conv=sync を使用

次のコマンドは、テープに書き込む場合に conv=sync を使用する例です。

example% tar cvf - . | compress | dd obs=1024k of=/dev/rmt/0 conv=sync

環境変数

dd の実行に影響を与える次の環境変数についての詳細は、environ(7) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。

終了ステータス

次の終了ステータスが返されます。

0

ファイルは正常にコピーされました。

>0

エラーが発生しました。

noerror 変換が指定されていないときに入力エラーが発生すると、部分的に生成された出力ブロックがあればそれを出力ファイルに書き出し、診断メッセージを出力し、コピー処理を中止します。その他のエラーを検出した場合には、診断メッセージを出力し、コピー処理を中止します。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
インタフェースの安定性
確実
標準
standards(7) を参照してください。

関連項目

cp(1)sed(1)tr(1)attributes(7)environ(7)standards(7)

診断

f+p records in(out)

読み取られた (書き込まれた) 完全 (f) および部分 (p) ブロック数

ブロックサイズが異なるファイルシステム間でファイルのコピーを行う場合には、dd を使用しないでください。

ファイルをコピーするのにブロック型デバイスを使用すると、最終ブロックをブロック境界にあわせるために余分な NULL バイトがファイルに追加されます。

ddibs=X および obs=Y オペランドを用いてパイプから読み取ると、その出力はつねにサイズ Y の固まりでブロック化されます。bs=Z が使用されると、出力ブロックはその時点でパイプから読み取ることができる大きさになります。

dd を使用してテープデバイスにファイルをコピーする場合、ファイルのサイズはデバイスのセクタサイズ (たとえば 512K) の倍数でなければなりません。任意のサイズのファイルをテープデバイスにコピーする場合は、tar(1) または cpio(1) を使用してください。

SIGINT が発生した場合、dd はステータス情報を標準エラー出力に書き出して処理を終了します。その他のシグナル発生時には、標準的なアクションを行います。