如何在Linux中创建虚拟命令支持的文件?

Joz*_*zef 10 linux filesystems virtual-file

在Linux中创建"虚拟"文件的最简单方法是什么,允许对其进行读取操作,总是返回某个特定命令的输出(每次从中读取文件时运行)?因此,每次读取操作都会导致执行命令,捕获其输出并将其作为文件的"内容"传递.

Mic*_*ole 6

这是我在下面复制的一个很好的答案

基本上,命名管道可以让您在脚本中完成此操作,而Fuse让您可以在Python中轻松完成此操作。


您可能正在寻找命名管道

mkfifo f
{
  echo 'V cebqhpr bhgchg.'
  sleep 2
  echo 'Urer vf zber bhgchg.'
} >f
rot13 < f
Run Code Online (Sandbox Code Playgroud)

写入管道不会启动监听程序。如果要循环处理输入,则需要保持监听程序运行。

while true; do rot13 <f >decoded-output-$(date +%s.%N); done
Run Code Online (Sandbox Code Playgroud)

请注意,写入管道的所有数据都会被合并,即使有多个进程写入。如果多个进程正在读取,则只有一个进程获取数据。因此管道可能不适合并发情况。

命名套接字可以处理并发连接,但这超出了基本 shell 脚本的能力。

最复杂的一端是自定义文件系统,它允许您设计和安装一个文件系统,其中每个文件open系统write、等等触发程序中的一个函数。最少的投资是数十行重要的编码,例如Python。如果只想在读取文件时执行命令,可以使用scriptfsfusionflt


mar*_*rbu 5

没有办法创建这样所谓的"虚拟文件".另一方面,您可以通过FUSE在用户空间中实现简单的合成文件系统来实现此行为.此外,您不必使用c,即使对于诸如python之类的脚本语言也存在绑定.

编辑:有可能这样的东西已经存在:例如参见scriptfs.