dd
私はその主張に実験的に取り組むことによってそれを使用する方法を学びます。 10バイトのファイルを作成したいです。私は次のことがうまくいくと思います。
dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
...マンページに次の説明があるからです。
obs=BYTES write BYTES bytes at a time (default: 512) seek=N skip N obs-sized blocks at start of output
...しかしそうではありません。 2バイトファイルを生成します。
>ls -l foo
-rw-rw-r-- 1 user user 2 Mar 28 16:05 foo
私の解決策は次のとおりです
dd if=/dev/zero of=./foo count=1 bs=1 obs=1 seek=9
しかし、私の研究では、最初のバージョンが機能しない理由を理解したいと思います。ありがとうございます。
答え1
間の相互作用がうまく定義されていないdd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
ため、コマンドは10バイトファイルの代わりに2バイトファイルを生成します。 (必要に応じてこれをプログラムエラーと呼ぶことができますが、ドキュメントエラーとして定義する方が良いです。)bs
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
答え2
これPOSIX マンページ状態:
ibs=表現式
exprを使用して入力ブロックサイズをバイト単位で指定します(デフォルトは512)。
obs=表現
exprを介して出力ブロックサイズをバイト単位で指定します(デフォルトは512)。
bs=表現式
両方設定入力と出力ブロックサイズをexprバイトで、ibs= と obs= を置き換えます。。 sync、noerror、notrunc以外の変換が指定されていない場合、各入力ブロックは短いブロックを集約せずに単一のブロックとして出力にコピーする必要があります。
Linuxもdd
同じように動作します。代わりに、以下をibs
使用してください。
dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1