BASH - 查找一组文件中引用的所有世界可写文件

时间:2016-10-31 16:53:21

标签: bash grep rhel5

问题:如何找到RHEL 5服务器的/etc/init.d目录中的启动脚本中引用的所有可写入文件?

约束:

  • 仅限BASH解决方案(这是较大脚本的一部分)
  • 无法安装其他工具/包

这是我到目前为止所拥有的。

worldWritable=$(find / -type f -perm -002)
startupScripts=$(ls -l /etc/init.d/* | tr '\011' ' ' | tr -s ' ' | cut -f 9,9 -d " ")
for file in $worldWritable
do
    for line in $startupScripts
    do
        grep -w "$file" $line | grep -v "^#" >> outFile
    done
done

这种作品,但需要很长时间,而且它包含了许多不正确的内容(至少不是我正在寻找的内容)。我只需要“outFile”来包含发现在/etc/init.d目录中的任何脚本中引用的世界可写文件的列表。

如果有人能提供更好的解决方案,我不介意彻底放弃这种方法。我只需要更快更可靠的东西。谢谢!

1 个答案:

答案 0 :(得分:0)

主要的缓慢肯定来自find /,扫描整个文件系统。进行逆转会更快:

  • 从init脚本中提取所有绝对路径
    • 使用适当的正则表达式,例如排除#早先在同一行上出现的匹配
  • 对于每个提取的潜在路径,请检查:
    • 文件实际存在
    • 该文件是世界可写的

结果应该明显加快。