많은 수의 파일에 대한 md5sum 해시 값 비교를 자동화하는 방법


28

터미널에서 파일의 md5sum 해시를 다음과 같이 확인할 수 있습니다.

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

그러나 어려운 부분은 해시 값을 정확한 값과 비교하는 것입니다.

많은 수의 파일에 대해 사람이 32 자 출력을 원본 / 정확한 해시 값과 비교하는 것은 어렵습니다. 우선 모든 작업은 매우 단조롭고 넓은 범위의 오류가 있습니다.

CLI에서 비교 프로세스를 자동화 할 수 있습니까?

답변:


39

예를 들어라는 파일이 test_binary있습니다.

파일 테스트의 MD5 합은 ef7ab26f9a3b2cbd35aa3e7e69aad86c

테스트하려면 자동으로 다음을 실행하십시오.

$ md5sum -c <<<"ef7ab26f9a3b2cbd35aa3e7e69aad86c *path/to/file/test_binary"
test_binary: OK

또는

$ echo "595f44fec1e92a71d3e9e77456ba80d1  filetohashA.txt" | md5sum -c -

남자로부터 인용

   -c, --check
          read MD5 sums from the FILEs and check them

위키에서 인용

참고 : 비교할 각 md5sum 값과 파일 이름 사이에는 두 개의 공백이 있어야합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다. "올바른 형식의 MD5 체크섬 행을 찾을 수 없습니다".

위키 링크

또한 파일에서 md5 해시를 읽을 수 있습니다

$ md5sum -c md5sum_formatted_file.txt

다음 형식의 파일이 필요합니다.

<md5sum_checksum><space><space><file_name>

소개 *<space>MD5 합계 해시 후. 사람에 대한 언급은 거의 없습니다.

 When  checking,  the
       input  should  be a former output of this program.  The default mode is
       to print a line with checksum, a character indicating input  mode  ('*'
       for binary, space for text), and name for each FILE.

그리고 여기 질문에 대한 답을 찾은 스택 오버 플로우 링크가 있습니다. 왜 우리는 때때로 binary파일과 text파일을 구별해야합니까 ?



3
별표가 필요합니까?
jobin

흥미로운 질문입니다. 나는 항상 with을 사용 *하지만 Wiki는 두 공백이어야한다고 말했습니다. 내가 검색 할 것이다 ...
c0rp

@souravc ok, *에 대한 정보를 찾았습니다. 곧 업데이트 될 예정입니다
c0rp

@Jobin 나는 *대답하기 위해 정보 abour 를 추가합니다
c0rp

말이 되네요 +
1'd

2

한 가지 가능성은 유틸리티 cfv 를 사용하는 것입니다.

sudo apt-get install cfv

CFV는 여러 유형의 해시와 테스트 및 해시 파일 작성을 모두 지원합니다.

# List the files
$ ls
test.c
# Create a hash file
$ cfv -tmd5 -C
temp.md5: 1 files, 1 OK.  0.001 seconds, 302.7K/s
# Test the hash file
$ cfv -tmd5 -T
temp.md5: 1 files, 1 OK.  0.001 seconds, 345.1K/s
# Display the hash file
$ cat *.md5
636564b0b10b153219d6e0dfa917d1e3 *test.c

1
귀하의 답변에 감사하지만 다른 유틸리티를 설치해야합니다. 동시에 다른 형식에도 지원을 제공합니다. 그것에 대해 아는 것이 좋습니다. 그러나 현재 상황에서 나는 다른 대답을 할 것입니다. 어쨌든 나에게서 +1.
souravc

1

예, *이 명령 에는 별표 가 필요합니다. 이 예를 살펴보십시오.

이것은 이진 파일이며 올바른 md5sum 값은 exampleofcorrectmd5value00000000(32 16 진 문자)

[root@Linux update]# ls -lh
total 137M
-rw-r--r-- 1 root root 137M Nov  5 13:01 binary-file.run.tgz
[root@Linux update]# 

-c, --check

파일에서 MD5 합계를 읽고 확인하십시오.

md5sum 값이 이진 파일과 일치하면이 출력이 나타납니다.

[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000" *binary-file.run.tgz"
binary-file.run.tgz: OK
[root@Linux ~]# 

그리고 이것은 md5sum 값이 일치하지 않을 때입니다

[root@Linux update]# md5sum -c <<< "exampleofwrongmd5value0000000000 *binary-file.run.tgz"
binary-file.run.tgz: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
[root@Linux update]# 

별표가 없으면 *md5 값이 올바른 것으로 생각되는 다음과 같은 오류 메시지가 표시됩니다.

[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000 binary-file.run.tgz" 
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]# 

또한 md5sum에 32 개의 16 진 문자가 없으면 동일한 오류 메시지가 표시됩니다. 이 예에서는 31 자만 사용합니다.

[root@Linux ~]# md5sum -c <<< "exampleofmd5valuelessthan32char *binary-file.run.tgz" 
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]# 

많은 파일을위한 솔루션

파일이 많고 프로세스를 자동화하려면 다음 단계를 수행하십시오.

user@Ubuntu:~$ ls -lh
total 12K
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-a
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-b
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-c
user@Ubuntu:~$ 

각 파일에 대해 md5sum을 생성하고 md5sum.txt에 저장하십시오.

user@Ubuntu:~$ md5sum * | tee md5sum.txt
0bee89b07a24ae27c83fc3d5951213c1  file-a
1b2297c171a9a450d184871ccf6c9ad4  file-b
7f4d13d9b0b6ac086fd68637067435c5  file-c
user@Ubuntu:~$ 

모든 파일에 대해 md5sum을 확인하려면 다음 명령을 사용하십시오.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: OK
file-c: OK
user@Ubuntu:~$ 

md5sum 값이 파일과 일치하지 않는 경우의 예입니다. 이 경우 file-b콘텐츠 를 수정하겠습니다

user@Ubuntu:~$ echo "new data" > file-b 
user@Ubuntu:~$ 

오류 메시지입니다. 이것이 도움이되기를 바랍니다.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: FAILED
file-c: OK
md5sum: WARNING: 1 computed checksum did NOT match
user@Ubuntu:~$ 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.