有哪些巧妙的方法可以找出可执行文件在启动时读取哪些(配置)文件?例如snmpd
或sshd
.一种选择可能是检查手册页上的CONFIGURATION FILES
或部分。FILES
另一种方法(我认为可行)是跟踪系统调用,但至少在 的情况下snmpd
,这似乎不起作用:
root@vserver:~# strace 2>&1 /usr/sbin/snmpd | grep snmpd.conf
root@vserver:~#
最后但并非最不重要的一点是,stat
命令也没有帮助,因为文件访问时间没有更新。如果已更新,则可以通过执行 来获取可能的配置文件的一些指示find /etc/ -type f -amin 1
。还有其他方法可以找出启动时可执行文件读取哪些(配置)文件吗?
答案1
一般方法是使用strace
:
strace -fe trace=open,openat <command>
配置文件通常以.conf
.因此,您可以通过管道到 来过滤结果grep '\.conf
。
另一种选择,使用strings
:
$ strings $(which httpd) | grep '\.conf'
-D SERVER_CONFIG_FILE="conf/httpd.conf"
conf/httpd.conf
Allowed in *.conf
directive in your httpd.conf file to list a non-root
许多程序还提供一个选项,让您了解它读取的配置文件,例如apache
:
$ httpd -V | grep '\.conf'
-D SERVER_CONFIG_FILE="conf/httpd.conf"