首页/系统/Linux 运维命令速查/zcat/zgrep/zless 直读压缩文件
文件与目录76 条

zcat/zgrep/zless 直读压缩文件

不解压直接查看与检索 .gz 日志:zcat 看、zgrep 搜、zless 翻页;处理归档日志不占额外磁盘。

Linux 运维命令速查系统更新于 2026-10-13

这三个命令是什么

它们是 gzip 的透明包装:zcat 等价于 gzip -dc,把解压结果写到标准输出;zgrep 是一个 shell 脚本,内部就是 gzip -dc 管道进 grep;zless 则把解压流交给 less。因为是流式解压,读归档日志不需要先解开一个 GB 级的文件,也不额外占磁盘。与「先 gunzip 再 grep」相比,好处是省磁盘也省等待:gunzip 会把整包完整落盘,还要等解压跑完才能看到第一行,流式方案几乎立刻就能看到结果,代价是每次检索都要重新解压一遍。同族工具覆盖 bzip2、xz、zstd 等格式,用法一一对应。

基本信息

适用平台Linux 通用(gzip 套件,zgrep 与 zless 本质是脚本)
命令语法zcat 文件 / zgrep [grep选项] 模式 文件 / zless 文件
等价写法zcat = gzip -dc;zgrep = zcat 管道 grep;zless = zcat 管道 less
同族工具bzcat/bzgrep、xzcat/xzgrep、zstdcat/zstdgrep
常见对象logrotate 产出的 .log.1.gz、.log.2.gz 等归档日志

典型使用场景

  • 查历史日志:报错今天才发现,但现场在几天前的归档里
  • 统计与聚合:zgrep -c 数次数,或接 awk 做条件统计
  • 核对归档完整性:zcat 报错说明压缩包在写入或传输时被截断
  • 翻页浏览:内容不多时用 zless,比先 gunzip 再 less 省事
  • 跨多个归档搜索:一次覆盖 .1.gz 到 .N.gz,不必逐个解开
  • 配合 logrotate 的轮转命名:按 .log.1.gz、.log.2.gz 的序号通配,不用关心解压后的临时文件该放哪

常用示例

常用示例
zcat access.log.2.gz | head                                    # 直接查看归档开头
zgrep -i error /var/log/nginx/access.log.*.gz                  # 跨多个归档搜索,忽略大小写
zgrep -c ' 500 ' access.log.*.gz | awk -F: '{s+=$2} END{print s}'   # 分文件计数后求和
zgrep -h 'ERROR' app.log.*.gz | sort | uniq -c | sort -rn      # 归类错误信息
zless older.log.gz                                              # 翻页浏览
zcat big.log.gz | awk '$9==502' | wc -l                        # 解压后交给 awk 做条件统计
gzip -t archive.log.4.gz && echo OK                            # 单独校验归档是否完整

按格式选工具

文件格式查看搜索
.gz(gzip)zcatzgrep
​.bz2(bzip2)bzcatbzgrep
.xz(xz / lzma)xzcatxzgrep
.zst(zstd)zstdcatzstdgrep
.zip(归档,非单一数据流)unzip -p 包 成员unzip -p 包 成员 管道 grep
这三个工具每次调用都会完整解压一遍:同一份 GB 级归档要在半小时内反复检索,先 gunzip -k 留一份未压缩副本反而更快(前提是磁盘放得下);只是偶尔查一两行,流式解压不占磁盘,更划算。
zcat 报 unexpected end of file 说明压缩包不完整:下载或传输被截断,也可能是写入时磁盘满了。脚本里要判退出码再决定是否把结果当真,单独判断完整性用 gzip -t。
不要用 cat 或 less 直接读 .gz,输出是乱码;先 file 看类型再选工具。GB 级归档建议先用 zgrep 缩小范围,zless 是边解压边渲染,从头一页页翻会很慢。另外 .tar.gz 的外层只是压缩,zcat 出来的仍是 tar 归档流;要列内容或取出单个文件,得走 tar -tzf 与 tar -xzf。

易错点

  • 用 cat 读压缩文件只会得到乱码,先跑 file 判断实际格式
  • GB 级归档先 zgrep 缩小范围再 zless,直接从第一页翻很慢
  • zgrep 遇到损坏文件会打印 gzip 报错但继续处理后面的文件,最终退出码反映的是 grep 是否命中;要判断完整性得单独用 gzip -t
  • zgrep 的路径通配符由 shell 展开,文件很多时注意命令行长度与排序,必要时配合 xargs 分批处理
  • gzip 只压单个文件,.tar.gz 是打包后再压缩:取其中某个文件要用 tar -tzf 与 tar -xzf,不能直接 zcat

数据来源与参考

  • man 1 zcat(gzip 手册)
  • man 1 zgrep

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌