알버트 아인슈타인 인용
광기 : 똑같은 일을 반복하고 다른 결과를 기대 함
종종 리눅스는 똑같은 일을 반복하고 상자마다 다른 결과를 얻기 때문에 나를 미치게 합니다. ( 이전 질문 참조 ).
나를 위해, 혼란의 가장 큰 영역은 다른 사람이 설치 한 컴퓨터를 인수하는 것입니다 (웹 호스팅 회사에 가입 할 때와 마찬가지로). 당신은 당신이 무엇을 다루고 있는지 모른다.
Linux (Ubuntu) 설치에서 실행할 수 있는 어떤 종류의 영리한 diff 도구 가 있습니까?
즉, 놀랍게도 작동하여 시행 착오 방식을 피하는 명령 목록을 보여줄 수있는 것.
답변
좋은 참조 시스템과 오작동하는 시스템이있을 때마다 vimdiff와 비교하려고합니다. 내가 비교하는 것은 문제에 따라 다릅니다.
1) 패키지 수준에서 서버를 비교할 때 각 서버에서 정렬 된 패키지 목록을 작성하고 결과를 파일로 전송 한 다음 비교합니다.
server1에서 :
dpkg --get-selections|sort > server1_packages
server2에서 :
dpkg --get-selections|sort > server2_packages
두 파일을 동일한 시스템에 복사하고 diff (또는 vimdiff)하십시오.
2) 예제 1과 같이 실행중인 서비스 목록을 작성하십시오.
sysv-rc-conf --list|sort > server1_services
sysv-rc-conf --list|sort > server2_services
… 등.
3) 예를 들어 Apache와 일치하지 않는 구성 문제를 해결하는 경우 구성 파일의 사본을 만들고 그 파일 등을 vimdiff하십시오.
답변
동일한 배포판의 두 설치 간의 차이점은 대부분에 있습니다 /etc
. /etc
한 머신에서 다른 머신의 임시 디렉토리로 컨텐츠를 복사 하고 실행하십시오.
diff -ru /etc /copy/of/other/etc
머신을 기본 설치와 비교하려면 새로운 기본 설치 (아마 가상 머신)에서 사본을 가져 오십시오.
처음부터 기계를 제어 할 수있는 경우 버전 관리 를 유지 하려면 etckeeper 를 설치하십시오 /etc
. 그러면 변경된 내용을 정확하게 볼 수 있습니다.
물론 많은 차이점이 있습니다. 아직 볼 위치에 대한 아이디어가 없다면 행동의 특정 차이점을 조사하기위한 잘못된 접근 방법입니다. 예를 들어, 명령 adduser
이 두 시스템에서 다르게 작동 한다고 가정 해 봅시다 . 그렇다면 최선의 방법은 무엇 adduser
을하고 있는지 보는 것 입니다. 두 머신에서 실행하고 비교하십시오. 좀 더 장황하게 말할 수있는 옵션이 있다면 adduser
사용하십시오. 더 근본적으로, 프로그램에 따라 실행 strace를 , 예를 들어,
strace -s9999 -efile adduser …
어떤 파일이 adduser
액세스 하는지 확인하십시오 .
답변
이전 질문으로 되돌아 가기 위해, 나에게 좋은 아이디어처럼 들리는 멋진 도구이지만, 그런 짐승에 대해 들어 본 적이 없으며 파일 시스템 유형 및 크기와 같은 것을 확인해야합니다.
2002 년에 나에게 일어난 실제 사례 : 두 사람이 두 대의 랙 장착 서버에 SuSE 7.3 시스템을 설치했습니다. 그들은 두 서버 모두에서 패키지를 정확히 동일하게 만들기 위해 많은 노력을 기울였습니다. 잠시 후, 개발중인 일부 소프트웨어에 문제가있었습니다. 한 서버에서 ext3 파일 시스템으로, 다른 서버에서 Reiserfs로 내려 왔습니다. Reiserfs의 일반 “ls”는 파일 이름을 어휘 순서로 제공하지만 ext3에는 없습니다. 하나의 프로그램이 잘못된 파일 이름으로 실패했습니다.
답변
파일, 사용자, 그룹, 패키지, 서비스 등을 위해 http://www.scriptrock.com ; 일부 서버에서는 무료이며 서버 간의 차이점을 시각적으로 비교할 수 있습니다.