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