回答:
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**9
10 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
dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt
。
dd
から750,000,000バイトを読み取り/dev/urandom
、にパイプしますuuencode
。 uuencode
入力をbase64エンコードの形式にエンコードします(他のプログラムと必ずしも一致しない場合があります)。つまり、バイナリデータをテキストに変換します。750Mを使用したのは、base64エンコードによりデータが33%増加するというgrawityのステートメントを信頼していたため、テキストファイルに必要な数の3/4のバイナリデータを要求する必要があるためです。
dd: warning: partial read (33554431 bytes); suggest iflag=fullblock
を作成するように指示されている場合は、iflag=fullblock
フラグを追加してください。
正確に1GBが必要な場合は、次を使用できます。
openssl rand -out $ testfile -base64 792917038; truncate -s-1 $ testfile
opensslコマンドは、ファイルを正確に1バイト大きくします。truncateコマンドは、そのバイトを削除します。
-base64
。削除すると、正しいサイズのファイルが作成されます。
このスクリプトを試してください。
#!/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"
/dev/random
特に理由がない限り、これを無駄にすることはお勧めしません。/dev/urandom
ずっと安いです。
$var=(command)
このコンテキストでは有効な構文ではありません。
random=$(openssl rand -base64 1000)
。bash
ギガバイト長の値を変数に割り当てることができるかどうかは疑問ですが。と言ってもrandom=$(openssl rand -base64 1000)
、その後if=$random
は意味をなしません。
/dev/urandom
すると真のテキストファイルではなくバイナリファイルが生成されることをアドバイスされました。