如何创建一个新文件,并用1 GB的随机数据填充它?我需要使用它来测试一些软件。

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

评论

使用vi -w randomfile打开vi并询问从未见过vi的人退出该程序。 ;)

刚从Facebook发表来喜欢上面的评论! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…

#1 楼

在大多数unices上:

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

评论


有趣的是,头可以读到/ dev / urandom,但是尾巴不能读。

– Stefan Lasiewski
2012年12月12日23:24

@StefanLasiewski的尾巴首先尝试转到输入文件的末尾,这将永远(字面意义)。

–吉尔斯'所以-不再是邪恶的'
2012年12月12日23:25

@StefanLasiewski如果您不喜欢变化,那么您也有/ dev / zero。

–吉尔斯'所以-不再是邪恶的'
2012年12月12日23:55

更正我的最后一条评论:算术扩展是POSIX,因此不必是Bash。

–于富兰
20年8月3日,下午2:29

无需进行第一个<文件重定向,即可正常工作:head -c 1G / dev / urandom> myfile

–agc
20年8月28日在12:41

#2 楼

假设伪随机数据已足够,则dd if=/dev/urandom of=target-file bs=1M count=1000将满足您的要求。

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

/dev/urandom/dev/random更好,因为在Linux中,它将耗尽强大的伪随机数据,而不是在耗尽真正的随机数据时阻塞。

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

评论


注意-并非每个标准dd型号都提供1M之类的设备规格。如果您的dd版本受到影响,请使用bs = 1048576。

–克里斯唐(Chris Down)
2012年7月7日在0:39



示例命令将创建一个包含1,000,000个块的文件,每个块的大小为1 MB。那大约是1 TB(1M x 1MB),而不是1 GB(也就是1K x 1MB)。顺便说一句,对于给定的输出数据量,增加块大小并减少块数往往会产生更好的吞吐量。

–用户
2012年3月7日上午10:45

GB与GiB。对于dd 1M == 1024 * 1024,如果要使用1 GB或1M,请使用1MB并计数= 1000;如果要1 GiB,请使用count = 1024。或使用1GB或1G并计数= 1。

– 12431234123412341234123
20年9月7日在16:50

#3 楼

while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb


用于生成5MB随机字符数据。如果需要其他大小,请更改head的-c值,更改输出文件名,执行并等待执行完成。

评论


使用base64可以提高召回率(从62/256增加到62/64)。

– iBug
20 Mar 12 '20 at 4:26

#4 楼

openssl提供了将/dev/random/和/或/dev/urandom与出色的加密安全伪随机数生成器(CSPRNG)结合使用的替代方法。您甚至可以在极少数情况下选择所需的算法和加密方法:

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

openssl rand -out myfile "$size"


如果需要base64:

openssl rand -base64 -out myfile "$size"


有关详细信息,请阅读man rand

#5 楼

该解决方案不使用随机变量,而是使用手册页来创建可观数据。但是,这不能保证最大大小,因此我们可能必须遍历几个cat s才能获得所需的大小,
man curl > /tmp/man-curl

,或者如果所需的大小较大,请
for i in {1..10}; do man curl >> /tmp/man-curl; done