web-dev-qa-db-ja.com

ddコマンドの「bs」、「count」、「seek」の違いは何ですか?

ddの使用方法を説明した多くのガイドやフォーラムの投稿を読みましたが、_bs=_、_count=_および_seek=_スイッチ。

誰かがこれらのスイッチが正確に何をするかを説明できますか(manページは非常に詳細ではありません)、/ dev/randomまたは/ dev/zeroからのファイルの作成や上書きなど、さまざまなタスクに対するそれらの最適な設定について説明してくださいパーティションと外部ドライブ。

26
Eric

これをマンページより上手に説明する方法が本当にわかりません。

bs=はブロックサイズを設定します。たとえば、bs=1Mは1MiBのブロックサイズになります。

count=は、この数のブロックのみをコピーします(デフォルトでは、ddは永久に、または入力がなくなるまで続行します)。理想的には、ブロックはbs=サイズですが、読み取りが不完全になる可能性があるため、特定の量のデータ(count=)をコピーするためにcount*bsを使用する場合は、iflag=fullblock

seek=は、出力デバイスの最初に書き込むのではなく、この数のブロックを出力で探します。

したがって、たとえば、これは1MiB相当のy\nを出力ファイルの8MiBの位置にコピーします。したがって、合計ファイルサイズは9MiBになります。

$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun  3 21:02 outputfile
$ hexdump -C outputfile
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00900000

/dev/randomについて言及し、パーティションを上書きしています... /dev/random(および/dev/urandom)は遅すぎるため、永久に時間がかかります。代わりにshred -v -n 1を使用することもできます。これは高速で、通常はどこでも利用できます。

28
frostschutz

わかりました、manページは詳細ではないとのことですので、動いている男に関するわかりやすい比喩でそれらの意味を説明します(ddの名前でわかります):

   bs=BYTES
          read and write up to BYTES bytes at a time

ddは何か(箱、花瓶、ベッド、米など)を受け取り、必要な場所に移動して降ろします。荷物を落とさない限り、他には何も選びません。さて、彼が旅行ごとにいくつのオブジェクトを選ぶべきか正確に彼に教える必要があるとき、これはbsがすることです。あなたは彼が読み書きするデータの量を設定します。これは、すべての便利で一般的なコマンドでほぼ必須です。

   count=N
          copy only N input blocks

これは、彼が移動するボックスの総数を決定します。このコンテキストのボックスは ディスク上のブロック です。あなたは彼に5つの箱を動かすように言います、彼は5つ以上の箱があっても5つの箱だけを動かします(5つ未満の箱がある場合、彼はそれを追加するために箱の横で見つけた花瓶を取ります)。 ddcountに5のみを伝えてどこかに書き込むと、彼は最初に見た5つのブロックをコピーして、必要な場所に書き込みます。

   seek=N skip N obs-sized blocks at start of output

男は通常、負荷を降ろすために最初に利用できる場所を見つけます。これは通常(ディスクの)開始時であり、最後までいっぱいになります。さて、これを使用して、ddにさらに開始するように指示します。たとえば、ホールの代わりに、さらに内側の部屋の1つから開始します。開始ブロックを「スキップ」するだけです。

さて、あなたが何をしているのかに応じて、あなたはそれらが読み書きされるフォーマットとともに、ソースと宛先に基づいて異なる組み合わせが必要になります。分離して検索することをお勧めします。

22
Braiam