web-dev-qa-db-ja.com

多数のファイルのmd5sumハッシュ値の比較を自動化する方法

私は端末からファイルのmd5sumハッシュをチェックできます、

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

しかし、難しいのは、ハッシュ値と正確な値を比較することです。

多数のファイルについて、32文字の出力を元の/正確なハッシュ値と人間が比較することは困難です。まず第一に、仕事は非常に単調であり、大きな範囲のエラーがあります。

できればCLIで比較プロセスを自動化することは可能ですか?

26
souravc

たとえば、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値とファイル名の間には2つのスペースが必要です。そうしないと、「適切にフォーマットされたMD5チェックサム行が見つかりません」というエラーが発生します。

wikiへのリンク

また、ファイルからmd5ハッシュを読み取ることができます

$ md5sum -c md5sum_formatted_file.txt

次の形式のファイルが必要です。

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

MD5合計ハッシュ後の*および<space>について。人にはほとんど注意がありません:

 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.

ここに stackoverflow へのリンクがあります。ここで、質問に対する答えが見つかりました。なぜbinaryファイルとtextファイルを区別する必要があるのか​​、です。


37
c0rp

1つの可能性は、ユーティリティ 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
2
Elliott Frisch

はい、このコマンドにはアスタリスク*が必要です。この例を見てください。

これはバイナリファイルです。正しい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:~$ 
1