Apa cara termudah (menggunakan alat grafis atau baris perintah di Ubuntu Linux) untuk mengetahui apakah dua file biner sama atau tidak (kecuali untuk prangko waktu)? Saya tidak perlu mengekstrak perbedaannya. Saya hanya perlu tahu apakah mereka sama atau tidak.
186
cmp
secara khusus mengatakan ia melakukan perbandingan byte demi byte sehingga merupakan standar saya untuk 2 file biner.diff
adalah baris demi baris dan akan memberi Anda jawaban Ya / Tidak yang sama tetapi tentu saja tidak dump yang sama ke aliran keluar standar. Jika garisnya panjang karena mungkin bukan file teks maka saya lebih sukacmp
.diff
memiliki keuntungan bahwa Anda dapat menentukan perbandingan direktori dan-r
rekursi sehingga membandingkan beberapa file dalam satu perintah.Jawaban:
Unix standar
diff
akan menunjukkan apakah file-nya sama atau tidak:Jika tidak ada output dari perintah, itu berarti file tidak memiliki perbedaan.
sumber
diff: memory exhausted
ketika membandingkan dua file 13G.diff
memberitahu Anda mereka adalah "binary" fies. Karena semua file dapat dianggap biner, itu adalah pernyataan yang aneh.diff -s 1.bin 2.bin
ataudiff --report-identical-files 1.bin 2.bin
Ini menunjukkanFiles 1.bin and 2.bin are identical
Gunakan
cmp
perintah. Ini akan keluar dengan baik jika mereka biner sama, atau itu akan mencetak di mana perbedaan pertama terjadi dan keluar.sumber
cmp
lebih efisien daripadadiff
. Jadi saya lebih suka ini.cmp $1 $2 && echo "identical" || echo "different"
cmp
memiliki mode "diam":-s, --quiet, --silent
-suppress all normal output
. Saya belum mencoba tetapi saya pikir itu akan berhenti pada perbedaan pertama jika ada.Saya menemukan Visual Binary Diff adalah apa yang saya cari, tersedia di:
Ubuntu:
Arch Linux:
Mac OS X via MacPorts :
Mac OS X via Homebrew:
sumber
Gunakan sha1 untuk menghasilkan checksum:
sumber
diff
dancmp
keduanya akan memberi tahu Anda jika mereka berbeda tanpa usaha ekstra.sha1sum
bukansha1
?Saya akhirnya menggunakan hexdump untuk mengkonversi file biner ke representasi hex dan kemudian membukanya di meld / kompare / alat diff lainnya. Tidak seperti Anda, saya setelah perbedaan dalam file.
sumber
hexdump -v -e '/1 "%02x\n"'
jika Anda ingin melakukan diff dan melihat byte mana yang dimasukkan atau dihapus.Anda dapat menggunakan fungsi hash MD5 untuk memeriksa apakah dua file sama, dengan ini Anda tidak dapat melihat perbedaan dalam level rendah, tetapi merupakan cara cepat untuk membandingkan dua file.
Jika kedua hash MD5 (keluaran perintah) sama, maka kedua file tidak berbeda.
sumber
Gunakan perintah cmp. Lihat File Biner dan Memaksa Perbandingan Teks untuk informasi lebih lanjut.
sumber
-b
tidak membandingkan file dalam "mode biner". Ini sebenarnya "Dengan GNUcmp
, Anda juga dapat menggunakan opsi-b
atau--print-bytes
untuk menampilkan representasi ASCII dari byte tersebut.". Ini persis seperti yang saya temukan menggunakan URL untuk manual yang telah Anda berikan.cmp
secara inheren perbandingan biner menurut saya. The-b
pilihan hanya mencetak byte pertama yang berbeda.Untuk menemukan cacat memori flash, saya harus menulis skrip ini yang menunjukkan semua blok 1K yang mengandung perbedaan (tidak hanya yang pertama seperti
cmp -b
halnya)Keluaran:
Penafian: Saya meretas script dalam 5 menit. Itu tidak mendukung argumen baris perintah juga tidak mendukung spasi dalam nama file
sumber
sh -x
untuk debuggingreadlink -f $(which sh)
/bin/dash
. Saat ini membuat pasta pada pastebin.Beda dengan opsi-opsi berikut akan melakukan perbandingan biner untuk memeriksa apakah file berbeda sama sekali dan itu akan menghasilkan output jika file-file itu sama juga:
Jika Anda membandingkan dua file dengan nama yang sama di direktori yang berbeda, Anda dapat menggunakan formulir ini sebagai gantinya:
OS X El Capitan
sumber
Coba beda
Jawaban singkat: jalankan
diff
dengan-s
sakelar.Jawaban panjang: baca terus di bawah.
Ini sebuah contoh. Mari kita mulai dengan membuat dua file dengan konten biner acak:
Sekarang mari kita membuat salinan file pertama:
Sekarang test1.bin dan test2.bin harus berbeda:
... dan test1.bin dan copyoftest1.bin harus identik:
Tapi tunggu! Mengapa tidak ada output?!?
Jawabannya adalah: ini sesuai desain. Tidak ada output pada file yang identik.
Tetapi ada beberapa kode kesalahan:
Sekarang untungnya Anda tidak perlu memeriksa kode kesalahan masing-masing dan setiap waktu karena Anda bisa menggunakan
-s
(atau--report-identical-files
) beralih untuk membuat diff menjadi lebih verbose:sumber
Coba
radiff2
yang merupakan bagian dariradare2
disassembler. Misalnya, dengan perintah ini:Anda mendapatkan output dua kolom yang diformat dengan baik di mana perbedaan disorot.
sumber
Yang favorit saya menggunakan xxd hex-dumper dari paket vim:
1) menggunakan vimdiff (bagian dari vim)
2) menggunakan diff
sumber
Jika md5sum sama, binernya sama
Misalnya
sumber
diff
, yang tidak ada alasan untuk memilihnya.Ada cara yang relatif sederhana untuk memeriksa apakah dua file biner sama.
Jika Anda menggunakan input / output file dalam bahasa pemrograman; Anda dapat menyimpan setiap bit dari kedua file biner ke dalam array mereka sendiri.
Pada titik ini ceknya sesederhana:
sumber