
기본 Linux 시스템이 설치되어 있습니다. 전체 시스템의 다양한 부분을 많이 변경하는 매우 크고 복잡한 타사 스크립트를 실행하고 싶습니다. 이러한 변경에는 새 파일 추가, 기존 파일 수정 및 기존 파일 삭제가 포함됩니다. 스크립트가 완료되면 수정된 시스템을 갖게 됩니다. 변화는 광범위하고 실질적일 것입니다.
추가, 제거 또는 수정된 모든 파일에 대한 일종의 보고서와 수정 사항을 한 줄씩 분석하고 싶습니다. 파일 비교 도구의 출력과 같은 것이 좋을 것입니다.
스크립트를 실행하기 전에 일종의 스냅샷을 찍은 다음 두 번째 스냅샷을 찍어야 한다고 가정합니다. 나는 이러한 스냅샷을 일종의 diff 또는 diff 유사 도구에 입력할 것이라고 가정합니다.
어떤 도구를 사용해야 하고 전체 시스템을 차별화하는 방법을 아는 사람이 있습니까?
저는 Virtualbox를 사용하고 있는데차등 이미지 기능, 비록 제가 이 목적에 적응할 수 있을지는 모르겠습니다. 또한 가능하다면 좀 더 일반적인 솔루션을 선호합니다.
답변1
나는 당신의 아이디어가 해결책과 멀지 않다고 생각합니다. 한 가지 가능한 접근 방식을 간략히 설명하면 다음과 같습니다. rsnapshot
백업 에 사용합니다 . (예를 들어) /backup/hourly.1/...
및 와 같은 진입점을 사용하여 모든 파일 또는 파일 하위 집합의 디렉터리(백업) 구조를 생성합니다 /backup/hourly.0/...
. 여기서 각 분기는 전체 데이터를 전달하지만 변경되지 않은 파일에 대해서는 (하드) 링크를 사용합니다. 두 구조 모두에 대해 재귀 ls
또는 비교를 수행 find
하고 출력을 비교(찾는 경우 정렬)하면 누락된 파일이 표시되고, 링크 수( ls -l
두 번째 열이 됨)를 확인하면 새 파일(링크 수 1)이 표시됩니다. 파일 변경 사항에 대한 자세한 내용을 보려면 (식별된 파일에 대해) 일반 도구를 사용할 수 있습니다 diff
. 말했듯이 이것은 개요이며 구현하려면 약간의 작업이 필요하며 명확하지 않은 단점이 있을 수 있으므로 이 제안을 무시하십시오.
답변2
페이지 위치는 다음과 같습니다.리눅스 레시피수정 전후의 find-grep을 표시하고 diff를 표시합니다. 이는 매우 간단하고 출발점이 될 수 있지만 지적된 더 복잡한 솔루션을 사용하면 문제를 더 잘 해결할 수 있습니다.
이것은 수정이 아닌 추가 및 삭제만 포착할 것 같습니다... 건배, drl
답변3
이 모든 답변은 올바른 방향, 같은 방향으로 진행됩니다. 8비트를 넣어도 될 것 같은데...
virtualbox에 기본 시스템을 설치합니다. 초기 설정과 기본 사항이 준비되면 추가 라이브 미디어를 사용하여 가상 머신을 시작합니다. 그런 다음 휘발성 디렉터리를 포함하지 않고 파일 시스템을 압축하거나 내보낼 수 있습니다 /proc
.
대규모 스크립트를 실행하고 내보내기 프로세스를 반복하십시오.
이제 2개의 파일 시스템을 사용할 수 있으므로 다양한 비교 도구를 사용할 수 있습니다.
diff --brief -Nr /tree1 /tree2
에서는 에서 다른 파일의 멋진 목록 stdout
과 의 한 트리 또는 다른 트리에서 찾을 수 없는 파일 목록을 제공합니다 stderr
.
실제로 어떤 변경 사항이 발생했는지 알아보려면 stdout
다양한 파일의 출력을 구문 분석하고 diff
해당 파일에 대해 개별적으로 일반 작업을 실행하여 출력을 파일로 리디렉션할 수 있습니다. 아니면 목록을 확인하고 특히 관심 있는 파일에 대해 diff를 실행할 수도 있습니다.
를 사용하여 이 모든 것을 하나의 명령으로 결합할 수 있습니다 git
. 저장소를 초기화하지 않고 작동하며 임의의 2개 디렉토리를 가리키기만 하면 됩니다. Less를 통해 페이지가 매겨진 아름다운 색상 출력을 제공합니다.
git diff --no-index /tree1 /tree2
답변4
diff를 수행하는 데 사용할 수 있는 libguestfs라는 것이 있습니다. 이것이 제가 과거에 사용했던 것이고, 이제는 이것이 내장되어 있으므로 guestfish 쉘을 사용할 필요가 없다고 생각합니다.
또 다른 옵션은 Docker 컨테이너에서 작업을 실행한 다음 결과 파일 트리를 tar 파일로 내보내고 비교하는 것입니다.
그러나 스크립트가 더미 파일에 작성하여 시스템 설정을 변경하는 경우 해당 변경 사항은 파일 트리에 표시되지 않으며 해당 변경 사항을 캡처하려면 다른 것이 필요하다는 점에 유의하십시오. 비슷한 예가 iptable 규칙입니다. 이러한 변경 사항을 캡처하려면 사용자 지정 논리가 필요합니다.