监控文件系统活动

监控文件系统活动

假设我有一个程序,我想监视它的文件系统活动(创建/修改/删除了哪些文件/目录等)。该程序可能能够生成更多进程,因此,我想获取以下活动:这些衍生的进程也是如此。

我该怎么做呢?

答案1

您可以使用strace为了这:

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

strace跟踪系统调用并在发生时将其描述打印到标准错误。该-f选项告诉它也跟踪子进程和线程。-e允许您修改它将跟踪的调用:将记录、等-e trace=file的每次使用,但不记录非文件操作。openunlink

如果您想查看从文件中读取的内容和写入文件的内容,请将其更改为-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称呼,这是strace构建的基础。

相关内容