我想知道打开某个应用程序时屏幕后面发生了什么。例如,当我打开 Firefox 时,我想知道读取了哪些文件以及执行了哪些文件。有什么方法可以做到这一点。即使从终端打开 Firefox 也不会显示任何信息。操作系统:Ubuntu 12.04
答案1
使用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
列出 FireFox 打开的所有文件。您还可以使用strace -fe trace=file firefox
列出全部FireFox 完成的文件操作以文件路径作为参数(open、stat、lstat、chmod、access 等)。
还有更多可用!查看strace(1)手册页。
答案2
实际上有一种模式称为详细模式,但我不确定 Firefox 是否有这样的选项。有些通常有。但没问题,每个应用程序都会包含其日志。因此您可以通过检查其日志数据来检查应用程序活动。
如果你想启用 Firefox 日志,那么你可以检查一下
http://bertrandbenoit.blogspot.in/2011/09/activate-logging-for-mozilla.html
您可以使用其特定的日志检查 Ubuntu 中的每个应用程序活动。所有应用程序都将记录在/var/log
目录中。