tar 不是压缩工具:一篇讲透 Linux 归档与压缩的设计哲学

这篇是搬运整理的文章(原作者见文末)。tar 我用了没有十年也有八年,但「tar 本身不压缩」这件事确实一直没细想过,这篇把归档和压缩的关系讲得又全又清楚,整理一份存档。 你敲了十年 tar -czf,可能从没意识到一个事实:tar 本身一个字节都不压缩。 tar 不是压缩工具——它只负责把一堆文件"归档"成一条字节流,压缩只是顺手套上的外衣。本文以"一条流从生成到还原"为主线,从查看、打包、解压三件日常事,讲到流式传输、增量备份、可复现归档等工程用法,带你重新理解这个最熟悉却最被误解的 Linux 命令。 一、先看懂 tar 在干什么 在敲任何命令之前,先建立一个能贯穿全文的认知。 1. tar 是"归档器",压缩只是外挂 tar 的全称是 tape archive(磁带归档)。它只干一件事——把一堆文件和目录"拼接"成一条连续的字节流(一个 .tar 文件)。真正的压缩,是 -z(gzip)、-J(xz)、--zstd(zstd)这些参数顺手调用的外部压缩程序干的。 把这句话刻进脑子,后面一切都顺了: tar 干的事,就是把一组文件变成"一条流",再把这条流安全地还原回去。压缩,只是给这条流套的一件"外衣"——可有可无,可以随时换。 2. 一张地图:用 tar 无非在回答五个问题 既然 tar 的全部工作都围绕"一条流",那么你这辈子敲的每一条 tar 命令,本质都在回答下面五个问题之一。这五个问题,就是本文的主线: 往流里装什么?(选哪些文件、要不要权限属性、排除什么) 怎么把流造出来?(打包) 怎么不拆开就读这条流?(查看) 怎么让流动起来、长期存活?(传输、备份) 怎么把流拆开、并且信得过它?(解压、校验、安全) 而"压缩“这件外衣,横跨上面每一站。下面我们就从最日常的操作,一路走到工程级用法。 3. 先拿到钥匙:读懂所有 tar 命令的骨架 动手之前先记住这个骨架,之后任何 tar 命令你都能一眼拆解、也不会写错: 动作 + 参数 + 包名 + 源/目的地路径 动作:-c(Create 造包)/-x(eXtract 拆包)/-t(lisT 查看),三选一,互斥。 参数:要不要压缩(-z/-J/--zstd)、详细输出(-v)等。 包名:永远跟在 -f 后面。 源/目的地:打包时是源目录,解包时是目标目录(-C 指定)。 这里有一个最容易踩、却最实用的顺序规则:包名永远紧跟 -f,并且排在源/目标路径之前——不能调换。 因为 -f 的"参数"就是包名,所以无论造包还是拆包,都是先写包名、再写源目录或目标目录: ...

June 20, 2026 · 5 min · 张诚