Linuxで1GBのランダムファイルを作成するにはどうすればよいですか?


88

私はbashシェルを使用していますが、コマンドの出力openssl rand -base64 1000をのddようなコマンドにパイプしたいと思いdd if={output of openssl} of="sample.txt bs=1G count=1ます。変数を使用できると思いますが、どのように使用するのが最善かはわかりません。ファイルを作成したいのは、ランダムなテキストを含む1GBのファイルが欲しいからです。

回答:


130

if=必須ではありませんが、dd代わりに何かをパイプすることができます:

something... | dd of=sample.txt bs=1G count=1

openssl randとにかくバイト数を指定する必要があるため、ここでは役に立ちません。したがって、実際には必要ありませんdd- これは動作します:

openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))

1ギガバイトは通常2 30バイトです(代わりに10**910 9バイトで使用できます)。この* 3/4部分はBase64オーバーヘッドを考慮し、エンコードされた出力を1 GBにします。

または、を使用することもできますが/dev/urandom、OpenSSLよりも少し遅くなります。

dd if=/dev/urandom of=sample.txt bs=1G count=1

個人的に、私は使用するbs=64M count=16か、類似しています:

dd if=/dev/urandom of=sample.txt bs=64M count=16

2
superuser.com/questions/467697/…に大きなファイルの圧縮に関する質問を投稿し、使用/dev/urandomすると真のテキストファイルではなくバイナリファイルが生成されることをアドバイスされました。
PeanutsMonkey

2
@PeanutsMonkey:そうです。あなたのようなものが必要になりますdd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt
スコット

3
@PeanutsMonkey:単一の「現実の世界のシナリオは、」いくつかのシナリオでは、テキストのギガバイトで他人を扱う可能性があります、ありません- JPEGファイルのギガバイト、またはコンパイルされたソフトウェアのギガバイトで...あなたは大量のテキストをしたい場合は、ダウンロードウィキペディアダンプのために例。
-grawity

2
@PeanutsMonkey:はddから750,000,000バイトを読み取り/dev/urandom、にパイプしますuuencodeuuencode入力をbase64エンコードの形式にエンコードします(他のプログラムと必ずしも一致しない場合があります)。つまり、バイナリデータをテキストに変換します。750Mを使用したのは、base64エンコードによりデータが33%増加するというgrawityのステートメントを信頼していたため、テキストファイルに必要な数の3/4のバイナリデータを要求する必要があるためです。
スコット

3
切り捨てられたファイルdd: warning: partial read (33554431 bytes); suggest iflag=fullblockを作成するように指示されている場合は、iflag=fullblockフラグを追加してください。
rogerdpack

25

1GB.binのランダムコンテンツファイルを作成します。

dd if = / dev / urandom of = 1GB.bin bs = 64M count = 16 iflag = fullblock


3
私にとって、iflag=fullblock他の答えと比較して必要な追加でした。
-dojuba

2

正確に1GBが必要な場合は、次を使用できます。

openssl rand -out $ testfile -base64 792917038; truncate -s-1 $ testfile

opensslコマンドは、ファイルを正確に1バイト大きくします。truncateコマンドは、そのバイトを削除します。


その余分なバイトはおそらくのためです-base64。削除すると、正しいサイズのファイルが作成されます。
ダニエル

-1

このスクリプトを試してください。

#!/bin/bash
openssl rand -base64 1000 | dd of=sample.txt bs=1G count=1

このスクリプトは、使用を気にしない限り機能します/dev/random

#!/bin/bash
dd if=/dev/random of="sample.txt bs=1G count=1"

8
/dev/random特に理由がない限り、これを無駄にすることはお勧めしません。/dev/urandomずっと安いです。
アンスガーウィーチャーズ

1
また、$var=(command)このコンテキストでは有効な構文ではありません。
-grawity

@grawity-有効ではないと言うとき、どういう意味ですか?
PeanutsMonkey

私はまさにそれを意味します-それは間違っています。
悲しみ

3
@ grawity、@ PeanutsMonkey:彼はタイプミスをしました。彼は意味したrandom=$(openssl rand -base64 1000)bashギガバイト長の値を変数に割り当てることができるかどうかは疑問ですが。と言ってもrandom=$(openssl rand -base64 1000)、その後if=$randomは意味をなしません。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.