Linux 档案的压缩与打包
gzip, zcat:
[root @test /root ]# gzip [-d#] filename <==压缩与解压缩 [root@test/root]#zcatfilename.gz<==读取压缩档内容 参数说明: -d:解压缩的参数! -#:压缩等级,1最不好,9最好,6是默认值! 范例: [root@test/root]#gzipman.config 会产生 man.config.gz 这个档案[root @test /root]# zcat man.config.gz 会读取出 man.config 的内容 [root @test /root]# gzip -d man.config.gz [root@test/root]#gunzipman.config.gz 解压缩,产生 man.config 这个档案[root @test /root]# gzip -9 man.config 以最大压缩比压缩 testing 这个档案! |
- bzip2, bzcat:
语法:[root@testroot]#bzip2[-dz]filename<==压缩解压缩指令
[root@testroot]#bzcatfilename.bz2<==读取压缩文件内容指令
参数说明:
-d:解压缩的意思!
-z:压缩的意思!
范例:
同样的,我们以刚刚拷贝过来的/root/man.config这个档案为例
[root@testroot]#bzip2–zman.config
[root@testroot]#bzcatman.config.bz2
[root@testroot]#bzip2–dman.config.bz2
[root@testroot]#bunzip2man.config.bz2
刚刚的compress附档名自动建立为.Z,这里的bzip2则是自动的将附档名建置为.bz2啰!所以当我们使用具有压缩功能的bzip2–z时,那么刚刚的man.config就会自动的变成了man.config.bz2这个档名啰!好了,那么如果我想要读取这个档案的内容呢?是否一定要解开?当然不需要啰!可以使用简便的bzcat这个指令来读取内容即可!例如上面的例子中,我们可以使用bzcatman.config.bz2来读取数据而不需要解开!此外,当您要解开一个压缩档时,这个档案的名称为.bz,.bz2,.tbz,.tbz2等等,那么就可以尝试使用bzip2来解看看啦!当然啰,也可以使用bunzip2这个指令来取代bzip2–d啰
语法:[root@test/root]#tar[-zxcvfpP]filename
[root@test/root]#tar-N'yyyy/mm/dd'/path-zcvftarget.tar.gzsource
参数说明:
-z:是否同时具有gzip的属性?
-x:解开一个压缩档案的参数指令!
-t:查看tarfile里面的档案!
-c:建立一个压缩档案的参数指令
-v:压缩的过程中显示档案!
-f:使用档名,请留意,在f之后要立即接档名喔!不要再加参数!
例如使用『tar-zcvfPtfilesfile』就是错误的写法,要写成
『tar-zcvPftfilesfile』才对喔!
-p:使用原档案的原来属性(属性不会依据使用者而变)
-P:可以使用绝对路径
-N:比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--excludeFILE:在压缩的过程中,不要将FILE打包!
范例:
[root@test/root]#tar-cvfdirectory.tardirectory
只将目录整合打包成一个档案[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 底下!』嘿嘿!不需要再建立一次中间档案!不过,使用上面的语法最好使用『绝对路径』,比较不会有问题!这个方式适合不想要建立中间档案时!
- 这是一个多用途的压缩指令!刚刚我们提到的 compress 与 gzip 是可以适用在一个档案的压缩上面,但是如果是要压缩一个目录呢?!这时该如何是好?!呵呵! tar 就派上用场了! tar 可以将整个目录或者是规定的档案都整合成一个档案!例如上面的第三个范例,他可以将 /home/test 底下的档案全部整合成一个档案!而第一个范例中,则是将目录整合成一个档案!同时, tar 可以配合 gzip (这个 gzip 的功能已经已经附加上 tar 里面去了),同时整合并压缩!呵呵!很方便吧!『 tar 用来作备份是很重要的指令! 』而由于 tar 整合过后的档案我们通常会取名为 *.tar ,而如果还含有 gzip 的压缩属性,那么就取名为 *.tar.gz 啰!取这个文件名只是为了方便我们记忆这个档案是什么属性罢了!并没有实际的意义在!
- 另外,需要注意的是,在使用的参数方面,有还有几个有用的参数需要来了解一番,亦即是 -p 与 -P 这两个!如果你曾经在 crontab 里面下达过一些备份的指令时,那么常常会收到 root 的信件,就是说,系统会告诉你『我将 / 的 tar 里头的内容拿掉了!』也就是说,原本你备份的档案是 /home/test ,但是由于担心未来你在解开压缩的时候,会产生一些困扰,因为在 tar 里面的档案如果是具有『绝对路径』的话,那么你解开的档案将会『一定』在该路径下也就是 /home/test,而不是绝对路径(这里请用心的想一想!),这样子的最大困扰是,万一有人拿走了你的这个档案,并且将该档案在他的系统上面解开!万一他的系统上面正巧也有 /home/test 这个目录,哈哈!他的档案就会『正巧』被覆盖了!所以啰,在预设的情况中,如果是以『绝对路径』来建立打包档案,那么将会自动的将 / 拿掉!这是为了刚刚说明的『安全』为前提所做的默认值。好了!但是你就是要以绝对路径来建立打包的档案!那么就加入 -P 这个参数吧(请注意!是大写字符)!这样就可以啦!那么 -p 是什么(小写字符)?呵呵!那个 -p 是 permission 的意思,也就是『权限』啦!使用 -p 之后,被打包的档案将不会依据使用者的身份来改变权限喔!
- 这里还有一个值得注意的参数呦!那就是在备份的情况中很常使用的 -N 的这个参数!你可以参考一下上面的例子就可以知道啦!在这个例子当中,相当重要的就是那个日期啦!在备份的情况当中,我们都希望只要备份较新的档案就好了,为什么呢?因为旧的档案我们已经有备份啰!干嘛还要再备份一次,浪费时间也浪费系统资源!这个时候此一参数就显的相当的重要了啊!
- 在上面的例子中,最后一个例子很有趣『tar cvf - /home | tar -xvf - 』!他是直接以管线命令『 pipe 』来进行压缩、解压缩的过程!在上面的例子中,我们想要『将 /home 底下的数据直接 copy 到目前所在的路径,也就是 /root 底下来』,但是又觉得使用 cp -r 有点麻烦,那么就直接以这个打包的方式来打包,其中,指令里面的 - 就是表示那个被打包的档案啦!由于我们不想要让中间档案存在,所以就以这一个方式来进行复制的行为啦!
- tar 的功能相当的多,而由于他是经由『打包』之后再处理的一个过程,所以常常我们会听到 tarball 的档案,那就是经由 tar 打包再压缩的档案啦!此外, tar 也可以用在备份的储存媒体上面,最常见的就是磁带机了!假设我的磁带机代号为 /dev/st0 ,那么我要将我的 /home 底下的数据都给他备份上去时,就是使用 tar /dev/st0 /home 就可以啦!很不错吧!
gzip-dtesting.tar.gz
tar-xvftesting.tar
- cpio:
语法:[root@test/root]#cpio-covB>[file|device]<==备份
[root@test/root]#cpio-icduv<[file|device]<==还原
参数说明:
-o:将资料copy输出到档案或装置上
-i:将数据自档案或装置copy出来系统当中
-t:查看cpio建立的档案或装置的内容
-c:一种较新的portableformat方式储存
-v:让储存的过程中文件名称可以在屏幕上显示
-B:让预设的Blocks可以增加至5120bytes,预设是512bytes!
这样的好处是可以让大档案的储存速度加快(请参考i-nodes的观念)
-d:自动建立目录!由于cpio的内容可能不是在同一个目录内,
如此的话在反备份的过程会有问题!这个时候加上-d的话,
就可以自动的将需要的目录建立起来了!
-u:自动的将较新的档案覆盖较旧的档案!
范例:
[root@test/root]#find/-print|cpio-covB>/dev/st0
将搜寻到的档案存到磁带机[root @test /root]# cpio -icduv < /dev/st0 将磁带机的数据还原回来!
[root @test /root]# cpio -icdvt < /dev/st0 > /tmp/content 将磁带机的内容(文件名而已)转存到 /tmp/content
[root @test /root]# find / -type -f | cpio -o > /tmp/root.cpio
[root@test/root]#cpio-i</tmp/root.cpio
上面这个例子可以马上实作看看!先输出到/tmp/root.cpio这个档案,然后再给他还原回来!
这个cpio还蛮神奇的呢!他最适用于备份的时候使用的一个指令了!为什么呢?因为他并不像cp一样,可以直接的将档案给他copy过去,例如cp*/tmp就可以将所在目录的所有档案copy到/tmp底下,在cpio这个指令的用法中,由于cpio无法直接读取档案,而是需要『每一个档案或目录的路径连同文件名一起』才可以被记录下来!因此,cpio最常跟find这个指令一起使用了!这个cpio好像不怎么好用呦!但是,嘿嘿!他可是备份的时候的一项利器呢!因为他可以备份任何的档案,包括/dev底下的任何装置档案!呵呵!所以他可是相当重要的呢!!您说是吧!而由于cpio必需要配合其它的程序,例如find来建立档名,所以,cpio与管线命令及命令重导向的相关性就相当的重要了!上面的例子刚好可以用来复习一下上一章节里面提到的内容!加油啦!- 备份:在备份的用法当中,他可以直接跟输出到档案或者是装置当中,但是如前面说过的,你必须要配合 find 这个指令较好呦!那个 -o 表示将档案或目录输出到右边去的意思!还记得命令重导向吗?对啦!就是那个东西啰!在上面的例子中,我们将备份的数据给他 copy 到磁带机里头去!那个磁带机的装置代号就是 /dev/st0 啰!
- 还原:那么如何给他反过来解开呢?呵呵!可以直接给他下达 cpio -i 就是 input 就对啦!例如上头的例子啰!这个指令可以多看看呢