Prog Challenge - 查找从配置文件或脚本调用的文件的路径

时间:2015-01-08 05:08:15

标签: shell parsing scripting

我不知道该怎么做,所以我来这里寻求帮助:)这就是我需要的。我需要在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脚本,因此上面列出的所有其他文件可能需要单独处理。
  •   

现在,我能想到的挑战是:

  • 文件中的路径可以是绝对路径或亲戚路径;
  • 文件中的路径可能位于行的开头,或者以空格,冒号或分号等字符开头;
  • 必须忽略表示为命令/脚本的参数的文件路径;
  • 必须忽略目录路径;
  • 必须忽略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编写,但我很难获得连贯的结果。

谢谢!

1 个答案:

答案 0 :(得分:1)

用于实现此目的的语言无关紧要。重要的是问题是不可判定的,因为它等同于halting problem

正如我们知道无法确定程序是否会停止一样,也无法知道程序是否会调用另一个程序。例如,您可能认为您的脚本将调用X然后调用Z,但如果X永远不会返回,则永远不会调用Z.此外,您可能不会注意到您的脚本调用Y,因为字符串Y可能是动态确定的,并且从未实际出现在程序文本中。

还有其他一些问题可能会阻碍你,例如:

python -c 'import subprocess; subprocess.call("ls")'

现在你不仅需要一个完整的Bash解析器,还需要Python。更不用说解决Python中的暂停问题了。

换句话说,你想要的是不可能的。为了使其可行,您必须显着减少问题的范围,例如: “查找以/ usr / bin或/ bin开头的所有内容都不在评论中”。目前还不清楚会有多大用处。