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
実際には、dd
1回の呼び出しでブロックサイズより少ないデータを取得すると、読み書きが減りますread()
。これは大きなブロックサイズで発生する可能性がありますが、512では、cat
データは少なくともそのサイズのブロックに書き込まれるため、問題にならない可能性があります。 GNU ddでは、ddを使用してこれを防ぐことができますiflag=fullblock
。
私たちも同じことをすることができますhead -c
:
$ cat a b /dev/zero | head -c 16 ...