每天一個 Linux 命令:od 命令

1. 功能簡介

od(Octal Dump)命令用於將指定文件內容以八進制、十進制、十六進制、浮點格式或 ASCII 編碼字符方式顯示,通常用於顯示或查看文件中不能直接顯示在終端的字符。od 命令系統默認的顯示方式是八進制。

常見的文件爲文本文件和二進制文件。od 命令主要用來查看保存在二進制文件中的值,按照指定格式解釋文件中的數據並輸出,不管是 IEEE754 格式的浮點數還是 ASCII 碼,od 命令都能按照需求輸出它們的值。

大家也可以瞭解一下 hexdump 命令,以十六進制輸出,但感覺 hexdump 命令沒有 od 命令強大。

2. 命令格式

od [OPTION]... [FILE]...

3. 選項說明

-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
 顯示版本信息

4. 常用示例

(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 -a
0000000   l   v   l   v  nl
0000005

#顯示ASCII字符名稱
[b3335@localhost]echo lvlv|od -tc
0000000   l   v   l   v  \n
0000005

(6)以十六進制顯示的同時顯示原字符。

[b3335@localhost]echo lvlv|od -tcx1
0000000   l   v   l   v  \n
         6c  76  6c  76  0a
0000005

(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}}'

參考文獻

[1] od manual

轉自:戀貓大鯉魚

https://dablelv.blog.csdn.net/article/details/54177989

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/8xSHXI9Dt13OK5IrPcp9gQ