Provided by: manpages-zh_1.6.4.0-1_all
NAME
xxd - 以十六進位制形式表示
總覽 (SYNOPSIS)
xxd -h[elp] xxd [options] [infile [outfile]] xxd -r[evert] [options] [infile [outfile]]
描述 (DESCRIPTION)
xxd 建立一個指定檔案或者標準輸入的十六進位制轉儲,同時也可以 把十六進位制轉儲轉換成原來的 二進位制形式。同 uuencode(1) 和 uudecode(1) 一樣,它也可以把二進位制資料轉換成 ASCII 表示 形式,這樣電子郵件就可以 安全的傳輸。但是它有一個優點,就是可以把解碼後的結果輸出到 標準輸 出。同時它還可以用來給二進位制檔案打補丁。
選項 (OPTIONS)
如果沒有給定 infile 就用標準輸入。如果 infile 是一個 “-” 字元,也從標準輸入讀入。如果沒有 給定 outfile (或者它的檔名是 一個 `-´ 字元),結果將輸出至標準輸出。 注意我們用的是一個很“懶”的解析器,它只檢查選項的第一個字元, 除非這個選項有引數。在一個單 字元的選項和它的引數之間的空格 可有可無. 選項的 引數 可以 用 十進位制, 十六進位制 或者 八 進位制的 形式 指定. 也就是說 -c8, -c 8, -c 010 和 -cols 8 是 等價的. -a | -autoskip 開啟/關閉 autoskip: 用一個 單獨的 '*' 來 代替 空行. 預設 關閉. -b | -bits 轉到 位元(二進位制 數字) 模式, 而 不是 十六進位制 模式. 在 這種 模式 下, 每個 字元 被 表示成 八個 0/1 的 數字, 而 不是 一般的 十六進位制 形式. 每 一行 都 以 一個 用 十六進位制 形式 表示的 行號, 後面 是 ascii (或者 ebcdic) 形式 開頭. 命令列 選項 -r, -p, -i 在 這個 模式下 不起作用. -c cols | -cols cols -c cols | -cols cols 每行 表示 <cols> 個 字元. 預設 16 (-i: 12, -ps: 30, -b: 6). 最 多 256. -E | -EBCDIC 把 右手邊的 字元 編碼 從 ASCII 變為 EBCDIC. 這個 並不 改變 其 十六進位制 表示 形式. 同 -r, -p 或者 -i 一起用 是 沒有 意義的. -g bytes | -groupsize bytes 每 <bytes> 個 字元 (每 兩個 十六進位制 字元 或者 八個 二進位制 數字) 之間 用 一個 空格 隔開. 用 -g 0 禁止 分組. 在 普通 模式 中 <Bytes> 預設 是 2 在 二進位制 模式 中 是 1. 分組 並不 適用於 postscript 或者 include style 選項. -h | -help 顯示 可用 命令 概述 並且 退出. 不做 其它 任何 事情. -i | -include 輸出 為 C 語言的 包含 檔案 形式. 除非 xxd 從 標準輸入 讀入, 不然 會 輸出 一個 完整 的 靜態 陣列 定義(與 輸入 檔案 同名). -l len | -len len 輸出 <len> 個 字元 後 停止. -p | -ps | -postscript | -plain 以 postscript 的 連續 十六進位制 轉儲 輸出. 這 也叫做 純 十六進位制 轉儲. -r | -revert 逆向 操作: 把 十六進位制 轉儲 轉換 (或者 打補丁) 成 二進位制 形式. 如果 不 輸出 到 標準輸出, xxd 並不把 輸出 檔案 截斷, 而是 直接 寫到 輸出 檔案. 用 -r -p 來 從 一個 沒有 行號 沒有 某種 列格式 的 純 十六進位制 轉儲 讀入. 附加的 空格 和 換行 可以 出 現 在 任何 地方. -seek offset 用在 -r 之後: 會在 當前 檔案的 偏移量 上 增加 <offset>. -s [+][-]seek 從 infile 的 絕對 或者 相對 偏移量 <seek> 開始. + 表示 相對於 標準 輸入 當前的 位 置 (如果 不是 標準輸入 就 沒有 意義了). - 表示 從 檔案 末尾 (如果 和 + 連用: 從 標準輸入 當前 位置) 向前 數 一些 字元, 從 那個 地方 開始. 如果 沒有 -s 選項, xxd 從 當前 位置 開始. -u 用大寫字母. 預設的是小寫字母. -v | -version 顯示 版本 字串.
告誡 (CAVEATS)
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 的 行為.
例子 (EXAMPLES)
(譯者: 實際 輸出 可能 和 例子 有 一些 出入, 只要 理解 其 意思 就行了) 顯示 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
返回值 (RETURN VALUES)
此 程式 返回 如下的 錯誤碼: 0 一切 正常. -1 不支援 此 操作 ( xxd -r -i 仍然 不行). 1 解析 選項 錯誤. 2 輸入 檔案 出錯. 3 輸出 檔案 出錯. 4,5 指定 的 偏移量 地址 不可 到達.
參見 (SEE ALSO)
uuencode(1), uudecode(1), patch(1)
警告 (WARNINGS)
這個 工具 古怪的 念頭 是其 作者的 意思. 使用 這個 工具的 任何 結果 都由 自己 負責. 使用它, 探索它, 你 終會 成為 一個 高手.
版本 (VERSION)
此 手冊頁 為 1.7 版本的 xxd 而寫.
作者 (AUTHOR)
(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
[中國Linux論壇man手冊頁翻譯計劃]
http://cmpp.linuxforum.net
跋
本頁面中文版由中文 man 手冊頁計劃提供。 中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh