gzip,bzip2,tar,zip命令使用方法详解

时间:2022-12-10 13:55:09
1. gzip
gzip是GNU的压缩程序。它只对单个文件进行压缩。基本用法如下:
$ gzip filename
程序执行以后,文件名会变成filename.gz,而且一般情况下大小会比原文件要小。注意,程序并不新建一个新的文件filename.gz, 而是将filename变成filename.gz。这个基本用法考虑了压缩时间和压缩后文件尺寸的平衡问题(注:如果要使压缩后的文件更小,就需要用到更多的时间)。要得到最小文件大小(最大压缩),可以使用如下用法:
$ gzip -9 filename
这样就可以得到gzip能够压缩的最小文件尺寸,但是需要更长的压缩时间。上面的数字越小,压缩就越快,相反压缩率也就越小。

将gzip压缩的文件解压缩,有两个命令可以使用,但实际上它们是同一个程序。gzip程序可以识别的压缩文件的后缀名包括:.gz, -gz, .z, -z, .Z 和 -Z。
可以使用的命令是:
     $ gunzip filename.gz
或 $ gzip -d filename.gz
使用上面的命令后,filename.gz会被解压缩并去掉后缀名.gz变成filename。

2. bzip2
bzip2是 Slackware Linux里面压缩程序的另一个选择。它的压缩算法不同于gzip。与gzip相比,bzip2的主要优点在于它压缩后文件的尺寸,对于相同文件,bzip2 压缩后的尺寸几乎总是小于gzip的压缩结果。有些时候,这个差距会相当大。bzip2的缺点在于,它占用的CPU的使用率和压缩时间会比gzip更多。

bzip2的使用方法和gzip是一样的,但bzip2使用后缀名.bz2.
$ bzip2 filename
$ bunzip2 filename.bz2
$ bzip2 -d filename.bz2
$ bzip2 -9 filename

-c :将压缩的过程产生的资料输出到屏幕上。
例如:将文件 man.config 用最佳的压缩比压缩,并保留原本的文件
[root@linux tmp]# bzip2 -9 -c man.config > man.config.bz2

bzcat
读取bz文件中的内容,并显示到屏幕上,bz文件还存在。比如:
bzcat filename.bz2

3. tar
tar是一个GNU的磁带归档程序。它可以将几个文件或者目录打包压缩成一个文件。这个特点让我们可以压缩整个目录树,而单使用gzip和 bzip2是无法做到的。
a.tar.gz是先把一些文件用tar打包,然后在用gzip压缩。
a.tar.bz2是先将一些文件用tar打包,然后再用bzip2压缩。

tar文件解包:
$ tar xzvf filename.tar.gz           或$ tar -xvzf filename.tar.gz
$ tar xjvf filename.tar.bz2         或$ tar -xvjf filename.tar.bz2

-x表示提取文件。它告诉tar将打包的文件分离还原成打包前的状态。
-v即verbose,表示详细细节。加入这个参数让程序将解包出来的每一个文件列出来。
-z是告诉tar先运行gunzip将文件解压缩。
-j是告诉tar先运行bunzip将文件解压缩。
-f是指定tar处理的文件名

这里需要注意的是,tar会把解包的文件放到当前目录。所以如果要把一个放在/tmp目录文件解压缩到你的家目录的话,这里有一些做法可供选择:
选择一,把文件拷贝到家目录,然后解包
$ cd $HOME
$ cp /tmp/filename.tar.gz .
$ tar -xvzf filename.tar.gz
选择二,指定需要解包文件的路径
$ cd $HOME
$ tar -xvzf /tmp/finename.tar.gz
选择三,用-C 参数指定解包后存放文件的路径
$ cd /
$ tar -xvzf /tmp/filename.tar.gz -C $HOME

tar文件打包:
$ tar -czvf filename.tar.gz .
$ tar -cjvf filename.tar.bz2 ./src/

-c是告诉tar来建立一个打包文件
-z是将打包的文件通过gzip程序进行压缩。
-j是将打包的文件通过bzip2程序进行压缩。
-f是指定tar处理的文件名。
filename.tar.gz 是你将要建立的文件名。
命令行最后的"."或"./src/"是指定tar打包的目录,包括目录和目录下所有文件/文件夹。

4. zip
zip文件的压缩程序叫做zip,解压缩程序叫做unzip。 Linux支持该命令。
$ zip foo *
这行命令会建立一个包涵当前目录所有文件的的zip文件 foo.zip,zip会自动将.zip后缀名加上。
加上参数-r使zip将当前目录下的所有文件夹目录也加在zip文件中:
$ zip -r foo *

解压缩文件:
$ unzip foo.zip
这样会解压缩foo.zip里面的所有文件和文件夹。