服务器上拉下来一个 access.log.gz,几百兆,想直接看里面内容。很多人第一反应是 tar -zxvf,结果报 not in gzip format,因为 .gz 只是 gzip 压缩的单个文件,不是 tar 打包。

.gz 和 .tar.gz 别搞混

.gz 是 gzip 单独压一个文件,解出来还是那个文件本身。.tar.gz 是先打包再压缩,里面可以带目录结构。前者用 gunzip,后者才用 tar。

保留原文件还是删掉

  • gunzip access.log.gz:解压后原压缩包会被删掉。
  • gzip -dk access.log.gz:-k 表示 keep,压缩包留着。
  • gzip -dc access.log.gz > access.log:指定输出文件名,原包不动。

只是看一眼就别落盘

日志太大解压占磁盘,直接管道出去更省事。zcat access.log.gz | head -n 100 看开头,zcat 配合 grep 过滤关键字。zless 能像 less 一样翻页,但遇到被截断的文件会报错,先确认下载完整。

Windows 上怎么办

没有 tar 就装个 7-Zip,右键菜单里有「解压到当前文件夹」。命令行走 7z x file.gz。PowerShell 自带的 Expand-Archive 只认 zip,.gz 得靠第三方工具。用 WSL 的话直接在子系统里 gunzip 更省事。

批量解压一行搞定

同一个目录里躺着几十个 .gz,一个个敲太慢,for f in *.gz; do gzip -d $f; done 一句解决。想只解压某类文件再精修一下通配符就行。

顺带说一句,gunzip 报 unexpected end of file,多半是下载中断,先 md5 对一下再重下。日常运维里这条命令出现频率比想象中高,记熟没坏处。