![带钩子的动态文件系统](https://linux22.com/image/28858/%E5%B8%A6%E9%92%A9%E5%AD%90%E7%9A%84%E5%8A%A8%E6%80%81%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F.png)
无论如何,Linux(我不关心哪种发行版或风格)是否有一个带有读/写钩子的动态文件系统?例如,我想在 /dynamic 挂载一个动态文件系统,每当我尝试读取/写入不存在的位置时,就会运行 bash 脚本或程序。就像如果我做了tail /dynamic/folder1/file1.log
一个 bash 脚本,它会在读取操作之前运行,并且路径将可作为参数使用。有没有类似的项目?
答案1
您正在寻找保险丝。
使用 FUSE,可以在用户空间程序中实现功能齐全的文件系统。特点包括:
- 简单的库API
- 安装简单(无需打补丁或重新编译内核)
- 安全实施
- 用户空间-内核接口非常高效
- 可供非特权用户使用
- 在 Linux 内核 2.4.X、2.6.X 和 3.X 上运行
- 随着时间的推移已被证明非常稳定
虽然公平地说,我还没有见过 FUSE 模块生的程序/脚本,所以你仍然需要做一些编码。
答案2
您可能还想看看inotify。它提供了一个侦听文件系统更改的 API。例如,您可以用来IN_CREATE
在每次在特定目录中创建新文件时收到通知(几乎所有编程或脚本语言都有 inotify API,因此请随意选择您最熟悉的一种)。
不过,我认为不可能获悉对不存在文件的读取尝试(可以选择在其他程序读取它之前创建它),但根据您的使用情况,您可能会解决这个问题。如果 inotify 不是您的正确选择,我会按照 Ignacio 的建议使用 FUSE。但这可能会增加很多额外的工作来实现你想要的。