是否有打开的文件名监视器?

是否有打开的文件名监视器?

有没有办法列出系统上正在打开的所有文件?

要么显示所有当前打开的文件(及其完整路径,可能是某个lsof选项),或者,在我的情况下更有趣,只列出正在打开的路径名(以 的方式tail -f),我认为这lsof是不可能的去做。

答案1

该程序inotifywait旨在用于高性能文件监控,例如您正在寻找的内容。这是一个概念证明:

$ inotifywait -qrm -e open -e access --format "%e %f" tmp/
OPEN hello
OPEN,ISDIR
ACCESS,ISDIR
OPEN hello

输出来自运行touch tmp/hello,然后是less tmp/h<TAB>(tab-completes less tmp/hello),然后按 Enter 键以使用 Less 打开文件。

当在系统范围内运行时,您可能希望排除诸如/proc和 之类的位置/sys。您可能还想通过管道传递它grep -vE '^(OPEN|ACCESS),ISDIR$以排除目录。最后,您还应该看看递归监控的警告:

警告:如果在监视大树的根目录时使用此选项,可能需要相当长的时间才能建立所有 inotify 监视,并且在这段时间内将不会收到事件。此外,由于每个子目录都会建立一个 inotify 监视,因此可能会达到每个用户的 inotify 监视的最大数量。默认最大值为8192;可以通过写入 /proc/sys/fs/inotify/max_user_watches 来增加它。

相关内容