除了已知的差异外,我有两台服务器应该具有相同的设置。
通过运行:
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
. 排除模式相对于源目录(在本例中为 /,因此它们实际上是绝对的)。
您可能想要调查 rsync 的 -c 标志。来自man rsync
:
-c, --checksum skip based on checksum, not mod-time & size
Run Code Online (Sandbox Code Playgroud)
我会对 Alex Jurkiewicz 的回答发表评论,但我没有足够的代表 :'( 还......