ゼロバイトがたくさんあるテストファイルを作成する


25

空のファイルを作成する方法を知っています:

touch /var/tmp/nullbytes

しかし、bashを使用してコマンドラインにnullバイトのみを含む1MBファイルを作成するにはどうすればよいですか?


SUの質問に関連:superuser.com/q/609020/151431
terdon

1
+1。興味深い質問。誰かがそのようなファイルがどのシナリオで必要になるのか親切に詳しく説明できますか?
ケントパワー

1
:私はchkrootkitの上のクラッシュをシミュレートするためにそれを必要とunix.stackexchange.com/questions/86866/...
rubo77

回答:


56

GNUの場合truncate

truncate -s 1M nullbytes

nullbytes事前に存在しないと仮定すると)1メビバイトのスパースファイルが作成されます。それはゼロで満たされているように見えるファイルですが、ディスク上のスペースを必要としません。

なしでtruncatedd代わりに使用できます:

dd bs=1048576 seek=1 of=nullbytes count=0

(一部のdd実装では、1048576をに置き換えることができます1M

Linuxや一部のファイルシステムで、ディスクスペースを割り当てたい場合は、次のようにします。

fallocate -l 1M nullbytes

これにより、実際にデータをディスクに書き込むことなくスペースが割り当てられます(スペースは予約されていますが、未初期化としてマークされます)。

dd < /dev/zero bs=1048576 count=1 > nullbytes

実際にゼロをディスクに書き込みます。これは最も効率的ではありませんが、そのファイルにアクセスするときにドライブを回転させる必要がある場合は、それが最適です。

または、@ mikeservの方法でだましddてNULバイトを生成します。

dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes

headブロックサイズを指定する必要のないGNUの代替(1Mは問題ありませんが、たとえば10Gは問題ありません):

head -c 1M < /dev/zero > nullbytes

または、進行状況バーを取得するには:

pv -Ss 1M < /dev/zero > nullbytes

truncateスワップボリュームとして使用する空のファイルの作成には使用しないでください。これは機能しません。dd代わりにこの場合に使用してください。
エリアスプロブスト

1
@ EliasProbst、/ dev / zeroからの ITYM コピーはなく、スパースファイルを使用しないくださいdd同様にスパースファイルを作成できます。
ステファンシャゼラス

2
fallocateは、それがスペースを確保しているため作成し、速いそれを行うための最善かつ迅速な方法ですが、それは書き込み何も(に気にしないstackoverflow.com/questions/257844/...
curratore

...かbs=1kx1k。または<&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >file、文字通りディスクへの書き込み用です。ただし、読み取りエラーを強制すると効率がどれだけ失われるかについては100%ではありません。
mikeserv

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.