tar 命令

[root@linux~]# tar [-cxtzjvfpPN]  文件与目录  ....

参数:

-c  :建立一个压缩文件的参数指令 (create  的意思 )

-x  :解开一个压缩文件的参数指令!

-t  :查看  tarfile  里面的文件!

特别注意,在参数的下达中,  c/x/t  仅能存在一个!不可同时存在!

因为不可能同时压缩与解压缩。

-z  :是否同时具有  gzip  的属性?亦即是否需要用  gzip  压缩?

-j  :是否同时具有  bzip2  的属性?亦即是否需要用  bzip2  压缩?

-v  :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

-f  :使用档名,请留意,在  f  之后要立即接档名喔!不要再加参数!

   例如使用『  tar -zcvfP tfile sfile 』就是错误的写法,要写成

   『 tar -zcvPf tfile sfile 』才对喔!

-p  :使用原文件的原来属性(属性不会依据使用者而变)

-P  :可以使用绝对路径来压缩!

-N  :比后面接的日期 (yyyy/mm/dd) 还要新的才会被打包进新建的文件中!

--exclude FILE :在压缩的过程中,不要将  FILE  打包!

范例:

范例一:将整个  /etc  目录下的文件全部打包成为  /tmp/etc.tar

[root@linux~]# tar -cvf /tmp/etc.tar /etc <== 仅打包,不压缩!

[root@linux~]# tar -zcvf /tmp/etc.tar.gz /etc <== 打包后,以  gzip  压缩

[root@linux~]# tar -jcvf /tmp/etc.tar.bz2 /etc <== 打包后,以  bzip2  压缩

#  特别注意,在参数  f  之后的文件档名是自己取的,我们习惯上都用  .tar  来作为辨识。

#  如果加  z  参数,则以  .tar.gz    .tgz  来代表 gzip  压缩过的  tar file  

#  如果加  j  参数,则以  .tar.bz2  来作为附档名啊~

#  上述指令在执行的时候,会显示一个警告讯息:

#   tar: Removing leading `/' from member names 』那是关於绝对路径的特殊设定。


范例二:查阅上述  /tmp/etc.tar.gz  文件内有哪些文件?

[root@linux~]# tar -ztvf /tmp/etc.tar.gz

#  由於我们使用  gzip  压缩,所以要查阅该  tar file  内的文件时,

#  就得要加上  z  这个参数了!这很重要的!


范例三:将  /tmp/etc.tar.gz  文件解压缩在  /usr/local/src  底下

[root@linux~]# cd /usr/local/src

[root@linuxsrc]# tar -zxvf /tmp/etc.tar.gz

#  在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,

#  我先将工作目录变换到  /usr/local/src  底下,并且解开  /tmp/etc.tar.gz  

#  则解开的目录会在  /usr/local/src/etc  呢!另外,如果您进入  /usr/local/src/etc

#  则会发现,该目录下的文件属性与  /etc/  可能会有所不同喔!


范例四:在  /tmp  底下,我只想要将  /tmp/etc.tar.gz  内的  etc/passwd解开而已

[root@linux~]# cd /tmp

[root@linuxtmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd

#  我可以透过  tar -ztvf  来查阅  tarfile  内的文件名称,如果单只要一个文件,

#  就可以透过这个方式来下达!注意到!  etc.tar.gz  内的根目录  /  是被拿掉了!


范例五:将  /etc/  内的所有文件备份下来,并且保存其权限!

[root@linux~]# tar -zxvpf /tmp/etc.tar.gz /etc

#  这个  -p  的属性是很重要的,尤其是当您要保留原本文件的属性时!


范例六:在  /home  当中,比  2005/06/01  新的文件才备份

[root@linux~]# tar -N '2005/06/01' -zcvf home.tar.gz /home


范例七:我要备份  /home, /etc  ,但不要  /home/dmtsai

[root@linux~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc


范例八:将  /etc/  打包后直接解开在  /tmp  底下,而不产生文件!

[root@linux~]# cd /tmp

[root@linuxtmp]# tar -cvf - /etc | tar -xvf -

#  这个动作有点像是cp-r/etc /tmp  啦~依旧是有其有用途的!

#  要注意的地方在於输出档变成  -  而输入档也变成  -  ,又有一个  |  存在~

#  这分别代表  standard output, standard input  与管线命令啦!

#  这部分我们会在  Bash shell  时,再次提到这个指令跟大家再解释啰!



ZIP

zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gztar.gz2在压缩率方面做得非常好。闲话少说,我们步入正题吧:

我们可以使用下列的命令压缩一个目录:

# zip -r archive_name.zip directory_to_compress


下面是如果解压一个zip文档:

# unzip archive_name.zip


TAR

Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,他仅仅只是一个打包工具,并不负责压缩。下面是如何打包一个目录:

# tar -cvf archive_name.tar directory_to_compress


如何解包:

# tar -xvf archive_name.tar.gz


上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来设置解包的路径:

# tar -xvf archive_name.tar -C /tmp/extract_here/


TAR.GZ

这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。使用下面这种格式去压缩一个目录:

# tar -zcvf archive_name.tar.gz directory_to_compress


解压缩:

# tar -zxvf archive_name.tar.gz


上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来设置解包的路径:

# tar -zxvf archive_name.tar.gz -C /tmp/extract_here/


TAR.BZ2

这种压缩格式是我们提到的所有方式中压缩率最好的。当然,这也就意味着,它比前面的方式要占用更多的CPU与时间。这个就是你如何使用tar.bz2进行压缩。

# tar -jcvf archive_name.tar.bz2 directory_to_compress

#bzip2 -d archive_name.tar.bz2

然后:

tar -xvf archive_name.tar即可


上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来设置解包的路径:

# tar -jxvf archive_name.tar.bz2 -C /tmp/extract_here/


数据压缩是非常有用的,尤其是对于备份来说。所以,你现在应该考虑在你的备份脚本中使用你在这里学到的压缩方式备份你基本的规则文件以减小你备份文件的大小。


过段时间之后,你就会意识到,在压缩率与CPU占用时间上会有一个平衡,你也要学会如何去权衡什么时候你需要一个快但是压缩率低,什么时候需要一个压缩率高但是CPU点用高的压缩方式,然后你才能避免无谓的空间与时间。