我正在使用 bash shell,并希望将命令的输出通过管道传输openssl rand -base64 1000
到命令,dd
例如dd if={output of openssl} of="sample.txt bs=1G count=1
。我想我可以使用变量,但我不确定如何最好地做到这一点。我想要创建该文件的原因是我想要一个包含随机文本的 1GB 文件。
答案1
if=
不是必需的,你可以将一些内容输入到dd
:
something... | dd of=sample.txt bs=1G count=1 iflag=fullblock
something... | head -c 1G > sample.txt
这里没用,因为openssl rand
无论如何都需要指定字节数。所以你实际上不需要dd
–这会工作:
openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))
1 GB 通常等于 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 iflag=fullblock
我会使用bs=64M count=16
或类似的东西,这样“dd”就不会尝试一次使用整个 1 GB 的 RAM:
dd if=/dev/urandom of=sample.txt bs=64M count=16 iflag=fullblock
或者更简单head
工具——你真的不需要需要在此处添加:
head -c 1G /dev/urandom > sample.txt
答案2
创建一个1GB.bin随机内容文件:
dd if=/dev/urandom of=1GB.bin bs=64M count=16 iflag=fullblock
答案3
如果你只需要一个随机文件不用于与安全相关的事情,就像对某事进行基准测试一样,那么以下操作将会明显更快:
truncate --size 1G foo
shred --iterations 1 foo
它也更方便,因为您可以直接指定尺寸。
答案4
如果您想要恰好 1GB,那么您可以使用以下命令:
openssl rand -out $testfile -base64 792917038; truncate -s-1 $testfile
该openssl
命令使文件恰好大 1 个字节。truncate 命令会删掉该字节。