XXD(1) | General Commands Manual | XXD(1) |
xxd - 以十六進制形式表示
xxd -h[elp]
xxd [options] [infile [outfile]]
xxd -r[evert] [options] [infile [outfile]]
xxd 建立一個指定文件或者標準輸入的十六進制轉儲,同時也可以 把十六進制轉儲轉換成原來的二進制形式。同 uuencode(1) 和 uudecode(1) 一樣,它也可以把二進制數據轉換成 ASCII 表示形式,這樣電子郵件就可以 安全的傳輸。但是它有一個優點,就是可以把解碼後的結果輸出到 標準輸出。同時它還可以用來給二進制文件打補丁。
如果沒有給定 infile 就用標準輸入。如果 infile 是一個 “-” 字符,也從標準輸入讀入。如果沒有給定 outfile (或者它的文件名是 一個 `-´ 字符),結果將輸出至標準輸出。
注意我們用的是一個很“懶”的解析器,它只檢查選項的第一個字符, 除非這個選項有參數。在一個單字符的選項和它的參數之間的空格 可有可無. 選項的 參數 可以 用 十進制, 十六進制 或者 八進制的 形式 指定. 也就是說 -c8, -c 8, -c 010 和 -cols 8 是 等價的.
xxd -r 在 對待 行號 上 有一些 地方 值得 注意. 如過 輸出 文件 可以 定位, 那麼 在 十六進制 文件 中的 行首的 行號 可以 重疊, 順序 可以 打亂, 還 可以 略去 一些 行號. 這種 情況 下, xxd 會 用 lseek(2) 來 定位. 如果 輸出 文件 不可以 定位, 那麼 行號 可以 不連續, 但是 必須 按 順序, 這種 情況 下, 中間 會 插入 null 字符.
xxd -r 從不 輸出 解析 錯誤. 錯誤 會 被跳過.
在 編輯 十六進制 文件時 要 注意 xxd -r 在 讀入 足夠列 之後 會跳過 本行 後面 所有的 數據 (見 選項 -c). 這 就是說 對可打印的 ASCII (或者 EBCDIC) 的修改 都會被 忽略. 用 xxd -r -p 把一個 純十六進制 轉儲文件 (或者 postscript) 恢復 成 二進制文件 與 列數 是否 正確 沒有 什麼 關係, 它會 解釋 所有 看起來 像 兩個 十六進制的 數字.
請 注意
% xxd -i file
和
% xxd -i < file 的 區別.
因爲 lseek(2) 是 用來 重置 輸入指針的, 所以 xxd -s +seek 和 xxd -s seek 是 有區別的. 如果 輸入 是 標準輸入, 並且 在 xxd 被執行是 它的 標準輸入的 指針 位置 不是在 文件的 開頭, 那麼 多了個 '+' 效果 就會 不一樣了. 下面的 例子 可能 幫助你 弄清楚(也可能 讓你 更糊塗)...
在讀 之前 需要
重置 輸入的 文件指針;
因爲 `cat' 已經 讀到了
輸入的 文件尾.
% sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file
從 0x480 (=1024+128) 開始讀. `+'
表明 "相對於 當前的
文件位置", 也就是說
從 dd 讀了 1k, 在此 基礎上
再加 `128'.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet'
< file
從 0x100 ( = 1024-768) 開始讀.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet'
< file
可是, 這種 情況 很少 發生, 我們 也 很少 需要用 `+'. 當用了 -s 是, 作者 比較 喜歡 用 strace(1) 或者 truss(1) 去 監控 xxd 的 行爲.
(譯者: 實際 輸出
可能 和 例子 有 一些
出入, 只要 理解 其
意思 就行了)
顯示 file 除了 前 三行
(十六進制 的 0x30) 的 所有
內容.
% xxd -s 0x30 file
顯示 file 最後 三行
(十六進制 的 0x30) 的 所有
內容.
% xxd -s -0x30 file
顯示 120 個 字符, 每行
20 個 字符, 連續 顯示.
% xxd -l 120 -ps -c 20 xxd.1
2e544820585844203120224d616e75616c207061
676520666f7220787864220a2e5c220a2e5c2220
32317374204d617920313939360a2e5c22204d61
6e207061676520617574686f723a0a2e5c222020
2020546f6e79204e7567656e74203c746f6e7940
7363746e7567656e2e7070702e67752e6564752e
顯示 120 個 字符, 每行
12 個 字符.
% xxd -l 120 -c 12 xxd.1
0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
000000c: 616e 7561 6c20 7061 6765 2066 anual page f
0000018: 6f72 2078 7864 220a 2e5c 220a or xxd"..\".
0000024: 2e5c 2220 3231 7374 204d 6179 .\" 21st May
0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\" Ma
000003c: 6e20 7061 6765 2061 7574 686f n page autho
0000048: 723a 0a2e 5c22 2020 2020 546f r:..\" To
0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent <t
0000060: 6f6e 7940 7363 746e 7567 656e ony@sctnugen
000006c: 2e70 7070 2e67 752e 6564 752e .ppp.gu.edu.
只 顯示 xxd.1 中 的
日期.
% xxd -s 0x28 -l 12 -c 12 xxd.1
0000028: 3231 7374 204d 6179 2031 3939 21st May 199
把 input_file 考到 output_file
並 在 前面 增加 100 個
字節的 0x00.
% xxd input_file | xxd -r -s 100 > output_file
給 文件 xxd.1 中的 日期
打 補釘.
% echo '0000029: 3574 68' | xxd -r - xxd.1
% xxd -s 0x28 -l 12 -c 12 xxd.1
0000028: 3235 7468 204d 6179 2031 3939 25th May 199
建立 一個 65537 字節的
文件, 所有 字節 都是 0x00,
除了 最後 一個 字節 是
'A' (十六進制 0x41).
% echo ´010000: 41´ | xxd -r > file
打開 autoskip, 顯示 上例
中 建立的 文件.
% xxd -a -c 12 file
0000000: 0000 0000 0000 0000 0000 0000 ............
*
000fffc: 0000 0000 40 ....A
建立 一個 只 含有
一個 'A' 的 文件. '-r -s' 後面
的 數字 同 文件 中的
行號 相 抵消; 結果是
開頭 的 字節 被
跳過了.
% echo '010000: 41' | xxd -r -s -0x10000 > file
在 編輯器, 比如 vim(1)
中 把 xxd 當成 一個 過濾
程序 來用, 用 十六進制
來 顯示 被 標記 爲 'a' 和
'z' 中間 的 區域.
:'a,'z!xxd
在 編輯器, 比如 vim(1)
中 把 xxd 當成 一個 過濾
程序 來用, 用來 恢復
被 標記 爲 'a' 和 'z' 中間
的 區域 的 十六進制
顯示.
:'a,'z!xxd -r
在 編輯器, 比如 vim(1)
中 把 xxd 當成 一個 過濾
程序 來用, 用來 恢復
一行的 十六進治 顯示.
把 光標 移動 到 相應行
並 鍵入:
!!xxd -r
從 串行線 中 讀入
一個個的 單獨的 字符.
% xxd -c1 < /dev/term/b &
% stty < /dev/term/b -echo -opost -isig -icanon min 1
% echo -n foo > /dev/term/b
此 程序 返回 如下的 錯誤碼:
這個 工具 古怪的 念頭 是其 作者的 意思. 使用 這個 工具的 任何 結果 都由 自己 負責. 使用它, 探索它, 你 終會 成爲 一個 高手.
此 手冊頁 爲 1.7 版本的 xxd 而寫.
(c) 1990-1997 by Juergen Weigert
<jnweiger@informatik.uni-erlangen.de>
Distribute freely and credit me,
make money and share with me,
lose money and don't ask me.
Tony Nugent
<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
最先 開始 寫 本 手冊頁
Bram Moolenaar
做了一些小的改動,
Juergen Weigert
完成了手冊頁的編寫。
唐友 <tony_ty@263.net>
2002/1/22
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
August 1996 | Manual page for xxd |