Linux常见压缩格式Tar、Zip和Gz的区别
像Unix和类Unix系统一样,这个故事开始于很久以前的20世纪70年代。1979年6月的凌晨,Tar实用程序第一次作为Unix V7的一部分正式推出。当时,Tar程序主要是作为一种将文件批量、高效地写入磁带的方式而设计的。现在,虽然大多数Linux用户都不知道什么是磁带机,但是tarballs(tar的昵称)仍然被普遍用于将多个文件甚至整个目录树打包到一个文件中。
Linux/Unix用户需要注意的是,普通的tar格式文档只是存档而不是压缩。换句话说,如果您对100个50kb的文件进行tar,那么tar归档文件的大小应该是5000kb左右。
使用Tar进行文件归档的惟一好处是在一定的粒度上减少了磁盘空间的分配。(例如,一个1字节的文件在一个簇大小为4kb的磁盘上也会占用4kb的磁盘空间。如果这个磁盘上分散着1000个1字节的文件,会占用4MB,但是用Tar存档后,只占用1MB左右。)
值得一提的是,tar并不是在Linux/Unix中创建归档文件的唯一方式。程序员朋友应该都知道ar,大部分情况下主要用来创建静态库。事实上,它也可以用来创建其他类型的档案。例如,在。Debian系统使用的deb包文件是ar存档。macOS的mpkg包是gzip压缩的cpio文件。但是ar和cpio使用起来没有tar那么友好和简单,所以Tar更受欢迎和欢迎。
虽然存档是一个很好的选择,但是随着时间的推移和个人PC时代的到来,人们意识到通过压缩数据可以节省大量的存储成本。所以10年后用MS-DOS出现的zip文档是支持压缩的存档格式。最常见的压缩方法是压缩与LZ77算法。因为是PKWARE开发的,所以zip格式也有多年的专利保护。因此,为了不侵犯PKWARE的专利,也采用LZ77算法的gzip格式被引入并广泛使用。
Unix的哲学是把事情做到最好,所以gzip只是设计来压缩文件的。因此,为了创建一个压缩的归档文件,必须先使用tar创建归档文件,然后压缩归档文件,因此文件tar.gz(也称为。简称tgz,以遵守8.3 MS-DOS文件名限制)。
随着技术的不断发展,压缩比更高的压缩算法被一一实现,比如bzip2中实现的Burrows-Wheeler算法和。用LZMA算法实现的xz存档。
现在,用户可以在Linux和Windows中自由使用任何存档文件格式。因为zip格式已经被Windows操作系统原生支持,所以特别适合跨平台环境。