压缩:需要用最小的空间,来存储更多的数据。空间包括:内存,磁盘,网络传输带宽。
压缩的基本原理是,通过查找文件中的重复字节,对重复的字节建立一个词典文件,并用一个代码表示重复的字节。比如一个文档中,出现了较多重复的字符【Hello world】,会重新创建一个词典文件,将重复的字符【Hello world】用一个代码来表示。这样就可以达到压缩文档体积的效果。
压缩技术分为:无损压缩和有损压缩。顾名思义,有损压缩和无损压缩,分别是指文件在压缩过程中有无丢失信息。有损压缩,主要是指丢失个别数据,对文件也不会造成很大影响,比如广泛应用的视频、音频、图像文件中。
需要注意的是,并不是压缩次数越多越好,也就是说,如果对压缩的文件再次进行压缩,不会减少空间的利用,反而会加大空间的利用。因为压缩的过程中,需要增加一些对压缩信息的描述,这些信息也会占据一定的空间;经过压缩后的文件,已没有太多冗余信息,再次压缩,只会增加新的压缩信息,适得其反。
压缩和解压常用到的命令:
序号 | 命令 | 解释 |
---|---|---|
1 | tar | 同时支持:1)打包和解包;2)压缩和解压 支持的文件格式有:.tar.gz, .tar.bz2 |
2 | zip | |
3 | unzip | |
4 | gzip | |
5 | gunzip | |
6 | bzip2 | 压缩以.bz2格式的文件 |
7 | bunzip2 |
1. 打包和归档tar
在说明压缩和解压之前,先讲另外一个概念:打包(也叫归档)。
为什么需要打包,是因为在linux中,只支持对一个文件进行压缩,如果有多个文件,需要将多个文件进行打包,生成一个打包的.tar文件,在对这个.tar文件进行压缩和解压。
打包是指把许多个文件,打包成一个大包裹。打包并没有压缩,也就是说,打包只是把文件集合在一起,并没有压缩文件。最常用的打包命令是tar,将多个文件打包成.tar文件。
tar命令的选项:
选项 | 解释 |
---|---|
c | 将多个文件或目录进行打包 |
v | 显示打包文件过程 |
f | 指定包的文件名 |
x | 对tar包做解打包操作 |
C(大写) | 指定解包的位置,默认是在当前目录下 |
一般选项组合如下:
- 打包:-cvf,将多个文件或目录打包成.tar包
- 解打包:-xvf
使用如下:
tar -cvf test.tar test.txt # 将test.txt打包成test.tar
tar -cvf test.tar test1.txt test2.txt test3.txt # 将test1.txt、test2.txt、test3.txt都打包成test.tar包
tar -cvf test/test.tar test?.txt # 将符合正则表达式的test?.txt均打包成test.tar包,test.tar在test目录下
tar -xvf test.tar # 将test.tar解包
tar -xvf test/test.tar -C newdir # 将test/test.tar中的包,解压到newdir目录中
2. 压缩和解压tar
压缩,会将当个文件或.tar文件,压缩成.tar.gz, .tar.bz2;最常用的压缩命令有:tar、zip、gzip、bzip2.
解压,会将压缩文件,解压成原来的文件;最常用的解压命令是:unzip、gunzip、bunzip2.
可以通过tar命令,将文件压缩成.tar.gz,.tar.bz2,也能对.tar.gz,.tar.bz2的压缩包进行解压。
tar命令常用的选项:
选项 | 解释 |
---|---|
c | 压缩 |
v | 压缩或解压文件的过程 |
f | 压缩和解压的文件 |
x | 解压 |
C(大写) | 压缩和解压的文件位置 |
z | 文件为.tar.gz或.tar.bz2的压缩或解压 |
选项比较多,一般比较常用的,有下面几个组合:
选项组合 | 使用场景 |
---|---|
-cvf | 压缩,多用于单个文件的压缩 |
-zcvf | 压缩,多用于.tar文件的压缩,可压缩成.tar.gz, .tar.bz2 |
-zxvf | 解压,多用于.tar.gz, .tar.bz2的解压 |
使用如下:
tar -cvf test.tar.gz test.txt
tar -zxvf test.tar.gz
3. zip和unzip
zip -r test.zip ./* # 将本地文件全部压缩到test.zip中
unzip -o -d test/ test.zip # 将压缩文件test.zip解压到test目录下,-o表示覆盖,-d表示解压的目录
4. gzip和gunzip
命令使用方式:gzip 文件
使用命令【gzip test.txt】文件后,会直接修改原文件test.txt为test.txt.gz
gzip test.txt # 直接将test.txt压缩成test.txt.gz
gunzip test.txt.gz # 直接将test.txt.gz解压成test.txt
gzip -c test.txt # 将压缩的文件test.txt发送到标准输出,并不会生成压缩文件
gunzip -c test.txt.gz # 将解压的文件发送到标准输出,并不会生成解压文件
gzip -c test.txt > test.txt.zip
gunzip -c test.txt.zip > test.txt
5. bzip2和bunzip2
bzip2和bunzip2的用法与gzip和gunzip的用法比较相似。
bzip2 test.txt # 将test.txt压缩成test.txt.bz,直接将原来的文件压缩
bzip test1.txt test2.txt test3.txt # 将test1.txt, test2.txt, test3.txt分别压缩成test1.txt.bz, test2.txt.bz, test3.txt.bz压缩包,直接将原来的文件压缩
bunzip2 test.txt.bz
bunzip2 test1.txt.bz test2.txt.bz test3.txt.bz
bzip2 -k test.txt # 压缩test.txt,保留test.txt,生成新的压缩包test.txt.bz
bunzip2 -k test.txt.bz # 解压test.txt.bz,保留test.txt.bz,生成新的test.txt