SHA256SUMS를 확인하고 예기치 않은 파일에서 0이 아닌 값으로 종료합니다(파일이 다이제스트에 존재하지 않음).

SHA256SUMS를 확인하고 예기치 않은 파일에서 0이 아닌 값으로 종료합니다(파일이 다이제스트에 존재하지 않음).

을(를) 사용하여 다운로드한 파일 세트의 무결성을 확인하려고 합니다 sha256sum.

PGP 를 사용하여 다이제스트 파일(이름이 지정된)에 SHA256SUMS암호화 방식으로 서명했습니다 . 현재 디렉터리에 있는 모든 파일의 체크섬을 재귀적으로 계산하여 파일을 만듭니다.

find . -type f -not -name SHA256SUMS -exec sha256sum '{}' \; >> SHA256SUMS

이제 다음 명령을 실행하여(다이제스트 파일의 서명을 확인한 후 이 질문에서는 생략함) 파일의 무결성을 확인할 수 있습니다.

sha256sum -c SHA256SUMS

다이제스트 파일에 있는 파일의 내용이 다이제스트 파일에 저장된 내용과 다른 경우 위 명령은 0이 아닌 값으로 종료됩니다.

그러나 그것은아니요요약에 나열되지 않은 새 파일이 있는 경우 0이 아닌 값으로 종료하십시오.

sha256sum예상치 못한 파일이 있는 경우 실패할 수 있는 옵션을 찾을 수 없습니다.

sha256sum확인되지 않은 파일의 실패를 포함하여 재귀를 사용하여 디렉터리의 무결성을 확인하는 방법은 무엇입니까 ?

답변1

정렬된 파일 목록을 만들 수 있습니다.

find . -type f | sort

그리고 체크섬이 포함된 정렬된 파일 목록은 다음과 같습니다.

find . -type f -print0 | sort -z | xargs -0 sha256sum

그런 다음 cmp, diff -u또는 이와 유사한 것을 사용하여 결과 목록을 비교하십시오. 파일을 추가하거나 제거하지 않으면 매번 결과가 동일해야 합니다.


파일 목록을 별도로 저장하는 대신 SHA256SUMS에서 파일 이름만 추출할 수 있습니다 cut --bytes=67-.

체크섬 없이 파일 목록만 비교하면 해당 파일에 대한 체크섬을 계산할 필요 없이 파일이 추가 또는 제거되었는지 빠르게 확인할 수 있습니다.

요약하면 SHA256SUMS 파일이 이미 존재한다고 가정합니다.

diff -u \
    <(cut --bytes=67- < SHA256SUMS) \
    <(find . -type f -not -name SHA256SUMS -print | sort)

출력이 표시되지 않으면 파일 목록은 동일합니다(하위 디렉터리의 다른 SHA256SUMS 파일은 제외). find는 이러한 파일도 제외하기 때문입니다.


또 다른 극단적인 경우는 sha256sum읽기 권한이 없는 파일을 만나는 경우입니다. 표준 출력으로 전혀 인쇄되지 않으므로 목록을 생성하는 동안 오류가 발생하지 않았는지 확인하거나 표준 오류 출력도 캡처해야 합니다.

관련 정보