如何自动比较大量文件的md5sum哈希值


28

我可以从终端检查文件的md5sum哈希,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

但是困难的部分是将哈希值与精确值进行比较。

对于大量文件,任何人都很难将输出的32个字符与原始/精确哈希值进行比较。首先,工作将非常单调,并且存在很大的错误范围。

是否可以自动进行比较过程,最好在CLI中进行?

Answers:


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.

这是指向stackoverflow的链接,在这里我找到了问题的答案,为什么我们有时应该区分binary文件和text文件。



3
星号是必需的吗?
jobin 2014年

有趣的问题。我一直使用with *,但是Wiki表示应该两个空格。我将搜索...
c0rp 2014年

@souravc好的,我发现了有关*的信息,很快就会更新
c0rp 2014年

@Jobin我添加了一些信息*以作答
c0rp 2014年

那讲得通。+1作业
jobin 2014年

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十六进制char)

[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,-检查

从文件中读取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个十六进制字符,则会收到相同的错误消息。在此示例中,它只有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:~$ 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.