能否利用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:
- 安装auditd(根据发行版选择命令):
# Debian/Ubuntu sudo apt install auditd # RHEL/CentOS sudo dnf install auditd - 添加审计规则,监控目标文件的
stat和access系统调用:sudo auditctl -a always,exit -S stat -S access -F path=/tmp/test -F perm=r - 查看审计日志,捕获相关操作:
sudo ausearch -f /tmp/test
bash的[ -f ]底层依赖stat/access系统调用,因此上述规则可以捕获这类检查操作。
内容的提问来源于stack exchange,提问作者foob934579347
相关产品推荐
相关产品推荐

