如何在Debian系统上检查修改后的配置文件?


Answers:


78

要查找所有已更改为默认值的Debian托管配置文件,可以使用如下命令。

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}'

编辑(适用于本地化系统):

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

编辑(使用文件名中包含OK的软件包):

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

在Ubuntu 10.4上像魅力一样工作,我将投票上一千次:-)
路德维希·韦尼泽尔

效果很好。您可以使用md5sum --quiet避免过滤OK文件awk(以及本地化问题?)。顺便说一句:您不知道如何在/ etc中包括未跟踪的文件?例如/ etc / apache2 / sites-available中的那些?
sfussenegger

知道我的答案(debsums -ec)的实际工作方式将很有趣,因为它似乎得到的结果要少得多。
naught101

同样,显然,仅检查conf文件中的软件包版本,然后才出现在其中debsums -ec:如果我使用此方法恢复软件包版本,则通过此方法列出的某些文件不会更改。
naught101

作为其他检查,以查看哪些配置更改可能尚未完成或已过时find /etc -type f \( -iname '*.ucf-dist' -o -iname '*.ucf-old' -o -iname '*.dpkg-old' -o -iname '*.dpkg-dist' \) -print | sort
sphakka


11

很抱歉necro,但是@ naught101的答案对于修改后的文件是正确的,但对于添加的文件却无济于事。@Graeme的解决方案很好,但取决于etckeeper;我不想修改文件系统。

find /etc -type f | grep -vFf <(debsums -e -r /etc | sed 's/[[:space:]]*OK$//')

查找在/ etc /的文件debsums没有报道为有效。这意味着未跟踪的文件或不是“确定”的文件(哈希不匹配)。


还应该运行debsums --list-missing一个程序来检查一个或多个软件包是否缺少所包含文件的校验和。如今,输出应该为空。
Mikko Rantalainen


5

或debsums -e | grep FAILED也会显示所有丢失的配置文件

(来自debsums软件包)


2

这可能是多余的,但是由于有人提到过etckeeper,并且在我调查我遇到其他宝石时,如果您尝试“事后”解决问题,这可能会更有用。

http://devstructure.com/blueprint/

蓝图是对服务器进行反向工程的简单配置管理工具。它找出您手动完成的工作,将其本地存储在Git存储库中,生成能够重新创建工作的代码,并帮助您将这些更改部署到生产中。


如果支持Python-3,则从他们的主页不清楚(看起来有些过时)。有人尝试过吗?
sphakka

从几年前上次活跃的GitHub回购来看,我不会在开箱即用的Python3上投入太多资金,但是看起来写得不错,因此在Python3中添加它可能不会花费很多精力支持。
dragon788

1

这与原始问题有所不同,因为它还会提供ADDED配置文件,而不是仅仅修改的文件。尽管未包含在任何deb软件包中的文件也会被捕获。两种行为都可能是理想的。

最好从一开始就将etckeeper与git vcs一起使用,尽管如果您第一次提交专门添加并提交先前更改的文件,它也可以工作。请注意,这里的一个陷阱是Ubuntu默认配置etckeeper使用Bazaar(规范赞助商Bazaar),而不是etckeeper开发人员设置的git default。

这个想法是获取所有在apt运行之后没有自动进行的提交的列表。然后列出除了第一次提交外所有文件中更改的文件:

filter_sed="/committing changes in \/etc after apt run\$/d"

etckeeper vcs log --oneline |
  sed "$filter_sed; \$d; s/ .*//" |
  xargs etckeeper vcs show --name-only --format=format: |
  sort |
  uniq |
  sed "/^\$/d"

如果一致地命名过滤器字符串,那么它们也可以扩展为包含其他提交。直接从deb文件或从源代码安装可能会有所帮助。

我会注意到的一个值得注意的文件是我的文件xorg.conf-当前,如果需要,您必须自己将其添加到/ etc / X11中。另外,我的default/grub更改也被提取,似乎是通过安装后脚本从/ usr / share复制的,而不是作为软件包的一部分列出的。如果对这样的文件进行了更改,则与dpkg相关的方法将不会显示该文件。


1
仅供参考,git log现在有一个--invert-grep选项,无需使用即可过滤掉无用的提交sed
尼尔·梅休
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.