![如何跟踪文件锁(每个目录)](https://linux22.com/image/18862/%E5%A6%82%E4%BD%95%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6%E9%94%81%EF%BC%88%E6%AF%8F%E4%B8%AA%E7%9B%AE%E5%BD%95%EF%BC%89.png)
我对 Linux 还很陌生,并且不知道如何做到这一点。
我有一个目录,我想监视(输出到 shell)该目录内的文件何时获得文件锁以及何时释放。
了解其他的事情也是可以的,比如何时创建文件等等,但我主要对锁感兴趣。
我不需要知道哪个进程执行了锁定,更多的是关于锁定发生的顺序。
我很确定存在一些用于此目的的工具(我已经安装了,dtrace
但在--help
我决定在这里提出问题之后)。
任何指点都表示热烈的赞赏。如果重要的话,我正在运行 Fedora 14 盒子。
答案1
我还没有检查你是否会得到你想要的东西,但我首先要尝试的是审计子系统。确保auditd
守护进程已启动,然后使用auditctl
配置您想要记录的内容。对于普通的文件系统访问,你会这样做
auditctl -w /path/to/directory
auditctl -a exit,always -S fnctl -S open -S flock -F dir=/path/to/directory
该-S
选项可用于将日志记录限制为特定的系统调用。这些日志出现在/var/log/audit/audit.log
Debian 上,也可能出现在 Fedora 上。
如果您确实知道哪个进程可能锁定文件,请考虑strace
在这些进程上运行(并且仅查看与文件相关的系统调用,或进一步限制为特定的系统调用)。
strace -s9999 -o foo.strace -e file foo