如何区分两个 Redhat Linux 服务器?

如何区分两个 Redhat Linux 服务器?

我有两台服务器,除了已知差异外,它们的设置应该相同。

通过运行:

find / \( -path /proc -o -path /sys -o -path /dev \) -prune -o -print | sort > allfiles.txt

我可以找到一台服务器上所有文件的列表,并将其与另一台服务器上的文件列表进行比较。这将向我展示服务器上文件名称的差异。

我真正想要做的是对两个服务器上的所有文件运行校验和,然后比较它们以找出内容不同的地方。例如

find / \( -path /proc -o -path /sys -o -path /dev \) -prune -o -print | xargs /usr/bin/sha1sum

这是明智的做法吗?我认为 rysnc 已经具备了大部分功能,但它可以用来提供差异列表吗?

答案1

您说得对,rsync 非常适合此操作。使用--itemize-changes(又名 -i)。确保您可以在两端以 root 身份运行此操作(或以其他对机器具有完全访问权限的用户身份运行):

rsync -ani --delete / root@remotehost:/
  • -a用于存档,基本上使 rsync 生成一个完全重复的副本(除了涉及链接的某些情况)
  • -n用于试运行,意味着实际上不会发生任何改变(这一点很重要!:))
  • -i用于逐项列出更改,并输出一种一旦获得就易于理解的格式,显示每个需要更新的文件(该语法在该触发器的详细帮助下的手册页中进行了完整解释)。
  • --delete使 rsync 删除目标上存在但不在源上的文件。

如果要排除某些路径,请使用类似 的命令--exclude /var。排除模式相对于源目录(在本例中为 /,因此它们实际上是绝对的)。

答案2

您可能需要研究 rsync 的 -c 标志。来自man rsync

    -c, --checksum              skip based on checksum, not mod-time & size

我会对 Alex Jurkiewicz 的回答发表评论,但我还没有足够的声誉:'(......

答案3

您应该考虑使用的一个有用工具是rpm -Va。这将打印出所有包装与打包时不同的文件。这会忽略任何非打包文件,但这是了解自安装以来已更改的文件(属于基本系统的一部分)的一种非常好的方法。它们还包括一个标志,告诉您是否将它们视为配置文件。

例如:

S.5....T  c /root/.bashrc
S.5....T  c /etc/yum/yum-updatesd.conf
.M......    /usr/bin/rdate
..5....T  c /etc/dbbackup.conf
S.5....T  c /etc/webalizer.conf
SM5....T  c /etc/sysconfig/iptables-config

因此,“配置”文件的大小、时间和 MD5 校验和已经发生了变化。 .bashrc它的模式已经改变……yum-updatesd.confrdate

RPM 数据库是非常有用的东西。

相关内容