You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否利用inotify捕获access/stat等文件存在性检查操作?

问题解答

为什么inotifywait抓不到这类操作?

inotify的核心是监控文件系统的状态修改事件(比如创建、删除、修改文件),默认不会监控「仅读取/检查文件存在性」的操作:

  • access()属于文件访问操作,但inotifywait默认不启用ACCESS事件监控;
  • stat()或bash的[ -f ]只是读取文件元数据(比如inode信息、权限),没有修改任何文件系统状态,inotify根本不会触发相关事件。

解决方法

1. 捕获access()类操作

修改inotifywait命令,显式添加-e access参数来监控文件访问事件:

inotifywait -r -m -c -e access /tmp

此时运行你的testfileexists程序调用access()时,inotifywait会输出对应的ACCESS事件日志。

注意:文件系统挂载时的noatime/relatime选项不会影响该事件触发,inotify的ACCESS事件与文件访问时间(atime)更新是独立机制。

2. 捕获stat()或bash[ -f ]类操作

inotify无法监控这类仅读取元数据的操作,需要借助Linux内核审计子系统auditd:

  1. 安装auditd(根据发行版选择命令):
    # Debian/Ubuntu
    sudo apt install auditd
    # RHEL/CentOS
    sudo dnf install auditd
    
  2. 添加审计规则,监控目标文件的stat和access系统调用:
    sudo auditctl -a always,exit -S stat -S access -F path=/tmp/test -F perm=r
    
  3. 查看审计日志,捕获相关操作:
    sudo ausearch -f /tmp/test
    

bash的[ -f ]底层依赖stat/access系统调用,因此上述规则可以捕获这类检查操作。


内容的提问来源于stack exchange,提问作者foob934579347

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:45:06