多数のファイルの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値とファイル名の間には2つのスペースが必要です。そうしないと、「適切にフォーマットされた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.

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



3
アスタリスクは必要ですか?
jobin 14

興味深い質問。私は常にwithを使用して*いますが、wikiでは2つのスペースが必要であると述べています。私は...検索します
c0rp

[OK]を@souravc、私は*に関する情報を見つけ、すぐにアップデートします
c0rp

私はabour情報を追加@Jobin *答えに
c0rp

それは理にかなっている。+
1'd

2

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

1
回答ありがとうございますが、別のユーティリティをインストールする必要があります。同時に、他の形式へのサポートも提供します。それについて知るのは良いことです。しかし、現在の状況では、他の答えを取り上げます。とにかく私から+1。
souravc 14

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.