我想了解如何在 Solaris 上跟踪(显示)文件访问。我已经找到了dtrace 工具包希望这voptrace
能满足要求。我用voptrace -t /my/path
ifls
或cat
该路径下的文件运行它,它没有输出。我是不是看错了工具?有人能建议另一个来找到解决方案吗?
更新
@巴哈马特
好的,它给出了如下错误消息:
dtrace: error on enabled probe ID 3 (ID 126: syscall::openat:entry): invalid address (0xffd19652) in predicate at DIF offset 28
重定向 stderr 之后,它似乎确实给出了非常接近我想要的结果。
答案1
Brendan Gregg 有很多精彩的dtrace
俏皮话在他的网站上其中,这行代码用于查看进程打开的文件:
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
扩展它,你可以通过添加谓词来观察正在打开的特定文件:
dtrace -n 'syscall::open*:entry /copyinstr(arg0)=="/etc/passwd"/ { printf("%s %s",execname,copyinstr(arg0)); }'
产生以下输出:
CPU ID FUNCTION:NAME
2 12622 open64:entry cat /etc/passwd
ls
略有不同,因为它ls file
不会打开file
。它使用stat
(具体来说lstat64
),因此探测器将是syscall::*stat*:entry
。
请注意,dtrace
实现方式各有不同。上述命令是在 illumos 上运行的。YMMV。