我如何监控a whole directory tree在Linux(ext3文件系统)中的变化?

目前,该目录包含大约3,000 subdirectories个目录中的half a million files个,分为三个目录级别.

这些文件大多是小文件(1kb,有些高达100KB).这是一种队列,我需要知道文件在5-10秒内被创建、删除或修改的时间.

我知道有inotify个和排序,但它们只监视一个目录,这意味着我需要3000个inotify句柄,比单个进程通常允许的1024个句柄还要多.还是我错了?

In case the Linux system can't tell me what I need: perhaps there is a 100 project that simulates a file system (replicating all file accesses on a real file system) and separately logs all modifications (couldn't fine one)?

推荐答案

据我所知,没有别的办法,只能在每个目录上递归设置inotify个手表.

也就是说,您不会用完文件描述符,因为inotify不必保留fd来查看文件或目录(它的前身dnotify确实受到了这个限制).inotify使用"手表描述符".

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

Linux相关问答推荐

创建守护进程时打开0,1,2描述符

空字符串和空文件的区别

Bash:将多行转换为单行的命令

JSON 转义 CURL/JQ 输出

"‘operator<<’匹配失败(可能是因为我的C++/GCC版本问题)"

是否可以在 XTerm 或 Konsole 中使 stdout 和 stderr 输出具有不同的 colored颜色 ?

如果 bash 中已经存在文件名,则创建新文件但添加数字

Docker 容器立即退出

Java 8 上的 SQL Server JDBC 错误:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接

如何构建在 Android 上运行的本机(命令行)可执行文件?

在 Bash 中识别接收到的信号名称

使用 C/C++ (GCC/G++) 在 Linux 中的套接字编程中发送和接收文件

如何测试是否存在两个文件?

grep 时间命令输出

Docker Volume 没有挂载任何文件

如何在shell的递归目录中列出特定类型的文件?

Linux:用户名不在 sudoers 文件中

如何停止 Linux 上的不间断进程?

Linux(Ubuntu)终端-如何查看以前的页面不再可见

Linux shell 中的排序和唯一性