lsof 命令处于重复模式,无间隔

lsof 命令处于重复模式,无间隔

如何将 lsof 的时间设置为 1 秒以下?在 lsof -r(重复模式)上,最小值是 1 秒吗?有没有办法使用 lsof 进行连续监控,而无需在两个连续的 lsof 命令之间设置间隔,以便检查哪个用户访问了特定文件?

答案1

如果你没有安装(这是理想的情况),那么你可以结合inotifywait以下方法更接近实时:lsofwatch

$ 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 格式细节的代码。

相关内容