您可以strace
为此使用:
strace -f -e trace=file command args...
Run Code Online (Sandbox Code Playgroud)
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} ---
Run Code Online (Sandbox Code Playgroud)
您可以使用 登录到文件而不是终端-o filename
,并使用 -v 使输出(甚至)更加详细。也可以使用 附加到已经存在的进程-p PID
,以防更有用。
如果您希望以编程方式执行此操作,而不是检查自己,请查看ptrace
call,这strace
是构建的内容。
归档时间: |
|
查看次数: |
4970 次 |
最近记录: |