检测运行脚本的文件读/写

时间:2013-12-20 18:14:09

标签: linux shell io

我将获得一些shell脚本,我有点不知道他们将要做什么。但我需要知道脚本执行的 I / O操作(例如,他们读取/访问的文件,他们编写的文件,创建的文件夹等等)。

一个例子是使用 strace ,如下所示:

INPUT脚本: 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和bh用于a.cpp,输出你好)

... 
[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 / Linux中实现这一点的任何想法?

1 个答案:

答案 0 :(得分:4)

1)

  如果我得到像mkdir d2 |这样的命令,

strace不会处理管道cp * .c   d2 /它只会检测第一个命令mkdir d2。

strace有两个usefult选项

 -f  Trace child processes as they are created by currently traced processes as a result of the fork(2) system call.
-ff  If the -o filename option is in effect, each processes trace is written to filename.pid where pid is the numeric process id of each process.

你可以这样做:

strace -f -o res.txt bash -c 'mkdir d2 | cp *.c d2/'

或者你可以这样做:

strace -ff -o res.txt bash -c 'mkdir d2 | cp *.c d2/'

2)

  

strace提供了太多的信息,这很好但是如果某些东西更具体,那就太棒了!

SystemTap“允许开发人员和管理员编写和重用简单的脚本来深入检查实时Linux系统的活动”。您可以编写自己的脚本,也可以使用可用的脚本。来自SystemTap网站的This is a script检测到已打开的文件:

stap your_script.stp -c "your command"