У меня есть два сервера, которые должны иметь одинаковую настройку, за исключением известных различий.
Запустив:
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 с обеих сторон (или какому-нибудь другому пользователю с полным доступом к машине):
rsync -ani --delete / root@remotehost:/
-a
предназначен для архива и в основном заставляет rsync делать точную копию (за исключением некоторых случаев, связанных со ссылками)-n
предназначен для пробного прогона и означает, что фактически ничего не изменится (это ВАЖНО! :))-i
предназначен для изменения элементов и выводит простой для понимания формат, показывающий каждый файл, который необходимо обновить (синтаксис полностью объяснен на странице руководства под подробной справкой для этого триггера).--delete
заставляет rsync удалять файлы, которые существуют в месте назначения, но не в источнике.Если вы хотите исключить определенные пути, используйте такие команды, как --exclude /var
. Шаблоны исключения относятся к исходному каталогу (которым в данном случае является /, поэтому они фактически абсолютны).
Вы можете изучить флаг rsync -a. Из man rsync
:
-c, --checksum skip based on checksum, not mod-time & size
Я бы оставил комментарий к ответу Алекса Юркевича, но у меня недостаточно репутации: '(пока ...
Вам следует рассмотреть один полезный инструмент - "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 - это очень полезная вещь.