• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Linux中归档压缩工具学习

系统管理 彭东稳 9年前 (2015-08-25) 31403次浏览 已收录 1个评论

背景

一个完整的软件,需要有许多不同类型的文件构成:库文件、配置文件、可执行文件等;一个源代码,需要有许多不同的模块代码构成:数据模块、控制模块、视图模块等。少则几十,多则上百。这么多的文件,需要传输的时候怎么弄呢?Linux中就有了打包工具就是把所有的文件打包成一个文件。那么这么大的文件传输是不是很慢呢?Linux中也有压缩的工具;下面一一介绍。

压缩解压缩工具

压缩工具

gzip:压缩后文件扩展名为.gz,压缩后会删除原文件。

bzip2:压缩后文件扩展名为.bz2,默认压缩后删除原文件,比gzip有更大压缩比。

xz:压缩后文件扩展名为.xz,压缩后删除原文件,比gzip和bizp2压缩比都高。

zip:压缩后文件扩展名为.zip,支持对目录压缩。

解压缩工具

gunzip:解压.gz的文件(gzip压缩文件)。

bungzip2:解压.bz2的文件(bzip2压缩文件)。

unxz:解压.xz的文件(xz压缩文件)。

unzip:解压.zip的文件(zip压缩文件)。

查看压缩文件

zcat file.gz:临时查看.gz压缩文件,不需要解压。

bzcat file.bz2:临时查看.bz2压缩文件,不需要解压。

xzcat file.xz:临时查看.xz压缩文件,不需要解压。

压缩原理

通过上面的实例我们发现,压缩顾名思义就是把大的文件通过某种方法使其变得小点;那么这个过程是怎么样的呢?我们通常发现将一个原本为5MB的文件压缩后可以变成1MB,其压缩率是20%。注意,通常情况下,压缩必须是无损的。换句话说,必须保证压缩/解压过程中恢复的数据与原始数据完全相同。不然就会发生数据损坏。

首先,我们知道,不管是什么文件,它的数据都是大量的二进制比特,它们是以字节为单位存放。至于这写二进制数据代表什么含义,取决于其生产者和使用者之间的协议。其次,在很多时候,这些二进制数据可以用另一种更简短的形式来表示。这个时候,称这些数据是可压缩的。比如,一个最容易理解的例子是形成编码。形成编码的思想是观察被压缩的数据,看它是否带有重复的内容。加入我们要压缩这样一串数据:

AAAAAFFRRRU

那么,因为我们发现有些字母是连续重复出现的,所以,这串数据可以简单地表示成:5A2F3R1U

注意,计算机只接受二进制比特,所以“AAAAAFFRRRU”在存储器和磁盘中其实是这样的:01000001 01000001 01000001 01000001 01000001 01000110 01000110 01010010 01010010 01010010 01010101

按照上面所讲的形成编码方法,压缩之后的结果是这样的:00000101 01000001 00000010 01000110 00000011 01010010 00000001 01010101

可以看出,压缩之后显然节省了若干字节。如果一个软件指导这个文件是用形成编码压缩的,它就应该懂得如何恢复原来的内容。

当然,并不是所有文件都可以被压缩,尤其是不存在重复内容的时候,压缩之后反而会增加数据量。不过行程编码的方法对于压缩图像文件特别有效,因为图像是由像素组成的,而像素则是一些表示颜色和二进制数据。最关键的是,图像中包含大量具有相同颜色的像素。

行程编码不是唯一的文件压缩方法。但是,不管有多少种方法,基本的思想没有改变,那就是为被压缩的内容找到一种更简短、更节省空间的表示方法。我们通常也叫着算法

归档工具

tar:Linux下一款常用的归档工具,通过上面我们发现gzip,bzip2、xz都只能对文件压缩,而tar工具就是把一个目录打包成一个文件继而配合压缩工具对归档后的文件进行压缩。

实例

原目录大小

1. 使用gzip对/tmp/Hadoop进行归档压缩,产生hadoop.tar.gz文件

2. 使用bzip2对/tmp/Hadoop进行归档压缩,产生hadoop.tar.bz2文件

3. 使用xz对/tmp/Hadoop进行归档压缩,产生hadoop.tar.xz文件

压缩比高占CPU就高,从而压缩时间线就长。从结果来看,我想大家应该都更倾向使用gzip来压缩归档,压缩比相比bzip2和xz低的也不算太多,但是时间上比它俩可少太多了。另外还有大神写了一个多线程的gzip压缩工具,那个速度真是杠杠的,可以看:多线程压缩工具Pigz使用

相对解压就比较简单点了,直接给个xvf参数就可以了,它可以自动识别压缩格式。

-c是用来指定解压到哪个目录下的。

cpio:是Linux下比较早的归档工具,/boot/initrd-2.6.18-308.e15.img就是使用cpio归档的。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽