有没有办法列出系统上正在打开的所有文件?
要么显示所有当前打开的文件(及其完整路径,可能是某个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 来增加它。