背景

背景

背景

我们正在从手动管理主机转向配置管理。

20 个文件

我想比较 20 个主机的配置文件 20 次。例如/etc/crontab

用例

我猜 20 个文件中大约有 15 个是相同的。我想查看用“vi”手动修改的 5 个文件。

我想要一个概述,没有像修补这样的自动化操作......

如何比较它们...?

我尝试了我最喜欢的 diff 工具 (meld),但是它不允许超过三个文件 :-(

答案1

我试图弄清楚将 20 个文件相互差异化会达到什么效果,但也许我还有其他方法。

我假设您想知道您的所有系统上定义了哪些类型的 cron 作业。我建议不要比较这些文件的差异,而是将它们一起输出,sort然后使用输出uniq来省略重复的行:

文件1:

10 10 * * * /myjob.sh
* * * * * /everyminute.sh

文件2:

20 20 * * * /evening-job.sh
* * * * * /everyminute.sh

所有文件的所有作业:

cat File1 File2  | sort | uniq -c

  1     10 10 * * * /myjob.sh
  1     20 20 * * * /evening-job.sh
  2     * * * * * /everyminute.sh

第一列显示此作业被定义的次数。

答案2

Sven 的方法可能更适合差异很大的文件。但如果真的只有 5 个文件是唯一的,我宁愿做其他事情……查看整个文件,而不是一些带有计数的编码内容。

计算它们的校验和并显示名称和计数。然后,您可能会得到例如 5 个不同版本的文件,然后您可以更轻松地将每个文件与第一个文件进行比较,每次比较一个,共 4 次。

sha1sum files/* | sort | uniq -c
vimdiff files/file1 files/file2
# FYI short syntax of above (bash):
vimdiff files/file{1,2}

如果结果太多,也许先删除不相关的内容,例如注释和空格。

mkdir /tmp/trimmed
cd /tmp/trimmed
for f in /path/to/files/*; do
    n=$(basename "$f")
    grep -Ev "^[ \t]*$|^[ \t]*#" "$f" > "$n".trimmed
done
sha1sum *.trimmed | sort | uniq -c

答案3

回答我自己的问题:

获取配置:

parallel -q -j0 scp {}:/etc/crontab tmp/crontab-{}.conf ::: 

展会概况:

md5sum tmp/crontab-* | sort
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
581cc593069e5a59cde886d7491e9cf4  tmp/[email protected]
94d1fdc2cc561aafec162209d2360f78  tmp/[email protected]

主机“bar”上的配置不同。请检查:

vimdiff tmp/[email protected] tmp/[email protected]

相关内容