如何将 lsof 的时间设置为 1 秒以下?在 lsof -r(重复模式)上,最小值是 1 秒吗?有没有办法使用 lsof 进行连续监控,而无需在两个连续的 lsof 命令之间设置间隔,以便检查哪个用户访问了特定文件?
答案1
如果你没有安装(这是理想的情况),那么你可以结合inotifywait
以下方法更接近实时:lsof
watch
$ watch -n0.1 lsof
每秒更新一次0.1
。
答案2
要“实时”监控当前目录下的任何文件访问,请打开终端并运行:
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname; do [ -f "$fname" ] && lsof "$fname"; done
或者,分布在多行中:
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname
do
[ -f "$fname" ] && lsof "$fname"
done
这需要一个支持的操作系统,例如 Linux inotifywait
。
循环主体while
可以根据您的目的进行替换。
各选项的含义为inotifywait
:
-r
通过子目录递归监控。
-m
持续监控。
-e access
监控 ACCESS 事件。可能有许多事件值得关注,但这似乎最符合您的要求。
--format '%w%f'
将每个访问文件的路径和文件写入标准输出。
.
监视当前目录,
.
。
局限性
上述代码无法处理包含换行符的文件名。要处理该问题,需要使用 inotifywait 的-csv
选项以及更多能够理解 CSV 格式细节的代码。