Bash에서 디렉토리의 체크섬 가져오기

Bash에서 디렉토리의 체크섬 가져오기

나는 알고 싶다:

  1. md5sum과 같은 것을 사용하여 디렉토리의 체크섬을 생성할 수 있습니까?
  2. 디렉터리의 각 파일에 대해 반복적으로 체크섬을 생성한 다음 인쇄할 수 있습니까?
  3. 아니면 둘다?

나는 배쉬를 사용하고 있습니다

답변1

md5sum그러나 디렉토리는 입력으로 사용되지 않습니다.

 tar cf - FOO | md5sum

체크섬이 적용되며 FOO에서 파일이 변경되면 체크섬도 변경되지만 어떤 파일인지에 대한 힌트는 없습니다. 파일 메타데이터가 변경되면(권한, 타임스탬프 등) 체크섬도 변경됩니다.

다음을 사용하는 것을 고려할 수 있습니다.

 find FOO -type f -exec md5sum {} \;  > FOO.md5

각 파일을 개별적으로 md5하고 결과를 FOO.md5에 저장합니다. 이렇게 하면 어떤 파일이 변경되었는지 쉽게 확인할 수 있습니다. 이 변형은 메타데이터가 아닌 파일 콘텐츠에만 의존합니다.

답변2

ZFS는 이러한 체크섬을 생성하지만 이는 내부용으로만 사용됩니다.

개체의 체크섬을 계산하려면 개체를 읽어야 하는데, 이는 디렉터리에서는 불가능합니다.

많은 파일 시스템은 (2) 디렉토리를 읽으려고 할 때 EISDIR 오류를 반환하고 ZFS는 추가로 디렉토리의 "크기"를 바이트 수가 아닌 디렉토리의 항목 수로 설정합니다( 2) 디렉토리).

일부 파일 시스템에서 여전히 read(2) 디렉토리를 허용한다는 사실은 버그입니다. readdir() 호출이 없었던 1970년대의 버그입니다.

참고: 내 WOFS에서는 파일 형식 콘텐츠가 없기 때문에 모든 디렉터리의 크기가 0입니다. 파일의 메타데이터에 "안녕하세요, 저는 이 디렉터리에 있습니다"라고 표시되어 있기 때문입니다. WOFS가 무엇인지 궁금하다면 WOFS의 다른 모든 기본 개념이 ZFS로 병합되었습니다.

답변3

1. 디렉토리에 md5sum이 필요한 이유는 무엇입니까? 파일의 일관성 및/또는 무결성을 보장하려면 파일을 압축하고 파일의 해시를 만들 수 tar있습니다 tar.gz.

2. 하위 디렉터리가 있으면 좀 더 어렵습니다. 파일만 있는 경우 다음 예를 시도해 보세요.

#!/bin/bash

for i in /home/{username}/Books/rhel/; do
  md5sum "$i"
done

출력 예:

dd7a684cc8668d208ca5dcf00bc58e8d  Red_Hat_Enterprise_Linux-6-Deployment...
775602071a1ec5a1ac1a99cee9d065fa  Red_Hat_Enterprise_Linux-7-High_Av..

답변4

존재하다https://blake2.net/그들은 다음과 같이 주장합니다.

"BLAKE2는 암호화 해시 함수입니다.서둘러요MD5, SHA-1, SHA-2 및 SHA-3보다 우수하지만적어도 안전할 만큼최신 표준SHA-3. BLAKE2는 빠른 속도, 안전성 및 단순성으로 인해 많은 프로젝트에서 채택되었습니다. "

따라서 일부 도구는 rmlint와 같이 이를 사용하고 있습니다.https://github.com/sahib/rmlint.

아무튼 따라오세요https://unix.stackexchange.com/a/228758/9689, 다음을 수행할 수도 있습니다.

find "${dirname}"/ -type f -exec b2sum -b -l 256 {} \;  > "${dirname}".blake2sum_l256

그런 다음 다음을 확인하십시오.

b2sum -c "${dirname}".blake2sum_l256

아니면 다음과 같이 실패한 항목을 확인하세요.

b2sum --quiet -c "${dirname}".blake2sum_l256

관련 정보