我将获得一些 shell 脚本,我不知道它们会做什么。但我需要知道I/O 操作脚本执行(例如,他们读取/访问的文件、他们写入的文件、创建的文件夹...等等)。
一个例子是使用斯特拉斯如下:
输入脚本: g++ -Wall a.cpp -o hello
我将按如下方式运行它: sudo strace -f -e trace=open g++ -Wall a.cpp -o hello 2> output.txt
*我想要的是: *output.txt 将包含跟踪信息以及哪些文件已被访问(a.cpp 和 a.cpp 中使用的 bh,以及输出 hello)
...
[pid 13871] open("a.cpp", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 3
[pid 13871] open("b.h", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 4
...
[pid 13874] open("hello", O_RDWR|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
...
问题
1-strace
不处理管道所以如果我得到类似的命令,mkdir d2 | cp *.c d2/
它只会检测第一个命令mkdir d2
。
2-strace
提供太多信息,这没问题,但如果能提供更具体的信息就更好了!
我搜索了其他工具和实用程序,其中大多数都会列出运行进程和我我不想要那个因为该脚本将立即执行,并且 Ubuntu 中的进程列表中不会有任何内容。
关于如何在 Ubuntu 中实现这一点,您有什么想法吗?
答案1
关于问题 1,
原因是,strace
出于安全原因,不使用 shell 启动该进程。
为了解决这个问题,你需要用 包裹管道bash -c ' ... '
,并bash
用你的外壳替换它:
sudo strace -f -e trace=open bash -c 'mkdir d2 | cp *.c d2/' hello 2> output.txt