.TH XXD 1 "August 1996" "Manual page for xxd" .\" .\" 21st May 1996 .\" Man page author: .\" Tony Nugent .\" Changes by Bram Moolenaar .SH NAME .I xxd \- 以十六進位制形式表示 .SH "總覽 (SYNOPSIS)" .B xxd \-h[elp] .br .B xxd [options] [infile [outfile]] .br .B xxd \-r[evert] [options] [infile [outfile]] .SH "描述 (DESCRIPTION)" .I xxd 建立一個指定檔案或者標準輸入的十六進位制轉儲,同時也可以 把十六進位制轉儲轉換成原來的二進位制形式。同 .BR uuencode(1) 和 .BR uudecode(1) 一樣,它也可以把二進位制資料轉換成 ASCII 表示形式,這樣電子郵件就可以 安全的傳輸。但是它有一個優點,就是可以把解碼後的結果輸出到 標準輸出。同時它還可以用來給二進位制檔案打補丁。 .SH "選項 (OPTIONS)" 如果沒有給定 .I infile 就用標準輸入。如果 .I infile 是一個 .RB “\-” 字元,也從標準輸入讀入。如果沒有給定 .I outfile (或者它的檔名是 一個 .RB \` \- \' 字元),結果將輸出至標準輸出。 .PP 注意我們用的是一個很“懶”的解析器,它只檢查選項的第一個字元, 除非這個選項有引數。在一個單字元的選項和它的引數之間的空格 可有可無. 選項的 引數 可以 用 十進位制, 十六進位制 或者 八進位制的 形式 指定. 也就是說 .RB \-c8 , .BR "\-c 8" , .B \-c 010 和 .B \-cols 8 是 等價的. .PP .TP .IR \-a " | " \-autoskip 開啟/關閉 autoskip: 用一個 單獨的 '*' 來 代替 空行. 預設 關閉. .TP .IR \-b " | " \-bits 轉到 位元(二進位制 數字) 模式, 而 不是 十六進位制 模式. 在 這種 模式 下, 每個 字元 被 表示成 八個 0/1 的 數字, 而 不是 一般的 十六進位制 形式. 每 一行 都 以 一個 用 十六進位制 形式 表示的 行號, 後面 是 ascii (或者 ebcdic) 形式 開頭. 命令列 選項 \-r, \-p, \-i 在 這個 模式下 不起作用. .TP .IR "\-c cols " | " \-cols cols" .IR "\-c cols " | " \-cols cols" 每行 表示 .RI < cols > 個 字元. 預設 16 (\-i: 12, \-ps: 30, \-b: 6). 最多 256. .TP .IR \-E " | " \-EBCDIC 把 右手邊的 字元 編碼 從 ASCII 變為 EBCDIC. 這個 並不 改變 其 十六進位制 表示 形式. 同 \-r, \-p 或者 \-i 一起用 是 沒有 意義的. .TP .IR "\-g bytes " | " \-groupsize bytes" 每 .RI < bytes > 個 字元 (每 兩個 十六進位制 字元 或者 八個 二進位制 數字) 之間 用 一個 空格 隔開. 用 .I \-g 0 禁止 分組. 在 普通 模式 中 .RI < Bytes "> 預設 是 " 2 在 二進位制 模式 中 是 \fI1\fP. 分組 並不 適用於 postscript 或者 include style 選項. .TP .IR \-h " | " \-help 顯示 可用 命令 概述 並且 退出. 不做 其它 任何 事情. .TP .IR \-i " | " \-include 輸出 為 C 語言的 包含 檔案 形式. 除非 xxd 從 標準輸入 讀入, 不然 會 輸出 一個 完整的 靜態 陣列 定義(與 輸入 檔案 同名). .TP .IR "\-l len " | " \-len len" 輸出 .RI < len > 個 字元 後 停止. .TP .IR \-p " | " \-ps " | " \-postscript " | " \-plain 以 postscript 的 連續 十六進位制 轉儲 輸出. 這 也叫做 純 十六進位制 轉儲. .TP .IR \-r " | " \-revert 逆向 操作: 把 十六進位制 轉儲 轉換 (或者 打補丁) 成 二進位制 形式. 如果 不 輸出 到 標準輸出, xxd 並不把 輸出 檔案 截斷, 而是 直接 寫到 輸出 檔案. 用 .I \-r \-p 來 從 一個 沒有 行號 沒有 某種 列格式 的 純 十六進位制 轉儲 讀入. 附加的 空格 和 換行 可以 出現 在 任何 地方. .TP .I \-seek offset 用在 .I \-r 之後: 會在 當前 檔案的 偏移量 上 增加 .RI < offset > . .TP .I \-s [\+][\-]seek 從 infile 的 絕對 或者 相對 偏移量 .RI < seek > 開始. \fI\+ \fR 表示 相對於 標準 輸入 當前的 位置 (如果 不是 標準輸入 就 沒有 意義了). \fI\- \fR 表示 從 檔案 末尾 (如果 和 \fI \+ \fR 連用: 從 標準輸入 當前 位置) 向前 數 一些 字元, 從 那個 地方 開始. 如果 沒有 \-s 選項, xxd 從 當前 位置 開始. .TP .I \-u 用大寫字母. 預設的是小寫字母. .TP .IR \-v " | " \-version 顯示 版本 字串. .SH "告誡 (CAVEATS)" .PP .I xxd \-r 在 對待 行號 上 有一些 地方 值得 注意. 如過 輸出 檔案 可以 定位, 那麼 在 十六進位制 檔案 中的 行首的 行號 可以 重疊, 順序 可以 打亂, 還 可以 略去 一些 行號. 這種 情況 下, xxd 會 用 lseek(2) 來 定位. 如果 輸出 檔案 不可以 定位, 那麼 行號 可以 不連續, 但是 必須 按 順序, 這種 情況 下, 中間 會 插入 null 字元. .PP .I xxd \-r 從不 輸出 解析 錯誤. 錯誤 會 被跳過. .PP 在 編輯 十六進位制 檔案時 要 注意 .I xxd \-r 在 讀入 足夠列 之後 會跳過 本行 後面 所有的 資料 (見 選項 \-c). 這 就是說 對可列印的 ASCII (或者 EBCDIC) 的修改 都會被 忽略. 用 xxd \-r \-p 把一個 純十六進位制 轉儲檔案 (或者 postscript) 恢復 成 二進位制檔案 與 列數 是否 正確 沒有 什麼 關係, 它會 解釋 所有 看起來 像 兩個 十六進位制的 數字. .PP 請 注意 .br \fI% xxd \-i file\fR .br 和 .br \fI% xxd \-i \< file\fR 的 區別. .PP 因為 lseek(2) 是 用來 重置 輸入指標的, 所以 .I xxd \-s \+seek 和 .I xxd \-s seek 是 有區別的. 如果 輸入 是 標準輸入, 並且 在 xxd 被執行是 它的 標準輸入的 指標 位置 不是在 檔案的 開頭, 那麼 多了個 '+' 效果 就會 不一樣了. 下面的 例子 可能 幫助你 弄清楚(也可能 讓你 更糊塗)... .PP 在讀 之前 需要 重置 輸入的 檔案指標; 因為 `cat' 已經 讀到了 輸入的 檔案尾. .br \fI% sh \-c 'cat > plain_copy; xxd \-s 0 > hex_copy' < file .PP 從 0x480 (=1024+128) 開始讀. `+' 表明 "相對於 當前的 檔案位置", 也就是說 從 dd 讀了 1k, 在此 基礎上 再加 `128'. .br \fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +128 > hex_snippet' < file .PP 從 0x100 ( = 1024-768) 開始讀. .br \fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +-768 > hex_snippet' < file .PP 可是, 這種 情況 很少 發生, 我們 也 很少 需要用 `+'. 當用了 \-s 是, 作者 比較 喜歡 用 strace(1) 或者 truss(1) 去 監控 xxd 的 行為. .SH "例子 (EXAMPLES)" .PP .br (譯者: 實際 輸出 可能 和 例子 有 一些 出入, 只要 理解 其 意思 就行了) .br 顯示 \fBfile\fP 除了 前 三行 (十六進位制 的 0x30) 的 所有 內容. .br \fI% xxd \-s 0x30 file .PP .br 顯示 \fBfile\fP 最後 三行 (十六進位制 的 0x30) 的 所有 內容. .br \fI% xxd \-s \-0x30 file .PP .br 顯示 120 個 字元, 每行 20 個 字元, 連續 顯示. .br \fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR .br 2e544820585844203120224d616e75616c207061 .br 676520666f7220787864220a2e5c220a2e5c2220 .br 32317374204d617920313939360a2e5c22204d61 .br 6e207061676520617574686f723a0a2e5c222020 .br 2020546f6e79204e7567656e74203c746f6e7940 .br 7363746e7567656e2e7070702e67752e6564752e .br .br 顯示 120 個 字元, 每行 12 個 字元. .br \fI% xxd \-l 120 \-c 12 xxd.1\fR .br 0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M .br 000000c: 616e 7561 6c20 7061 6765 2066 anual page f .br 0000018: 6f72 2078 7864 220a 2e5c 220a or xxd"..\\". .br 0000024: 2e5c 2220 3231 7374 204d 6179 .\\" 21st May .br 0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\\" Ma .br 000003c: 6e20 7061 6765 2061 7574 686f n page autho .br 0000048: 723a 0a2e 5c22 2020 2020 546f r:..\\" To .br 0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent output_file\fR .br .br 給 檔案 xxd.1 中的 日期 打 補釘. .br \fI% echo '0000029: 3574 68' | xxd \-r \- xxd.1\fR .br \fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR .br 0000028: 3235 7468 204d 6179 2031 3939 25th May 199 .PP .br 建立 一個 65537 位元組的 檔案, 所有 位元組 都是 0x00, 除了 最後 一個 位元組 是 'A' (十六進位制 0x41). .br \fI% echo \'010000: 41\' | xxd \-r \> file\fR .PP .br 開啟 autoskip, 顯示 上例 中 建立的 檔案. .br \fI% xxd \-a \-c 12 file\fR .br 0000000: 0000 0000 0000 0000 0000 0000 ............ .br * .br 000fffc: 0000 0000 40 ....A .PP 建立 一個 只 含有 一個 'A' 的 檔案. '\-r \-s' 後面 的 數字 同 檔案 中的 行號 相 抵消; 結果是 開頭 的 位元組 被 跳過了. .br \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> file\fR .PP 在 編輯器, 比如 .B vim(1) 中 把 xxd 當成 一個 過濾 程式 來用, 用 十六進位制 來 顯示 被 標記 為 'a' 和 'z' 中間 的 區域. .br \fI:'a,'z!xxd\fR .PP 在 編輯器, 比如 .B vim(1) 中 把 xxd 當成 一個 過濾 程式 來用, 用來 恢復 被 標記 為 'a' 和 'z' 中間 的 區域 的 十六進位制 顯示. .br \fI:'a,'z!xxd \-r\fR .PP 在 編輯器, 比如 .B vim(1) 中 把 xxd 當成 一個 過濾 程式 來用, 用來 恢復 一行的 十六進治 顯示. 把 游標 移動 到 相應行 並 鍵入: .br \fI!!xxd \-r\fR .PP 從 序列線 中 讀入 一個個的 單獨的 字元. .br \fI% xxd \-c1 < /dev/term/b &\fR .br \fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR .br \fI% echo \-n foo > /dev/term/b\fR .PP .SH "返回值 (RETURN VALUES)" 此 程式 返回 如下的 錯誤碼: .TP 0 一切 正常. .TP \-1 不支援 此 操作 ( .I xxd \-r \-i 仍然 不行). .TP 1 解析 選項 錯誤. .TP 2 輸入 檔案 出錯. .TP 3 輸出 檔案 出錯. .TP 4,5 指定 的 偏移量 地址 不可 到達. .SH "參見 (SEE ALSO)" uuencode(1), uudecode(1), patch(1) .br .SH "警告 (WARNINGS)" 這個 工具 古怪的 念頭 是其 作者的 意思. 使用 這個 工具的 任何 結果 都由 自己 負責. 使用它, 探索它, 你 終會 成為 一個 高手. .br .SH "版本 (VERSION)" 此 手冊頁 為 1.7 版本的 xxd 而寫. .SH "作者 (AUTHOR)" .br (c) 1990-1997 by Juergen Weigert .br .LP Distribute freely and credit me, .br make money and share with me, .br lose money and don't ask me. .PP Tony Nugent .br 最先 開始 寫 本 手冊頁 .br Bram Moolenaar 做了一些小的改動, Juergen Weigert 完成了手冊頁的編寫。 .PP .SH "[中文版維護人]" .B 唐友 \ .SH "[中文版最新更新]" .BR 2002/1/22 .SH "[中國Linux論壇man手冊頁翻譯計劃]" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR