压缩文件的格式种类很多,这里只介绍几种常见的压缩格式,比如 zip、tar、tar.gz、rar。
ZIP
ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为application/zip。当前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7z格式。从性能上比较,RAR及7z格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。Microsoft从Windows ME操作系统开始内置对zip格式的支持,即使用户的计算机上没有安装解压缩软件,也能打开和制作zip格式的压缩文件,OS X和流行的Linux操作系统也对zip格式提供了类似的支持。因此如果在网络上传播和分发文件,zip格式往往是最常用的选择。
——百度百科
从上面的介绍中我们可以得知,zip格式压缩率不高,但是主流操作系统都内置了对zip格式的支持,无需安装外部软件就能解压zip文件。
zip
zip命令使用比较简单,常见使用格式为 zip -rv foo.zip foo
(foo可以是目录,foo后面可以继续加文件,压缩时会一起被压缩到foo.zip中)
下面我使用了 -q
进行静默压缩,压缩率为64.7% 。
unzip
解压时可以直接使用 unzip foo.zip
, 还可以加-d
来指定解压的路径(也可以是不存在的文件夹),-q
是静默解压。
RAR
RAR 是一种专有的文件格式,用于文件的压缩、归档与打包。RAR 的全名是:Roshal Archive(即“罗谢尔的归档”之意),其开发者是尤金·罗谢尔(Eugene Roshal)。首个公开版本 RAR 1.3 发布于1993年。Roshal 最初编写了 RAR 的 Dos 版本的程序用以编码和解码文件,后来该程序被移植到其他的平台,比较著名的是 Windows 平台上移植版的 Win RAR。Eugene Roshal后来公开了解码程序的源代码,但是编码程序仍然是私有的。RAR 因为其独特的压缩算法,基本可以做到无损压缩,而且还能够满足较高的压缩比,同时保证一定的压缩速度。但是RAR压缩算法也存在一定的缺陷,由于RAR文件头需要占用一部分的空间,二档压缩的原始数据量较小,而且压缩的空间较小的情况下,可能会出现压缩后的文件反而比原始文件更大。RAR 文件有较多的冗余记录,主要是考虑到在压缩过程中,压缩数据受损,为了保证无损压缩,会有较多的恢复记录,这些恢复记录也占用了一定的空间。但是分卷压缩是 RAR 非常突出的一个优点,将源文件分割为多个小文件,从而有利于解压出源文件。如果将所有的数据压缩到同一个数据区,就可以大大加大压缩比,但是这种压缩方式在解压其中一个单独的文件时就必须解压同一数据区中位于它之前的所有的文件,不利于文件的单独解压。RAR 拥有成熟的加密算法,2.0 版本以后使用 AES 算法来加密,AES 算法的破解难度比较大,在没有密码的情况下只能采取暴力破解的办法,对于数据的安全性有一定的保证。
——百度百科
Ubuntu 中没有预装rar命令,需要使用 sudo apt-get install rar
来安装。
rar使用 a
选项来压缩,使用 x
选项来解压。下面只是命令列表,还有很多 switch
选项(比如后面要用到的 -r 和 -inul)。
rar a
使用 rar a foo.rar
进行压缩时,如果不加压缩文件的列表,将默认压缩当前路径。
-r
是一个开关选项,用来递归压缩,使用 test_file/*
也能达到相同的作用。
-inul
也是一个开关选项,作用是不打印任何压缩信息。
本次压缩率为61.8%(优于zip的64.7%)。
rar x
使用rar x foo.rar
解压时,如果不加目标目录,将默认解压到当前目录。
GZIP
GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
gzip 命令不加参数选项时,默认为压缩功能,加 -d
选项时可以实现解压。
gzip -r
gzip 貌似只能对单个文件进行压缩和解压,不能归档,感觉这个命令作用不大呀。
先查看要压缩文件的目录结构:
使用 gzip -r
进行压缩后,发现所有子文件被分别压缩了。
gzip -dr
经过上面的压缩后,测试文件大小变成25M,使用 gzip -dr
对目标文件夹进行解压缩,文件大小恢复到34M。本次 .gz 的压缩率为73.5% 。
TAR
Unix和类Unix系统上的压缩打包工具,可以将多个文件合并为一个文件,打包后的文件后缀亦为“tar”。tar文件格式已经成为POSIX标准,最初是POSIX.1-1988,当前是POSIX.1-2001。本程序最初的设计目的是将文件备份到磁带上(tape archive),因而得名tar。
——百度百科
前面说到 gzip 只能压缩不能打包,使用 tar 就能完美解决这个问题,它本职就是打包,同时也能实现多种格式的解压缩。
tar 打包
tar 的主操作就是打包(归档)和解包,这种操作是不进行文件压缩的。
使用 tar -cvf foo.tar foo1 foo2 ...
进行归档,
-c
创建新的归档
-v
显示详细归档过程
-f
使用归档文件
解包的命令为 tar -xvf foo.tar
-x
从归档中解出文件
-C
指定解包的路径,默认为当前路径
tar 的参数选项前不加 -
也行,这个有点特别。
tar 的主要功能时归档,对比了一下归档前后文件的大小,发现 tar 归档还是有一点压缩作用的,但效果很小。
小贴士:-c
和 -f
选项单独使用时会报错。
tar.gz
以·tar.gz为后缀的文件是一种压缩文件,在Linux和macOS下常见,Linux和macOS都可以直接解压使用这种压缩文件。
这个是Linux最常用到的压缩格式了,使用方法和 tar 类似,只是在 tar 封包解包的基础上加上了压缩功能。
其中 -z
参数的作用是指定 tar 封包解包时使用 gzip 进行压缩或解压。
压缩
压缩时,使用 tar -zcvf foo.tar.gz foo...
-z
通过 gzip 进行解压缩
-c
创建新的归档
-v
显示详细归档过程
-f
使用归档文件
从压缩后的大小看,压缩率为61.8%,和 rar 压缩不相上下(测试样本只有一个,只能得出大概结论)。
解压缩
使用 tar -zxvf foo.tar.gz
进行解压,
-x
从归档中解出文件
-C
指定解包的路径,默认文当前路径