Manpages

NAME

gzip, gunzip, zcat - 壓 縮 或 展 開 文 件

總 攬

gzip [ -acdfhlLnNrtvV19 ] [-S 後 綴 ] [ 文 件 名 ... ]
gunzip
[ -acfhlLnNrtvV ] [-S 後 綴 ] [ 文 件 名 ... ]
zcat
[ -fhLV ] [ 文 件 名 ... ]

描 述

Gzip 採 用 Lempel-Ziv 編 碼 算 法 (LZ77)壓 縮 給 定 文 件 的 大 小 。 在 可 能 的 情 況 下 , 每 個 文 件 被 具 有 擴 展 名 .gz, 的 文 件 所 替 換 , 同 時 保 留 原 屬 主 狀 態 , 存 取 和 修 改 時 間 (在 VMS系 統 下 缺 省 擴 展 名 爲 -gz 在 MSDOS、 OS/2 FAT, Windows NT FAT 和 Atari系 統 下 , 缺 省 擴 展 名 爲 z ) 如 果 未 指 定 文 件 名 , 或 者 指 定 了 一 個 名 爲 "-"的 文 件 名 , 則 從 標 準 輸 入 讀 取 數 據 , 壓 縮 的 結 果 輸 出 到 標 準 輸 出 。 Gzip 只 嘗 試 壓 縮 常 規 文 件 , 特 別 地 , 它 將 忽 略 符 號 連 接 。 如 果 壓 縮 後 的 文 件 名 對 於 所 在 的 文 件 系 統 來 說 太 長 , gzip 會 將 其 截 斷 。 Gzip 只 嘗 試 截 斷 文 件 名 中 大 於 3個 字 符 的 段 ( 每 個 段 由 點 分 隔 ) 。 如 果 文 件 名 只 由 較 小 的 段 組 成 , 最 長 的 段 將 被 截 斷 。 例 如 , 如 果 文 件 名 的 長 度 限 制 是 14個 字 符 , 文 件 gzip.msdos.exe 將 被 壓 縮 爲 gzi.msd.exe.gz。 在 沒 有 文 件 名 長 度 限 制 的 系 統 中 , 文 件 名 將 不 會 被 截 斷 。 缺 省 情 況 下 , gzip 將 原 始 文 件 名 和 時 間 信 息 保 存 在 壓 縮 後 的 文 件 中 。 當 採 用 -N 選 項 解 壓 縮 文 件 時 , 這 些 信 息 將 被 利 用 。 在 經 過 文 件 傳 輸 後 文 件 名 被 截 斷 及 時 間 信 息 未 被 保 留 的 情 況 下 , 這 些 信 息 將 將 用 於 恢 復 文 件 名 及 時 間 信 息 。 用 gzip -d 或 者 gunzip 以 及 zcat. 可 以 將 壓 縮 後 的 文 件 恢 復 到 原 始 的 形 式 。 如 果 保 留 在 壓 縮 文 件 中 的 原 始 文 件 名 不 適 合 於 當 前 的 文 件 系 統 , 將 根 據 原 文 件 名 新 建 一 個 合 法 的 文 件 名 。

gunzip 將 命 令 行 中 以 .gz, -gz, .z, -z, _z 或 .Z結 尾 並 具 有 正 確 標 誌 頭 的 文 件 解 壓 縮 , 並 以 去 掉 擴 展 名 的 解 壓 縮 文 件 替 換 原 文 件 。 gunzip 也 能 識 別 擴 展 名 爲 .tgz.taz 的 文 件 , 並 將 其 分 別 當 作 .tar.gz.tar.Z 的 縮 寫 。 在 壓 縮 時 , 如 果 採 用 .tar 擴 展 名 則 需 要 對 文 件 名 進 行 截 斷 處 理 時 , gzip 將 採 用 .tgz 作 爲 擴 展 名 。

gunzip 目 前 能 夠 解 壓 由 gzip, zip, compress, compress -H 以 及 pack 產 生 的 文 件 。 對 輸 入 格 式 的 檢 測 是 自 動 的 。 當 採 用 前 兩 種 格 式 時 , gunzip 檢 查 一 個 32位 的 CRC校 驗 碼 。 對 於 pack, gunzip 則 檢 查 壓 縮 前 的 數 據 長 度 。 標 準 的 compress 格 式 的 設 計 無 法 實 現 一 致 性 檢 查 。 但 有 時 gunzip 仍 然 能 檢 測 到 壞 的 .Z文 件 。 如 果 你 在 解 壓 一 個 .Z文 件 時 出 現 錯 誤 , 不 要 簡 單 地 因 爲 標 準 的 uncompress 沒 有 報 錯 就 認 定 .Z文 件 是 正 確 的 。 這 通 常 意 味 着 標 準 的 uncompress 沒 有 檢 查 它 的 輸 入 數 據 , 而 盲 目 地 產 生 了 錯 誤 的 輸 出 。 SCO的 compress -H格 式 (lzh壓 縮 方 法 ) 不 包 含 CRC校 驗 碼 , 但 也 允 許 一 些 一 致 性 檢 查 。 由 zip 生 成 的 文 件 , 如 果 其 內 容 只 有 一 個 文 件 並 且 是 以 ’deflation’方 式 壓 縮 的 , 則 可 由 gzip解 壓 。 這 一 特 性 只 是 爲 了 方 便 將 tar.zip 格 式 的 文 件 轉 換 爲 tar.gz格 式 而 加 入 的 。 要 解 壓 含 有 多 個 文 件 的 zip文 件 , 請 用 unzip.

zcat 的 功 能 與 gunzip -c. 相 同 。 (在 一 些 系 統 中 , zcat 可 能 被 安 裝 成 gzcat 以 保 留 compress 與 zcat的 原 有 連 接 。 ) zcat 將 命 令 行 中 列 出 的 文 件 或 由 標 準 輸 入 輸 入 的 數 據 解 壓 , 解 壓 後 的 數 據 寫 到 標 準 輸 出 。 zcat 解 壓 具 有 正 確 標 誌 頭 的 文 件 , 而 不 管 其 是 否 帶 有 .gz 後 綴 。

Gzip 採 用 zip 和 PKZIP 中 所 採 用 的 Lempel-Ziv算 法 。 得 到 的 壓 縮 比 依 賴 於 輸 入 數 據 的 大 小 以 及 公 用 子 串 的 分 佈 。 例 如 源 程 序 和 英 文 文 檔 能 夠 壓 縮 60-70%。 壓 縮 比 通 常 比 LZW( compress 採 用 的 算 法 )、 Huffman編 碼 ( pack 所 採 用 的 算 法 ) 、 以 及 自 適 應 Huffman編 碼 ( compact) 等 方 法 要 好 得 多 。 即 使 壓 縮 後 的 文 件 略 大 於 原 文 件 , 壓 縮 也 照 樣 進 行 。 最 壞 的 情 況 下 , 多 出 的 數 據 包 括 gzip文 件 頭 中 的 若 干 個 字 節 , 加 上 每 塊 32K的 5個 字 節 , 或 者 , 對 於 大 文 件 來 說 0.015% 的 放 大 率 。 注 意 實 際 佔 用 的 硬 盤 塊 數 目 幾 乎 從 不 增 加 。 gzip 在 壓 縮 和 解 壓 縮 時 保 留 原 文 件 的 屬 主 和 時 間 信 息 。

選 項

-a --ascii

Ascii文 本 模 式 : 按 本 地 習 慣 轉 換 行 結 束 符 。 該 選 項 僅 在 一 些 非 Unix 系 統 上 有 效 。 對 於 MSDOS, 在 壓 縮 時 CR LF(譯 註 : 即 回 車 和 換 行 符 )被 轉 換 爲 LF, 在 解 壓 時 LF被 轉 換 爲 CR LF。

-c --stdout --to-stdout 將 結 果 寫 到 標 準 輸 出 ; 原 文 件 保 持 不 變 。 如 果 有 多 個 輸 入 文 件 , 輸 出 將 由 一 系 列 獨 立 的 壓 縮 文 件 組 成 。 如 果 想 得 到 較 好 的 壓 縮 率 , 在 壓 縮 前 應 將 多 個 文 件 連 在 一 起 。
-d --decompress --uncompress
解 壓 縮 。
-f --force
強 制 壓 縮 和 解 壓 縮 , 即 使 指 定 文 件 具 有 多 重 連 接 , 或 相 應 文 件 已 經 存 在 , 或 壓 縮 數 據 來 自 或 寫 往 一 個 終 端 。 如 果 輸 入 數 據 是 gzip 無 法 識 別 的 格 式 , 同 時 在 命 令 行 中 也 給 出 了 --stdout選 項 , gzip將 把 輸 入 數 據 拷 貝 至 標 準 輸 出 而 不 做 任 何 改 動 , 就 象 cat所 做 的 一 樣 。 如 果 未 給 出 -f 選 項 , 並 且 未 在 後 臺 運 行 , gzip 會 提 示 用 戶 以 確 認 是 否 覆 蓋 一 個 已 存 在 的 文 件 。
-h --help
顯 示 幫 助 信 息 然 後 退 出 。
-l --list
列 出 每 個 壓 縮 文 件 的 如 下 項 目 :

compressed size: 壓 縮 文 件 的 長 度
uncompressed size: 壓 縮 前 文 件 的 長 度
ratio: 壓 縮 率 (如 果 未 知 則 爲 0.0%)
uncompressed_name: 壓 縮 前 的 文 件 名 對 於 非 gzip格 式 的 文 件 , 壓 縮 前 文 件 長 度 顯 示 爲 -1, 例 如 由 compress壓 縮 的 .Z文 件 。 可 用 下 列 命 令 得 到 這 種 文 件 壓 縮 前 的 長 度 :

zcat file.Z | wc -c 如 果 同 時 指 定 了 --verbose選 項 , 下 列 項 目 也 被 列 出 :

method: 壓 縮 方 式
crc: 未 壓 縮 數 據 的 32位 CRC校 驗 碼
date & time: 壓 縮 前 文 件 的 時 間 信 息 目 前 支 持 的 壓 縮 方 式 有 deflate、 compress、 lzh(SCO下 的 compress -H)以 及 pack等 方 式 。 對 於 非 gzip格 式 的 文 件 , crc校 驗 碼 顯 示 爲 ffffffff。 若 指 定 了 --name選 項 , 如 果 有 的 話 , 壓 縮 前 文 件 名 , 日 期 以 及 時 間 是 保 存 在 壓 縮 文 件 中 的 內 容 。 若 指 定 了 --verbose選 項 , 還 將 列 出 所 有 文 件 的 長 度 總 和 , 除 非 某 些 文 件 的 長 度 未 知 。 若 指 定 --quiet選 項 , 將 不 顯 示 標 題 和 合 計 兩 行 內 容 。

-L --license 顯 示 gzip 的 許 可 證 信 息 然 後 退 出 。
-n --no-name
在 壓 縮 時 , 缺 省 不 保 留 原 始 文 件 名 和 時 間 信 息 。 (如 果 必 須 對 文 件 名 作 截 斷 處 理 , 則 原 始 文 件 名 總 是 被 保 存 。 ) 在 解 壓 縮 時 , 即 使 有 也 不 恢 復 原 始 文 件 名 ( 僅 將 壓 縮 文 件 名 中 的 gzip 後 綴 去 掉 ) 和 時 間 信 息 ( 拷 貝 壓 縮 文 件 中 相 應 信 息 ) 。 該 選 項 是 壓 縮 時 的 缺 省 選 項 。
-N --name
在 壓 縮 時 總 是 保 存 原 始 文 件 名 和 時 間 信 息 ; 該 選 項 爲 缺 省 選 項 。 在 解 壓 縮 時 , 如 果 存 在 原 始 文 件 名 和 時 間 信 息 則 恢 復 之 。 該 選 項 可 用 於 對 文 件 名 長 度 有 限 制 的 系 統 , 以 及 經 過 文 件 傳 輸 後 丟 失 時 間 信 息 的 情 況 。
-q --quiet
壓 制 所 有 警 告 信 息 。
-r --recursive
遞 歸 地 訪 問 目 錄 結 構 。 如 果 命 令 行 中 有 目 錄 名 , gzip 將 進 入 目 錄 並 壓 縮 所 有 找 到 的 文 件 ( 如 果 執 行 的 命 令 是 gunzip 則 對 其 解 壓 縮 ) 。
-S .suf --suffix .suf
採 用 .suf後 綴 取 代 .gz後 綴 。 可 以 指 定 任 何 後 綴 , 但 應 避 免 使 用 除 了 .z和 .gz以 外 的 其 它 後 綴 , 以 免 文 件 傳 輸 到 其 它 系 統 時 發 生 混 淆 。 一 個 空 後 綴 將 迫 使 gunzip 解 壓 縮 所 有 文 件 而 不 管 它 具 有 什 麼 樣 的 後 綴 , 例 如 :

gunzip -S "" * (在 MSDOS下 用 *.*替 換 *) 以 前 版 本 的 gzip採 用 .z後 綴 。 爲 了 避 免 與 pack(1). 衝 突 , 後 來 作 了 改 動 。

-t --test 測 試 。 檢 查 壓 縮 文 件 的 完 整 性 。
-v --verbose
詳 盡 模 式 。 顯 示 每 個 壓 縮 或 解 壓 縮 文 件 的 名 字 和 壓 縮 率 。
-V --version
版 本 。 顯 示 版 本 號 和 編 譯 選 項 後 退 出 。 Version. Display the version number and compilation options then quit.
-# --fast --best
用 指 定 的 數 字 # 調 整 壓 縮 速 度 , 其 中 -1--fast 對 應 最 快 壓 縮 方 式 ( 壓 縮 率 較 低 ) , -9--best 對 應 最 慢 壓 縮 方 式 ( 壓 縮 率 最 佳 ) 。 缺 省 的 壓 縮 級 別 爲 -6 ( 也 就 是 說 , 以 速 度 爲 代 價 偏 向 於 高 壓 縮 率 ) 。

高 級 用 法

多 個 被 壓 縮 的 文 件 可 以 連 在 一 起 。 在 這 種 情 況 下 , gunzip 能 一 次 解 壓 所 有 文 件 。 例 如 :

gzip -c file1 > foo.gz
gzip -c file2 >> foo.gz 然 後
gunzip -c foo 上 面 的 命 令 等 價 於

cat file1 file2 如 果 .gz文 件 中 的 某 一 個 文 件 損 壞 , 其 他 文 件 仍 可 以 恢 復 ( 如 果 損 壞 的 文 件 被 刪 除 的 話 ) 。 而 且 一 次 壓 縮 所 有 文 件 能 得 到 較 好 的 壓 縮 率 :

cat file1 file2 | gzip > foo.gz 上 面 用 法 的 壓 縮 率 比 下 面 用 法 的 高 :

gzip -c file1 file2 > foo.gz 如 果 想 重 新 壓 縮 連 接 起 來 的 文 件 以 得 到 較 高 的 壓 縮 率 , 可 以 用 下 面 的 命 令 :

gzip -cd old.gz | gzip > new.gz 如 果 一 個 壓 縮 文 件 由 多 個 文 件 組 成 , --list選 項 只 能 列 出 最 後 一 個 成 員 的 解 壓 後 文 件 長 度 和 CRC校 驗 碼 。 如 果 需 要 所 有 成 員 的 解 壓 後 文 件 長 度 , 可 用 如 下 命 令 :

gzip -cd file.gz | wc -c 如 果 想 要 產 生 一 個 具 有 多 個 成 員 的 存 檔 文 件 , 以 便 將 來 能 夠 獨 立 地 取 出 其 中 的 成 員 , 可 以 用 tar或 zip這 樣 的 歸 檔 軟 件 。 GNU tar支 持 -z選 項 , 可 直 接 調 用 gzip。 gzip設 計 爲 tar的 補 充 , 而 非 它 的 取 代 物 。

環 境 變 量

環 境 變 量 GZIP 能 夠 控 制 一 系 列 gzip 的 缺 省 選 項 。 這 些 選 項 被 首 先 解 釋 , 並 且 能 被 命 令 行 參 數 中 的 直 接 定 義 覆 蓋 。 例 如 : 在 sh下 : GZIP="-8v --name"; export GZIP 在 csh下 : setenv GZIP "-8v --name" 在 MSDOS下 : set GZIP=-8v --name 在 Vax/VMS系 統 中 , 爲 了 避 免 與 調 用 該 程 序 的 符 號 設 置 衝 突 , 該 環 境 變 量 名 爲 GZIP_OPT。

另 見

znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), unzip(1), compress(1), pack(1), compact(1)

診 斷

正 常 的 退 出 狀 態 爲 0; 如 果 出 現 錯 誤 , 退 出 狀 態 爲 1。 如 果 出 現 警 告 信 息 , 退 出 狀 態 爲 2。

Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] 在 命 令 行 中 出 現 非 法 的 選 項 。
file
: not in gzip format 指 定 給 gunzip 的 文 件 沒 有 被 壓 縮 。
file:
Corrupt input. Use zcat to recover some data. 壓 縮 文 件 已 損 壞 。 在 損 壞 點 以 前 的 數 據 可 以 用 下 列 命 令 恢 復 。

zcat file > recover

file: compressed with xx bits, can only handle yy bits 文 件 File 是 由 一 個 比 在 當 前 機 器 上 能 處 理 更 多 的 程 序 壓 縮 的 ( 採 用 LZW算 法 ) 。 用 gzip重 新 壓 縮 該 文 件 , 將 得 到 較 好 的 壓 縮 率 , 並 且 佔 用 的 內 存 較 少 。
file
: already has .gz suffix -- no change

gzip認 爲 該 程 序 已 經 壓 縮 。 改 變 文 件 名 再 試 。

file already exists; do you wish to overwrite (y or n)? 如 果 你 想 覆 蓋 該 文 件 回 答 "y", 如 果 不 是 回 答 "n"。

gunzip: corrupt input 探 測 到 一 個 SIGSEGV非 法 操 作 , 這 通 常 意 味 着 輸 入 文 件 已 經 損 壞 。
xx.x%
由 於 壓 縮 而 減 少 的 數 據 量 相 對 於 輸 入 數 據 的 百 分 比 。 ( 僅 對 應 於 -v-l 選 項 。 )
-- not a regular file or directory: ignored 如 果 輸 入 文 件 不 是 常 規 文 件 或 目 錄 , ( 例 如 符 號 連 接 , socket文 件 , FIFO文 件 , 設 備 文 件 ) , 該 文 件 將 保 持 不 變 。
-- has xx other links: unchanged 該 文 件 有 連 接 , 將 保 持 不 變 。 更 多 信 息 參 見 ln(1). 採 用 -f 強 制 壓 縮 多 重 連 接 文 件 。

警 告

在 向 磁 帶 寫 壓 縮 數 據 時 , 通 常 需 要 在 數 據 尾 部 充 零 以 使 數 據 總 長 度 爲 磁 帶 數 據 塊 長 度 的 整 數 倍 。 當 用 gunzip 對 這 樣 的 數 據 解 壓 縮 時 , gunzip 能 檢 測 到 尾 部 的 無 用 數 據 , 在 缺 省 情 況 下 將 發 出 一 個 警 告 信 息 。 必 須 採 用 --quiet 選 項 才 能 壓 制 這 一 警 告 信 息 。 該 選 項 可 以 設 在 GZIP 環 境 變 量 中 , 例 如 : 在 sh下 : GZIP="-q" tar -xfz --block-compress /dev/rst0 在 csh下 : (setenv GZIP -q; tar -xfz --block-compr /dev/rst0 在 上 面 的 例 子 中 , gzip被 採 用 了 -z選 項 的 GNU tar調 用 。 在 磁 帶 上 讀 寫 壓 縮 數 據 時 , 應 確 保 採 用 同 樣 的 數 據 塊 長 度 ( tar的 -b 選 項 ) 。 ( 本 例 假 定 使 用 的 是 GNU版 本 的 tar。 )

缺 陷

如 果 數 據 長 度 超 過 2GB, 採 用 --list選 項 時 報 告 的 文 件 長 度 不 正 確 。 如 果 壓 縮 文 件 位 於 不 能 定 位 的 存 儲 介 質 上 , 採 用 --list選 項 時 報 告 的 文 件 長 度 爲 -1, crc 校 驗 碼 爲 ffffffff。 在 極 少 數 情 況 下 , --best選 項 得 到 的 壓 縮 率 比 缺 省 情 況 (-6)還 差 。 對 於 一 些 高 度 冗 餘 的 文 件 , compressgzip 壓 縮 得 更 好 。

[中 文 版 維 護 人 ]

Liu JingSong <js-liu [AT] 263.net>

[中 文 版 最 新 更 新 ]

2000/12/28

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

http://cmpp.linuxforum.net

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