Linux压缩包我们常见的是.tar.gz,为什么需要这两个后缀?
我们用一个特别容易理解的比喻来说清楚这件事。
第一步:理解“打包”和“压缩”是两件完全不同的事
想象你要搬很多零碎的东西:
- 衣服、书、充电线、袜子、杯子……一大堆。
- 直接用手拿着走,一次拿不了几样,还容易掉。
打包(tar做的事):
- 你找来一个大纸箱,将所有东西都扔进去,然后用胶带封好。
- 结果:所有东西变成一个整体(一个箱子),拿起来方便多了。
- 但是,箱子里该占多少空间还是占多少空间,衣服没变薄,杯子没变小。体积没减少。
压缩(gzip做的事):
- 你将箱子放进一个真空压缩袋,用气泵将里面的空气抽掉。
- 结果:体积变小了,箱子瘪了,节省地方。
- 但是,压缩袋只能处理“一个箱子”。如果一开始你手里捏着十几个零碎物品(没打包),压缩袋根本抽不了——它没法将分散的袜子、充电线直接压成一个整体。
第二步:为什么电脑上不能跳过“打包”直接压缩多个文件?
电脑里的压缩软件(例如gzip)设计得很“笨”:
- gzip 天生只能对一个文件进行压缩。
- 如果给你 1000 个零散的文件,gzip 不知道该怎么将它们压成一个文件。它会说:“你给我一个文件,我才能压。”
而 tar 相反:
- tar 的任务就是将 1000 个文件“粘”成唯一一个大文件(.tar 文件),不管它有多大,不压缩,就是一个合并的箱子。
所以合理的工作流就是:
- 先用 tar 将很多文件打包成一个
.tar箱子。 - 再用 gzip 将这个
.tar箱子压扁,变成.tar.gz。
第三步:两个后缀就是为了将“干的活”说清楚
.tar告诉你:这个文件是一个“大箱子”,里面装了好几个原始文件和文件夹,你可以用tar命令打开。.gz告诉你:这个箱子被 gzip 压缩过,需要先用 gunzip 解压,才能看到里面的 tar 包。
加在一起 .tar.gz 就是:
“这是一个经过压缩的打包文件。你要先解压(.gz),再解开打包(.tar),才能得到原始的那些文件。”
第四步:如果只用一种后缀会怎样?
有人图省事,将 .tar.gz 改叫 .tgz(缩写),这在 Linux 里能用。
但如果你自作主张叫它 .zip 或者直接叫 .gz,就会产生混乱:
- 叫
.gz:别人用解压软件打开后,得到的是一个.tar文件,还要再处理一次,很麻烦。 - 叫
.zip:别人用 zip 工具打不开,因为内部格式不一样,会报错。
两个后缀就像包装上的标签:
“外包装是真空压缩袋(.gz),里面是一个大纸箱(.tar),纸箱里才是你的东西。”
这样任何懂行的人一看就知道该怎么处理它。
第五步:其他类似后缀也是一样的逻辑
.tar.bz2:tar 打包 + bzip2 压缩(另一种压得更紧但慢的方式).tar.xz:tar 打包 + xz 压缩(压得更狠,常用).tar.zst:tar 打包 + zstd 压缩(最新的又快又好)
都是两步操作,两个后缀。
将多个文件先“扎成一捆”(.tar),再将这捆东西“压扁省地方”(.gz)。两个步骤,两种工具,所以名字上就清清楚楚挂两个后缀。
声明:来自bisal的个人杂货铺,仅代表创作者观点。链接:https://eyangzhen.com/8114.html