您的位置:首页 > 运维架构 > Linux

Linux 下 strace的妙用,追踪应用程序使用了哪些所谓的“数据库”文件

2015-01-21 11:03 337 查看
Linux下很多命令,是基于“缓存文件”来完成的,比如rpm -q 的查询命令,locate文件查找命令,whatis,man -f,man -k等命令,都是根据缓存文件查找的。

有时候我们可能因为自己的好奇心,或者因为系统故障等原因需要对这些应用程序操作的文件做一下处理,可是问题是:这些数据库文件在哪?

除了常用的那些我们可能记得住,但是并不可能把每个文件位置都记住的,当然也没必要。

那么要用的时候,怎么确定这些文件的位置呢?strace 是我觉得一个很不错的命令。

本来strace 是追踪一个程序执行时,内部调用了哪些系统调用(system call),所以这个命令叫做strace:是应该system call trace 的意思。

Linux内核内部分了几个模块,分别是:file文件处理模块或者说文件系统模块,process 进程模块,ipc进程通信模块,network 网络模块。

因为我们是查找数据库位置的,我们知道应用程序执行时,肯定会去对数据库文件操作的,那就避免不了file 类的系统调用,所以我们用strace 追踪file系统调用。

strace -e trace=file rpm -ql locate gdb

这条命令执行 locate gdb ,查看gdb文件位置。并且用strace追踪这条命令执行时,调用了哪些系统调用,因为我们只对文件操作感兴趣,所以用 -e trace=file。-e 是expression的意思。

输出内容有时候有些繁琐,我们可以从定向到某个文件,比如重定向到

out.locate

strace -e trace=file rpm -ql locate gdb >>out.locate 2>&1

将标准描述符1 和 2 都重定向到 out.locate

重定向完毕后:因为我们知道应用程序使用的数据文件一般都在var目录中,所以我们可以进入目录,然后搜索“var”,或者直接在命令行用 grep "var" out.gdb搜索var,然后根据结果,推断应用程序的数据文件具体位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐