बड़ी संख्या में फ़ाइलों के लिए md5sum हैश मानों की तुलना कैसे स्वचालित करें


28

मैं एक टर्मिनल से फ़ाइल की md5sum हैश की जाँच कर सकता हूँ,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

लेकिन मुश्किल हिस्सा सटीक मूल्य के साथ हैश मूल्य की तुलना करना है।

बड़ी संख्या में फ़ाइलों के लिए किसी भी मानव द्वारा मूल / सटीक हैश मान के साथ 32 वर्ण आउटपुट की तुलना करना मुश्किल है। सबसे पहले नौकरी बहुत नीरस होगी और त्रुटियों की बड़ी गुंजाइश है।

क्या तुलनात्मक प्रक्रिया को स्वचालित करना संभव है, अधिमानतः सीएलआई में?

जवाबों:


39

उदाहरण के लिए मेरे पास फाइल है test_binary

फ़ाइल परीक्षण का एमडी 5 योग है 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 मान और फ़ाइल नाम की तुलना के बीच दो स्थान होने चाहिए। अन्यथा, निम्न त्रुटि का परिणाम होगा: "कोई ठीक से स्वरूपित एमडी 5 चेकसम लाइन नहीं मिली"।

विकी से लिंक

इसके अलावा, आप फ़ाइल से सिर्फ md5 हैश पढ़ सकते हैं

$ md5sum -c md5sum_formatted_file.txt

यह प्रारूप के साथ फ़ाइल की उम्मीद कर रहा है:

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

एमडी 5 सम हैश के बारे में *और <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फ़ाइलों।



3
तारांकन आवश्यक है?
जॉबिन

दिलचस्प सवाल। मैं हमेशा से उपयोग कर रहा हूं *, लेकिन विकी ने कहा कि यह दो जगह होना चाहिए। मैं
खोजूंगा

@souravc ठीक है, मुझे * के बारे में जानकारी मिली, जल्द ही अपडेट होगा
c0rp

@ जोबिन मैं *उत्तर के लिए abour जानकारी जोड़ता हूं
c0rp

यह समझ आता है। +
एल

2

एक संभावना उपयोगिता सीएफवी का उपयोग करने के लिए है

sudo apt-get install 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 मुझसे।
स्मारिका

1

हां, *इस कमांड के लिए तारांकन आवश्यक है। इस उदाहरण पर एक नज़र डालें।

यह बाइनरी फ़ाइल है, और मान लें कि सही md5sum मान है exampleofcorrectmd5value00000000(32 हेक्साडेसिमल चार)

[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]# 

-सी, --चेक

MD5 sile को FILE से पढ़ें और उनकी जाँच करें

यदि 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:~$ 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.