我想了解如何在 Solaris 上跟踪(显示)文件访问。我已经找到了dtrace 工具包,希望voptrace能满足要求。我运行它,voptrace -t /my/path如果我ls或cat该路径下的文件不产生任何输出。我看错工具了吗?有人可以建议另一个人找到解决方案吗?
更新
@bahamat
好的,它给出了这样的错误消息:
dtrace: error on enabled probe ID 3 (ID 126: syscall::openat:entry): invalid address (0xffd19652) in predicate at DIF offset 28
重定向 stderr 后,它似乎实际上与我想要的非常接近。
bah*_*mat 10
Brendan Gregg在他的网站上有许多优秀的dtrace班轮。其中,这一行查看进程打开的文件:
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
Run Code Online (Sandbox Code Playgroud)
扩展它,您可以通过添加谓词来观察正在打开的特定文件:
dtrace -n 'syscall::open*:entry /copyinstr(arg0)=="/etc/passwd"/ { printf("%s %s",execname,copyinstr(arg0)); }'
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
CPU ID FUNCTION:NAME
2 12622 open64:entry cat /etc/passwd
Run Code Online (Sandbox Code Playgroud)
ls略有不同,因为ls file没有打开file。它stat改为使用(特别是lstat64),因此探针将是syscall::*stat*:entry。
请注意,dtrace实现方式各不相同。上面的命令是在 illumos 上运行的。天啊。