本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。
博客:fireaxe.blog.chinaunix.net
开发时经常会需查看非文本文件内容,最常见的16进制查看器就是hexdump。hexdump 看似简单,但还是有些小技巧的。
以文本文件tmpfile为例:
点击(此处)折叠或打开
Happy New Year!
1) 最简单的方式
hexdump testfile
0000000 6148 7070 2079 654e 2077 6559 7261 0a21
*
0000030
这种方式是以两个字节为一组,其顺序取决于本机字节序。比如在x86架构上就是以blittle-endian方式显示,看起来会很费劲。
如第一行翻译成ascii码:
6148 7070 2079 654e 2077 6559 7261 0a21
aH pp y Ne w e ae !r
为了避免这种情况,就要用到下面的”以字节方式查看“
2) 以字节方式查看
hexdump -C testfile -s skip -n number
00000000 48 61 70 70 79 20 4e 65 77 20 59 65 61 72 21 0a |Happy New Year!.|
这种方式就不会有字节序问题了,而且还能同时显示16进制与ascii码,但存在的问题是,如果某几行的内容相同,会省略掉后几行,这个有时也会造成麻烦。如何避免省略呢?
3) 不要省略
hexdump -v testfile
0000010 6148 7070 2079 654e 2077 6559 7261 0a21
0000020 6148 7070 2079 654e 2077 6559 7261 0a21
现在省略是没有了,但又回到了两字节显示的老路上,所以我们要把两种方式结合起来。
4) 字节方式显示且不要省略
hexdump -Cv testfile
00000010 48 61 70 70 79 20 4e 65 77 20 59 65 61 72 21 0a |Happy New Year!.|
00000020 48 61 70 70 79 20 4e 65 77 20 59 65 61 72 21 0a |Happy New Year!.|
现在就好看多了,既是以单字节方式显示,又不会省略了。但有时文件很大,我们只想查看其中一段,怎么把呢?
5) 显示某一段
hexdump -Cv testfile -s skip -n number
fireaxe $ hexdump -Cv tmp.txt -n 1
00000000 48 |H|
00000001
fireaxe $ hexdump -Cv tmp.txt -n 2
00000000 48 61 |Ha|
00000002
fireaxe $ hexdump -Cv tmp.txt -n 3
00000000 48 61 70 |Hap|
00000003
fireaxe $ hexdump -Cv tmp.txt -s 1 -n 1
00000001 61 |a|
fireaxe $ hexdump -Cv tmp.txt -s 2 -n 1
00000002 70 |p|
fireaxe $ hexdump-Cv tmp.txt -s 3 -n 1
00000003 70 |p|
00000004
OK, 整个显示过程都可以自由控制了~~