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