如果我在Linux中运行某个命令行应用程序,如何判断该进程访问(读取和/或写入)哪些文件?我想我需要在文件系统驱动程序中放置一些钩子并重新编译内核,或类似的东西?有更简单的方法吗?
答案 0 :(得分:5)
strace是一个命令,将显示应用程序所做的每个系统调用。
从手册页:
在最简单的情况下, strace 运行指定的命令,直到它退出。它拦截并记录由进程调用的系统调用和进程接收的信号。每个系统调用的名称,其参数和返回值都打印在标准错误或使用-o选项指定的文件上。
例如,每个open(),read()和write()操作都将显示参数和返回码。
答案 1 :(得分:3)
您可以通过linux中的 lsof 命令获取应用程序的文件访问列表Here是示例列表
答案 2 :(得分:2)
除了提及lsof
的其他答案外,strace
(也许ltrace
也可能有用!),fs_usage
您可以在进程1234中使用目录{{1}特别是打开的文件描述符可从/proc/1234/
获得;从您的程序内部,您可以使用/proc/1234/fd/
。见proc(5)
也许inotify(7)或ptrace(2)也是相关的。