获取两个不同 linux 安装差异的工具或技术

JW0*_*W01 11 configuration version-control

阿尔伯特·爱因斯坦名言

疯狂:一遍又一遍地做同样的事情,却期待不同的结果

很多时候,Linux 把我逼疯了,因为我一遍又一遍地做同样的事情并且从一个盒子到另一个盒子得到不同的结果。(见我之前的问题)。

对我来说,最大的困惑是接管其他人安装的机器(就像与网络托管公司签约时的情况)。你只是不知道你在处理什么。

是否有某种聪明的差异工具可以在 Linux (Ubuntu) 的安装上运行,让我了解该机器如何从默认安装转向?

即可以向我显示将要表现出令人惊讶的命令列表的东西,从而避免反复试验的方法。

Kar*_*arl 11

每当我有一个好的参考系统和一个行为不端的参考系统时,我都会尝试将它们与 vimdiff 进行比较。我比较的内容因问题而异,例如

1)在包级别比较服务器时,我在每个服务器上创建包的排序列表,将结果发送到文件并对其进行比较,例如

在服务器 1 上:

dpkg --get-selections|sort > server1_packages
Run Code Online (Sandbox Code Playgroud)

在服务器 2 上:

dpkg --get-selections|sort > server2_packages
Run Code Online (Sandbox Code Playgroud)

将两个文件复制到同一台机器上并比较(或 vimdiff)它们。

2) 列出正在运行的服务,如示例 1 所示

sysv-rc-conf --list|sort > server1_services

sysv-rc-conf --list|sort > server2_services
Run Code Online (Sandbox Code Playgroud)

...等等,和 vimdiff 那些。

3) 例如,如果您正在解决与 Apache 不一致的配置,请复制配置文件,并 vimdiff 等。

  • 很好的选项总结。将文件放在 `/etc` 下的版本控制下也是一个好主意,以帮助您跟踪正在发生的事情。`etckeeper` 会为你做这件事。 (2认同)

Gil*_*il' 5

同一发行版的两个安装之间的大部分差异都在/etc. 将内容/etc从一台机器复制到另一台机器上的临时目录并运行

diff -ru /etc /copy/of/other/etc
Run Code Online (Sandbox Code Playgroud)

如果您想将机器与默认安装进行比较,请从全新的默认安装(可能在虚拟机中)获取副本。

如果您可以从一开始就控制机器,请确保安装etckeeper以保持/etc版本控制。然后,您将能够准确地看到发生了哪些变化。

当然,会有很多不同。如果您还不知道该往哪里看,这是调查特定行为差异的错误方法。例如,假设该命令adduser在两台机器上的行为不同。那么最好的方法就是看看在adduser做什么;在两台机器上运行它并进行比较。如果它可以选择告诉它更详细(adduser没有),请使用它。更彻底地,在strace下运行程序,例如

strace -s9999 -efile adduser …
Run Code Online (Sandbox Code Playgroud)

查看adduser访问的文件。