你是否需要使用二進位或十六進位格式顯示文件內容? 尋找可以執行此操作的命令行實用程序? 那,你很幸運,因為存在一個名為xxd的命令可以為你做到這一點。 在本教程中,我們將使用一些易於理解的示例來討論xxd。 但在我們這樣做之前,值得一提的是這裡的所有例子都是在Ubuntu 18.04 LTS機器上測試過的。
xxd 命令可以將指定文件或標準輸入以十六進位轉儲,也可以把十六進位轉儲轉換成原來的二進位形式。
Linux xxd 命令Linux中的xxd命令允許您創建一個hexdump甚至反過來。 以下是它的語法:
xxd [OPTIONS] [file]
以下是該工具的手冊頁的解釋:
xxd創建給定文件或標準輸入的十六進位轉儲。 它還可以將十六進位轉儲轉換回其原始二進位形式。 與uuencode(1) 和 uudecode(1)一樣,它允許以「mail-safe」ASCII表示傳輸二進位數據,但具有解碼到標準輸出的優點。 而且,它可以用於執行二進位文件修補。
下面是一些Q&A風格的例子,可以讓您更好地了解xxd是如何工作的。
Q1. 如何使用xxd命令?這很簡單。 例如,假設您有一個文本文件'linuxidc.com.txt',其內容如下所示:
No.|Country|Yes/No
01|China|Y
02|US|Y
03|Australia|Y
04|India|N
05|Russia|Y
06|Japan|Y
07|Singapore|Y
08|South Korea|N
09|Finland|Y
10|Ireland|Y
以下是如何使用xxd將文件內容轉換為十六進位:
linuxidc@linuxidc:~/www.linuxidc.com/Linux公社 -$ xxd linuxidc.com.txt
輸出如下:
00000000: 4e6f 2e7c 436f 756e 7472 797c 5965 732f No.|Country|Yes/
00000010: 4e6f 0a30 317c 496e 6469 617c 590a 3032 No.01|India|Y.02
00000020: 7c55 537c 590a 3033 7c41 7573 7472 616c |US|Y.03|Austral
00000030: 6961 7c59 0a0a 3034 7c43 6869 6e61 7c4e ia|Y..04|China|N
00000040: 0a30 357c 5275 7373 6961 7c59 0a30 367c .05|Russia|Y.06|
00000050: 4a61 7061 6e7c 590a 0a30 377c 5369 6e67 Japan|Y..07|Sing
00000060: 7061 6f72 657c 590a 3038 7c53 6f75 7468 paore|Y.08|South
00000070: 204b 6f72 6561 7c4e 0a30 397c 4669 6e61 Korea|N.09|Fina
00000080: 6c61 6e64 7c59 0a31 307c 4972 656c 616e land|Y.10|Irelan
00000090: 647c 590a d|Y.
假設您不希望完整文件的hexdump。 相反,您希望該工具從特定行開始轉換。 然後可以使用-s命令實現。
例如,如果您希望xxd從第3行開始生成十六進位轉儲,那麼您可以告訴xxd如何執行此操作:
linuxidc@linuxidc:~/www.linuxidc.com/Linux公社 -$ xxd -s 0x30 linuxidc.com.txt
這是產生的輸出:
00000030: 6961 7c59 0a0a 3034 7c43 6869 6e61 7c4e ia|Y..04|China|N
00000040: 0a30 357c 5275 7373 6961 7c59 0a30 367c .05|Russia|Y.06|
00000050: 4a61 7061 6e7c 590a 0a30 377c 5369 6e67 Japan|Y..07|Sing
00000060: 7061 6f72 657c 590a 3038 7c53 6f75 7468 paore|Y.08|South
00000070: 204b 6f72 6561 7c4e 0a30 397c 4669 6e61 Korea|N.09|Fina
00000080: 6c61 6e64 7c59 0a31 307c 4972 656c 616e land|Y.10|Irelan
00000090: 647c 590a d|Y.
因此,在這種情況下,您可以看到hexdump在第3行開始生成。
Q3. 如何將xxd輸出限制為特定長度?在上一節中,我們討論了如何使xxd從特定點開始轉換。 但也有一種方法可以將其轉換限制在特定點。 這可以使用-l命令行選項完成。
例如,要確保xxd僅為linuxidc.com.txt的前三行創建轉儲,請按以下方式使用它:
linuxidc@linuxidc:~/www.linuxidc.com/Linux公社 -$ xxd -l 0x30 linuxidc.com.txt
這是它產生的輸出:
00000000: 4e6f 2e7c 436f 756e 7472 797c 5965 732f No.|Country|Yes/
00000010: 4e6f 0a30 317c 496e 6469 617c 590a 3032 No.01|India|Y.02
00000020: 7c55 537c 590a 3033 7c41 7573 7472 616c |US|N.03|Austral
如果希望xxd在輸出中生成更少或更多的列,請使用-c選項並指定其中的列數。 這是使用此選項的示例命令:
linuxidc@linuxidc:~/www.linuxidc.com/Linux公社 -$ xxd -c 5 linuxidc.com.txt
輸出如下:
00000000: 4e6f 2e7c 43 No.|C
00000005: 6f75 6e74 72 ountr
0000000a: 797c 5965 73 y|Yes
0000000f: 2f4e 6f0a 30 /No.0
00000014: 317c 496e 64 1|Ind
00000019: 6961 7c59 0a ia|Y.
0000001e: 3032 7c55 53 02|US
00000023: 7c59 0a30 33 |Y.03
00000028: 7c41 7573 74 |Aust
0000002d: 7261 6c69 61 ralia
00000032: 7c59 0a0a 30 |Y..0
00000037: 347c 4368 69 4|Chi
0000003c: 6e61 7c4e 0a na|N.
00000041: 3035 7c52 75 05|Ru
00000046: 7373 6961 7c ssia|
0000004b: 590a 3036 7c Y.06|
00000050: 4a61 7061 6e Japan
00000055: 7c59 0a0a 30 |Y..0
0000005a: 377c 5369 6e 7|Sin
0000005f: 6770 616f 72 gpaor
00000064: 657c 590a 30 e|Y.0
00000069: 387c 536f 75 8|Sou
0000006e: 7468 204b 6f th Ko
00000073: 7265 617c 4e rea|N
00000078: 0a30 397c 46 .09|F
0000007d: 696e 616c 61 inala
00000082: 6e64 7c59 0a nd|Y.
00000087: 3130 7c49 72 10|Ir
0000008c: 656c 616e 64 eland
00000091: 7c59 0a |Y.
所以你可以看到輸出中只產生了5列。
Q5. 如何讓xxd產生二進位轉儲?是的,這也是可能的。 -b命令行選項使xxd以二進位數字生成轉儲。 以下是該手冊頁中有關此工具的說明:
-b |-Bits
切換到位(二進位數字)轉儲,而不是hexdump。 此選項將八位字節寫為八位「1」和「0」
正常的十六進位轉儲。 每行前面都有一個十六進位的行號,後跟一個ascii(或ebcdic表示。命令行開關-r, -p, -i不適用於此模式。
這是一個例子:
linuxidc@linuxidc:~/www.linuxidc.com/Linux公社 -$ xxd -b linuxidc.com.txt
總結
所以你可以看到,如果你處理十六進位和二進位文件內容,xxd命令很有用。 在本教程中,我們剛剛討論了xxd提供的一些基本選項。 完成練習後,請訪問該工具的手冊頁以了解有關它的更多信息。