推薦:每天一個Linux命令(1):xargs
功能簡介od(Octal Dump)命令用於將指定檔案內容以八進位制、十進位制、十六進位制、浮點格式或ASCII編碼字元方式顯示,通常用於顯示或檢視檔案中不能直接顯示在終端的字元。od命令系統預設的顯示方式是八進位制。
常見的檔案為文字檔案和二進位制檔案。od命令主要用來檢視儲存在二進位制檔案中的值,按照指定格式解釋檔案中的資料並輸出,不管是IEEE754格式的浮點數還是ASCII碼,od命令都能按照需求輸出它們的值。
大家也可以瞭解一下hexdump命令,以十六進位制輸出,但感覺hexdump命令沒有od命令強大。
命令格式od [OPTION]... [FILE]...
選項說明
-A RADIX --address-radix=RADIX #選擇以何種基數表示地址偏移-j BYTES --skip-bytes=BYTES #跳過指定數目的位元組-N BYTES --read-bytes=BYTES #輸出指定位元組數-S [BYTES] --strings[=BYTES] #輸出長度不小於指定位元組數的字串,BYTES 預設為 3-v --output-duplicates #輸出時不省略重複的資料-w [BYTES] --width[=BYTES] #設定每行顯示的位元組數,BYTES 預設為 32 位元組-t TYPE --format=TYPE #指定輸出格式,格式包括 a、c、d、f、o、u 和 x,各含義如下: a:具名字元;比如換行符顯示為 nl c:可列印字元或反斜槓表示的跳脫字元;比如換行符顯示為 n d[SIZE]:SIZE 位元組組成一個有符號十進位制整數。SIZE 預設為 sizeof(int) f[SIZE]:SIZE 位元組組成一個浮點數。SIZE 預設為 sizeof(double) o[SIZE]:SIZE 位元組組成一個八進位制整數。SIZE 預設為 sizeof(int) u[SIZE]:SIZE 位元組組成一個無符號十進位制整數。SIZE 預設為 sizeof(int) x[SIZE]:SIZE 位元組組成一個十六進位制整數。SIZE 預設為 sizeof(int) SIZE可以為數字,也可以為大寫字母。如果 TYPE 是 [doux] 中的一個,那麼SIZE 可以為C = sizeof(char),S = sizeof(short),I = sizeof(int),L = sizeof(long)。如果 TYPE 是 f,那麼 SIZE 可以為 F = sizeof(float),D = sizeof(double) ,L = sizeof(long double)--help #線上幫助--version #顯示版本資訊
常用示例1、設定第一列偏移地址以十進位制顯示。
od -Ad testfile#偏移地址顯示基數有:d for decimal, o for octal, x for hexadecimal or n for none。
2、od 不顯示第一列偏移地址。
od -An testfile
3、以十六進位制輸出,預設以四位元組為一組(一列)顯示。
od -tx testfile
4、以十六進位制輸出,每列輸出一位元組。
od -tx1 testfile
5、顯示ASCII字元和ASCII字元名稱,注意換行符顯示方式的區別。
#顯示ASCII字元[b3335@localhost]$ echo lvlv|od -a0000000 l v l v nl0000005#顯示ASCII字元名稱[b3335@localhost]$ echo lvlv|od -tc0000000 l v l v n0000005
6、以十六進位制顯示的同時顯示原字元。
[b3335@localhost]$ echo lvlv|od -tcx10000000 l v l v n 6c 76 6c 76 0a0000005
7、指定每行顯示512位元組。
od -w512 -tx1 testfile
8、od 命令輸出時去除列與列之間的空格符。
當我們需要將檔案內容顯示為十六進位制,需要輸出連續的單個位元組,每個位元組以十六進位制顯示。這時我們可以透過od命令將檔案以單個位元組為一組,十六進位制輸出在同一行,並去除每個位元組之間的空格。目前還不知道怎麼透過指定od命令的相關選項去除列與列之間的空格,也許od命令本身並不支援。我的做法是:
(a)使用-An不輸出偏移地址;(b)使用-v輸出時不省略重複的資料;(c)使用-tx1以單個位元組為一組按照十六進位制輸出,-w1每列輸出一個位元組;(d)最後透過管道傳遞給 awk 的標準輸入,透過awk不換行輸出所有行,拼接為一行輸出。具體命令如下:
od -An -w1 -tx1 testfile|awk '{for(i=1;i<=NF;++i){printf "%s",$i}}'