如何在Linux下创建一个行为类似于管道的目录

时间:2012-06-14 12:22:06

标签: pipe samba nfs file-handling file-processing

我们想要创建一个相对简单的文档存储,但有一些要求。我的想法是,当文件立即到达存储时,文件将被一个单独的工具/守护进程扫描和处理。

(伪)DMS应该通过NFS和Samba提供访问。正如我到目前为止看到的那样,管道可以将传入的文件传递给某些钩子。但我想知道是否有办法将目录创建为管道。我见过只有命名管道。

应该在此目录中获取任何传入文件的进程是一个PHP脚本,它应该执行MIME类型猜测,CRC32检查(对数据库中的值)...有人提示如何执行此操作吗?

编辑:我希望通过以下解释更清楚一点 - 我正在寻找一种通过Samba和NFS提供“端点”的方法,其中可以放置由病毒处理的文件立即扫描和元处理(最后存储)。

3 个答案:

答案 0 :(得分:9)

您可以使用FUSE来实现位于真实文件系统(后端文件系统)之上的中间Linux文件系统,并在最终将数据写入后端之前对数据执行所需的任何验证。然后,您通过NFS / Samba服务该文件系统。

另一种可能性是使用inotify API通知某些文件系统树上的更改并执行所需的操作。这种方法的问题在于处理将是异步的,因此恶意软件文件将在短时间内发布,直到它们被扫描和删除。

更新ClamFS正是这样做的!

答案 1 :(得分:3)

如果我理解正确,您要做的就是为最终用户提供一个非常简单的界面,并将其集成到他们的文件系统中。他们将在他们的操作系统上看到一个普通文件夹,他们将复制和移动文件,重命名它们等等。无论他们在计算机上的任何其他文件夹上做什么。

但是,此文件夹在后台不是真正的文件夹。您希望完全控制此文件夹上的操作。当他们将文件复制到此文件夹时,您需要一个PHP脚本来处理它。当他们在这个特殊的文件夹下创建一个新文件夹时,另一个PHP脚本将负责它。

正如salva所建议的那样,自己创建文件系统接口确实是一个很好的解决方案;但它不是一个快速也不容易的。由于您提到PHP作为后端,我认为您需要更高级别的方法。

您的问题有两个方面需要处理:客户端和服务器。在客户端,您需要一个文件系统,该文件系统易于作为文件夹安装在posix系统上或作为Windows上的驱动器。对此有很多选择,Samba和NFS就是你提到的两个。

据我所知,您将在PHP中使用它的服务器端。考虑到这一点,我建议使用WebDav而不是Samba或NFS。在服务器端实现起来要容易得多。它几乎适用于所有现代操作系统。甚至还有用于webdav访问的浏览器插件,因此您可以非常轻松地为您的客户提供多个界面。

在服务器端,如果使用PHP,则会有一个名为sabredav的开源php库。只需在Google上快速搜索,我就为此找到了a tutorial

在此设置中,您可以按照自己的方式处理文件。这可以是单机系统,方法是将nginx或Apache等Web服务器嵌入到PHP系统中,或者作为服务器上运行的服务提供。

我希望我能正确理解你的问题,这是你正在寻找的解决方案。

<强>更新 如果您没有机会使用我建议的其他解决方案,那真的必须是Samba和NFS;在PHP中实现这两个协议实在太多了。这将是一个沉重的负担和长期的头痛。

但是,您可以使用普通的NFS / Samba服务器,并尝试使用您的应用程序在后台监视文件更新。这意味着您希望提供的特殊功能(如文件标记或病毒扫描)可能具有可能可接受的延迟。要实现这一点,您可以检查系统上的所有文件和文件夹,并处理修改后的/新文件和文件夹。更容易的事情是使用具有日志记录机制的服务器来执行每个操作并跟踪其日志。这甚至可以比直接连接客户端计算机更好。如果您正确地构建系统,即使在非常大的系统上,文件修改和处理它们之间的延迟也是非常合理的。为此,nas4free可以是一个非常好的解决方案,因为它提供了来自单个系统的许多接口,并且根据its features page,它具有syslog功能。

答案 2 :(得分:2)

您实际上需要它是SMB还是NFS共享?我瘦了你可能最好写/使用一些自定义服务器代码。 SMB和NFS旨在传输普通文件,与您的用例相距甚远