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

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

通过运行:

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

我可以在一台服务器上find所有文件的列表,并将其与另一台服务器上的文件列表进行比较。 这将显示出驻留在服务器上的文件名称的差异。

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

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

这是一个明智的方式来做到这一点? 我在想,rysnc已经有这个function的大部分,但它可以用来提供差异列表?

你是对的,rsync是完美的。 使用--itemize-changes (aka -i)。 确保你可以在双方(或其他一些用户可以完全访问机器)上以root身份运行它:

 rsync -ani --delete / root@remotehost:/ 
  • -a是用于存档的,基本上使得rsync能够做出一个确切的重复(除了一些涉及链接的情况)
  • -n是干运行的,意思是什么都不会改变(这个是重要!:))
  • -i是用于项目大小更改,并输出一个简单易懂的一旦你得到它的格式,显示每个文件需要更新(该语法完全解释在该手册的详细帮助下的手册页)。
  • --delete使rsync删除目标上存在但不是源的文件。

如果要排除某些path,请使用诸如--exclude /var类的命令。 排除模式是相对于源目录(在这种情况下是/,所以它们是有效的绝对)。

你可能想调查rsync的-c标志。 从man rsync

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

我会留下评论亚历克斯Jurkiewicz的答案,但我没有足够的代表:'(但…

你应该考虑一个有用的工具是“rpm -Va”。 这将打印出与打包时不同的所有打包文件的列表。 这忽略了任何非打包的文件,但是这是一个非常好的方法,可以让您了解自安装以来已更改的文件,它们是基本系统的一部分。 它们还包含一个标志,告诉你它们是否被认为是configuration文件。

例如:

 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 

所以“.bashrc”和“yum-updatesd.conf”是大小,时间和MD5校验和已经改变的“configuration”文件。 “rdate”已经改变了模式

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