如何比较二进制文件来检查它们是否相同?

什么是最简单的方法(在Ubuntu Linux上使用graphics工具或命令行)来了解两个二进制文件是否相同(时间戳除外)? 我不需要真正提取差异。 我只需要知道他们是否相同。

标准的unix diff会显示文件是否相同:

 [me@host ~]$ diff 1.bin 2.bin Binary files 1.bin and 2.bin differ 

如果命令没有输出,则表示文件没有区别。

使用cmp命令。 如果它们是二进制平等的,这将会干净地退出,或者它将打印出第一个差异发生并退出的地方。

我发现Visual Binary Diff是我正在寻找的,可用于:

  • Ubuntu: apt-get install vbindiff
  • Mac OS X:通过MacPorts port install vbindiff
  • Mac OS X:通过自制软件brew install vbindiff

使用sha1生成校验和:

 sha1 [FILENAME1] sha1 [FILENAME2] 

我最终使用hexdump将二进制文件转换为hex表示,然后在meld / kompare /任何其他diff工具中打开它们。 不像你我是在文件的差异。

 hexdump tmp/Circle_24.png > tmp/hex1.txt hexdump /tmp/Circle_24.png > tmp/hex2.txt meld tmp/hex1.txt tmp/hex2.txt 

使用cmp命令。 有关更多信息,请参阅二进制文件和强制文本比较 。

 cmp -b file1 file2 

为了find闪存的缺陷,我不得不写下这个脚本,它显示了所有包含差异的1K块(不仅是第一个是cmp -b

 #!/bin/sh f1=testinput.dat f2=testoutput.dat size=$(stat -c%s $f1) i=0 while [ $i -lt $size ]; do if ! r="`cmp -n 1024 -i $i -b $f1 $f2`"; then printf "%8x: %s\n" $i "$r" fi i=$(expr $i + 1024) done 

输出:

  2d400: testinput.dat testoutput.dat differ: byte 3, line 1 is 200 M-^@ 240 M- 2dc00: testinput.dat testoutput.dat differ: byte 8, line 1 is 327 MW 127 W 4d000: testinput.dat testoutput.dat differ: byte 37, line 1 is 270 M-8 260 M-0 4d400: testinput.dat testoutput.dat differ: byte 19, line 1 is 46 & 44 $ 

免责声明:我在5分钟内破解了剧本。 它不支持命令行参数,也不支持文件名中的空格

md5 <filename1>

md5 <filename2>

看看他们是否一样:-)

与以下选项的差异会做一个二进制比较,以检查文件是否完全不同,如果文件是相同的,它会输出:

 diff -qs {file1} {file2} 

如果您在不同目录中比较两个具有相同名称的文件,则可以使用以下格式:

 diff -qs {file1} --to-file={dir2} 

OS X El Capitan