创建任意大的“假”文件

创建任意大的“假”文件

我想创建一个类似于/dev/nullor的特殊文件/dev/random,其中该文件实际上并不存在,但您仍然可以从中读取,除了我实际上可以对文件的表观大小设置上限。

换句话说,我想创建一个特殊文件(假设我将上限设置为 500GB),当我“cat”该文件时,它将输出该文件的所有 500GB,然后停止。它需要与实际 500GB 文件的行为相同,但不占用空间。该文件的内容并不重要,它可能都是\0类似的/dev/null,或者只是一遍又一遍地发送的小字符串,或者其他什么。

这是可以做的事情吗?我能找到的唯一接近的东西是手册页谈论mknod,但那些并不是很有帮助。

答案1

您可以创建一个稀疏文件在某些文件系统上,这将出现达到一定的大小,但实际上不会使用那么多空间在磁盘上

$ dd if=/dev/null of=sparse bs=1024 count=1 seek=524288000
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.4444e-05 s, 0.0 kB/s
$ ls -l sparse 
-rw-rw-r--. 1 ignacio ignacio 536870912000 May  9 22:25 sparse
$ du -h sparse
0   sparse

答案2

除了已经提到的基于便携式 dd/seek 的解决方案之外,一些 Unix 有专门的命令:

至少在索拉里斯,macOS/X埃里克斯:

mkfile -n 500m sparseFile

在 HP-UX 上预分配,在 AIX lmktemp 上。许多 Linux 发行版都有截短

答案3

如果您不需要在文件中查找,您可以使用命名管道:

mkfifo my_special_file
yes | head -n 100 > my_special_file&
cat my_special_file

当然,您可以使用任何其他命令(包括复杂的脚本)在管道中生成数据。

答案4

您还可以使用截断命令。例如:以下将创建一个 5MB 的文件。

truncate -s 5M 5.dumpfile

相关内容