gzip是GNU/Linux平台下常用的压缩格式。gzip、gunzip和zcat都可以处理这种格式。但这些工具只能压缩/解压缩单个文件或数据流,无法直接归档目录和多个文件。好在gzip可以同tar和cpio配合使用。
7.4.1 实战演练
gzip和gunzip可以分别用于压缩与解压缩。
使用 gzip 压缩文件
$ gzip filename$ lsfilename.gz
[root@dev workspace]# lsarchive.tar.gz else if.sh out.html out.txt sample1.txt showArgs.sh tools variables.sh vitest.tarecho golang input.txt output.txt printf.sh sample2.txt temp.txt umq vitest welcome.txt[root@dev workspace]# gzip out.html[root@dev workspace]# lsarchive.tar.gz else if.sh out.html.gz out.txt sample1.txt showArgs.sh tools variables.sh vitest.tarecho golang input.txt output.txt printf.sh sample2.txt temp.txt umq vitest welcome.txt[root@dev workspace]#
解压缩 gzip 文件
$ gunzip filename.gz$ lsfilename
列出压缩文件的属性信息
$ gzip -l test.txt.gzcompressed uncompressed ratio uncompressed_name35 6 -33.3% test.txt
[root@dev workspace]# gzip out.html[root@dev workspace]# lsarchive.tar.gz else if.sh out.html.gz out.txt sample1.txt showArgs.sh tools variables.sh vitest.tarecho golang input.txt output.txt printf.sh sample2.txt temp.txt umq vitest welcome.txt[root@dev workspace]# gzip -l out.html.gzcompressed uncompressed ratio uncompressed_name64101 1024100 93.7% out.html[root@dev workspace]#
gzip 命令可以从 stdin 中读入文件并将压缩文件写出到 stdout
从stdin读入并将压缩后的数据写出到stdout:
$ cat file | gzip -c > file.gz
选项-c用来将输出指定到stdout。该选项也可以与cpio配合使用:
$ ls * | cpio -o | gzip -c > cpiooutput.gz$ zcat cpiooutput.gz | cpio -it
设置 gzip 的压缩率
我们可以指定gzip的压缩级别。--fast或--best选项分别提供最低或最高的压缩率。
7.4.2 补充内容
gzip命令通常与其他命令结合使用,另外还有一些高级选项可以用来指定压缩率。
压缩归档文件
后缀.gz表示的是经过gzip压缩过的tar归档文件。有两种方法可以创建此类文件。
第一种方法
$ tar -czvvf archive.tar.gz [FILES]
或者
$ tar -cavvf archive.tar.gz [FILES]
选项
-z指明用gzip进行压缩,选项-a指明根据文件扩展名推断压缩格式。
第二种方法
首先,创建一个tar归档文件:
$ tar -cvvf archive.tar [FILES]
压缩tar归档文件:
$ gzip archive.tar
如果有大量文件(上百个)需要归档及压缩,我们可以采用第二种方法并稍作变动。将多个文件作为命令行参数传递给tar的问题在于后者能够接受的参数有限。要解决这个问题,我们可以在循环中使用追加选项(-r)来逐个添加文件:
FILE_LIST="file1 file2 file3 file4 file5"for f in $FILE_LIST;dotar -rvf archive.tar $fdonegzip archive.tar
下面的命令可以提取经由gzip压缩的归档文件中的内容:
$ tar -xavvf archive.tar.gz -C extract_directory
其中,选项-a用于自动检测压缩格式。
zcat —— 直接读取 gzip 格式文件
zcat命令无需经过解压缩操作就可以将.gz文件的内容输出到stdout。.gz文件不会发生任何变化。
$ lstest.gz$ zcat test.gzA test file#文件test中包含了一行文本"A test file"$ lstest.gz
压缩率
我们可以指定压缩率,它共有 9 级,其中:
- 1 级的压缩率最低,但是压缩速度最快;
- 9 级的压缩率最高,但是压缩速度最慢。
你可以按照下面的方法指定压缩比:
$ gzip -5 test.img
gzip 默认使用第 6 级,倾向于在牺牲一些压缩速度的情况下获得比较好的压缩率。
使用 bzip2
bzip2在功能和语法上与gzip类似。不同之处在于bzip2的压缩效率比gzip更高,但花费的
时间比gzip更长。
用bzip2进行压缩:
$ bzip2 filename
解压缩bzip2格式的文件:
$ bunzip2 filename.bz2
生成tar.bz2文件并从中提取内容的方法同之前介绍的tar.gz类似:
$ tar -xjvf archive.tar.bz2
其中,-j表明该归档文件是以bzip2格式压缩的。
使用 lzma
lzma的压缩率要优于gzip和bzip2。
使用lzma进行压缩:
$ lzma filename
解压缩lzma文件:
$ unlzma filename.lzma
可以使用--lzma选项压缩生成的tar归档文件:
$ tar -cvvf --lzma archive.tar.lzma [FILES]
或者
$ tar -cavvf archive.tar.lzma [FILES]
将lzma压缩的tar归档文件中的内容提取到指定的目录中:
$ tar -xvvf --lzma archive.tar.lzma -C extract_directory
其中,-x用于提取内容,--lzma指定使用lzma解压缩归档文件。
我们也可以用:
$ tar -xavvf archive.tar.lzma -C extract_directory
