如何使用随机数据填充文件?

如何使用随机数据填充文件?

如何创建一个新文件并在其中填充 1 GB 的随机数据?我需要这个来测试一些软件。

我更喜欢使用/dev/random/dev/urandom

答案1

在大多数单机上:

head -c 1G </dev/urandom >myfile

如果您head不理解G后缀,您可以指定字节大小:

head -c 1073741824 </dev/urandom >myfile

如果您head不理解该-c选项(它很常见,但不是 POSIX;您可能有 OpenBSD):

dd bs=1024 count=1048576 </dev/urandom >myfile

不要/dev/random在 Linux 上使用,请使用/dev/urandom.

答案2

假设伪随机数据就足够了,dd if=/dev/urandom of=target-file bs=1M count=1000就会做你想做的事。

日(1)将从输入文件中读取数据块并将其写入输出文件。命令行语言有点古怪,但它是值得掌握基础知识的真正有用的工具之一。

在本例中,if是输入文件,of是输出文件,bs是“块大小” - 我使用 GNU 扩展来更方便地设置大小。 (如果您dd没有 GNU 扩展, 您也可以使用 1048576。 )是要读取和写入的count块数。ifof

/dev/urandom是一个更好的选择/dev/random,因为在 Linux 上,当真正的随机数据耗尽时,它将回退到强伪随机数据而不是阻塞。

您可能还想看看http://www.random.org/作为获取一些随机数据而无需自己生成的另一种途径。

答案3

/dev/random/使用和/或/dev/urandom使用优秀的替代方案密码学上安全的伪随机数生成器 (CSPRNG) 由 openssl 给出。您甚至可以在极少数需要的情况下选择算法和加密方法:

size=$( echo 1G | numfmt --from=iec )         # 1 G ==> 1073741824

openssl rand -out myfile "$size"

如果你需要base64:

openssl rand -base64 -out myfile "$size"

阅读man rand详情。

答案4

该解决方案不使用随机,但我使用手册页来创建大量数据。然而,这并不能保证最大大小,因此我们可能需要循环几个cat秒才能获得所需的大小,

man curl > /tmp/man-curl

或者如果需要的尺寸更大,

for i in {1..10}; do man curl >> /tmp/man-curl; done

相关内容