差异整个Linux系统


8

我安装了基本的Linux系统。我想运行一个非常大且复杂的第三方脚本,它将对整个系统的各个部分进行许多更改。这些更改将包括添加新文件,修改现有文件以及删除现有文件。脚本完成后,我将拥有一个经过修改的系统。修改将是广泛而实质的。

我想要某种有关已添加,删除或修改的所有文件的报告,以及对修改的逐行分析。像文件差异工具的输出那样的东西会很棒。

我假设我需要在运行脚本之前创建某种快照,然后在运行第二张快照。我假设然后将这些快照输入某种diff或类似diff的工具中。

有谁知道使用什么工具以及如何区分整个系统?

我正在使用Virtualbox,它具有差异图像功能,尽管我不知道我是否可以将其适应此目的。而且,如果可能的话,我希望有一个更通用的解决方案。


不同的图像(又名快照)不是您想要的。他们的目标是产生尽可能小的二进制差异,而不是冗长的文本差异。
德米特里·格里戈里耶夫

@DmitryGrigoryev这就是我从链接中获得的印象。感谢您为我确认。

实际上,您想要的东西很容易实现。给定资源,我将安装两个完全相同的系统。在将要修改文件的系统上启用文件系统审核。从审核中获取报告,以确定添加/修改/删除的内容。然后将这些文件与其他已安装的系统进行比较。
BitsOfNix

1
rsync修改后,您可以用来制作快照并再次运行,以生成修改文件的报告。差异部分可能会更难。
FloHimself

Answers:


1

我认为您的想法离解决方案不远。概述一种可能的方法:我正在使用rsnapshot备份。它会创建文件的全部或子集的目录(备份)结构,入口为(例如)/backup/hourly.1/.../backup/hourly.0/...,其中每个分支都承载整个数据,但是对没有进行任何更改的文件使用(硬)链接。在两个结构上进行递归lsfind比较并比较输出(如果找到,将进行排序)将显示丢失的文件,检查链接计数(在ls -l第二列中)将显示新文件(具有链接计数) 1)。有关文件更改的详细信息,您可以(对于已识别的文件)使用普通diff工具。如前所述,这是一个大纲,需要进行一些工作才能实现,并且可能会有一些不明显的怪癖,因此请带着一点建议来接受该建议。


0

我可能会按照评论之一中的建议使用rsync进行此操作。Rsync具有空运行模式和校验和功能,可用于创建有关更改的准确报告。

进一步讲,尽管您必须避免使用二进制文件(不确定如何),但您也许可以编写一个脚本来对更改的文件执行差异处理。

或者,您可以采取完全不同的方法..使用git。因此,在您的“基本”系统上,在/中执行git init,然后在运行第三方操作后即可:

git status > /tmp/changed-files.txt
git diff > /tmp/changes.txt

使用git会给您很大的灵活性。话虽如此,它可能会在整个系统上苦苦挣扎,并可能对/ proc等感到困惑。


0

有一个叫做libguestfs的东西可以用来执行比较。这就是我过去使用的方式,我认为现在甚至可以内置该操作,因此您不必使用guestfish shell。

另一个选择是在docker容器中运行您的操作,然后将生成的文件树导出并比较为tar文件。

但是请注意,如果脚本通过写入虚拟文件来更改系统设置,则这些更改将不会显示在文件树中,并且您还需要其他内容来捕获这些更改。iptable规则就是这样的例子。您将需要自定义逻辑来捕获这些更改。


除非规则是永久性的,否则必须将其存储在某个位置,以便在网络启动后可以重新运行/重新启用它
。– ivanivan

0

Linux Cookbook上的页面显示了修改前后的find-grep,后跟diff。这很简单,可能是一个起点,但是您可以通过指出更复杂的解决方案来更好地解决您的问题。

看起来它只会捕获添加和删除的内容,而不是修改的内容...


0

所有这些答案都朝着正确的方向和相同的方向发展。也可以把我的8位扔进...

在virtualbox上安装基本系统。初始设置和基础准备就绪后,请使用其他实时媒体启动虚拟机。然后,您可以在不涉及易失性目录的情况下压缩或导出文件系统/proc

运行大量脚本,然后重复导出过程。

现在您有2个文件系统可用,可以使用各种比较工具。

diff --brief -Nr /tree1 /tree2

将为您提供一个不错的列表,其中包含不同的文件stdout,以及一个在一棵树或另一棵树中找不到的文件的列表stderr

为了找出实际发生的更改,您可以解析stdout不同文件的输出,diff然后分别对它们运行常规,将输出重定向到文件。或者,您可以只检查列表,然后对您特别感兴趣的文件运行diff。

您可以使用将所有这些组合到一个命令中git。无需初始化存储库即可使用,只需指向任意两个目录即可。提供良好的彩色输出,分页较少。

git diff --no-index /tree1 /tree2

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.