あなたのコマンド dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1 bs 間の相互作用の定義が不十分なため、10 バイトのファイルではなく 2 バイトのファイルを作成します。 そして obs . (お好みでこれをプログラムのバグと呼んでください。ただし、ドキュメントのバグとして定義したほうがよいでしょう。) bs または ibs および obs .
経験的に bs obs をオーバーライドします 、実行されるのは dd if=/dev/zero of=./foo count=1 bs=1 seek=1 です 、ご覧のように 2 バイトのファイルを作成します。
dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1 を使用した場合 予想どおり、10 バイトのファイルが得られます。
別の方法として、ディスク上のデータ領域をまったく必要としない空のファイルを作成する場合は、直観に反する名前の truncate を使用できます。 コマンド:
truncate --size=10 foo
POSIX マンページには次のように記載されています:
<ブロック引用>ibs=式
入力ブロック サイズを expr でバイト単位で指定します (デフォルトは 512 です)。
obs=expr
expr で出力ブロック サイズをバイト単位で指定します (デフォルトは 512 です)。
bs=expr
入力と出力の両方を設定 ブロック サイズは expr バイト、supersedingibs=および obs= まで . sync、noerror、notrunc 以外の変換が指定されていない場合、各入力ブロックは短いブロックを集約せずに単一のブロックとして出力にコピーされます。
Linux の dd 同じように動作します。したがって、ibs を使用します 代わりに:
dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1