常见的压缩命令
在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文件覆盖一遍,看不出效果。只要知道你想要的文件名称,就可以单独解压出来而不用将整个目录都解压了。