tar 的使用和一些参数

tar的用法:
http://bbs.chinaunix.net/viewthread.php?tid=303589&highlight=tar

察看tar文件里面的内容

tar -tf *.tar
zcat *.tar.gz | tar -t
bzcat *.tar.bz | tar -t

使用tar进行复制 当前目录复制到其他目录

tar cvf – *|(cd /tmp/sh1; tar xvf -)

第一个”-“是标准输出
第二个”-“是标准输入
* 代表当前目录下所有文件

tar进行分卷打包

打包 tar -cvf test.tar test|split -b 1024
解包 cat xa[a-z]|tar xvf –

tar -cvf test.tar test|split -b 1024
这样 目录下就会生成多个小文件 默认为xaa 到xaz

多文件剔除某个文件来进行tar

剔除多个文件:
tar –exclude run.log –exclude run_bad.log –exclude run_erro.log -cvf target.tar *
也可以剔除目录
tar –exclude yida -cvf home.tar /home
但是 凡是叫yida的文件 目录都被剔除掉了
mkdir /home/test/yida
使用上面命令的时候 这个目录也会被剔除掉

tar /home 后保留用户属主和属性(使用参数 -p 小写)

-p –same-permissions, –preserve-permissions
redhat下面 不需要用这个参数也可以保存权限
tar cvpf
tar xvpf
 
tar 使用绝对路径

tar 默认使用的是相对路径, 如果要使用绝对路径使用参数 -P 大写
必须要在打包的时候使用P , 如果打包时没有使用P , 那么使用的是相对路径打包, 即使解包时使用-P参数也没有作用
解包时也要带P这个参数  否则使用的是相对路径 解压到当前目录
 
例如
对httpd的rpm 包进行备份

# 进行打包 保存权限 使用绝对路径
shell > tar -zPpcvf bak.tar.gz `rpm -ql httpd-2.0.50-1.0`
# 删除一个文件 留待会儿测试
shell > rm -f /var/www/icons/world2.png
shell > ls /var/www/icons/world2.png
ls: /var/www/icons/world2.png: No such file or directory
# 使用tar解包恢复 保存权限 使用绝对路径 
shell > tar -zPpxvf bak.tar.gz
shell > ls /var/www/icons/world2.png
/var/www/icons/world2.png
#证明恢复成功
 
有个问题 不理解 ????

# 发现tar包里面怎么会有多个相同一个文件
shell > tar -zcvf bak.tar.gz `rpm -ql httpd-2.0.50-1.0`

shell > zcat bak2.tar.gz | tar -t | grep “etc/httpd/conf.d/README”
etc/httpd/conf.d/README
etc/httpd/conf.d/README
etc/httpd/conf.d/README
# 上面的输出有3个相同的文件
# 打包的文件是按rpm -ql输出来的, 却只有一个啊
rpm -ql httpd-2.0.50-1.0 | grep “etc/httpd/conf.d/README”
/etc/httpd/conf.d/README

使用sort | uniq -c 也可以看到相同的问题

一步一步来来
shell > rpm -ql httpd-2.0.50-1.0 > temp
shell > tar -T temp -cvf bak.tar
shell > tar -tf bak.tar | grep “etc/httpd/conf.d/README”
etc/httpd/conf.d/README
etc/httpd/conf.d/README
etc/httpd/conf.d/README
    为什么 会有相同的呢