分类: LINUX
2008-10-18 13:30:17
在Windows系统下最常见的压缩文件是zip和rar,Linux系统就不同了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名,此外Windows系统下的.zip和.rar也可以在Linux下使用,本节主要讲解如何管理这些软件包。
在具体讲述压缩文件之前需要了解打包和压缩的概念。打包是指将许多文件和目录变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。Linux系统中的很多压缩程序只能针对一个文件进行压缩,这样当需要压缩一大堆文件时,就得先借助其他的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行 压缩。
Linux系统下最常用的打包程序是tar,使用tar程序打出来的包称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其他的程序来进行压缩了。
tar可以为文件和目录创建备份。利用tar,用户可以为某一特定文件创建备份,也可以在备份中改变文件,或者向备份中加入新的文件。
tar最初被用来在磁带上创建备份,现在,用户可以在任何设备上创建备份,如软盘。利用tar命令可以把一大堆的文件和目录打包成一个文件,这对于备份文件或将几个文件组合成为一个文件进行网络传输是非常有用的。
tar [主选项+辅选项][文件或者目录]
说明:
tar命令的选项有很多,使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。
主选项:
c:创建新的档案文件。如果用户想备份一个目录或一些文件,就要选择这个选项。
r:把要存档的文件追加到档案文件的未尾。例如用户已经做好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。
t:列出档案文件的内容,查看已经备份了哪些文件。
u:更新文件,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。
x:从档案文件中释放文件。
辅助选项:
b:该选项是为磁带机设定的,其后跟一个字,用来说明区块的大小,系统预设值为20(20*512 bytes)。
f:使用档案文件或设备,这个选项通常是必选的。
k:保存已经存在的文件。例如在还原某个文件的过程中遇到相同的文件,则不会进行覆盖。
m:在还原文件时,把所有文件的修改时间设定为现在。
M:创建多卷的档案文件,以便在几个磁盘中存放。
v:详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
w:每一步都要求确认。
z:用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
例9.19:把/root/abc目录包括它的子目录全部做备份文件,备份文件名为abc.tar。
#tar cvf abc.tar /root/abc
abc/
abc/a
abc/b
abc/c
#ls -l
总用量 140
drwxr-xr-x 2 root root 4096 4月 20 00:52 abc
-rw-r--r-- 1 root root 10240 4月 20 00:53 abc.tar
-rw-r--r-- 1 root root 3051 2007-03-15 anaconda-ks.cfg
drwxr-sr-x 3 root root 4096 4月 14 23:35 Desktop
-rw-r--r-- 1 root root 48539 2007-03-15 install.log
//可以看到abc.tar就是abc文件打包后的文件,其容量比打包前要大
例9.20:查看abc.tar备份文件的内容,并显示在显示器上。
#tar tvf abc.tar
drwxr-xr-x root/root 0 2004-04-20 00:52:57 abc/
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/a
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/b
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/c
//可以看到该打包文件由一个目录和该目录下的3个文件打包而成
例9.21:将打包文件abc.tar解包出来。
#tar xvf abc.tar
abc/
abc/a
abc/b
abc/c
#ls -l
总用量 148
drwxr-xr-x 2 root root 4096 4月 20 00:52 abc
-rw-r--r-- 1 root root 10240 4月 20 00:53 abc.tar
-rw-r--r-- 1 root root 175 4月 20 00:55 abc.tar.gz
-rw-r--r-- 1 root root 3051 2007-03-15 anaconda-ks.cfg
drwxr-sr-x 3 root root 4096 4月 14 23:35 Desktop
-rw-r--r-- 1 root root 48539 2007-03-15 install.log
例9.22:将文件d增加到abc.tar包里面去。
#tar rvf abc.tar d
d
#tar tvf abc.tar
drwxr-xr-x root/root 0 2004-04-20 00:52:57 abc/
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/a
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/b
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/c
-rw-r--r-- root/root 15 2004-04-20 01:17:55 d
例9.23:更新原来tar包abc.tar中的文件a。
#tar uvf abc.tar d
#tar tvf abc.tar
drwxr-xr-x root/root 0 2004-04-20 00:52:57 abc/
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/a
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/b
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/c
-rw-r--r-- root/root 15 2004-04-20 01:22:14 d
例9.24:在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件都复制到备份文件中。
#tar cf /dev/fd0 /home
例9.25:恢复软盘设备磁盘中的文件。
#tar xf /dev/fd0
例9.26:在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件都复制到备份文件中,并在软盘已满的时候提醒用户再放入一张新的软盘。
#tar cMf /dev/fd0 /home
例9.27:恢复多张软盘设备磁盘中的文件,并在必要时提醒放入第二张软盘。
#tar xMf /dev/fd0
tar可以在打包或解包的同时调用其他的压缩程序,比如调用gzip、bzip2等。
gzip是GNU组织开发的一个压缩程序,以.gz结尾的文件就是gzip压缩的结果。与gzip相对应的解压程序是gunzip,tar中使用参数“z”来调用gzip,下面举例说明。
例9.28:把/root/abc目录包括其子目录全部做备份文件,并进行压缩,备份文件名为abc.tar.gz。
#tar zcvf abc.tar.gz /root/abc
abc/
abc/a
abc/b
abc/c
#ls -l
总用量 148
drwxr-xr-x 2 root root 4096 4月 20 00:52 abc
-rw-r--r-- 1 root root 10240 4月 20 00:53 abc.tar
-rw-r--r-- 1 root root 175 4月 20 00:55 abc.tar.gz
-rw-r--r-- 1 root root 3051 2007-03-15 anaconda-ks.cfg
drwxr-sr-x 3 root root 4096 4月 14 23:35 Desktop
-rw-r--r-- 1 root root 48539 2007-03-15 install.log
//可以看到abc.tar.gz就是abc文件压缩后的文件,其容量比打包前要小
例9.29:查看abc.tar.gz备份文件的内容,并显示在显示器上。
#tar ztvf abc.tar.gz
drwxr-xr-x root/root 0 2004-04-20 00:52:57 abc/
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/a
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/b
-rw-r--r-- root/root 15 2004-04-20 00:52:57 abc/c
//可以看到该压缩文件由一个目录和该目录下的3个文件压缩而成
例9.30:将压缩文件abc.tar.gz解压缩出来。
#tar zxvf abc.tar.gz
abc/
abc/a
abc/b
abc/c
#ls -l
总用量 148
drwxr-xr-x 2 root root 4096 4月 20 00:52 abc
-rw-r--r-- 1 root root 10240 4月 20 00:53 abc.tar
-rw-r--r-- 1 root root 175 4月 20 00:55 abc.tar.gz
-rw-r--r-- 1 root root 3051 2007-03-15 anaconda-ks.cfg
drwxr-sr-x 3 root root 4096 4月 14 23:35 Desktop
-rw-r--r-- 1 root root 48539 2007-03-15 install.log
bzip2是一个压缩能力更强的压缩程序,以.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对应的解压程序是bunzip2。tar中使用参数“j”来调用gzip,下面举例说明。
例9.31:将目录/root/abc及该目录所有文件压缩成abc.tar.bz2文件。
#tar cjf abc.tar.bz2 /root/abc
#ls -l
总用量 116
drwxr-xr-x 2 root root 4096 4月 20 00:52 abc
-rw-r--r-- 1 root root 175 4月 20 01:32 abc.tar.bz2
-rw-r--r-- 1 root root 3051 2007-03-15 anaconda-ks.cfg
drwxr-sr-x 3 root root 4096 4月 14 23:35 Desktop
-rw-r--r-- 1 root root 48539 2007-03-15 install.log
例9.32:将abc.tar.bz2文件解压缩。
#tar xjf abc.tar.bz2
#ls -l
总用量 116
drwxr-xr-x 2 root root 4096 4月 20 00:52 abc
-rw-r--r-- 1 root root 175 4月 20 01:32 abc.tar.bz2
-rw-r--r-- 1 root root 3051 2007-03-15 anaconda-ks.cfg
drwxr-sr-x 3 root root 4096 4月 14 23:35 Desktop
-rw-r--r-- 1 root root 48539 2007-03-15 install.log
compress也是一个压缩程序,.Z结尾的文件就是bzip2压缩的结果。与 compress相对的解压程序是uncompress。tar中使用Z这个参数来调用gzip。下面举例说明。
例9.33:将文件a压缩成a.tar.Z文件。
#tar -cZf a.tar.Z it
#ls -l
总用量 96
-rw-r--r-- 1 root root 0 4月 20 01:48 a
-rw-r--r-- 1 root root 3051 2007-03-15 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 4月 20 01:47 a.tar.Z
drwxr-sr-x 3 root root 4096 4月 14 23:35 Desktop
-rw-r--r-- 1 root root 48539 2007-03-15 install.log
例9.34:将文件a.tar.Z解压缩。
#tar -xZf a.tar.Z
chinaunix网友2008-10-18 13:47:01
现在有一个需求,不知道该如何才能实现 压缩: tar czvf /data/backup/test.tar.gz /data/a/b/directory 解压: cd /data/test tar xzvf /data/backup/test.tar.gz 问题是,解压后的文件,在/data/test/data/a/b/directory里面 能否压缩时只保留directory以下的所有目录,以directory作为/,而不是/data/a/b/directory? 问题已经解决,找到了GNU tar的官方资料 http://www.delorie.com/gnu/docs/tar/tar_98.html 这样写就可以解决了 tar czvf /data/backup/test.tar.gz /data/a/b/directory 改成 tar czvf /data/backup/test.tar.gz -C /data/a/b directory -C是临时切换工作目录,-P是绝对路径,在这里只用到-C参数就行