UNIX命令解析——tar 命令高级应用

原文地址:UNIX命令解析——tar 命令高级应用  作者:macg

tar -cvf tar文件 源文件
源文件可以是*,可以是目录,可以是多个目录)
tar –czvf sqlhosts.tar *
tar –czvf sqlhosts.tar /.rhosts
tar –czvf sqlhosts.tar /.rhosts /home1/scadm/.rhosts /home1/unoadmin/.rhosts


tar命令无法自动生成.tar.gz扩展名,得自己加
[macg@localhost ~]$ tar -czvf wwwtar www
[macg@localhost ~]$ ls -l
drwxrwxr-x 7 macg macg 4096 Dec 1 12:46 www
-rw-rw-r-- 1 macg macg 1866761 Dec 3 18:38 wwwtar


tar三个重要参数
-f 允许指定文件名
不带f参数,后面的文件名参数就不管用,系统会取缺省文件名
-v Verbose , 显示每个被处理的文件名
如无此选项,tar不报告文件信息
-z 用gzip来压缩/解压缩文件


tar 是连文件属性一起tar和解 tar的,相当于cp –rp,所以tar是非常好的备分工具
[root@localhost tiptest]# ls -l www
total 608
-rw-r--r-- 1 macg macg 6396 Nov 29 15:12 book.TXT
-rw-r--r-- 1 macg macg 1161 Nov 29 19:25 car-right1.html
-rw-r--r-- 1 macg macg 1096 Nov 29 15:12 car-right.html
-rw-r--r-- 1 macg macg 3242 Nov 29 15:12 cc.html
-rw-r--r-- 1 macg macg 3259 Nov 29 15:12 cc.html.bak
drwxr-xr-x 4 macg macg 4096 Feb 9 13:53 data
[root@localhost tiptest]# tar -cvf tipwww.tar www

[root@localhost]# tar -xvf tipwww.tar

[root@localhost]# ls -l www
total 608
-rw-r--r-- 1 macg macg 6396 Nov 29 15:12 book.TXT
-rw-r--r-- 1 macg macg 1161 Nov 29 19:25 car-right1.html
-rw-r--r-- 1 macg macg 1096 Nov 29 15:12 car-right.html
-rw-r--r-- 1 macg macg 3242 Nov 29 15:12 cc.html
-rw-r--r-- 1 macg macg 3259 Nov 29 15:12 cc.html.bak
drwxr-xr-x 4 macg macg 4096 Feb 9 13:53 data


Tar几个不常用的选项
-t 列出tar文件内内容
-r 追加到档案文件的未尾
例如用户已经做好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中
-u 更新
相同文件会比较更新日期,修改过的文件会被tar入


tar -tvf
[macg@localhost ~]$ tar -tvf wwwtar
drwxrwxr-x macg/macg 0 2006-12-01 12:46:07 www/
-rw-r--r-- macg/macg 6396 2006-11-29 15:12:04 www/book.TXT
-rw-r--r-- macg/macg 1096 2006-11-29 15:12:04 www/car-right.html
-rw-r--r-- macg/macg 3242 2006-11-29 15:12:04 www/cc.html
-rw-r--r-- macg/macg 58368 2006-11-29 15:12:04 www/fire2.xls
-rw-r--r-- macg/macg 25371 2006-11-29 15:12:05 www/resume.html


tar -rvf 追加
$ tar -rvf mysqlt mysqltmp/testtar1.file 追加一个文件
mysqltmp/testtar1.file

$ tar -tvf mysqlt
drwxrwxr-x macg/macg 0 2006-12-03 18:52:34 mysqltmp/
-rw-rw-r-- macg/macg 3140 2006-11-14 13:38:41 mysqltmp/pp.c
-rw-rw-r-- macg/macg 2687 2006-11-14 13:38:36 mysqltmp/pp.c~
-rw-rw-r-- macg/macg 0 2006-12-03 18:52:34 mysqltmp/testtar.file
-rw-rw-r-- macg/macg 0 2006-12-03 19:09:30 mysqltmp/testtar1.file


tar -uvf 比较tar文件和目录中文件的最近更新时间,修改过的才tar入
常用于定期对目录tar备分
· 文件更新不替换旧文件
$ tar -cvf txing.tar tiptest/ 建立一个tar文件
tiptest/
tiptest/tt.c
tiptest/slave1.sh
tiptest/testm.c
tiptest/ttt1

改变目录中一文件大小
$ cd tiptest/
[macg@localhost tiptest]$ ls -l ttt1
-rw-rw-r-- 1 macg macg 529 Feb 7 19:16 ttt1
$ echo hahahahahahahah >> ttt1
$ ls -l ttt1
-rw-rw-r-- 1 macg macg 545 Feb 7 19:37 ttt1

$ cd ..
$ tar -uvf txing.tar tiptest/ tar更新
tiptest/
tiptest/ttt1 -uvf 只把新文件加入

$ tar -tvf txing.tar 看结果,新旧两个文件都在,新文件不覆盖旧文件,
。。。
-rw-rw-r-- macg/macg 365 2006-12-22 12:56:57 tiptest/testm.c
-rw-rw-r-- macg/macg 529 2007-02-07 19:16:57 tiptest/ttt1
drwxrwxr-x macg/macg 0 2007-02-07 19:36:41 tiptest/
-rw-rw-r-- macg/macg 545 2007-02-07 19:37:28 tiptest/ttt1


· -utar更新,对新文件就是追加
$ cd tiptest/
$ touch gogo
$ cd ..
$ tar -uvf txing.tar tiptest/
tiptest/
tiptest/gogo



追加-rvf,更新-uvf都只支持tar文件,不支持tar.gz
即使不带-z也不行,因为本身文件是被压缩过的,也打不开

--directory 先到目录..,然后再tar
tar -zcvf test.tar.gz --directory /home
先cd /home
再tar文件,但source缺省就是当前目录(/home)
本参数主要是一种“傻瓜式”的指令,在任何路径都能执行tar

--exclude= 不要备份所指定的档案或目录
tar -zcvpf /archive/full-backup-`date '+%d-%B-%Y'`.tar.gz --directory / --exclude=mnt --exclude=proc --exclude=var/spool
--exclude和--directory合用:除exclude外,directory下所有文件目录都tar入


tar -xzvf tar文件 解tar
只需要tar文件作参数


tar时,自动把路径名的第一个/给去掉,这样解tar时,就可以在当前目录,建立目录路径
即:“tar是绝对路径,解tar是相对路径”
[root@nm ntshellhttp]# tar -cvf ntshellhttp.tar /var/www/html/* /var/www/cgi-bin/* /etc/sudoers /etc/mime.types /etc/httpd/conf/httpd.conf
tar: Removing leading `/' from member names
/var/www/html/addr.shtml
/var/www/html/banner.jpg
/var/www/cgi-bin/modiaddr
/var/www/cgi-bin/pass
/var/www/cgi-bin/power
/var/www/cgi-bin/showint
/var/www/cgi-bin/snmp
/var/www/cgi-bin/up.inc
/etc/sudoers
/etc/mime.types
/etc/httpd/conf/httpd.conf

[root@nm ntshellhttp]# tar -tvf ntshellhttp.tar
-rw-r----- apache/apache 238 2007-11-01 12:48:45 var/www/html/addr.shtml
-rw-r----- apache/apache 23782 2007-10-29 07:47:07 var/www/html/banner.jpg
-rw-r----- apache/apache 237 2007-11-01 12:46:52 var/www/html/date.shtml
-rw-r----- apache/apache 239 2007-11-01 12:46:51 var/www/html/dbinit.shtml
-rwxr----- apache/apache 134 2007-11-01 12:46:40 var/www/cgi-bin/showint
-rwxr----- apache/apache 1707 2007-11-01 12:46:40 var/www/cgi-bin/snmp
-rwxr--r-- apache/apache 49 2007-10-29 05:02:17 var/www/cgi-bin/up.inc
-r--r----- root/root 627 2007-10-31 13:42:51 etc/sudoers
-rw-r--r-- root/root 13167 2007-08-20 13:45:17 etc/mime.types
-rw-r--r-- root/root 34670 2007-11-01 12:45:37 etc/httpd/conf/httpd.conf


因为tar的时候,去掉文件路径最前面的“/”,所以解tar不会将文件解TAR到原目录,只能将这些文件解tar到当前目录下(以当前目录为根目录,然后建立该建的目录)
所以如果想原位置覆盖,必须先 cd 到原来的目录
cd /
tar -xvf ntshellhttp.tar

tar -kx 解压时不会覆盖overwrite
把某个文件还原,在还原的过程中遇到相同的文件,不会进行覆盖
[macg@localhost ~]$ tar -kxzvf mysqlsample.tar.gz
mysqltmp/
mysqltmp/liu.c
tar: mysqltmp/liu.c: Cannot open: File exists
mysqltmp/makefile
tar: mysqltmp/makefile: Cannot open: File exists
mysqltmp/liu.o
tar: mysqltmp/liu.o: Cannot open: File exists 文件存在,就不覆盖
mysqltmp/main.c
tar: mysqltmp/main.c: Cannot open: File exists
mysqltmp/liu
tar: mysqltmp/liu: Cannot open: File exists
mysqltmp/main.o
tar: mysqltmp/main.o: Cannot open: File exists
mysqltmp/tt.c
tar: mysqltmp/tt.c: Cannot open: File exists
mysqltmp/tt
tar: mysqltmp/tt: Cannot open: File exists
tar: Error exit delayed from previous errors
如果不是刻意要覆盖原文件的话,解压最好用-kxzvf代替-xzvf,不覆盖


解tar,如何解到正确的位置
·1。tar -t 看路径
·2。cd 当前位置到合适的路径
·3。截tar,就会覆盖
比如/root/test.tar
里面文件/etc,/usr
则:
cd /
tar -xvf /root/test.tar


部分解tar -----------把tar文件中指定文件解出
# tar xvf backup.tar tt.txt


部分解tar -----------从tar文件中tar出一个子目录来
# tar -tvf export.tar | grep kkk
drwxr-xr-x 102/1 0 2006 12月 7 15:54 /export/home/kkk/
-rw-r--r-- 102/1 144 2006 12月 7 15:53 /export/home/kkk/.profile
-rw-r--r-- 102/1 136 2006 12月 7 15:53 /export/home/kkk/local.cshrc
-rw-r--r-- 102/1 157 2006 12月 7 15:53 /export/home/kkk/local.login
-rw-r--r-- 102/1 174 2006 12月 7 15:53 /export/home/kkk/local.profile
-rw-r--r-- 102/1 0 2006 12月 7 15:54 /export/home/kkk/go
-rw-r--r-- 101/1 0 2006 12月 7 14:52 /export/test/kkk

# tar -xvf export.tar /export/home/kkk

x /export/home/kkk, 0 bytes, 0磁带块
x /export/home/kkk/.profile, 144 bytes, 1磁带块
x /export/home/kkk/local.cshrc, 136 bytes, 1磁带块
x /export/home/kkk/local.login, 157 bytes, 1磁带块
x /export/home/kkk/local.profile, 174 bytes, 1磁带块
x /export/home/kkk/go, 0 bytes, 0磁带块


从tar包中提取单个文件/目录的缺陷
缺陷一:单个文件必须加全路径提取
# tar -tvf etc.tar| grep defaultrouter
-rw-r--r-- 0/0 12 2006 12月 7 02:10 /etc/defaultrouter 先查-tvf
# tar -xvf etc.tar defaultrouter
tar: 1 文件未提取
# tar -xvf etc.tar /etc/defaultrouter
/etc/defaultrouter, 12 bytes, 1磁带块
缺陷二:只能放到tar前的原始路径处(可能会覆盖),不能先提出到本地目录
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值