Bash 使用lsof跟踪通过命令行运行的脚本打开的文件
我知道我可以使用Bash 使用lsof跟踪通过命令行运行的脚本打开的文件,bash,process,lsof,Bash,Process,Lsof,我知道我可以使用lsof跟踪通过运行进程、进程组、用户打开的文件,以及在特定目录中打开的文件。然而,我很好奇,看看我是否能捕获由一个程序打开的文件,该程序并不总是在运行,但只运行有限的时间,比如bash脚本或Ruby程序 例如,假设我可以通过在Rails目录中执行rspec来运行Ruby测试。如何获取由rspec打开的所有文件的列表 换句话说,如何使lsof陷阱实时打开进程中的文件?从视觉上看,它看起来像lsof rspec,其中lsof执行rspec,并记录所有打开的文件 我想您可能正在寻找可
lsof
跟踪通过运行进程、进程组、用户打开的文件,以及在特定目录中打开的文件。然而,我很好奇,看看我是否能捕获由一个程序打开的文件,该程序并不总是在运行,但只运行有限的时间,比如bash脚本或Ruby程序
例如,假设我可以通过在Rails目录中执行rspec
来运行Ruby测试。如何获取由rspec
打开的所有文件的列表
换句话说,如何使lsof陷阱实时打开进程中的文件?从视觉上看,它看起来像
lsof rspec
,其中lsof
执行rspec
,并记录所有打开的文件 我想您可能正在寻找可以跟踪和记录系统调用的strace
程序。例如,我可以请求使用grep
命令打开的文件列表,如下所示:
strace -e trace=open,openat grep something M* > /dev/null
-e trace=open,openat
选项告诉strace
,我们只对这两个系统调用感兴趣
我已将grep
的输出重定向到/dev/null
,以避免输出混乱;您还可以使用-o
选项将strace
的输出发送到文件
假设我的本地目录中有文件MANIFEST.in
、MODULE\u GUIDELINES.md
和Makefile
,这可能会产生如下输出:
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
openat(AT_FDCWD, "Makefile", O_RDONLY|O_NOCTTY) = 3
openat(AT_FDCWD, "MANIFEST.in", O_RDONLY|O_NOCTTY) = 3
openat(AT_FDCWD, "MODULE_GUIDELINES.md", O_RDONLY|O_NOCTTY) = 3
+++ exited with 0 +++
您可以在这里看到运行grep
时打开的共享库以及grep
本身打开的文件
您可以在中阅读更多信息。我想您可能正在寻找可以跟踪和记录系统调用的
strace
程序。例如,我可以请求使用grep
命令打开的文件列表,如下所示:
strace -e trace=open,openat grep something M* > /dev/null
-e trace=open,openat
选项告诉strace
,我们只对这两个系统调用感兴趣
我已将grep
的输出重定向到/dev/null
,以避免输出混乱;您还可以使用-o
选项将strace
的输出发送到文件
假设我的本地目录中有文件MANIFEST.in
、MODULE\u GUIDELINES.md
和Makefile
,这可能会产生如下输出:
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
openat(AT_FDCWD, "Makefile", O_RDONLY|O_NOCTTY) = 3
openat(AT_FDCWD, "MANIFEST.in", O_RDONLY|O_NOCTTY) = 3
openat(AT_FDCWD, "MODULE_GUIDELINES.md", O_RDONLY|O_NOCTTY) = 3
+++ exited with 0 +++
您可以在这里看到运行grep
时打开的共享库以及grep
本身打开的文件
您确实可以在。中阅读更多内容。我正在使用MacOSX,所以我必须尝试一下DTrace。谢谢你的回答。我正在使用MacOSX,所以我必须尝试一下DTrace。谢谢你的回答。