如果您常常在网络上面捉 Linux 的资料下来玩的话,大概会晓得的是,这些供人下载的档案通常都是『压缩』过的!为了什么?上面已经稍微提过啦!呵呵!压缩过的档案具有节省频宽、节省磁盘空间等等的优点,并且还方便携带呢! ^_^ !而,您应该也会知道,这些被压缩过的档案,通常其附檔名都是『 *.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2 』等等的,为什么要订定这些压缩档案附档名为这样的模样呢?这是因为在 Linux 上面压缩的指令相当的多,并且,这些压缩指令可能无法针对每种压缩档案都可以解的开,毕竟目前的压缩技术五花八门,每种压缩计算的方法都不是完全相同的,所以啰,当你捉到某个压缩档时,自然就需要知道压缩他的是那个指令啦,好用来对照着解压缩啊! ^_^!也就是说,虽然 Linux 档案的属性基本上是与文件名没有绝对关系的,能不能执行与他的档案属性有关而已,与文件名的关系很小!但是,为了帮助我们小小的人类脑袋瓜子,所以适当的文件名称附档名还是必要的!因此,目前就有一些常常见到的压缩档案的附档名啦!我们仅列出常见的几样在底下,给大家权做参考之用:
· *.Z compress 程序压缩的档案;
· *.bz2 bzip2 程序压缩的档案;
· *.gz gzip 程序压缩的档案;
· *.tar tar 程序打包的资料,并没有压缩过;
· *.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩!
目前常见的压缩程序主要就是如同上面提到的附档名对应的那些指令啦!最早期的要算是 compress 这个家伙了,而后,后来的 GNU 计画开发出新一代的压缩指令 gzip ( GNU zip ) 用来取代 compress 这个老牌的压缩指令,再来还有 bzip2 这个压缩比更好的压缩指令呢!不过,这些指令通常仅能针对一个档案来压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案,岂不烦人?,此时,那个所谓的『打包软件』就显的很重要啦!在 Unix-Like 当中,有个软件很好玩,他就是 tar 这支程序!这个 tar 可以将很多档案『打包』成为一个档案!甚至是目录也可以这么玩。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多档案集结成为一个档案,事实上,他并没有提供压缩的功能,后来, GNU 计画中,将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!
底下我们就来谈一谈这些在 Linux 底下基本的压缩指令吧!
tar 语法
tar [-zxcvfpP] filename
tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source
参数说明:
-z :是否同时具有 gzip 的属性?
-x :解开一个压缩档案的参数指令!
-t :查看 tarfile 里面的档案!
-c :建立一个压缩档案的参数指令
-v :压缩的过程中显示档案!
-f :使用檔名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原档案的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
[root @test /root]# tar -cvf directory.tar directory
只将目录整合打包成一个档案
[root @test /root]# tar -zcvf directory.tar.gz directory
除了将目录打包外,同时以 gzip 压缩
[root @test /root]# tar -zcvf filename.tar.gz /home/test/*
将 /home/test/ 这个目录下的档案全部打包并压缩成为一个 filename.tar.gz 的档案
[root @test /root]# tar -xvf directory.tar
解 tar 的封包,请注意,由于没有 gzip (.tar 而非 .tar.gz) 的作用,所以只要使用 –xvf 即可!不需要加上 z ,否则会显示有问题!
[root @test /root]# tar -zxvf directory.tar.gz
这个就是有加上 gzip 的压缩的结果!所以需要加上 –z 呦!
[root @test /root]# tar –ztvf directory.tar.gz
这个 t 可以用来查看 tar 里面的档案信息呢!而不需要将他解开!
[root @test /root]# tar -zcvPf home.tar.gz /home
则建立起来的压缩档内档案为绝对路径
请注意,使用这个 P 的参数时,不要将 P 加在 f 后面,因为
f 之后要立即接档名才行喔!
[root @test /root]# tar -N '2002/06/25' -zcvf home.tar.gz /home
上面是说 在 /home 这个目录中,比 2002/06/25 日还要新的档案才会被打包进入 home.tar.gz 这个档案中!
[root @test /root]# tar -zcvf host.tar.gz / --exclude /mnt --exclude /proc
上面是说,将根目录的所有数据都打包进 host.tar.gz 这个档案中,但是 /mnt 及 /proc 则不打包!
[root @test /root]# tar -cvf - /home | tar -xvf -
上面的意思是『将 /home 打包之后,直接解压缩在 /root 底下!』嘿嘿!不需要再建立一次中间档案!不过,使用上面的语法最好使用『绝对路径』,比较不会有问题!这个方式适合不想要建立中间档案时!