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