如何比较二进制文件来检查它们是否相同?
什么是最简单的方法(在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