Linux altında aynı büyüklükteki iki dosyada ikili fark nasıl yapabilirim?


37

İki tane aynı boyutta dosyam var ve aynı olup olmadıklarını kontrol etmek için ikili bir fark yapmam gerekiyor.

Şu anda runnnig diff file1.img file2.imgama 4 GB dosyalarımı işlemek için biraz zaman alıyor. Bunu yapmanın en etkili yolu bu mu?

Yanıtlar:


45

cmpİkili dosyalarda farklılıkları bulmak için tasarlanmıştır. Ayrıca checksumming ( sum) yöntemini deneyebilir ve karmaları karşılaştırabilirsiniz.


21

İki dosyanın aynı olup olmadığını belirlemenin en yaygın yollarından biri (boyutlarının uyuştuğunu varsayarak ), bir dosyanın " karma " ını (esasen parmak izi) oluşturmak için bir program kullanmaktır . En yaygın olanları md5sumve sha1sum.

Örneğin:

$ md5sum file1 file2
e0e7485b678a538c2815132de7f9e878  file1
4a14aace18d472709ccae3910af55955  file2

Kontrol etmeniz gereken çok sayıda dosyanız varsa, örneğin bir dizinden bir sistemden diğerine dosya aktarıyorsanız, çıktısını orijinal sistemden bir dosyaya yeniden yönlendirebilir, md5sum/ sha1sumveya bu dosyayı otomatik olarak anlatmak için kullanabilirsiniz size hangi dosyalar farklı:

$ md5sum file1 file2 > MD5SUMS
... copy file1, file2, MD5SUMS across
$ md5sum --check MD5SUMS
file1: OK
file2: OK

2
MD5 bunun için her zaman güvenilir değildir: digg.com/security/…
Jon Cage

28
Aslında, MD5 , temel bütünlük kontrolleri için güvenilirdir. Sadece bir zamanlar düşündüğümüz gibi kriptografik olarak güçlü sayılmaz. Bilgisayar korsanları konusunda endişeleniyorsanız, MD5 kullanmayın, ancak yalnızca bir CD'den kopyalanan bazı dosyaların bozulup bozulmadığını veya derleyicinizin her seferinde aynı dosyaları tükürdüğünü bilmek istiyorsanız, MD5 yeterlidir.
Adam Batkin


3

Sadece onlar aynı olup olmadığını bilmek istiyorsanız, ben kullanımı tercih sha1sum Kullanılabilir veya eğer md5 son çare olarak.

Ne kadar farklı olduklarını veya nerede farklı olduklarını bilmek istersem, işe yarayan bir şey, geçici dosyalar oluşturmak için onları hem od ('genellikle altıgen seçeneğine sahip olan' sekizli döküm '') aracılığıyla kranklamak ve sonra da bunları dağıtmaktır.


2
Eğer iki dosyanın aynı olup olmadığını bilmek istiyorsanız, sha1sum (veya bu konu için md5sum) kullanmanın sadece farktan daha etkili olabileceğini sanmıyorum (asıl soru olduğu gibi), çünkü büyük) dosyalar başlangıçta farklıdır), farklı olduklarını bilmeden önce her ikisini de tamamen okuyacaksınız.
Pierre,

@Pierre BUT, karma ve kripto imzalama, uzak cihazlarda çalışır.
VasyaNovikov

1

Sadece 100'den fazla MB'lık bir dosya üzerinde bazı ölçütler koştum. diff en hızlısıyken cmp ikinci, md5sum kullanarak son geldi.

# time diff file1 file2; echo $?

real    0m0.122s
user    0m0.009s
sys 0m0.113s
0
# time cmp file1 file2; echo $?

real    0m0.213s
user    0m0.097s
sys     0m0.117s
0
# time md5sum file1 > /tmp/test; time md5sum file2 > /tmp/test2; diff /tmp/test /tmp/test2; echo $?

real    0m0.279s
user    0m0.211s
sys     0m0.066s

real    0m0.316s
user    0m0.225s
sys     0m0.073s
0

Egzersizi 4.3 GB'lık bir dosyayla yeniden düzenlemiştim ve RAM önbelleğe alma işlemi sonuçları büyük ölçüde etkilediğinden dosyayı dd ile silmek ve yeniden oluşturmak zorunda kaldım.

$time diff file1 file2; echo $?

real    0m19.325s
user    0m0.995s
sys 0m5.280s
0

$time cmp file1 file2; echo $?

real    0m36.106s
user    0m4.399s
sys 0m6.147s
0

$time md5sum file1 > /tmp/test; time md5sum file2 > /tmp/test2; diff /tmp/test /tmp/test2; echo $?

real    0m10.441s
user    0m8.054s
sys 0m2.357s

real    0m24.682s
user    0m8.027s
sys 0m3.442s
0

Bu sonuçlara dayanarak dosyaları bir RAMFS montajına taşımanızı ve diff ile yapıştırmanızı öneririm.


Aslında bir kıyaslama yapmanı sevdim, ama 100 Mb OP'nin davasını temsil etmiyor. 1.000 Mb daha iyi olurdu.
jpaugh

1
bu yüzden birkaç ay sonra 4.3 konser testlerini yaptım. Aslında işletim sistemi önbelleğe alma işlemini atlamak için çaba gösterdi.
Bile Yasak

Öyle olduğunu hayal ediyorum. Cevabınızın ortasını okumadığım için özür dilerim. (Hala bile sadece ilk kriter görme ile, upvote için yeterince iyi olduğunu düşünüyorum.) FWIW, bazı var çekirdek sihirli dosya önbelleğe alma devre dışı bırakmak için. Hangisinin işe yaradığını ya da hangilerinin işe yarayıp yaramadığını görmek için kıyaslama işlemini kendim yapmak zorunda kalırdım.
jpaugh
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.