我想知道是否可以获取已安装的 Debian 软件包的原始配置文件与当前配置文件之间的差异。
如果找到显示修改后的配置文件的答案,但我找不到生成差异的方法。
命令是
dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS=" "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}' | sort | less
答案1
我用etckeeper为此目的。它不会帮助您回溯,但从现在开始您将能够看到对 /etc 的更改。它由 Joey Hess 编写,是一款很棒的工具。Joey 的描述:
etckeeper 是一组工具,用于将 /etc 存储在 git、mercurial、darcs 或 bzr 存储库中。它与 apt(以及其他软件包管理器,包括 yum 和 pacman-g2)挂钩,以在软件包升级期间自动提交对 /etc 所做的更改。它跟踪修订控制系统通常不支持但对 /etc 很重要的文件元数据,例如 /etc/shadow 的权限。它非常模块化且可配置,如果您了解使用修订控制的基础知识,它也很容易使用。
由于它基于 git,因此您可以添加远程服务器并轻松比较不同机器的配置文件,而无需通过 ssh 进入另一台机器。它易于安装,apt-get
源代码可在此处获取:
答案2
我编写了一个可以进行差异计算的 bash 脚本(为此,它会下载所有必需的包并将它们提取到临时目录中)。
- 它使用 debsums 而不是 dpkg-query,因为 dpkg-query 对我来说会产生误报。
- 它也无法区分安装过程中由脚本生成的文件(/etc/default 中的文件似乎如此),这需要一些 chrooting 或类似的东西......
享受:
https://gist.github.com/pallinger/cdb70d73cb922baa43d2
附言:使用 etckeeper 或者类似的东西确实更好,但如果你已经安装了系统,那么之前的修改就太晚了。