catコマンドをddにパイプするだけで、catに送るコマンドの違いは何ですか? [コピー]

catコマンドをddにパイプするだけで、catに送るコマンドの違いは何ですか? [コピー]

Linuxでは、次の2つのコマンドの違いを知りたいです。

$ cat ./boot.bin ./kernel.bin /dev/zero | dd bs=512 count=2880 of=devos.img

そして

$ cat ./boot.bin ./kernel.bin > devos.img

ベストアンサー1

dd正しいcountバイトブロックをコピーしてくださいbs。この場合、合計2880 * 512バイトです(下記参照)。これにより、2つのファイルの接続が固定サイズに切り捨てられます(/dev/zero必要な数のゼロバイトが提供されるため)。 1440kBは3.5インチHDフロッピーディスクサイズに似ているため、誰かがフロッピーディスクにぴったりの画像を作成したい場合があります。

2番目の例の一般的なコンテンツはcatファイルをリンクするだけで、結果は任意のサイズになります。

より小さい例:

$ echo hello > a; echo world > b
$ cat a b | od -c
0000000   h   e   l   l   o  \n   w   o   r   l   d  \n
$ cat a b /dev/zero | dd bs=1 count=8 2>/dev/null | od -c
0000000   h   e   l   l   o  \n   w   o
$ cat a b /dev/zero | dd bs=1 count=16 2>/dev/null | od -c
0000000   h   e   l   l   o  \n   w   o   r   l   d  \n  \0  \0  \0  \0

実際には、dd1回の呼び出しでブロックサイズより少ないデータを取得すると、読み書きが減りますread()。これは大きなブロックサイズで発生する可能性がありますが、512では、catデータは少なくともそのサイズのブロックに書き込まれるため、問題にならない可能性があります。 GNU ddでは、ddを使用してこれを防ぐことができますiflag=fullblock

私たちも同じことをすることができますhead -c

$ cat a b /dev/zero | head -c 16 ...

おすすめ記事