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

Stu*_*ard 16 linux redhat

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

通过运行:

find / \( -path /proc -o -path /sys -o -path /dev \) -prune -o -print | sort > allfiles.txt
Run Code Online (Sandbox Code Playgroud)

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

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

find / \( -path /proc -o -path /sys -o -path /dev \) -prune -o -print | xargs /usr/bin/sha1sum
Run Code Online (Sandbox Code Playgroud)

这是一种明智的方法吗?我在想 rysnc 已经拥有大部分功能,但它可以用来提供差异列表吗?

Ale*_*x J 23

你是对的,rsync 非常适合这个。使用--itemize-changes(又名 -i)。确保您可以在双方(或对机器具有完全访问权限的其他用户)以 root 身份运行它:

rsync -ani --delete / root@remotehost:/
Run Code Online (Sandbox Code Playgroud)
  • -a 用于存档,基本上使 rsync 完全复制(除了某些涉及链接的情况)
  • -n 用于试运行,意味着实际上不会改变任何内容(这一点很重要!:))
  • -i 用于逐项更改,并输出一种简单易懂的格式,显示需要更新的每个文件(语法在手册页中详细解释的触发器下)。
  • --delete 使 rsync 删除目标上存在但源上不存在的文件。

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


Mik*_*zur 7

您可能想要调查 rsync 的 -c 标志。来自man rsync

    -c, --checksum              skip based on checksum, not mod-time & size
Run Code Online (Sandbox Code Playgroud)

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