将tmpfs视为grep的设备

时间:2018-09-27 08:32:57

标签: linux grep tmpfs

我必须测试我的程序,它会从磁盘中完全删除文件及其内容。要测试我是否执行以下操作:

  1. 创建一个带有一些已知字符串的文件。
  2. 我的程序删除了文件。
  3. 我在文件所在的磁盘上搜索字符串。为此,我使grep将磁盘视为一堆原始数据:
ApacheJMeterTemporaryRootCA.crt

测试实际上按预期方式工作(如果我手动删除文件,则找到字符串,如果我的程序将其删除,则不会。)

问题在于磁盘大小可能很大,因此需要大量时间才能完成测试。另外,磁盘的标签在不同的计算机上可能会有所不同。

因此,我考虑了如何使用虚拟文件系统。使用tmpfs在RAM中创建磁盘:

$ grep -a -o -c 'some_string_to_be_found' /dev/sda1

创建/填充/删除文件,然后尝试使用以下内容查找其内容:

pc:/mnt$ mkdir tmpfs
pc:/mnt$ chmod 777 tmpfs/
pc:/mnt$ mount -t tmpfs -o size=50M tmpfs /mnt/tmpfs/

问题在于它会导致

  

grep:/ dev / tmpfs:没有这样的文件或目录

所以问题是:是否可以将tmpfs用作设备,或读取分配给虚拟文件系统的原始内存?

1 个答案:

答案 0 :(得分:0)

尽管我还没有找到将tmpfs视为设备的方法,但是有一种方法可以解决上述问题(可能对某些人有用)。

我们会将文件视为设备。算法如下:

  1. 创建一个具有指定大小的空文件:

    # touch storage_file
    # truncate -s 10M storage_file
    
  2. 在该文件中创建一个文件系统:

    # mkfs.ext4 storage_file
    
  3. 现在,我们可以从该文件创建设备并将其安装为普通磁盘:

    # losetup /dev/loop0 storage_file
    # mkdir /mnt/loopfs
    # mount -o loop /dev/loop0 /loopfs
    
  4. 仅此而已。我们能够将文件视为设备。在其中创建/删除任意文件/目录。 grep/dev/loop0可以正常工作,不处理整个物理存储设备,仅在storage_file内部进行爬网。