在Linux中有很多的压缩工具,本文主要介绍gzip/gunzip/zcat、bzip2/bunzip2/bzcat、tar、zip/unzip。
为了方便演示。我们首先建立一个名为“test.txt”的文本文件,其内容如下所示:
Hello!
This is a test!
End of file.
1. gzip/gunzip/zcat
gzip用于压缩普通文件;gunzip用于解压缩 gzip 所建立的压缩文件;gcat用于查看gzip建立的压缩文件源内容。
gzip只能用于压缩普通文件,注意,是普通文件。不能将整个目录压缩为单个文件,如果我们以递归形式压缩目录,则gzip会递归的进入每个子目录并依次压缩其中的普通文件。gzip创建的压缩文件默认以.gz、-gz和.z为扩展名,具体为哪个要视文件系统类型而定,表1展示了不同后缀名所对应的文件系统。
扩展名 | 文件系统 |
---|---|
.gz | Linux上的EXT文件系统 |
-gz | VFS(虚拟文件系统) |
.z | MS-DOS(微软磁盘操作系统)、Windows NT FAT、OS/2 FAT、Atari |
gzip的参数选项如下所示:
-c:将压缩后的数据输出都屏幕(不生成压缩文件)。
-d:解压缩文件
-f:强制覆盖已有的文件
-k:保留源文件(默认是不保留的)
-t:测试压缩文件的完整性(与-v选项一起使用)
-r:递归的压缩所有文件
-v:详细的输出执行过程(默认不输出)
-1:以速度最快压缩。
-9:以压缩率最好压缩。(可以从1-9变化,默认是6)
例如我们要压缩之前创建的”test.txt”文件,可以输入以下指令:
$ gzip -krv test.txt
test.txt: 0.0% -- replaced with test.txt.gz
注意,gzip压缩工具默认是将源文件替换为压缩文件,如果要保留源文件,需要显式的指定’-k’参数,以上-krv表示保留源文件、递归的压缩所有文件并详细的输出压缩过程。
从输出中可以看到有三个参数:源文件–test.txt,压缩比–0.0%和输出文件–test.gz。
如果我们要解压缩刚刚创建的文件,只需输入以下指令
$ gzip -dv test.txt
gzip: test.txt already exists; do you wish to overwrite (y or n)? y
test.txt.gz: 0.0% -- replaced with test.txt
从输出可以看到,由于当前目录下存在”test.txt”文件, 所以会出现是否覆盖的提示,如果我们不想让它输出次内容。可以加上”-f”参数。
gunzip是gzip的解压缩版,也就是只提供解压缩功能,其参数与gzip一样(不包括”-d”参数),比如我们要解压缩刚刚创建的test.txt.gz可以如下输入:
$ gunzip -v test.txt.gz
test.txt.gz: 0.0% -- replaced with test.txt
zcat是用来查看gzip压缩文件对应的源文件的内容。使用如下:
$ zcat test.txt.gz
This is a test!
2. bizp2/bunzip2/bcat
bzip2 相比 gzip 具有更好的压缩比, 它的用法几乎与gzip 相同。bzip2建立的压缩文件以.bz2为扩展名,下面是bzip2的常用参数:
-c:将压缩后的数据输出都屏幕(不生成压缩文件)。
-d:解压缩文件
-f:强制覆盖已有的文件
-k:保留源文件(默认是不保留的)
-t:测试压缩文件的完整性(与-v选项一起使用)
-r:递归的压缩所有文件
-v:详细的输出执行过程(默认不输出)
-z:压缩文件(默认参数)
bunzip2用于解压缩bzip2创建的压缩文件,bcat则是查看bzip2压缩文件对应源文件的内容。它们的使用方法与gzip/gunzip/zcat类似,不在这里赘述,请参照gzip/gunzip/zcat的用法。
3. tar
上面的gzip和bizp2命令大多只针对单一的文件进行压缩,虽然也可以对目录进行递归的压缩,但是是基于单个文件进行压缩的,也就是说会为该目录下每一个文件创建一个压缩文件,而不是创建一整个归档文件,这时,就要使用到tar命令了,它即可单简单的将多个目录打包(不进行压缩),也可以通过gzip和bzip2对打包的内容加以压缩。tar命令有多个参数支持多种操作。下面就来看看tar命令的使用吧!
tar命令的参数分为多个种类,包括主操作、操作修饰、重写控制、设备分块、选择归档格式、设备分块、压缩选项和提示选项等等。本文指介绍主操作、选择归档格式、压缩选项和提示选项。这些参数如下:
/* 主操作选项 */
-A:追加tar格式的归档文件到归档
-c:创建一个新的归档
-r:追加文件到归档结尾
-t:列出归档文件的内容
-u:更新归档中的文件,如果归档中不存在则添加。
-x:从归档中解出文件
/* 选择归档格式选项 */
-H:后接文档格式,文档格式有以下几种
gnu-- 1.13.x(默认格式也是常用的)
oldgnu--GNU format as per tar <=1.12
pax--POSIX 1003.1-2001(pax)
posix--等同于 pax
ustar-- POSIX 1003.1-1988 (ustar) 格式
V7--old V7 tar 格式
/* 压缩选项 */
-a:根据扩展名自动确定压缩程序
-j:通过bizp2来压缩
-z:通过gzip来压缩
-Z:通过compress来压缩
/* 其他选项 */
-v:详细的输出压缩过程
-f:指定压缩后的文件名或要解压缩的文件名
比如我么要压缩上述的test.txt文件,可以输入如下命令:
$ tar -jcf test.txt.tar.bz2 test.txt
或者
$ tar -zcf test.txt.tar.gz test.txt
或者
$ tar -acf test.txt.tar.gz test.txt
上面第一种和第二种分别使用不同的压缩工具进行压缩,第三种是根据扩展名自动确定压缩工具。如果我们要解压,只用将”-c”参数换成”-x”参数即可。
当然我们也可以不进行压缩,只是将多个文件进行简单的归档,可以如下输入:
$ tar -cf [output-file] [input-file]
其中output-file和input-file分别指定输出文件名和要进行归档的文件的名字。