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

Ste*_*ski 193 random

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

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

Gil*_*il' 277

在大多数 unice 上:

head -c 1G </dev/urandom >myfile
Run Code Online (Sandbox Code Playgroud)

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

head -c 1073741824 </dev/urandom >myfile
Run Code Online (Sandbox Code Playgroud)

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

dd bs=1024 count=1048576 </dev/urandom >myfile
Run Code Online (Sandbox Code Playgroud)

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

  • @StefanLasiewski `tail` 首先尝试转到输入文件的末尾,这需要永远(字面意思)。 (32认同)
  • @StefanLasiewski 如果你不喜欢多样性,你也有`/dev/zero`。 (6认同)
  • 有趣的是 `head` 可以读取 `/dev/urandom`,但 `tail` 不能。 (2认同)
  • 不需要第一个“&lt;”文件重定向,这可以工作:“head -c 1G /dev/urandom &gt;myfile” (2认同)

Dan*_*man 47

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

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

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

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

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

  • 注意——像“1M”这样的单位规格并非在每个标准的“dd”变体中都可用。如果您的 `dd` 版本受到影响,请使用 `bs=1048576`。 (4认同)
  • 示例命令将创建一个包含 1,000,000 个块的文件,每个块的大小为 1 MB。那大约是 1 TB (1M x 1MB),而不是 1 GB(即 1K x 1MB)。顺便说一句,在某种程度上,对于给定的输出数据量,增加块大小和减少块数往往会产生更好的吞吐量。 (4认同)

小智 11

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

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

openssl rand -out myfile "$size"
Run Code Online (Sandbox Code Playgroud)

如果你需要base64:

openssl rand -base64 -out myfile "$size"
Run Code Online (Sandbox Code Playgroud)

阅读man rand详情。


小智 6

while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb
Run Code Online (Sandbox Code Playgroud)

用它来生成 5MB 随机字符数据。如果需要不同的大小,请更改-chead的值,更改outfile名称,执行并等待执行完成。