Linux进制查看工具:od、hexdump、xxd
 
od 命令 :http://man.linuxde.net/od
 
od 命令
 
od命令用于將指定文件內(nèi)容以八進制、十進制、十六進制、浮點格式或ASCII編碼字符方式顯示,通常使用od命令查看特殊格式的文件內(nèi)容,或者用于顯示或查看文件中不能直接顯示在終端的字符。
od命令系統(tǒng)默認(rèn)的顯示方式是八進制,名稱源于Octal Dump。
常見的文件為文本文件和二進制文件。此命令主要用來查看保存在二進制文件中的值。比如,程序可能輸出大量的數(shù)據(jù)記錄,每個數(shù)據(jù)是一個單精度浮點數(shù)。這些數(shù)據(jù)記錄存放在一個文件中,如果想查看下這個數(shù)據(jù),這時候od命令就派上用場了。在我看來,od命令主要用來格式化輸出文件數(shù)據(jù),即對文件中的數(shù)據(jù)進行無二義性的解釋。不管是IEEE754格式的浮點數(shù)還是ASCII碼,od命令都能按照需求輸出它們的值。
 
大家也可以了解一下hexdump命令,以十六進制輸出,但感覺 hexdump 命令沒有od命令強大。
Linux命令 hexdump?學(xué)習(xí)總結(jié):http://www.cnblogs.com/kerrycode/p/5077687.html
 
注:常見的ASCII字符的十六進制表示
 \r????? 0D
 
 \n???? 0A
 
\t????? 09
DOS/Windows的換行符 \r\n 即十六進制表示 0D 0A
Linux/Unix的換行符????? \n??? 即十六進制表示 0A
 
選項?
-a:此參數(shù)的效果和同時指定“-ta”參數(shù)相同; -A:<字碼基數(shù)>:選擇以何種基數(shù)計算字碼; -b:此參數(shù)的效果和同時指定“-toC”參數(shù)相同; -c:此參數(shù)的效果和同時指定“-tC”參數(shù)相同; -d:此參數(shù)的效果和同時指定“-tu2”參數(shù)相同; -f:此參數(shù)的效果和同時指定“-tfF”參數(shù)相同; -h:此參數(shù)的效果和同時指定“-tx2”參數(shù)相同; -i:此參數(shù)的效果和同時指定“-td2”參數(shù)相同; -j<字符數(shù)目>或--skip-bytes=<字符數(shù)目>:略過設(shè)置的字符數(shù)目; -l:此參數(shù)的效果和同時指定“-td4”參數(shù)相同; -N<字符數(shù)目>或--read-bytes=<字符數(shù)目>:到設(shè)置的字符樹目為止; -o:此參數(shù)的效果和同時指定“-to2”參數(shù)相同; -s<字符串字符數(shù)>或--strings=<字符串字符數(shù)>:只顯示符合指定的字符數(shù)目的字符串; -t<輸出格式>或--format=<輸出格式>:設(shè)置輸出格式; -v或--output-duplicates:輸出時不省略重復(fù)的數(shù)據(jù); -w<每列字符數(shù)>或--width=<每列字符數(shù)>:設(shè)置每列的最大字符數(shù); -x:此參數(shù)的效果和同時指定“-h”參數(shù)相同; --help:在線幫助; --version:顯示版本信息。命令中各選項的含義:-A 指定地址基數(shù),包括:d 十進制o 八進制(系統(tǒng)默認(rèn)值)x 十六進制n 不打印位移值-t 指定數(shù)據(jù)的顯示格式,主要的參數(shù)有:c ASCII字符或反斜杠序列d 有符號十進制數(shù)f 浮點數(shù)o 八進制(系統(tǒng)默認(rèn)值為02) u 無符號十進制數(shù)x 十六進制數(shù)
 
 實  例:
說明:先準(zhǔn)備一個tmp文件
 
說明:使用單字節(jié)八進制解釋進行輸出,注意左側(cè)的默認(rèn)地址格式為八字節(jié)
 
說明:使用ASCII碼進行輸出,注意其中包括轉(zhuǎn)義字符
 
說明:使用單字節(jié)十進制進行解釋
 
說明:設(shè)置地址格式為十進制。
 
說明:設(shè)置地址格式為十六進制
 
說明:跳過開始的兩個字節(jié)
 
說明:跳過開始的兩個字節(jié),并且僅輸出兩個字節(jié)
 
說明:每行僅輸出1個字節(jié)
 
說明:每行輸出兩個字節(jié)
 
說明:每行輸出3個字節(jié),并使用八進制單字節(jié)進行解釋
 
除了選項c以外的其他選項后面都可以跟一個十進制數(shù)n,指定每個顯示值所包含的字節(jié)數(shù)。
 說明:od命令系統(tǒng)默認(rèn)的顯示方式是八進制,這也是該命令的名稱由來(Octal Dump)。
 但這不是最有用的顯示方式,用ASCII碼和十六進制組合的方式能提供更有價值的信息輸出。?
例如:
$ od - Ax - tcx1 wh5
 
用法示例
(1)設(shè)置第一列偏移地址以十進制顯示。
od -Ad testfile- 1
偏移地址顯示基數(shù)有:d for decimal, o for octal, x for hexadecimal or n for none。
(2)od命令不顯示第一列偏移地址。
od -An testfile- 1
(3)以十六進制輸出,默認(rèn)以四字節(jié)為一組(一列)顯示。
od -tx testfile- 1
(4)以十六進制輸出,每列輸出一字節(jié)。
od -tx1 testfile- 1
(5)顯示ASCII字符和ASCII字符名稱,注意換行符顯示方式的區(qū)別。
#顯示ASCII字符 [b3335@localhost]$ echo lvlv|od -a 0000000 l v l v nl 0000005#顯示ASCII字符名稱 [b3335@localhost]$ echo lvlv|od -tc 0000000 l v l v \n 0000005- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(6)以十六進制顯示的同時顯示原字符。
[b3335@localhost]$ echo lvlv|od -tcx1 0000000 l v l v \n6c 76 6c 76 0a 0000005- 1
- 2
- 3
- 4
(7)指定每行顯示512字節(jié)。
od -w512 -tx1 testfile- 1
 (8)od命令輸出時去除列與列之間的空格符。?
 當(dāng)我們需要將文件內(nèi)容顯示為十六進制,需要輸出連續(xù)的單個字節(jié),每個字節(jié)以十六進制顯示。這時我們可以通過od命令將文件以單個字節(jié)為一組,十六進制輸出在同一行,并去除每個字節(jié)之間的空格。目前還不知道怎么通過指定od命令的相關(guān)選項去除列與列之間的空格,也許od命令本身并不支持。我的做法是:?
 (8.1)使用-An不輸出偏移地址;?
 (8.2)使用-v輸出時不省略重復(fù)的數(shù)據(jù);?
 (8.3)使用-tx1以單個字節(jié)為一組按照十六進制輸出,-w1每列輸出一個字節(jié);?
 (8.4)最后通過管道傳遞給awk的標(biāo)準(zhǔn)輸入,通過awk不換行輸出所有行,拼接為一行輸出。
具體命令如下:
od -An -w1 -tx1 testfile|awk '{for(i=1;i<=NF;++i){printf "%s",$i}}'
 
od、hexdump、xxd---進制查看工具
三個命令都可以像UltraEdit那樣以16進制的方式查看文件。hexdump的輸入格式最靈活,因為它有專門的參數(shù)指定格式, 常用選項 -C。od沒什么特點,od -x 和不帶選項的xxd差不多。xxd還可以通過-r選項把16進制表示的反轉(zhuǎn)換為正常的文件因為它默認(rèn)的表示方式和UltraEdit最像:以位移開頭,然后每兩字節(jié)一組,每行最后有相應(yīng)字節(jié)的文件顯示
 
提到linux/unix下的進制查看工具,不得不提到標(biāo)題上的三個工具。三者之間我個人感覺hexdump在使用上最平易近人,和windows下的winhex接近。而xxd是可以看作是od的升級產(chǎn)品。且其-r選項把16進制表示的反轉(zhuǎn)換為正常的文件。比較像是ultraedit軟件的十六進制查看。而od作為老牌的進制查看工具,個人感覺使用上比較麻煩。且顯示方式上不如上面兩個工個。而本篇著重介紹下hexdump的用法。(之前在windos下有用過winhex,比較喜歡其顯示的方式。)
 
 
 
示例一 比較各種參數(shù)的輸出結(jié)果
 
比較來比較去,還是hexdump -C的顯示效果更好些。
 
 
示例二 確認(rèn)文本文件的格式
 
示例三 查看wav文件
 
 
 
總結(jié)
以上是生活随笔為你收集整理的Linux进制查看工具:od、hexdump、xxd的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 自动处理可载入模块命令 modprobe
- 下一篇: shell 中 $(( )) 与 $(
