如何在 Linux 中创建 1GB 的随机文件?

如何在 Linux 中创建 1GB 的随机文件?

我正在使用 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**910 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 命令会删掉该字节。

相关内容