Jak zrobić różnicę binarną na dwóch identycznych rozmiarach plików pod Linuksem?

37

Mam dwa pliki o identycznych rozmiarach i muszę zrobić różnicę binarną, aby sprawdzić, czy są one takie same.

Obecnie pracuję, diff file1.img file2.imgale przetwarzanie moich plików 4 GB zajmuje dużo czasu. Czy to najskuteczniejszy sposób to zrobić?

Jon Cage
źródło

Odpowiedzi:

45

cmpsłuży do wyszukiwania różnic w plikach binarnych. Możesz także spróbować Checkumming ( sum) i porównać skróty.

mpez0
źródło
21

Jednym z najczęstszych sposobów ustalenia, czy dwa pliki są identyczne (przy założeniu, że ich rozmiary są zgodne), jest użycie programu do utworzenia „ skrótu ” (zasadniczo odcisku palca) pliku. Najczęstsze z nich to md5sumi sha1sum.

Na przykład:

$ md5sum file1 file2
e0e7485b678a538c2815132de7f9e878  file1
4a14aace18d472709ccae3910af55955  file2

Jeśli masz wiele plików, które musisz sprawdzić, na przykład jeśli przenosisz katalog pełen plików z jednego systemu do drugiego, możesz przekierować dane wyjściowe z oryginalnego systemu do pliku, a następnie md5sum/ sha1summożesz automatycznie użyć tego pliku, aby poinformować które pliki są różne:

$ md5sum file1 file2 > MD5SUMS
... copy file1, file2, MD5SUMS across
$ md5sum --check MD5SUMS
file1: OK
file2: OK
Adam Batkin
źródło
2
MD5 nie zawsze jest do tego niezawodny: digg.com/security/…
Jon Cage
28
W rzeczywistości MD5 jest niezawodny w przypadku podstawowych kontroli integralności. Po prostu nie jest uważany za tak kryptograficznie silny, jak kiedyś myśleliśmy. Jeśli martwisz się o hakerów, nie używaj MD5, ale jeśli chcesz tylko wiedzieć, czy niektóre pliki skopiowane z płyty CD uległy uszkodzeniu lub jeśli kompilator wyrzuca identyczne pliki za każdym razem, MD5 jest więcej niż wystarczające.
Adam Batkin
16

Znaleziono rozwiązanie - narzędzie cmp, które jest dostarczane z większością wersji Linuksa.

Jon Cage
źródło
3

Jeśli chcę tylko wiedzieć, czy są takie same, wolę użyć sha1sum, jeśli jest dostępny, lub md5 jako rezerwowego.

Jeśli chcę wiedzieć, jak są one różne lub gdzie się różnią, jedną rzeczą, która działa, jest ich przekręcenie poprzez od (zrzut ósemkowy, który zwykle ma opcję szesnastkową), aby utworzyć pliki tymczasowe, a następnie je rozdzielić.

JustJeff
źródło
2
Jeśli chcesz wiedzieć, czy są to dwa pliki, są takie same, nie sądzę, aby użycie sha1sum (lub md5sum w tej kwestii) mogło być bardziej wydajne niż tylko diff (ponieważ było to pierwotne pytanie), ponieważ nawet jeśli oba ( duże) pliki różnią się na samym początku), przeczytasz je całkowicie, zanim się zorientujesz, że się różnią.
Pierre
@Pierre ALE haszowanie i podpisywanie kryptograficzne działa na zdalnych urządzeniach.
VasyaNovikov,
1

Właśnie uruchomiłem kilka testów porównawczych dla pliku ponad 100 MB. diff był najszybszy, podczas gdy cmp zajął drugie miejsce, a użycie md5sum było na końcu.

# 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

Ponownie przestawiłem ćwiczenie z plikiem 4,3 GB i musiałem usunąć i ponownie utworzyć plik z dd, ponieważ buforowanie pamięci RAM miało duży wpływ na wyniki.

$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

Na podstawie tych wyników zaleciłbym przeniesienie plików do montowania RAMFS i pozostanie przy diff.

zabraniać
źródło
Podoba mi się, że faktycznie wykonałeś test porównawczy, ale 100 Mb nie jest reprezentatywne dla przypadku PO. 1000 Mb byłoby znacznie lepsze.
jpaugh
1
zgodzili się, dlatego kilka miesięcy później przeprowadziłem testy gig 4,3. Właściwie zajęło to obejście buforowania systemu operacyjnego.
zabrania
Wyobrażam sobie, że tak. Przepraszam, że nie czytałem w środku odpowiedzi. (Nadal uważałem, że wystarczy głosować, nawet gdy zobaczyłem tylko pierwszy test porównawczy.) FWIW, jest trochę magii jądra do wyłączania buforowania plików. Sam musiałbym przeprowadzić test porównawczy, aby zobaczyć, które z nich faktycznie działają lub są konieczne.
jpaugh