Linux常见压缩格式Tar、Zip和Gz格式之不同

系统 Linux
Linux 中大家在下载文件时常见的压缩文件有 .tar、.zip 或 .gz 等扩展名,大多数用户都已经见怪不怪了。那 Linux 中为什么要搞出这么多种压缩格式,Tar、Zip 和 Gz 之间到底有什么区别与不同呢?本文系统极客就为大家一一道来。

Linux 中大家在下载文件时常见的压缩文件有 .tar、.zip 或 .gz 等扩展名,大多数用户都已经见怪不怪了。那 Linux 中为什么要搞出这么多种压缩格式,Tar、Zip 和 Gz 之间到底有什么区别与不同呢?本文系统极客就为大家一一道来。

Tar、Zip和Gz格式的不同

Tar、Zip 和 Gz 之间的不同用最为简洁的描述来说可归纳为:

  • tar 未压缩的归档文件
  • zip (通常)压缩归档文件
  • gz 使用gzip压缩的文件(归档或不归档)

存档文件的历史

与 Unix 和类 Unix 系统一样,故事开始于很久之前的七十年代。1979 年 1 月的一个清晨,Tar 实用程序***作为 Unix V7 的一部分正式面世。Tar 程序当时主要被设计为往磁带上批量高效写入文件的一种方式。现在,虽然现在大多数 Linux 用户都已经不知道磁带驱动器是什么鬼了,但 tarballs(tar 的昵称)仍被常用于将多个文件甚至整个目录树打包到单一文件当中。

需要 Linux/Unix 用户注意的是,普通的 tar 格式文档只进行归档操作而不进行压缩。换句话说就是,如果你 tar 100 个 50kb 的文件得到的 tar 归档文件大小应该为 5000kb 左右。

使用 Tar 进行文件归档的唯一好处就是减少某种粒度磁盘空间的分配。(例如在簇大小为 4kb 的磁盘上 1 字节的文件也要占用 4kb 磁盘空间,若有 1000 个 1 字节的文件分散在此磁盘上的话,则会占用 4MB 大小,而使用 Tar 归档之后则只占用 1MB 左右大小。)

值得一提的是,tar 并非 Linux/Unix 中创建归档文件的唯一方式。程序员朋友应该知道 ar,它大多情况下主要用于创建静态库,实际它也是可用来创建其它种类归档的,例如 Debian 系统中使用的 .deb 包文件就是 ar 存档。而 macOS 的 mpkg 包是使用 gzip 压缩的 cpio 档。不过 ar 和 cpio 用起来不像 Tar 这样友好、简单,所以 tar 的受欢迎程度更高,普及更广。[[183056]]

[[183057]]

虽然归档是种不错的选择,但随着时间的推移和个人 PC 时代的到来,人们意识到可通过压缩数据的方式来大量节省存储成本。所以 10 年后随 MS-DOS 出现的 zip 文档便是支持压缩的归档格式,zip 最常见的压缩方式是采用 LZ77 算法实现的 deflate。由于它由 PKWARE 商业开发,所以 zip 格式也受专利保护多年。因此,为不侵犯到 PKWARE 的专利,同样采用 LZ77 算法的 gzip 格式被推出并广泛使用。

Unix 的哲学就是把某事做到***,所以 gzip 只被设计为压缩文件。因此,为了创建压缩归档,必需先使用 tar 创建归档,之后再对归档文件进行压缩,因此才有了 .tar.gz 文件(为遵循 8.3 MS-DOS 文件名称限制,又被简称为.tgz)。

随着技术的不断发展,具有更高压缩比的压缩算法也一一被实现,例如:在 bzip2 中实现的 Burrows-Wheeler 算法(.tar.bz2 存档)和 LZMA 算法实现的 .xz 存档。

现在,用户已经可以在 Linux 和 Windows 中自由使用任何归档文件格式。由于 zip 格式已经被 Windows 操作系统原生支持,因此这种格式特别适合跨平台环境。

Tar、Zip和Gz格式效率测试

下面我们所讨论的是 Tar、Zip 和 Gz 文件格式压缩、归档后的磁盘空间效率而不是时间效率,如下是对 100MB 流行格式文件的测试对比:

由于 jpg、mp3、mp4 已经是压缩封装的文件,所以再打包压缩的效果一定不会太好。

责任编辑:武晓燕 来源: 系统极客
相关推荐

2023-10-18 08:28:17

Linux压缩

2009-12-25 17:55:05

Linux tar

2023-11-01 07:01:35

2010-01-04 09:27:31

Linux压缩解压缩命令详解

2023-06-01 09:38:27

微软WinRARWindows 11

2012-03-26 10:45:34

CSS

2023-05-24 07:22:51

微软Windows 11

2012-03-27 09:42:57

JavaScriptCSS

2010-08-03 09:53:50

Linux NFS

2009-12-15 14:08:14

Linux系统备份ta

2010-03-04 13:21:32

linux压缩命令

2010-02-03 10:12:53

Python模块

2009-10-21 11:16:23

Linux压缩打包方法

2012-05-10 09:43:28

2023-12-21 07:30:36

PythonZipfileTarfile

2021-10-03 22:06:43

LinuxTar软件

2011-09-15 13:42:18

Linuxsquashfs

2017-06-16 09:58:34

Hive格式压缩算法

2009-09-15 09:36:35

linuxTar命令常用参数

2010-09-02 15:42:37

echo命令
点赞
收藏

51CTO技术栈公众号