作者:脸皮乃身外之物 | 来源:互联网 | 2024-11-30 13:10
深入理解Hexdump命令
Hexdump是Linux系统中一个非常实用的命令,主要用于查看二进制文件的十六进制编码。然而,它的功能远不止于此,手册页上描述为“ASCII、十进制、十六进制和八进制转储”,因此本文标题特别强调了“十六”进制查看器的功能。此外,还有其他类似的工具如xxd和od,但本文主要讨论hexdump的使用方法。
功能概述
Hexdump不仅可以查看二进制文件,还可以处理任何类型的文件。在程序开发过程中,当需要检查二进制文件的输出是否正确时,hexdump是一个非常有用的工具。虽然Windows用户可以使用UltraEdit等工具查看文件的十六进制编码,但在Linux系统中,hexdump提供了更为便捷的选择。
常用参数
为了获得更好的查看效果,推荐使用-C参数,该参数会将结果显示为三列:文件偏移量、字节的十六进制表示以及对应的ASCII字符。
格式:hexdump -C 文件名
由于大多数文件的大小通常较大,建议与less命令结合使用,以便分页查看输出结果。
格式:hexdump -C 文件名 | less
使用示例
示例一:比较不同参数的输出结果
以下是使用不同参数查看/etc/passwd文件的部分输出:
[root@new55 ~]# echo /etc/passwd | hexdump
0000000 652f 6374 702f 7361 7773 0a64
000000c
[root@new55 ~]# echo /etc/passwd | od -x
0000000 652f 6374 702f 7361 7773 0a64
0000014
[root@new55 ~]# echo /etc/passwd | xxd
0000000: 2f65 7463 2f70 6173 7377 640a /etc/passwd.
[root@new55 ~]# echo /etc/passwd | hexdump -C
00000000 2f 65 74 63 2f 70 61 73 73 77 64 0a |/etc/passwd.|
0000000c
通过对比可以看出,hexdump -C的显示效果最为清晰,适合用于详细的文件分析。
示例二:确认文本文件的格式
不同的操作系统对文本文件的行结束符有不同的定义。例如,Windows/DOS下的文本文件以
(十六进制0D 0A)作为行结束符,而Linux/Unix下的文本文件则以
(十六进制0A)作为行结束符。这可能导致某些Linux命令无法正确处理DOS格式的文本文件。
[root@new55 ~]# cat test.bc
123*321
123/321
scale=4;123/321
[root@new55 ~]# hexdump -C test.bc
00000000 31 32 33 2a 33 32 31 0a 31 32 33 2f 33 32 31 0a |123*321.123/321.|
00000010 73 63 61 6c 65 3d 34 3b 31 32 33 2f 33 32 31 0a |scale=4;123/321.|
00000020 0a |.|
00000021
示例三:查看WAV文件
在某些IVR系统中,需要特定格式的音频文件,例如8KHz采样率、8位编码的WAV文件。使用hexdump可以查看这些文件的具体字节编码,确保它们符合要求。
[root@web186 root]# ls -l tmp.wav
-rw-r--r-- 1 root root 32381 2010-04-19 tmp.wav
[root@web186 root]# file tmp.wav
tmp.wav: RIFF (little-endian) data, WAVE audio, ITU G.711 a-law, mono 8000 Hz
[root@web186 root]# hexdump -C tmp.wav | less
00000000 52 49 46 46 75 7e 00 00 57 41 56 45 66 6d 74 20 |RIFFu~..WAVEfmt |
00000010 12 00 00 00 06 00 01 00 40 1f 00 00 40 1f 00 00 |........@...@...|
00000020 01 00 08 00 00 00 66 61 63 74 04 00 00 00 43 7e |......fact....C~|
00000030 00 00 64 61 74 61 43 7e 00 00 d5 d5 d5 d5 d5 d5 |..dataC~........|
...