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


15

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

通过运行:

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已经具有大多数此功能,但是可以用来提供差异列表吗?


2
下次您应该使用-print0代替-printxargs -0代替xargs。您将避免由“奇数”文件名引起的任何问题。
Cristian Ciupitu 09年

Answers:


22

没错,rsync非常适合此操作。使用--itemize-changes(aka -i)。确保您可以以root身份在两侧(或具有对计算机的完全访问权限的其他用户)以root身份运行:

rsync -ani --delete / root@remotehost:/
  • -a 用于存档,基本上使rsync精确地重复(除了某些涉及链接的情况)
  • -n 是空运行的,意味着实际上什么都不会改变(这一点很重要!:))
  • -i 用于逐项更改,并输出一种易于理解的格式,显示需要更新的每个文件(有关该触发器的详细帮助,该语法在手册页中进行了详细说明)。
  • --delete 使rsync删除目标上而不是源上存在的文件。

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


如果排除的/ var,你也将排除的crontab存储在哪里,这可能DO需要进行检查。但是,你想排除之类的东西在/ var /日志和/ var /缓存
肖恩Reifschneider

7

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

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

我会对亚历克斯·尤基维兹(Alex Jurkiewicz)的回答发表评论,但我没有足够的代表:'(然而...


1
存在一些使用此标志的场景。我见过的最常见的情况是,当您以某种“奇怪”(通常为二进制)格式存储数据时,该格式是固定大小的。如果通过同步同步过程中的自动过程在同一时间更新文件(例如日志轮换或类似操作),则rsync在仅按大小/ m次同步时会丢失该文件。绝对可能,但相当罕见。
Alex J

我本来希望它只是对文件的内容进行校验和,以便您可以比较而不用注意mod-time等,但是Alex似乎是对的...有一种忽略所有元数据的好方法-数据并且只注意内容,git的方式呢?
iconoclast

4

您应该考虑的一个有用的工具是“ 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

因此,“。bashrc”和“ yum-updatesd.conf”是大小,时间和MD5校验和已更改的“配置”文件。“ rdate”的模式已更改...

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

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.