을(를) 사용하여 다운로드한 파일 세트의 무결성을 확인하려고 합니다 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
읽기 권한이 없는 파일을 만나는 경우입니다. 표준 출력으로 전혀 인쇄되지 않으므로 목록을 생성하는 동안 오류가 발생하지 않았는지 확인하거나 표준 오류 출력도 캡처해야 합니다.