如何使用solaris上的dtrace跟踪文件访问

我想知道如何在Solaris上跟踪(显示)文件访问。 我已经find了dtrace工具包 ,希望voptrace能够符合这个法案。 我用voptrace -t /my/path运行它,如果我在这个path下inputlscat文件,它就不会输出。 我在看错误的工具吗? 有人可以build议另一个find一个解决scheme?

UPDATE
@bahamat

好吧,它是这样的错误消息:

dtrace: error on enabled probe ID 3 (ID 126: syscall::openat:entry): invalid address (0xffd19652) in predicate at DIF offset 28

redirectstderr后,它似乎实际上给我很想要的东西。

布伦丹·格雷格(Brendan Gregg) 在他的网站上有一些很好的logging。 其中,这一class轮看文件的过程是:

 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上运行的。 因人而异。