创建任意大的“伪”文件


16

我想创建一个类似于/dev/null或的特殊文件/dev/random,该文件实际上并不存在,但是您可以从中读取所有内容,只是我可以为文件的外观大小设置上限。

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

这是可行的吗?我唯一能找到的接近远程的地方是手册页mknod,但这些手册并没有太大帮助。

Answers:


17

您可以在某些文件系统上创建一个稀疏文件,该文件系统看起来会具有一定大小,但实际上不会使用磁盘上的那么多空间。

$ 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

这很完美。最好的情况是,我希望找到一种解决方案,在其中我可以实际写出输出内容(例如,对于每个查找位置,您查看数据时都会有该位置的哈希值或沿这些方向的东西),但这很不错那里。现在肯定可以使用,谢谢!
Mediocre Gopher,2012年

1
@MediocreGopher,您当然可以使用FUSE做类似的事情。
cjm 2012年


1

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

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

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


0

好吧,使用dd,您可以指定一个块大小和一个计数,从而限制大小,如下所示:

dd if=/dev/urandom count=5 bs=1024 > nullfile

如果您想阅读它,只需用管道发送:

dd if=/dev/urandom count=5 bs=1024 | yourReadingProcess 

在过去,我进行的每个Linux安装都附带了一些网络工具,portmap,inet.d等,在inet.d中始终指定了一些服务,如果我没记错的话,其中的一个被描述/命名为Chargen。

(...一分钟后...)

是。在/ etc / services中,您可以找到

chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source

因此,我想这是一项测试服务,它可以通过网络发送字符(可能是随机的)。我只能在PC上找到/etc/xinet.d/chargen。有更多信息:

# default: off
# description: An xinetd internal service which generate characters.  The
# xinetd internal service which continuously generates characters until the
# connection is dropped.  The characters look something like this:
# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
# This is the tcp version.

但是,我不知道如何将其用于您的目的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.