ZIP 파일의 무결성을 테스트 하시겠습니까? 옵션으로 파일을 추출 할 수

zip -T 옵션으로 파일을 추출 할 수 있는지 여부 만 결정할 수 있습니다. 실제로 아카이브의 내부 무결성을 테스트하지는 않습니다. 예를 들어, 의도적으로 파일의 로컬 (중앙 디렉토리가 아닌) CRC를 손상 시켰으며 zip은 전혀 신경 쓰지 않고 아카이브를 OK로보고했습니다. 이 작업을 수행하는 다른 유틸리티가 있습니까?

ZIP 파일에는 많은 내부 중복성이 있으며 모두 확인하는 것이 좋습니다. 물론 일반적으로 중앙 디렉토리 만 있으면되지만 손상된 아카이브를 복구 할 때는 중앙 디렉토리가 클로버되거나 누락 된 조각 만있는 경우가 종종 있습니다. 내가 만든 아카이브가 가능한 한 복구 가능한지 알고 싶습니다.



답변

압축 해제 -t

아카이브 파일을 테스트하십시오.

이 옵션은 메모리에서 지정된 각 파일을 추출하고 확장 된 파일의 CRC (순환 중복 검사, 향상된 체크섬)를 원본의 저장된 CRC 값과 비교합니다.

[출처 : https://linux.die.net/man/1/unzip ]


답변

아카이브를 수정하려고하면 로컬 및 중앙 CRC를 비교하고이를 아카이브 테스트와 결합하면 모든 CRC를 확인할 수 있습니다. 당신이 실행하는 경우

unzip -t archive.zip

zip -F archive.zip --out archivefix.zip

불평하지 않습니다. 즉, 아카이브의 내용이 중앙 CRC와 로컬 CRC 모두와 일치합니다. ( archivefix.zip나중에 삭제할 수 있습니다 .)

이를 확인하기 위해 Info-ZIP 소스 코드 zip3.0으로 시작하여 다음과 같이 파일을 작성했습니다.

zip -9 test.zip zip.txt zipup.c

그런 다음 zip.txt오프셋 0xB137에서 바이트를 변경 하여 중앙 디렉토리 CRC를 손상 시켰습니다. 나는 당신이 관찰 한 것과 반대되는 행동을했습니다. unzip -v중앙 디렉토리에서 변경 CRC를보고 있지만 unzip -tzip -T파일 확인 (현지 CRC에 대한 확인)이라고보고했다.

그러나 달리기

zip -F test --out testfix

보고

Fix archive (-F) - assume mostly intact archive
Zip entry offsets do not need adjusting
 copying: zip.txt
        zip warning: Local Entry CRC does not match CD: zip.txt
 copying: zipup.c

“수정 된”파일에는 여전히 변경된 CRC가 나열되어 있습니다 zip.txt.

에 대한 로컬 CRC를 변경하면 zip.txt오프셋을 0x10에서 모두 발생 unzip -tzip -TCRC 오류를보고하지만 zip -F아무것도 잘못을 발견하지 않았다.

따라서 내 실험에서 아카이브 항목의 내용과 해당 CRC 간의 불일치가 다음과 같이 감지 될 수 있습니다.

  • 로컬 전용 : zip -Tunzip -t; zip -F또한 지역 중심의 불일치에 대해 불평합니다
  • 지역 및 중앙 : zip -Tunzip -t
  • 중앙 전용 : zip -Tunzip -t불평하지 않을 것이다, 그러나 zip -F로컬 중앙 불일치를 나타냅니다

(주 기본은으로 zip -T간단하게 사용 unzip -tqq때문에, zip -T그리고 unzip -t정말 동일합니다 당신은 읽을 수 있습니다. unzip아카이브를 테스트하는 것은 정말 지역 CRC가 아닌 중앙 하나 비교 확인하기 위해 소스 코드를,위한 모습 extract_or_test_files(), extract_or_test_entrylist()그리고 extract_or_test_member(), 모두 extract.c.)