Çok sayıda dosya için md5sum karma değerlerinin karşılaştırmasını otomatikleştirme


28

Bir dosyanın md5sum hash değerini terminalden kontrol edebilirim,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Ancak zor olan kısım, hash değeriyle kesin olanı karşılaştırmaktır.

Çok sayıda dosya için, 32 karakterlik çıktının herhangi bir insan tarafından orijinal / kesin karma değeri ile karşılaştırılması zordur. Her şeyden önce iş çok monoton olurdu ve büyük hata kapsamı var.

Karşılaştırma işlemini, tercihen CLI'de otomatikleştirmek mümkün müdür?

Yanıtlar:


39

Mesela bende bir dosya var test_binary.

MD5 dosya testi toplamı ef7ab26f9a3b2cbd35aa3e7e69aad86c

Bunu otomatik olarak test etmek için şunu çalıştırın:

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

veya

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

Adamdan alıntı

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

Wiki'den alıntı

Not: Karşılaştırılacak her md5sum değeri ile dosya adı arasında iki boşluk olmalıdır. Aksi takdirde, aşağıdaki hata ortaya çıkacaktır: "uygun şekilde biçimlendirilmiş bir MD5 sağlama toplamı satırı bulunamadı".

Wiki bağlantısı

Ayrıca sadece dosyadan md5 karma okuyabilirsiniz

$ md5sum -c md5sum_formatted_file.txt

Bu formatta dosya bekliyor:

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

MD5 toplam hash hakkında *ve <space>sonrasında. Adamda küçük bir not var:

 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.

Ve burada soru üzerine cevabını bulduğum stackoverflow bağlantısı, neden bazen binarydosyaları ve textdosyaları ayırt etmeliyiz .



3
Yıldız gerekli mi?
jobin

İlginç soru. Her zaman kullanıyorum *ama wiki iki boşluk olması gerektiğini söyledi. Arama yapacağım ...
c0rp

@souravc tamam, * hakkında bilgi buldum, yakında güncellenecek
c0rp

Ben abour bilgi eklemek @Jobin *cevabı için
c0rp

Bu mantıklı. +
1'd

2

Bir olasılık cfv yardımcı programını kullanmaktır

sudo apt-get install cfv

CFV, birçok karma türünü ve hem test hem de karma dosya oluşturulmasını destekler.

# 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
Cevabınız için teşekkürler, ancak başka bir yardımcı program yüklemeniz gerekiyor. Aynı zamanda başka formatlara da destek veriyor. Bunu bilmek güzel. Ancak şu anda diğer cevapla gideceğim. Neyse benden +1.
souravc

1

Evet, *bu komut için yıldız işareti gereklidir. Bu örneğe bir bakın.

Bu ikili dosyadır ve diyelim ki doğru md5sum değeri: exampleofcorrectmd5value00000000(32 onaltılık karakter)

[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

dosyalardan MD5 toplamlarını oku ve kontrol et

Md5sum değeri ikili dosya ile eşleşirse, bu çıktıyı alırsınız

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

Ve bu md5sum değeri eşleşmediğinde

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

Yıldız olmadan *, md5 değerinin doğru olduğunu düşündüğünüz aşağıdaki mesajı alırsınız

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

Ayrıca, md5sum içinde 32 onaltılık karakter yoksa, aynı hata iletisini alırsınız. Bu örnekte, yalnızca 31 karakter vardır.

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

Birçok dosya için çözüm

Çok sayıda dosyanız varsa ve işlemi otomatikleştirmek istiyorsanız, şu adımları uygulayabilirsiniz:

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:~$ 

Her dosya için md5sum oluşturun ve md5sum.txt dosyasına kaydedin.

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

Md5sum'u tüm dosyalar için kontrol etmek için aşağıdaki komutu kullanın.

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

Bu, md5sum değeri dosyayla eşleşmiyorsa örnektir. Bu durumda, file-biçeriği değiştireceğim

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

Bakın, bu bir hata mesajı. Bu yardımcı olur umarım.

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:~$ 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.