看到这个问题,我的第一反应是:这位朋友大概率是从 Windows 转过来的。因为只有习惯了 ZIP 和 7Z 的人,才会觉得 tar.gz 这玩意儿“奇怪”。但如果你在 Linux 世界待久了,你会发现 tar.gz 不仅不奇怪,反而是最合理的选择。
为什么?听我慢慢说。

咱先来看看 tar.gz 到底是个什么东西。很多人以为它是一种压缩格式,其实不完全对。准确地说,tar.gz 是“打包”加“压缩”的组合——tar 负责把多个文件打包成一个文件,gz(gzip)负责压缩。这种“两步走”的设计,在 Unix/Linux 的哲学里叫做 "do one thing and do it well"。
一个工具只做一件事,但把这件事做到极致。
这就是 Linux 和 Windows 在设计思路上的根本区别。Windows 喜欢“大而全”,一个软件恨不得把所有功能都塞进去。Linux 喜欢“小而美”,每个工具专注自己的领域,需要复杂功能时就把多个工具组合起来。tar.gz 就是这种哲学的典型体现。
那为什么不用 ZIP 呢?
ZIP 在 Windows 上确实很流行,双击就能解压,方便得很。但在 Linux 上,ZIP 有几个致命的问题。第一,它不保留 Unix 文件系统的权限信息。你在 Linux 上用 ZIP 打包一个文件,解压后文件的所有者、权限、时间戳这些信息可能就丢了。这在服务器环境下是不能接受的。
我记得刚做嵌入式 Linux 那会儿,有次同事从 Windows 上传了个 ZIP 包给我,让我部署到开发板上。我解压后发现所有脚本的执行权限都没了,还得手动 chmod +x 一个个加回来。那个麻烦啊……从那以后我就跟他说,传文件一律用 tar.gz,别给我整那些花里胡哨的。
第二个问题是兼容性。Linux 系统默认都带 tar 和 gzip,不需要安装任何额外软件。但 ZIP 呢?虽然现在大部分发行版也预装了 unzip,但在一些精简的嵌入式系统或者服务器上,你不一定能找到它。而且 ZIP 的压缩率也不如 gzip,更别提后来的 bzip2 和 xz 了。
那 7Z 呢?压缩率确实高,但问题更大。
7Z 是个相对较新的格式,Linux 上要用它得先装 p7zip 这个包。而且 7Z 的压缩和解压速度都比较慢,对于服务器上动辄几个 GB 的日志文件或者代码仓库来说,时间成本太高了。更重要的是,7Z 在 Linux 生态里没有形成习惯——大家都用 tar.gz,你突然发个 7Z 包过来,别人还得专门去装工具,这不是给人添麻烦吗?
这就涉及到一个更深层的问题:生态和习惯。
在 Linux 世界里,tar.gz 已经是事实标准了。你去 GitHub 上下载源码,基本都是 tar.gz 或者 tar.xz。你去下载软件包,也是 tar.gz。所有的文档、教程、脚本都是围绕 tar 命令写的。这种“约定俗成”的力量是非常强大的——不是说其他格式不好,而是大家都在用这个,你也跟着用,沟通成本最低。
而且 tar 命令的灵活性是 ZIP 和 7Z 比不了的。
你可以用 tar -czf 打包并用 gzip 压缩,也可以用 tar -cjf 换成 bzip2 压缩,或者 tar -cJf 用 xz 压缩。你还可以在打包的时候排除某些文件、只打包某些目录、甚至通过管道直接传输到远程服务器。这种组合能力,是那些“一体化”工具做不到的。
我自己在做嵌入式开发的时候,经常要把编译好的文件系统打包传到目标板上。这时候我会用这样的命令:
tar -czf - rootfs/ | ssh user@target "cd /tmp && tar -xzf -"
一行命令,本地打包、通过 SSH 传输、远程解压,一气呵成。你要是用 ZIP 或者 7Z,得分好几步,还得考虑中间文件放哪里、传输完了要不要删除……麻烦得要死。
当然,tar.gz 也不是完美的。
它的压缩率确实不如 7Z,解压的时候也得记住那些参数——-xzf、-xjf、-xJf,新手经常搞混。但这些问题在 Linux 老用户眼里根本不是问题,因为用习惯了,手指头都有肌肉记忆了。
而且现在很多发行版已经做了优化,tar -xf 可以自动识别压缩格式,你不用管它是 gz 还是 bz2 还是 xz,直接解压就行。这种“向后兼容”的设计,也是 Linux 社区一直在努力的方向。
说到底,为什么 Linux 要用 tar.gz 而不是 ZIP 或 7Z?
因为它符合 Unix 哲学、保留文件系统信息、兼容性好、生态成熟、灵活性强。这些优势加在一起,就形成了一个“路径依赖”——大家都在用,所以你也得用,然后越来越多的人用,最后就成了标准。
这不是技术问题,是生态问题。
就像你问“为什么 Windows 要用 EXE 而不是 ELF?”一样,不是哪个格式更先进,而是整个生态都围绕它建立起来了。你要是在 Linux 上推广 ZIP,就得说服所有的开发者、所有的项目、所有的文档都改用 ZIP,这成本得有多高?
所以下次再有人问你“为什么 Linux 不用 ZIP”,你就告诉他:不是不能用,是没必要用。tar.gz 已经够好了,为什么要换?
如果你也对这类 Linux 压缩格式、生态话题感兴趣,欢迎来 云栈社区 和更多开发者一起交流讨论。