Linux

監控文件系統活動

  • June 24, 2014

說,我有一個程序,我想監視它的文件系統活動(創建/修改/刪除了哪些文件/目錄等)。這個程序可能能夠產生更多的程序,因此,我想獲得的活動這些衍生的過程也是如此。

我該怎麼做呢?

您可以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,以防萬一更有用。

如果您希望以程式方式執行此操作,而不是檢查自己,請查看ptracecall,這strace是建構的。

引用自:https://unix.stackexchange.com/questions/138952