1. 文件压缩技术的原理
首先简单描述一下文件压缩技术 的基本原理:计算机最小的计量单位是位(bit),1 byte=8 bit,假如我们要存储一个byte类型的变量的值是1,则其转换成二进制的形式是:0000 0001,前面的7个0都是“空的”,而计算机信息存储的最小单位是byte(信息传递的最小单位是bit),得到字节的类型才能被计算机系统识别,因此前面的7个0就是未填满的空间。如此看来,数据之间存储并不是连续的,压缩技术就是采用一定的算法把那些没有使用到的空间(如上例中的"0")找出来,并填充,让整个文件占用的容量下降。压缩过的文件无法被计算机系统直接使用,需解压缩处理,解压缩就是把压缩文件还原回"未压缩"的样子。
2. linux 常用压缩命令
下面是目前linux下一些常见的压缩文件的扩展名:
*.bz2 (bzip2程序压缩的文件)
*.gz (gzip程序压缩的文件)
*.tar (tar程序打包的文件,并没压缩)
*.tar.gz (tar程序打包的文件,并经过gzip压缩)
*.tar.bz2 (tar程序打包的文件,并经过bzip2压缩)
gzip是GNU计划开发出的用来开取代"compress(压缩文件扩展名是*.Z)"的压缩命令,bzip2的"压缩比"比gzip更好,tar是一个文件打包工具,可以将多个文件或目录打包成一个文件,但并没有进行压缩.
gzip和bzip2只能针对一个文件来进行压缩和解压缩,所以一般将压缩工具跟打包工具tar结合起来使用,更方便更强大.
下面分别来了解一下各压缩命令,简单介绍一下各命令的使用方式,更多的参数和功能可以查看对应的帮助文档:如gzip --help
(1)gzip和zcat
gzip是用来压缩和解压缩扩展名是“*.gz”的文件的命令,后面加上相应的参数执行相应的命令(通过gzip --help可详细了解),zcat是用来读取压缩文件内容的(可用来查看压缩文件的内部结构,跟文本文件读取命令cat对应)。
下面列举了一些常用的参数
-c (将压缩的数据输出到屏幕上,不改变原来的目录和文件)
-d (解压缩参数)
-t (检测文件是否出错)
-# (压缩等级:-1 速度最快,压缩比最差;-9 压缩比最好,但速度最慢,默认是-6)
例子:(1.1) 将/home/alexzhou/ 下的test.txt文件进行压缩
从上图可以看到,生成了test.txt.gz文件,gzip未使用参数时,并未保留原来的test.txt文件
解压缩命令:gzip -d test.txt.gz 这样就会把test.txt.gz文件还原成test.txt文件
(1.2) 查看压缩文件test.txt.gz的内容
此时就在终端打印出了test.txt文件的内容
(1.3) 将test.txt按最佳压缩比压缩,并保留test.txt文件
从上图可知,此时压缩文件test.txt.gz和原文件test.txt同时存在
(2) bzip2和bzcat
下面列举了一些常用的参数
-c (将压缩过程产生的数据输出到屏幕上)
-d (解压缩参数)
-z (压缩的参数)
-# (压缩等级:跟gzip一样,-1 速度最快,压缩比最差;-9 压缩比最好,但速度最慢)
bzip2会自动将文件扩展名设置为.bz2,可以使用bzcat读取压缩文件的内容。
bzip2和bzcat的使用方式跟gzip和zcat差不多,这里就不举例了。解压缩的命令为bzip2 -d *.bz2,也可以使用bunzip2代替。
(3)tar
这是一个非常有用的创建档案文件和备份文件的工具,可以把多个目录或文件整合成一个文件,跟压缩工具一起使用非常方便。
下面列举了一些常用的参数(更多的参数命令请使用:tar --help)
-c (创建档案文件的参数命令,create的意思)
-x (从档案文件中释放文件的参数命令)
-t(列出档案文件的内容)
ps:在使用时,c/x/t三个参数命令不能同时存在
-z (用gzip来压缩/解压缩文件)
-j (用bzip2来压缩/解压缩文件)
-v (创建档案文件和压缩的过程中显示文件信息)
例子:(3.1)将~/test目录下的所有文件打包成~/test.tar(仅打包,不压缩)
(3.2)将~/test目录下的所有文件打包后并以gzip压缩
为了便于理解,一般把扩展名命名为*.tar.gz 或*.tar.bz2
(3.3)将~/test目录下的所有文件打包后并以bzip2压缩
(3.4)查看test.tar.gz和test.tar.bz2文件内有哪些文件
(3.5)解压缩test.tar.gz和test.tar.bz2文件
总结:在使用linux的过程中,tar、gzip、bzip2命令是最常用的备份打包和压缩/解压缩 工具,在熟悉的过程中可以通过查看对应的帮助命令(xx --help)了解更多参数命令
参考资料:《鸟哥的linux私房菜基础学习篇》