dog*_*ane 98 filesystems directory io-redirection
我想创建一个“ /dev/null”目录(或“黑洞”目录),这样写入它的任何文件都不会真正写入,而只是消失。
我有一个将大型临时文件写入目录的应用程序。我无法控制文件的名称,而且我并不真正关心这些文件的内容。我可以编写一个脚本来定期破坏这些文件,但这些文件会很快写出并填满我的磁盘。我正在寻找更聪明的东西。我希望应用程序“认为”它正在写出这些文件,而实际上,写的内容只是在另一端被丢弃。
另请参阅这个旧的相关线程。
Gil*_*il' 53
我知道的任何 unix 都不支持开箱即用,但您几乎可以使用FUSE做任何事情。至少有一个 nullfs¹ 实现,/dev/null这是一个文件系统,其中每个文件都存在并且行为类似于(这不是我见过的唯一实现)。
¹ 不要与*BSD nullfs混淆,后者类似于bindfs。
Mar*_*ley 11
另一种方法是 LD_PRELOAD 包装器;基本上是一个在 libc.so 之前加载的小型共享库,并拦截对“open”的调用,并使用检查预期文件路径的内容并替换“/dev/null”(如果它在目标目录中)。
这具有 (a) 完全在用户空间中的优点 - 不需要内核黑客攻击;(b) 只影响单一错误的申请。
一个简单的例子是在http://www.noah.org/wiki/LD_PRELOAD_notes,但在你的情况下,你会想要拦截“open”和“creat”系统调用。
小智 5
我已经基于 linux 内核中的 ramfs 示例创建了一个内核模块,它基本上是一个名为 nullfsvfs 的黑洞文件系统。FUSE 系统实现需要将数据从用户复制到内核空间,与作为内核模块的直接实现相比,速度相当慢。看:
https://github.com/abbbi/nullfsvfs