預設行為陷阱:兩位元組分組 + Little-endian 顯示
$ echo -n "Happy New Year!" | hexdump
0000000 6148 7070 2079 654e 2077 6559 7261 0a21
0000010
x86 Little-endian 導致每兩位元組反序:48 61 → 6148 (即 'H' 'a' 顯示為 'aH'),極難閱讀。
核心參數組合
| 參數 | 功能 |
-C, --canonical | Canonical hex+ASCII 顯示:**單位元組**、**十六進位 + 右側 ASCII**,解決位元組序問題 |
-v, --verbose | 顯示**所有**行,**不省略**重複行 (預設以 * 略過) |
-n LEN, --length | 僅顯示前 LEN 位元組 |
-s OFFSET, --skip | 跳過前 OFFSET 位元組 |
-e "format" | 自訂輸出格式 (進階) |
黃金組合:hexdump -Cv
$ echo -n "Happy New Year!" | hexdump -Cv
00000000 48 61 70 70 79 20 4e 65 77 20 59 65 61 72 21 0a |Happy New Year!.|
00000010
- 單位元組顯示:
48 61 70 70... 即 'H' 'a' 'p' 'p'...
- 右側 ASCII 直接可讀
- 不省略重複行
精確切片檢視
# 僅看第 1 位元組
$ hexdump -Cv -n 1 file
00000000 48 |H|
00000001
# 僅看第 2-3 位元組 (跳過 1,長度 2)
$ hexdump -Cv -s 1 -n 2 file
00000001 61 70 |ap|
00000003
# 看特定區塊 (如 MBR 前 512 位元組)
$ hexdump -Cv -n 512 /dev/sda
自訂格式範例 (-e)
# 只顯示十六進位,每行 16 位元組,無 ASCII
$ hexdump -v -e '16/1 "%02x " "\n"' file
# 只顯示 ASCII (非列印字元顯示 .)
$ hexdump -v -e '16/1 "%_p" "\n"' file
# 位移 + 十六進位 + ASCII (類似 -C 但可控制)
$ hexdump -v -e '"%08_ax " 8/1 "%02x " " " 8/1 "%02x " " |" 16/1 "%_p" "|\n"' file
實戰場景
| 場景 | 指令 |
| 檢查二進制檔案 Magic Number | hexdump -Cv -n 4 file (如 7f 45 4c 46 = ELF) |
| 分析網路封包 (pcap 全域標頭) | hexdump -Cv -n 24 capture.pcap |
| 尋找特定位元組模式 | hexdump -Cv file | grep "ff fe" (UTF-16 LE BOM) |
| 比較兩檔案差異 | diff <(hexdump -Cv file1) <(hexdump -Cv file2) |
| 查看裝置前 1MB (分區表、開機碼) | hexdump -Cv -n 1M /dev/sda |
替代工具
xxd:Vim 內建,xxd file 類似 hexdump -C,支援 xxd -r 反轉寫入
od:POSIX 標準,od -tx1z -Ax file 相近 hexdump -Cv
xxd -i:輸出 C 語言陣列初始化碼 (嵌入式開發常用)