当前位置: 首页 > 面试题库 >

如何在Linux中监视整个目录树的更改?

邹宣
2023-03-14
问题内容

如何在Linux( ext3 文件系统)中监视 整个目录树 的更改? __

当前,该目录包含大约 3,000个子目录* 中的大约 一百万个文件 ,这些 文件 分为三个目录级别。 *

这些文件大多是小文件(<1kb,有些则最大100 kb)。这是一种队列,我需要知道在发生这种情况的5-10秒内何时创建,删除文件或修改其内容。

我知道这里有 inotify 和sorting,但是AFAIK它们只监视一个目录,这意味着我需要3,000个inotify句柄-
比单个进程允许的通常1024个句柄还要多。还是我错了?

万一Linux系统不能告诉我我需要什么:也许有一个
FUSE
项目可以模拟文件系统(在真实文件系统上复制所有文件访问权限)并单独记录所有修改(不能进行修改)吗?


问题答案:

据我所知,除了inotify在每个目录上递归设置监视外,别无其他方法。

就是说,您将不会用完文件描述符,因为inotify不必保留fd来监视文件或目录(其前身dnotify确实遭受了此限制)。inotify而是使用“监视描述符”。

根据inotifywatch的文档,默认限制是8192个监视描述符,您可以通过将新值写入来增加它/proc/sys/fs/inotify/max_user_watches



 类似资料:
  • 问题内容: 我正在使用WatchService来监视目录中的更改,尤其是在目录中创建新文件。下面是我的代码- 当我在“ mk”目录中创建文件时,我正在收到通知。但是,当我在此目录中复制某些文件时,打开该复制文件时出现异常。 我的猜测是Windows Copier对话框仍然锁定了该文件,而我无法打开该文件。因此,基本上我想知道是如何通知文件已被其他进程关闭。 上面代码的输出就像- 我已创建文件“ ”

  • 问题内容: 我想要一种简单的方法来在C ++ / Linux中创建多个目录。 例如,我想在目录中保存文件lola.file: 但是如果目录不存在,我希望它们可以自动创建。一个可行的例子将是完美的。 问题答案: 这是一个可以用C ++编译器编译的C函数。 宏和是对的错误检查版本,并在中声明(并在和中实现)。该标头处理的是旧版本,可以在现代Unix系统上替换(但是在1990年有很多问题)。并声明。 v

  • 问题内容: 我正在编写一个bash脚本,我想监视文件在目录中的更改(添加,删除和重命名),并相应地执行不同的操作。 有没有一种方法可以直接从我的脚本中执行此操作(除了定期创建目录和make之外)? 问题答案: 您可以使用以下命令(假设您的发行版支持inotify,大多数情况下这样做):

  • 问题内容: 我在这里写的主要是关于从哪里开始的建议。我已经实现了一个类,该类将使用Java的WatchService递归监视目录。它可以很好地检测更改,但是我注意到了一个致命的缺陷:我无法删除包含正在监视的目录的正在监视的目录。这似乎是WatchService的限制。 我还稍微研究了Apache的VFS FileListener,但是在花了大约6个小时的时间来围绕它构建某种包装之前,我想也许我只是

  • 问题内容: 就像一个类似的SO问题一样,我正在尝试监视Linux机器上的目录以添加新文件,并希望在这些新文件到达时立即对其进行处理。关于实现此最佳方法的任何想法? 问题答案: 看inotify。 使用inotify,您可以监视用于文件创建的目录。

  • 我需要监视多个文件夹以获取新文件通知。我尝试了一个目录,它工作得很好 我的文件夹结构类似于路径。获取(“c:\users\Test”);路径path1=路径。获取(“c:\users\test1”);路径路径2=路径。获取(“c:\users\test2”); 我尝试将每个目录注册到watcher。WatchKey key1=路径1。注册(观察者、条目和创建);WatchKey key2=路径2。