我不知道该怎么做,所以我来这里寻求帮助:)这就是我需要的。我需要在Red Hat Linux系统上解析一些配置文件或bash / sh脚本,并查找由它们执行的文件/命令/脚本的路径。配置文件可以使用不同的语法或使用不同的语言。
以下是我要查看的文件:
配置脚本:
- / etc / inittab中
- 的/ var /线轴/ cron的/根
- 的/ var /线轴/ cron的/选项卡/根
- / etc / crontab中
- /etc/xinetd.conf中
- 递归地位于/etc/cron.d/*下的文件
Bash / Sh脚本:
- 递归地位于/etc/init.d/*或/etc/rc.d/*下的文件。这些文件夹只包含shell脚本,因此上面列出的所有其他文件可能需要单独处理。
现在,我能想到的挑战是:
一些例子(摘自/etc/init.d/avahi-daemon):
if [ -s /etc/localtime ]; then
cp -fp /etc/localtime /etc/avahi/etc >/dev/null 2>&1
- >上述代码段中只能返回/bin/cp
和/bin/[
(实际执行的唯一命令)
AVAHI_BIN=/usr/sbin/avahi-daemon
$AVAHI_BIN -r
- >必须返回/usr/sbin/avahi-daemon
,但这只是因为变量是在之后调用的。
请注意,我无法访问实际的文件系统,我只需要解析文件的副本。
写完这篇文章后,我意识到它有多复杂,不太可能有100%的工作解决方案...但如果你喜欢编程挑战:)
好的部分是我可以使用任何脚本语言:bash / sh / grep / sed / awk,php,python,perl,ruby或这些的组合..
我试着用PHP编写,但我很难获得连贯的结果。
谢谢!
答案 0 :(得分:1)
用于实现此目的的语言无关紧要。重要的是问题是不可判定的,因为它等同于halting problem。
正如我们知道无法确定程序是否会停止一样,也无法知道程序是否会调用另一个程序。例如,您可能认为您的脚本将调用X然后调用Z,但如果X永远不会返回,则永远不会调用Z.此外,您可能不会注意到您的脚本调用Y,因为字符串Y可能是动态确定的,并且从未实际出现在程序文本中。
还有其他一些问题可能会阻碍你,例如:
python -c 'import subprocess; subprocess.call("ls")'
现在你不仅需要一个完整的Bash解析器,还需要Python。更不用说解决Python中的暂停问题了。
换句话说,你想要的是不可能的。为了使其可行,您必须显着减少问题的范围,例如: “查找以/ usr / bin或/ bin开头的所有内容都不在评论中”。目前还不清楚会有多大用处。