ファイルシステムアクティビティの監視

ファイルシステムアクティビティの監視

プログラムがあり、ファイルシステムの活動(どのファイル/ディレクトリが作成/変更/削除されるかなど)を監視したいとします。プログラムはより多くのプロセスを生成できるので、次のようなアクティビティを取得したいと思います。生成されたプロセスにも当てはまります。

どうすればいいですか?

答え1

あなたはそれを使用することができますstraceそのために:

strace -f -e trace=file command args...

straceシステムコールを追跡し、その説明が発生した場合は標準エラーで印刷します。この-fオプションは、子プロセスとスレッドも追跡するように指示します。-e追跡する呼び出しを変更できます。-e trace=fileなどのすべての使用は記録されますが、ファイル以外の操作は記録されません。openunlink

ファイルから読み取った内容とファイルに書き込まれた内容を表示するには、に変更します。-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ビルドの基礎です。

関連情報