如何创建一个新文件并在其中填充 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
答案2
假设伪随机数据就足够了,dd if=/dev/urandom of=target-file bs=1M count=1000
就会做你想做的事。
日(1)将从输入文件中读取数据块并将其写入输出文件。命令行语言有点古怪,但它是值得掌握基础知识的真正有用的工具之一。
在本例中,if
是输入文件,of
是输出文件,bs
是“块大小” - 我使用 GNU 扩展来更方便地设置大小。 (如果您dd
没有 GNU 扩展, 您也可以使用 1048576。 )是要读取和写入的count
块数。if
of
/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