dd コマンド

目的

ファイルを変換してコピーします。

構文

dd [ bs=BlockSize ][cbs=BlockSize ]

[conv= [ ascii |block|ebcdic | ibm | unblock ]

[lcase | ucase ] [iblock ]

[noerror ] [swab ] [sync ]

[oblock ] [notrunc ]][count=

InputBlocks ] [ files=InputFiles ] [fskip=

SkipEOFs ] [ ibs=InputBlockSize ] [if=

InFile ] [ obs=OutputBlockSize ] [of=

OutFile ] [ seek=RecordNumber ] [skip=

SkipInputBlocks ][ span=yes|no ]

dd [ Option=Value ]

説明

dd コマンドは、 InFile パラメーターまたは標準入力を読み取って指定された変換を行い、 変換したデータを OutFile パラメーターまたは標準出力にコピーします。入力および出力ブロック・サイズを指定して、 物理的な未加工の入出力 (ロウ I/O) を使用できます。
注: Block という用語は、dd コマンドによって 1 つの操作で読み書きされるデータの量のことで、 必ずしもディスク・ブロックと同じサイズであるとは限りません。

サイズを指定する場合は、バイト数で指定します。 最後に wb、または k が付いている数字は、それぞれ、2 倍、512 倍、 または 1024 倍することを示します。x または * (アスタリスク) で区切った数字の対は積を表します。 カウント・パラメーターは、バイト数ではなく 、 コピーするブロックの数を要求します。

conv=ascii フラグ および、conv=ebcdic フラグと関連付けられている、 文字セットのマッピングは、相補演算です。この 2 つのフラグは、ASCII 文字と、 ほとんどのワークステーションとキー・パンチに使われる EBCDIC 文字のサブセットとをマップします。

blockunblockasciiebcdic、 または ibm のいずれかの変換を指定する場合は、 cbs パラメーター値を使用してください。unblock パラメーターまたは ascii パラメーターを指定すると、 dd コマンドにより固定長から可変長への変換が実行されます。 それ以外の場合は、可変長から固定長への変換が実行されます。cbs パラメーターは固定長を決定します。

重要: cbs パラメーター値を最小入力ブロックより小さい値に指定すると、 変換後のブロックが切り捨てられます。

処理の終了時に、dd コマンドは全体および部分的な入力ブロックと出力ブロックの数を報告します。

注:
  1. 通常、必要なのは、出力ファイルへの書き込みアクセスだけです。 しかし、出力ファイルが 直接アクセス・デバイス上になく、seek フラグを使用する場合には、 そのファイルへの読み取りアクセスも必要です。
  2. dd コマンドは、 conv=ascii または conv=unblock フラグを設定した変換時にのみ 改行文字を挿入し、conv=ebcdicconv=ibm、または conv=block フラグを設定した変換時にのみ 埋め込みを行います。
  3. ファイルをテープにコピーできる場合は、 dd コマンドではなく、 できるだけ backuptar、 または cpio コマンドを使用してください。これらのコマンドは、テープ・デバイスで使用するようになっています。テープ・デバイスの使用法の詳細については、rmt スペシャル・ファイルを参照してください。
  4. bsibs、および obs フラグで指定されるブロック・サイズの値は、 必ず、使用されるメディアの物理ブロックのサイズの倍数でなければなりません。
  5. conv=sync フラグを指定すると、 dd コマンドによって部分入力ブロックに NULL が埋め込まれます。したがって、 いずれかの読み取りで (ibs フラグで指定された) データのフル・ブロックを受信しない場合、 dd コマンドはデータ・ストリームの途中に NULL を挿入します。 パイプからの読み取りの場合、この挿入はよく発生します。
  6. bs フラグのみを指定して、 syncnoerror、 または notrunc 以外の変換を指定しない場合、 各入力ブロックからのデータは、個別の出力ブロックとして書き込まれます。 読み取りでフル・ブロックに満たないブロックが戻されて、 sync が指定されていない場合、 結果として出力ブロックのサイズは入力ブロックと同じになります。bs フラグを指定しない場合、または syncnoerrornotrunc 以外の変換を指定した場合は、入力の終わりに到達するまで、入力が処理され、フルサイズの出力ブロック内に収集されます。

デバイス全体のスパン

入力ファイルが出力デバイスの物理サイズより大きい場合は、dd を使用してデバイス全体をスパンすることができます。
注: 不適切なブロック・サイズはデータの不整合やオーバーラップの原因となるので、 ブロック・サイズ bs の指定がデバイスの物理サイズの正確な倍数となるように注意する必要があります。

InFile と OutFile パラメーターのいずれかが stdin または stdout である場合は、dd によるデバイス全体のスパンは行われません。

出力デバイスがフルの場合には、書き込み時に、dd が次のデバイスにプロンプトを出すような方法でスパンが行われます。 入力デバイスからの読み取り時に、デバイスの読み取りが終了していなくても、 データが入力デバイスから完全に読み取られている場合は、dd が次のデバイスにプロンプトを出します。 この場合、終了するには、'n' を押さなければならないことがあります。

フラグ

項目 説明
bs=BlockSize ibs フラグおよび、 obs フラグを置き換えて、 入力および出力ブロックのサイズを指定します。bs フラグで指定するブロック・サイズの値は必ず、 使用されるメディアの物理ブロック・サイズの倍数でなければなりません。
cbs=BlockSize conv=block のように、 可変長から固定長への変換、 および固定長から可変長への変換の変換ブロック・サイズを指定します。
count=InputBlocks InputBlocks 変数で指定された入力ブロックの数だけをコピーします。
conv= Conversion,.... 1 つ以上の変換オプションを指定します。複数の変換を指定する場合はコンマで区切ってください。 指定できるオプションを次に示します。
ascii
EBCDIC を ASCII に変換します。このオプションは、 ebcdic オプション、 ibm オプション、 block オプション、 および unblock オプションとは、 互換性がありません。
block
可変長レコードを固定長に変換します。長さは変換ブロック・サイズ (cbs) によって決定されます。このオプションは、ascii オプション、 ebcdic オプション、 ibm オプション、 および unblock オプションとは、 互換性がありません。
ebcdic
ASCII を標準 EBCDIC に変換します。このオプションは、 ascii オプション、 ibm オプション、 block オプション、 および unblock オプションとは、 同時には指定できません。
ibm
ASCII を EBCDIC の IBM® バージョンに変換します。このオプションは、 ascii オプション、 ebcdic オプション、 block オプション、 および unblock オプションとは、 同時には指定できません。
iblock oblock
直接アクセス・デバイスでの読み取りエラーまたは書き込みエラーから生じるデータの損失を最小限にとどめます。 iblock 変数を指定しているときに、 ブロックの読み取りでエラーが発生した場合 (ブロック・サイズが 512 であるか、または、 ibs=InputBlockSize 変数で指定したサイズである場合)、 dd コマンドは、同じデータ・ブロックを小さな単位で再読み取りしようとします。dd コマンドが入力デバイスのセクター・サイズを判別できる場合は、 損傷を受けたブロックを一度に 1 セクターずつ読み取ります。 判別できない場合は、一度に 512 バイトずつ読み取ります。 入力ブロック・サイズ (ibs) は、 この再試行のときのサイズの倍数でなければなりません。このオプションは、読み取りエラーに関連するデータの損失を 1 セクターにおさえます。 oblock 変換も出力に対して同じように機能します。
lcase
英文字をすべて小文字にします。
noerror
エラーの発生時に処理を停止しません。
notrunc
出力ファイルを切り捨てません。出力への書き出しが明示的でないブロックは保存されます。
ucase
英文字をすべて大文字にします。
swab
バイトの対をすべてスワップします。
sync
すべての入力ブロックを、 ibs 値まで埋め込みます。
unblock
固定長ブロックを可変長に変換します。 長さは変換ブロック・サイズ (cbs) によって決定されます。このオプションは、ascii オプション、 ebcdic オプション、 ibm オプション、 および block オプションとは、 同時には指定できません。
files=InputFiles 入力ファイルの InputFiles 変数の値によって指定されたファイルの数を、 終了前にコピーします (入力が磁気テープ、または類似デバイスである場合にのみ有効です)。
fskip=SkipEOFs コピーを開始する前に、 SkipEOFs 変数によって指定されたファイル終わり文字の数をスキップします。 この SkipEOFs 変数は、マルチファイルの磁気テープ上での位置決めに役立ちます。
ibs=InputBlockSize 入力ブロック・サイズを指定します。デフォルトは 512 バイトまたは 1 ブロックです。 ibs フラグで指定するブロック・サイズの値は、必ず、 使用中のメディアの物理ブロック・サイズの倍数でなければなりません。
if=InFile 入力ファイル名を指定します。標準入力がデフォルト値です。
obs=OutputBlockSize 出力ブロック・サイズを指定します。デフォルトは 512 バイトまたは 1 ブロックです。 obs フラグで指定するブロック・サイズの値は、必ず、 使用中のメディアの物理ブロック・サイズの倍数でなければなりません。
of=OutFile 出力ファイル名を指定します。標準出力がデフォルト値です。
seek=RecordNumber コピー前に、RecordNumber 変数によって指定されたレコードを出力ファイルの最初から探します。
skip=SkipInputBlocks コピーを開始する前に、入力ブロックの指定された SkipInputBlocks 値をスキップします。
span=yes|no yes が指定された場合は複数のデバイス間でのスパンを許可し、no が指定された場合はデフォルトで動作します。詳しくは、『デバイス全体のスパン』を参照してください。

終了状況

このコマンドは次の終了値を戻します。

項目 説明
0 入力ファイルは正常にコピーされました。
>0 エラーが発生しました。

  1. ASCII テキスト・ファイルを EBCDIC に変換するには、次のように入力します。 このコマンドを実行すると、 text.ascii ファイルが EBCDIC 表記に変換され、 その EBCDIC バージョンが text.ebcdic ファイルに保管されます。
    注: conv=ebcdic パラメーターを指定すると、dd コマンドは ASCII の ^ (曲折アクセント記号) 文字を EBCDIC の未使用の文字 (16 進数 9A) に変換し、 ASCII の ~ (ティルド) を EBCDIC の ^ (NOT 記号) に変換します。
  2. 可変長レコードである ASCII ファイル /etc/passwd を、 132 バイトの固定長 EBCDIC レコードのファイルに変換するには、次のように入力します。
  3. 各レコードが 132 バイトの EBCDIC ファイルを 小文字の可変長 ASCII 行に変換するには、次のように入力します。
  4. 可変長レコードの ASCII ファイル /etc/passwd を、IBM バージョンの EBCDIC による 132 バイトの 固定長レコードのファイルに変換するには、次のように入力します。
  5. 1KB ブロックのテープから、2KB のブロックを 使用する別のテープにブロックをコピーするには、 次のように入力します。
  6. dd コマンドをフィルターとして使用するには、次のように入力します。
    ls -l | dd  conv=ucase
    このコマンドにより、現行ディレクトリーの長いリストが大文字で表示されます。
    注: dd コマンドおよび cpio コマンドの 9348 磁気テープ装置モデル 12 に対するパフォーマンスは、 デフォルトのブロック・サイズを変更すると向上します。 ブロック・サイズを変更するには、 chdev コマンドを次のように使用します。
    
    chdev -l Device_name -a block_size=32k
  7. 36 ブロック (512 バイト/ブロック) を使用して、 3.5 インチで 1.4MB のディスケットへ効率よく転送するには、次のように入力します。

    このコマンドは、Filename パラメーターの値を一度に 1 シリンダーずつディスケット・デバイスに書き込みます。 ディスクからの読み取りを行う場合と、ファイル・サイズがディスケット・ブロック・サイズの倍数でない場合は、 conv=sync が必要です。dd コマンドへの入力がファイルではなく、 パイプである場合は、これを行わないでください。 そうすると、ほとんどの入力で、最後のブロックの代わりに NULL が埋め込まれます。

  8. ブロック・サイズが 720b ブロックに設定されている入力ファイルから、 ブロックを 1.44MB サイズのディスケットにコピーするには、次のように入力します。
    dd if=testfile of=/dev/fd0 bs=720b conv=sync
    注: 入力ファイルが出力デバイスの物理サイズより大きい場合は、dd は、 別のデバイスが必要であるというプロンプトを出します。
  9. ブロック・サイズが 32k ブロックに設定されている入力ファイルから、 ブロックをテープにコピーするには、次のように入力します。
    dd if=inputfile of=/dev/rmt0 bs=32k conv=sync
  10. ブロック・サイズが 32k ブロックに設定されている現行ディレクトリーのファイルに、 データのブロックをテープからコピーするには、次のように入力します。
    dd if=/dev/rmt0 of=outfile bs=32k conv=sync
  11. ブロック・サイズが 720b ブロックに設定されている入力ファイルから、 ブロックを 1.44MB サイズのディスケットにコピーするには、次のように入力します。
    dd if=testfile of=/dev/fd0 bs=720b conv=sync span=yes
    注: 入力ファイルが出力デバイスの物理サイズより大きい場合は、dd は 別のデバイスが必要であるというプロンプトを出します。
  12. ブロック・サイズが 32k ブロックに設定されている入力ファイルから、 ブロックをテープにコピーするには、次のように入力します。
    dd if=inputfile of=/dev/rmt0 bs=32k conv=sync span=yes
  13. ブロック・サイズが 32k に設定されているテープから、 データのブロックを現行ディレクトリー内のファイルにコピーするには、次のように入力します。
    dd if=dev/rmt0 of=outfile bs=32k conv=sync span=yes

ファイル

項目 説明
/usr/bin/dd dd コマンドが入っています。