Manpages

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 +seekxxd -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 [AT] informatik.de>

Distribute freely and credit me,
make money and share with me,
lose money and don’t ask me.

Tony Nugent
<tony [AT] sctnugen.au> <T.Nugent [AT] sct.au> 最 先 開 始 寫 本 手 冊 頁
Bram Moolenaar 做 了 一 些 小 的 改 動 , Juergen Weigert 完 成 了 手 冊 頁 的 編 寫 。

[中 文 版 維 護 人 ]

唐 友 <tony_ty [AT] 263.net>

[中 文 版 最 新 更 新 ]

2002/1/22

[中 國 Linux論 壇 man手 冊 頁 翻 譯 計 劃 ]

http://cmpp.linuxforum.net

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh