プログラムがあり、ファイルシステムの活動(どのファイル/ディレクトリが作成/変更/削除されるかなど)を監視したいとします。プログラムはより多くのプロセスを生成できるので、次のようなアクティビティを取得したいと思います。生成されたプロセスにも当てはまります。
どうすればいいですか?
答え1
あなたはそれを使用することができますstrace
そのために:
strace -f -e trace=file command args...
strace
システムコールを追跡し、その説明が発生した場合は標準エラーで印刷します。この-f
オプションは、子プロセスとスレッドも追跡するように指示します。-e
追跡する呼び出しを変更できます。-e trace=file
などのすべての使用は記録されますが、ファイル以外の操作は記録されません。open
unlink
ファイルから読み取った内容とファイルに書き込まれた内容を表示するには、に変更します。-e trace=file,read,write
確認したい他の呼び出しもリストできます。この引数を完全に放棄すると、すべてのシステムコールを受け取ります。
出力は次のとおりです(mkdir /tmp/test
トレースシェルで実行されています)。
[pid 1444] execve("/usr/bin/mkdir", ["mkdir", "/tmp/test4"], [/* 33 vars */]) = 0
[pid 1444] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
[pid 1444] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] open("/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] mkdir("/tmp/test", 0777) = 0
[pid 1444] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1444, si_status=0, si_utime=0, si_stime=0} ---
端末の代わりにファイルにログインを使用し、-o filename
-vを使用して出力をより冗長にすることができます。-p PID
さらに便利な場合は、既存のプロセスに接続して使用することもできます。
自分で確認するのではなく、プログラムでこれを行うには、次の点を見てください。ptrace
呼ぶ、これはstrace
ビルドの基礎です。