두 개의 Redhat Linux 서버를 어떻게 구별 할 수 있습니까? \( -path

알려진 차이점을 제외하고 동일한 설정을 가져야하는 두 개의 서버가 있습니다.

실행하여 :

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)를 사용하십시오 . 이것을 양쪽 (또는 머신에 대한 모든 액세스 권한을 가진 다른 사용자)에서 루트로 실행할 수 있는지 확인하십시오.

rsync -ani --delete / root@remotehost:/
  • -a 아카이브 용이며 기본적으로 rsync가 정확한 복제본을 만듭니다 (링크가있는 경우는 제외)
  • -n 드라이 런용이며 실제로 아무것도 변경되지 않음을 의미합니다 (이것은 중요합니다! :))
  • -i 항목 별 변경을위한 것으로, 업데이트해야하는 모든 파일을 보여주는 이해하기 쉬운 형식을 출력합니다 (구문은 해당 트리거에 대한 자세한 도움말 아래 매뉴얼 페이지에 자세히 설명되어 있음).
  • --delete 대상에 존재하지만 소스에는 존재하지 않는 rsync 파일을 삭제합니다.

특정 경로를 제외하려면 같은 명령을 사용하십시오 --exclude /var. 제외 패턴은 소스 디렉토리를 기준으로합니다 (이 경우 /이므로 사실상 절대적 임).


답변

rsync의 -c 플래그를 조사 할 수 있습니다. 보낸 사람 man rsync:

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

Alex Jurkiewicz의 답변에 의견을 남기고 싶지만 충분한 담당자가 없습니다 : ‘(아직 …


답변

고려해야 할 유용한 도구 중 하나는 “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 체크섬이 변경된 “구성”파일입니다. “날짜”에 모드가 변경되었습니다 …

RPM 데이터베이스는 매우 유용한 것입니다.