如何在 Solaris 上使用 dtrace 跟踪文件访问

如何在 Solaris 上使用 dtrace 跟踪文件访问

我想了解如何在 Solaris 上跟踪(显示)文件访问。我已经找到了dtrace 工具包希望这voptrace能满足要求。我用voptrace -t /my/pathiflscat该路径下的文件运行它,它没有输出。我是不是看错了工具?有人能建议另一个来找到解决方案吗?

更新
@巴哈马特

好的,它给出了如下错误消息:

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。

相关内容