Sun DTrace namei()
新城@筑波大学情報です。こんにちは。
MacOSX 10.5 には、Sun Solaris 由来の dtrace が入っていますね。
日常的に使うのは、strace くらいがちょうど良くて、使い方がちょっ
と面倒なんだけれど。dtruss というユーザ・インタフェースも入っ
ていますが、rootでないと使えないとか、コマンドは絶対パスでな
いと失敗するとか、オプションがちょっと使いにくいとかで今一つ
のできです。truss -o なら、ファイルに保存できるのに、
dtruss -o なら別の意味になってしまって。
dtrace で、namei という項目があるのに気が付きました。
------------------------------------------------------------
# dtrace -l | egrep namei
12951 fbt mach_kernel namei entry
12952 fbt mach_kernel namei return
12953 fbt mach_kernel nameidone entry
12954 fbt mach_kernel nameidone return
13460 fbt mach_kernel nfsm_chain_get_path_namei entry
13461 fbt mach_kernel nfsm_chain_get_path_namei return
13531 fbt mach_kernel nfsrv_namei entry
13532 fbt mach_kernel nfsrv_namei return
#
------------------------------------------------------------
namei を見ると、名前解決関連が全部網羅できそうで良さそうなの
ですが、今1つ使い方がわかりません。Sun のマニュアル「DTrace
ユーザーガイド」なども見てみたのですが、パッとしない説明が1
行ある程度でよくわかりません。
dtrace で namei() を調べる方法について、うまく行った人はいま
せんか。
open() とか stat() くらないならこんな感じでできます。
------------------------------------------------------------
# dtrace -n 'syscall::open:entry, syscall::stat:entry, syscall::stat64:entry { printf("%s",stringof(copyinstr(arg0))); }' -o /tmp/cat.dtrace -c "/bin/cat /etc/passwd"
...
# cat /tmp/cat.dtrace
CPU ID FUNCTION:NAME
1 17720 open:entry /etc/passwd
#
------------------------------------------------------------
システムコールをいちいちリストアップすると、疲れるので、
namei() だけにしたいというわけです。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735