压缩与解压¶
“小王,把我们郊游的照片压缩一下,发给我”,压缩文件在使用电脑时经常见到。将文件压缩不只是为了节省硬盘空间,同时也可以节省网络传输时间、归档文件方便管理等。
压缩可分为无损压缩与有损压缩两种,但不管是采用何种技术模型,其本质内容都是一样的,即通过某种特殊的编码方式将数据信息中存在的重复度、冗余度有效地降低,从而达到数据压缩的目的。例如二进制代码压缩,有 000000,可以把它变成 6 个 0 的写法 60,来减少该文件的空间。解压就是将压缩包中的文件恢复成没有压缩前的样子。
注解
有损压缩
在压缩时去除“不必要”的信息,对文件进行剪裁以使它变得更小,这种压缩方法称为有损压缩。在压缩后将无法复原成原始文件的样子。因此,如果需要完全重现原来的内容(例如软件应用程序、数据库和源代码),应该使用无损压缩。
有损压缩广泛应用于动画、声音和图像文件中,典型的代表就是影碟文件格式 mpeg、音乐文件格式 mp3 和图像文件格式 jpg。
在 Linux 中很多压缩程序只能针对一个文件进行压缩,当要压缩一大堆文件时,首先得先将一堆文件打成一个包(tar 命令),然后再用压缩程序进行压缩(gzip、bzip2 命令),就是说压缩会分为两步,先打包再压缩,各干个的事。
打包¶
tar 命令可以将多个文件和目录创建一个档案(归档),tar 最初是用来在磁带上创建档案;tar 命令也可以修改档案中的文件,或者加入新的文件;使用 tar 程序打出来的包我们常称为 tar 包,tar 包通常以 .tar
结尾。
提示
归档的一般用途:
- 把一大堆的文件和目录打包成一个 tar 包,便于网络传输。
- 生成tar包后,再用其它的程序进行压缩。
推荐阅读: tar 归档命令
压缩¶
gzip¶
gzip 是 GNUzip 的缩写,它是一个 GNU 自由软件的文件压缩程序,文件经它压缩过后以 .gz
为扩展名,据统计,gzip 命令对文本文件有 60%~70% 的压缩率。gzip 不能用来压缩目录,需要先归档目录,然后在压缩。gzip 和 tar 一起构成了 Linux 操作系统中流行的文件压缩格式(.tar.gz)。
gunzip 命令用来解压缩 gz 文件,事实上 gunzip 就是 gzip 的硬连接,因此不论是压缩或解压缩,都可以通过 gzip 命令单独完成。
推荐阅读: ../Chapter01/00_gzip
bzip2¶
bzip2 是一款自由软件,以开源软件协议发布的数据压缩算法及程序,以 .bz2
为扩展名结尾。bzip2 只是一个数据压缩工具,而不是归档工具,在这一点上它与 gzip 类似。
bzip2 是一个基于 Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的 gzip 或 ZIP 的压缩效率更高,但是它的压缩速度较慢。bzip2 利用先进的压缩技术,能够把文件压缩到 10% 至 15%,压缩的速度和解压的效率都非常高,并且支持大多数压缩格式,包括 tar、gzip 等。
推荐阅读: bzip2 压缩文件
zip¶
zip 是一个应用广泛的跨平台的打包+压缩工具,压缩文件的扩展名为 .zip
。
zip 是一种相当简单的分别压缩每个文件的存档格式。分别压缩文件允许不读取额外的数据而检索独立的文件;理论上,允许对不同的文件使用不同的算法。
- 推荐阅读: zip 归档和压缩文件
- 推荐阅读: unzip 解压 zip
提示
压缩工具对比
- bzip2 gizp 命令会在压缩文件时替换原始文件,tar zip 不会替换
- 除 bzip2 以外,压缩文件的权限将基于 umask 设置。bzip2 会保留原始文件的权限
- zip 创建的压缩文件可以在 Windows 及 MacOS 和其他 Unix 系统即解压,兼容性更强
常用解压/压缩命令¶
tar
压缩: | tar -cvf FileName.tar DirName |
---|---|
解压: | tar -xvf FileName.tar |
.gz
压缩: | gzip FileName |
---|---|
解压1: | gunzip FileName.gz |
解压2: | gzip -d FileName.gz |
.tar.gz 或 .tgz
压缩: | tar -zcvf FileName.tar.gz DirName |
---|---|
解压: | tar -zxvf FileName.tar.gz |
.bz2
压缩: | bzip2 -z FileName |
---|---|
解压1: | bzip2 -d FileName.bz2 |
解压2: | bunzip2 FileName.bz2 |
.tar.bz2
压缩: | tar -jcvf FileName.tar.bz2 DirName |
---|---|
解压: | tar -jxvf FileName.tar.bz2 |
.Z
压缩: | compress FileName |
---|---|
解压: | uncompress FileName.Z |
.tar.Z
压缩: | tar -Zcvf FileName.tar.Z DirName |
---|---|
解压: | tar -Zxvf FileName.tar.Z |
.zip
压缩: | zip FileName.zip DirName |
---|---|
解压: | unzip FileName.zip |
.rar
压缩: | rar -a FileName.rar DirName |
---|---|
解压: | rar -x FileName.rar |