我有两台服务器,除了已知差异外,它们应该具有相同的设置。
通过运行:
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 已经拥有大部分功能,但它可以用来提供差异列表吗?
你是对的,rsync 非常适合这个。使用
--itemize-changes
(又名-i)。确保您可以在双方都以 root 身份运行它(或其他对机器具有完全访问权限的用户):-a
用于存档,并且基本上使 rsync 完全复制(除了某些涉及链接的情况)-n
用于试运行,这意味着实际上不会有任何改变(这个很重要!:))-i
用于 itemize-changes,并输出一个简单易懂的一旦你得到它的格式,显示需要更新的每个文件(语法在手册页中对该触发器的详细帮助下进行了全面解释)。--delete
使 rsync 删除存在于目标但不存在于源的文件。如果要排除某些路径,请使用
--exclude /var
. 排除模式相对于源目录(在本例中是 /,因此它们实际上是绝对的)。您可能需要调查 rsync 的 -c 标志。来自
man rsync
:我会对 Alex Jurkiewicz 的回答发表评论,但我没有足够的代表:'( 然而......
您应该考虑的一个有用工具是
rpm -Va
. 这将打印出与打包时不同的所有打包文件的列表。这会忽略任何未打包的文件,但这是了解自安装以来已更改的文件的一种非常好的方法,这些文件是基本系统的一部分。它们还包括一个标志,告诉您它们是否被视为配置文件。例如:
大小、时间和 MD5 校验和发生变化的“配置”文件也是
.bashrc
如此。已经改变了它的模式...yum-updatesd.conf
rdate
RPM 数据库是一个非常有用的东西。