打开应用程序时,如何知道执行了哪些文件?


12

我想知道打开某些应用程序后屏幕后面会发生什么。例如,当我打开firefox时,我想知道读取了哪些文件并执行了哪些文件。有没有办法做到这一点。即使从终端打开Firefox也不会显示任何信息。作业系统:Ubuntu 12.04

Answers:


21

使用strace

示例:列出会话期间Firefox打开的所有文件:

strace -f firefox 2>&1 | grep 'open('

如果您打开FireFox的第二个实例,结果将是这样的:http : //pastebin.com/iRqxgiWN(“ -f”选项仅使strace跟随进程派生。)

示例2:列出FireFox执行的所有进程:

strace -f firefox 2>&1 | grep -P 'exec[vlpe]*\('

造访YouTube时会产生类似以下的结果:

[pid 25020] execve("/usr/lib/firefox/plugin-container", ["/usr/lib/firefox/plugin-containe"..., "/usr/lib/adobe-flashplugin/libfl"..., "-greomni", "/usr/lib/firefox/omni.ja", "-appomni", "/usr/lib/firefox/browser/omni.ja", "-appdir", "/usr/lib/firefox/browser", "15198", "false", "plugin"], [/* 57 vars */]) = 0
[pid 25024] execve("/bin/sh", ["sh", "-c", "ps x | grep netscape"], [/* 57 vars */]) = 0
[pid 25025] execve("/bin/ps", ["ps", "x"], [/* 57 vars */] <unfinished ...>
[pid 25026] execve("/bin/grep", ["grep", "netscape"], [/* 57 vars */]) = 0

您也可以通过许多其他系统调用来执行此操作...

通过匹配搜索中的参数,open()grep还可以找出文件以哪种模式打开:

只需添加| grep -P 'O_RDONLY|O_RDWR'(最重要的管道字符就很重要!)即可过滤| grep -P 'O_WRONLY|O_RDWR'对命令的读取访问或写入访问...

编辑

正如评论中提到的,您还可以strace -fe open firefox用来列出F​​ireFox打开的所有文件。您也可以使用strace -fe trace=file firefox列出由FireFox完成的所有文件操作,这些操作以文件路径作为参数(打开,状态,lstat,chmod,访问等)。

还有更多可用!查看strace(1)手册页。


1
令我惊讶的是,Firefox将运行一个shell来从进程列表中grep“ netscape”。
迈克尔

1
strace具有广泛的内置过滤功能。例如,尝试strace -e open仅显示对的调用open()
约翰·库格曼

@Michael生成外壳程序,因为它使用了外壳程序语法的管道(“ |”)。您可以通过代码手动设置相同的管道,但是让Shell执行此操作要容易得多-只要您知道不可能从用户那里传递Shell逸出代码,这可能导致安全漏洞。
Alistair Buxton 2013年

1

实际上有一个模式叫做详细模式,但是我不确定Firefox是否有这样的选项。但是没问题,每个应用程序都将包含其日志。因此您可以通过检查其日志数据来检查应用程序的活动。

如果您想为firefox启用日志,则可以检查一下

http://bertrandbenoit.blogspot.in/2011/09/activate-logging-for-mozilla.html

您可以查看Ubuntu中的每个应用程序活动及其特定日志/var/log。所有应用程序都将记录在该目录中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.