Linux学习-13.文件的压缩和打包

常见的压缩命令

在Linux环境中,压缩文件的扩展名大多是[.tar,.tar.gz,.tgz,.gz,.Z,.bz2,*.xz],支持的压缩命令还是非常多,压缩技术也不相同,不同压缩命令彼此之间不能互相压缩和解压缩文件了。所以在得到一个压缩文件时要知道使用过那种压缩命令制作的,使用相应的命令就可以解压了。

扩展名			命令
*.Z				compress
*.zip			zip
*.gz			gzip
*.bz2			bzip2
*.xz			zx
*.tar			tar打包程序,并没有压缩
*.tar.gz		tar打包后,使用gzip压缩
*.tar.bz2		tar打包后,使用bzip2压缩
*.tar.xz		tar打包后,使用zx压缩

现在常见的是gzip、bzip2和最新的xz,像compress之类已经很少使用了。通常这些压缩命令仅针对一个文件来压缩和解压缩,所有在压缩之前会使用打包tar了。

1.gzip

gzip可以说是应用最广的压缩命令了,gzip可以解开compress,zip与gzip等软件所压缩的文件。gzip建立的压缩文件一般使用*.gz的文件名,默认压缩后源文件就没有了。

参数	作用
-a	使用ASCII文字模式
-d	解开压缩文件
-f	强行压缩文件
-l	列出压缩文件的相关信息
-c	把压缩的数据输出到屏幕上,可使用重定向来处理数据
-r	递归处理,将指定目录下的所有文件及子目录一并处理
-q	不显示警告信息
-v	可显示压缩和解压缩时的详细信息
-#	#是数字,代表压缩等级,-1最快,但是压缩比差,-9最慢,压缩比最好,默认是-6

1.1复制一个文件例子到桌面。

[root@linux Desktop]# cp /etc/services .
[root@linux Desktop]# ls -lh
总用量 656K
-rw-r--r--. 1 root root 655K 5月  17 18:50 services

1.2可以看到service文件大小有655K,压缩service文件。

[root@linux Desktop]# gzip services 
[root@linux Desktop]# ls -lh
总用量 136K
-rw-r--r--. 1 root root 133K 5月  17 18:50 services.gz

1.3压缩后的文件变成133K了,解压缩该文件。

[root@linux Desktop]# gzip -d services 
[root@linux Desktop]# ls -lh
总用量 656K
-rw-r--r--. 1 root root 655K 5月  17 19:39 services

1.4保留原文件压缩

[root@linux Desktop]# gzip -c services > services.gz
[root@linux Desktop]# ls -lh
总用量 792K
-rw-r--r--. 1 root root 655K 5月  17 19:39 services
-rw-r--r--. 1 root root 133K 5月  17 19:45 services.gz

1.5使用zcat、zmore、zless查看压缩后文件的内容

[root@linux Desktop]# zmore services.gz 
------> services.gz <------
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
以下省略...

1.6使用zgrep查找文件内容,不需要解压后再查找。

[root@linux Desktop]# zgrep -n http services.gz 
14:#       http://www.iana.org/assignments/port-numbers
89:http            80/tcp          www www-http    # WorldWideWeb HTTP
90:http            80/udp          www www-http    # HyperText Transfer Protocol
以下省略...

2.bzip2

gzip取代了compress并提供了更好的压缩比,那么bzip2是为了取代gzip并提供更佳的压缩比,bzip2的用法几乎和gzip相同。

参数	作用
-c	将压缩与解压缩的结果送到标准输出
-d	执行解压缩
-f	bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数
-k	bzip2在压缩或解压缩后,保留原始文件
-s	降低程序执行时内存的使用量
-t	测试.bz2压缩文件的完整性
-v	压缩或解压缩文件时,显示详细的信息
-z	强制执行压缩
-#	与gzip一样,压缩等级,-1最快,-9最佳

2.1使用bzip2压缩services文件和gzip对比。

[root@linux Desktop]# bzip2 -v services
  services:  5.409:1,  1.479 bits/byte, 81.51% saved, 670293 in, 123932 out.
[root@linux Desktop]# ls -lh
总用量 916K
-rw-r--r--. 1 root root 655K 5月  17 19:39 services
-rw-r--r--. 1 root root 122K 5月  17 19:39 services.bz2
-rw-r--r--. 1 root root 133K 5月  17 19:45 services.gz

2.2使用bzcat、bzmore、bzless查看压缩后文件的内容。

[root@linux Desktop]# bzcat services.bz2 
省略内容...
[root@linux Desktop]# bzmore services.bz2 
省略内容...
[root@linux Desktop]# bzless services.bz2 
省略内容...

2.3使用bzgrep查找文件内容,不需要解压后再查找。

[root@linux Desktop]# bzgrep -n http services.gz 
14:#       http://www.iana.org/assignments/port-numbers
89:http            80/tcp          www www-http    # WorldWideWeb HTTP
90:http            80/udp          www www-http    # HyperText Transfer Protocol
以下省略...

2.4解压缩

[root@linux Desktop]# rm services
rm:是否删除普通文件 "services"?y
[root@linux Desktop]# bzip2 -d services.bz2 
[root@linux Desktop]# ls -hl
总用量 792K
-rw-r--r--. 1 root root 655K 5月  17 19:39 services
-rw-r--r--. 1 root root 133K 5月  17 19:45 services.gz

3.xz

xz是最新的压缩软件,压缩比更高,用法也和gzip和bzip2几乎相同。

参数					作用
-z, --compress		强制压缩
-t, --test			测试压缩文件的完整性
-l, --list			列出有关.xz文件的信息
-k, --keep			保留(不要删除)输入文件
-f, --force			强制覆盖输出文件和(解)压缩链接
-c, --stdout		写入标准输出,不要删除输入文件
-#					与gzip一样,压缩等级,-1最快,-9最佳,使用7-9之前解压缩内存使用量考虑在内!

3.1压缩。

[root@linux Desktop]# xz -v  services
services (1/1)
  100 %        97.3 KiB / 654.6 KiB = 0.149                                    
[root@linux Desktop]# ls -hl
总用量 360K
-rw-r--r--. 1 root root 122K 5月  17 19:39 services.bz2
-rw-r--r--. 1 root root 133K 5月  17 19:45 services.gz
-rw-r--r--. 1 root root  98K 5月  17 19:39 services.xz
[root@linux Desktop]# xz -l services.xz 
Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
    1       1     97.3 KiB    654.6 KiB  0.149  CRC64   services.xz

3.2使用xzcat、xzmore、xzless查看压缩后文件的内容,使用xzgrep查找文件内容。

3.3解压缩

[root@linux Desktop]# xz -d services.xz 
[root@linux Desktop]# ls -lh
总用量 916K
-rw-r--r--. 1 root root 655K 5月  17 19:39 services
-rw-r--r--. 1 root root 122K 5月  17 19:39 services.bz2
-rw-r--r--. 1 root root 133K 5月  17 19:45 services.gz

打包软件tar

我有过疑问,gzip、bzip2和xz可以压缩目录,为什么还需要tar打包呢,把所有需要压缩的文件放在同一个目录中,压缩文件夹不就可以了吗?当查阅资料后才知道,如果压缩目录,压缩软件会将目录中所有文件分别进行压缩。tar可以将多个目录或文件打包成一个大文件,同时还可以透过gzip、bzip2、xz的支持,将文件同时进行压缩,就是打包压缩同时进行。

参数			作用
-c			建立打包文件,可搭配-v查看过程中被打包的文件名
-t			列出打包文件的内容含有哪些文件名
-x			提取文件,可搭配-C提取到指定目录

-z			通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-j			通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-J			通过xz指令压缩/解压缩文件,文件名最好为*.tar.bz2

-v			显示指令执行过程
-C <目录>	解压缩到特定的目录
-f<备份文件>	指定备份文件
-p			保留原来的文件权限与属性
-P			使用文件名的绝对路径,不移除文件名称前的“/”号

-r			添加文件到已经压缩的文件
-u			添加改变了和现有的文件到已经存在的压缩文件
-k			保留原有文件不覆盖
-m			保留文件不被覆盖
-N <日期格式>		只将指定日期更新的文件保存到备份文件里
--exclude=<范本样式>	排除符合范本样式的文件
--remove-files		归档/压缩之后删除源文件

需要注意的是-c,-t,-x三个参数不能同时出现在一个命令中,-z,-j,-J三个参数不能同时出现在一个命令中。简单使用tar记住下面三个方式即可

压  缩:tar -czvf 文件名.tar.gz  需要被压缩的文件或目录
查  看:tar -tzvf 文件名.tar.gz
解压缩:tar -xzvf 文件名.tar.gz  [-C 指定目录]

tar并不会自动产生文档的名称,需要我们自己定义,所以扩展名就显得很重要了。如果不加-z,-j,-J三个参数就是打包文件不压缩,扩展名最好是.tar就可以了。如果是-z就代表使用gzip压缩,扩展名最好是.tar.gz,因为gzip会产生.gz的扩展名。同理-j就使用.tar.bz2的扩展名,-J就使用.tar.xz的扩展名了。

备份/etc目录

这里命令我没加参数v不看信息,加了参数p,意思是保留文件原来的权限。

[root@linux Desktop]# tar -czpf etc.tar.gz /etc
tar: 从成员名中删除开头的“/”
[root@linux Desktop]# ls -lh
总用量 8.8M
drwxr-xr-x. 2 root root   58 5月  17 22:29 123
-rw-r--r--. 1 root root 387K 5月  17 22:31 456.tar.gz
-rw-r--r--. 1 root root 8.4M 5月  17 23:57 etc.tar.gz

输完命令立即跳出一条提示:tar: 从成员名中删除开头的“/”,这个“/”是根目录。为什么要拿掉根目录呢?主要是为了安全,我们备份的数据可能需要解压后使用的,如果拿掉“/”,那么会解压到当前目录,就是/root/Desktop/etc/*,如果不拿掉“/”呢?解压后文档名就是绝对路径了,这样备份的etc目录会被解压到现有的etc目录中,覆盖当前的数据,会产难以预料的后果。

解压备份

解压到当前目录,可以使用-C参数解压到指定录下。

[root@linux Desktop]# tar -xzvf etc.tar.gz 

解压单一文件

只解压etc中的shadow文件,首先先查找文件。

[root@linux Desktop]# tar -tzvf etc.tar.gz | grep shadow
---------- root/root       678 2020-04-30 00:29 etc/gshadow
---------- root/root      1149 2020-04-30 00:29 etc/shadow
---------- root/root      1127 2020-01-13 00:42 etc/shadow-
---------- root/root       667 2020-01-13 00:42 etc/gshadow-

[root@linux Desktop]# tar -xzvf etc.tar.gz etc/shadow
etc/shadow

[root@linux Desktop]# ls etc/
shadow

在解压单独的文件之前,要先将之前解压的etc目录删除,不然只会将shadow文件覆盖一遍,看不出效果。只要知道你想要的文件名称,就可以单独解压出来而不用将整个目录都解压了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章