.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