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

Pea*_*key 109 linux dd

我正在使用 bash shell 并希望将命令的输出通过管道openssl rand -base64 1000传输到dd诸如dd if={output of openssl} of="sample.txt bs=1G count=1. 我想我可以使用变量,但我不确定如何最好地这样做。我想创建该文件的原因是我想要一个带有随机文本的 1GB 文件。

use*_*686 160

if=不是必需的,你可以用管道dd代替:

something... | dd of=sample.txt bs=1G count=1
Run Code Online (Sandbox Code Playgroud)

它在这里没有用,因为openssl rand无论如何都需要指定字节数。所以你实际上并不需要dd-会起作用:

openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

就个人而言,我会使用bs=64M count=16或类似的:

dd if=/dev/urandom of=sample.txt bs=64M count=16
Run Code Online (Sandbox Code Playgroud)

  • 注意它是否显示`dd:警告:部分读取(33554431字节);建议 iflag=fullblock` 它会创建一个 *截断的文件* 所以添加 `iflag=fullblock` 标志,然后它就可以工作了。 (7认同)
  • @PeanutsMonkey:没有单一的“真实世界场景”,有些场景可能会处理数千兆字节的文本,其他场景可能会处理数千兆字节的 JPEG 或数千兆字节的编译软件……如果您想要大量文本,请下载 [Wikipedia dump ](http://dumps.wikimedia.org/backup-index.html) 例如。 (4认同)
  • 我在 http://superuser.com/questions/467697/why-does-a-zip-file-appear-larger-than-the-source-file-special-when-it-is 发布了一个关于压缩大文件的问题-tex 并被建议使用`/dev/urandom` 生成二进制文件而不是真正的文本文件。 (2认同)
  • @PeanutsMonkey:对;你需要类似`dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt`。 (2认同)
  • @PeanutsMonkey:`dd` 从 `/dev/urandom` 读取 750,000,000 字节并将它们传送到 `uuencode`。`uuencode` 将其输入编码为 base64 编码形式(不一定与其他程序一致)。换句话说,这会将二进制数据转换为文本。我使用 750M 是因为我相信 grawity 的声明,即 base64 编码将数据扩展了 33⅓%,因此您需要在文本文件中要求 ¾ 尽可能多的二进制数据。 (2认同)

ann*_*neb 39

创建一个 1GB.bin 随机内容文件:

 dd if=/dev/urandom of=1GB.bin bs=64M count=16 iflag=fullblock
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,与其他答案相比,`iflag=fullblock` 是必要的补充。 (7认同)

asy*_*nts 6

如果您只需要一个不用于安全相关事物(例如对某些事物进行基准测试)的随机文件,那么以下方法会明显更快:

truncate --size 1G foo
shred --iterations 1 foo
Run Code Online (Sandbox Code Playgroud)

它还更方便,因为您可以直接指定尺寸。


小智 5

由于您的目标是创建一个包含随机内容的 1GB 文件,因此您也可以使用yes命令而不是dd

yes [text or string] | head -c [size of file] > [name of file]
Run Code Online (Sandbox Code Playgroud)

使用示例:

yes this is test file | head -c 100KB > test.file
Run Code Online (Sandbox Code Playgroud)