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)还 差 。 对 于 一 些 高 度 冗 余 的 文 件 , compress 比 gzip 压 缩 得 更 好 。
[中 文 版 维 护 人 ]
Liu JingSong <js-liu [AT] 263.net>
[中 文 版 最 新 更 新 ]
2000/12/28
[中 国 Linux论 坛 man手 册 页 翻 译 计 划 ]
跋
本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh