本文主要介绍了hexdump命令在Linux中的用法,并给出了命令输出结果的例子。有兴趣就去学吧。
hexdump命令通常用于检查“二进制”文件的十六进制代码。从手册上看,要查的内容很多,比如ASCII,十进制,十六进制,八进制。
参数:
hexdump [-bcCdovx] [-e格式_字符串] [-f格式_文件] [-n长度] [-s跳过]文件
示例:
添加一个新的文本文件,并将以下内容添加到测试文本中:
[root@node61测试]# cat测试
abcde
ABCDE
1)最简单的观点
[root@node61测试]# hexdump测试
0000000 6261 6463 0a 65 4241 4443 0a 45
00000c
第一列:表示文件的偏移量。
第2列:一组两个字节的十六进制系统。
通过上面的输出,翻译出来的文本是:badc0aeBADC0aE(注意:在Linux中,换行的十六进制码n是0a,在windows中,换行的十六进制码rn是0d 0a),下图是ASC码表对应的十进制码。
细心的读者可能已经发现了为什么翻译的文本是逆序的。文中内容不是:abcde
ABCDE?
其实这是X86 CPU架构造成的,也做过一些研究:字节顺序。
字节顺序:其实就是字节的顺序。这里,对于大于两个字节的字节,没有顺序。然而,在我们的大部分工作中,我们很少直接处理字节顺序。
有两种类型的字节顺序分类:大端和小端。
相关定义如下:
I) Little-Endian表示低位字节在存储器的低位地址端放电,高位字节在存储器的高位地址端放电。(X86 CPU系列采用的位顺序)
Ii) Big-Endian表示高位字节在存储器的低位地址端放电,低位字节在存储器的高位地址端放电。
Iii)网络端序:TCP/IP的协议将端序定义为Big-Endian,所以TCP/IP中使用的端序通常称为网络端序。
以下程序用于确定CPU采用哪种模式。
# includestdio.h
int main(){
联盟w
{
int a;
char b;
} c;
c . a=1;
if (c.b==1){
printf( CPU是Litle-Endian n );
}否则{
printf( CPU是Big-Endian n );
}
返回0;
} /*结束检查CPU*/
gcc -o checkCPU.o checkCPU.c
[root@node61测试]#。/checkCPU.o
CPU是小字节序的
我的本地虚拟机是X86小端模式。
到目前为止,为什么上面用hexdump是逆序的?
有没有更方便的查看方式?是的,这也是一种常见的方式,见下面b)的介绍;
b)以十六进制和相应的ASCII字符显示文件中的字符
[root @ node 61 test]# hex dump-ctest #常用
000000000 61 62 63 64 65 0a 41 42 43 44 45 0a | abcde . abcde . |
0000000c
十六进制和ascii码都可以在这里显示。
c)以偏移格式输出,参数-s
[root@node61测试]# hexdump -C测试
000000000 61 62 63 64 65 0a 41 42 43 44 45 0a | abcde . abcde . |
0000000c
[root@node61测试]# hexdump -C -s 6测试
00000006 41 42 43 44 45 0a |ABCDE。|
0000000c
第一行abcde newline的字符没了。
hexdump还有很多其他用途,详情请参考man hexdump。
这就是本文的全部内容。如果还有其他问题或不明白的地方,欢迎投稿或在下方留言。