Linux
監控文件系統活動
說,我有一個程序,我想監視它的文件系統活動(創建/修改/刪除了哪些文件/目錄等)。這個程序可能能夠產生更多的程序,因此,我想獲得的活動這些衍生的過程也是如此。
我該怎麼做呢?
您可以
strace
為此使用:strace -f -e trace=file command args...
strace
跟踪系統呼叫並在它們發生時將它們的描述列印到標準錯誤。該-f
選項告訴它也跟踪子程序和執行緒。-e
允許您修改它將跟踪的呼叫:將記錄對,等-e trace=file
的每次使用,但不記錄非文件操作。open``unlink
如果您想查看從文件讀取和寫入文件的內容,請將其更改為
-e trace=file,read,write
;你也可以列出你想在那裡檢查的任何其他呼叫。如果你完全放棄這個論點,你就會得到每個系統呼叫。輸出是這樣的(我
mkdir /tmp/test
在跟踪的 shell 中執行):[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
call,這strace
是建構的。