Chinaunix首页 | 论坛 | 博客
  • 博客访问: 299257
  • 博文数量: 84
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 16:46
文章分类

全部博文(84)

文章存档

2017年(2)

2016年(4)

2015年(78)

我的朋友

分类: LINUX

2015-07-17 14:42:22

(1)作用
将多个文件或目录包成一个大文件的命令功能,我们称呼它是一种"打包命令"。Tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2的支持,将该文件进行压缩。
(2)格式
tar [-j|-z] [cv] [-f新建的文件名] filename… //打包与压缩(后面的filename就是需要压缩的源文件)

tar [-j|-z] [tv] [-f压缩的文件名] //查看文件名

tar [-j|-z] [xv] [-f压缩的文件名] //解压缩

(3)[options]主要参数
-c:新建打包文件,可搭配-v来查看过程中被打包的文件名(filename)

-t:查看打包文件的内容含有哪些文件名,重点在查看文件名

-x:解打包或解压缩的功能,特别留意的是,-c,-t,-x不可同时出现在一串命令中

-j:通过bzip2的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2

-z:通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz

-v:在压缩/解压缩的过程中,将正在处理的文件权限属性都列出来

-f :-f后面要紧接着被处理的文件名。建议-f单独写一个参数

-C 目录:这个参数用在解压时,指定解压到的目标目录,缺省是解压到当前目录下

-p:(小p)保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件

-P:(大P)保留绝对路径,即允许备份数据中含有根目录存在之意。

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

(4)实例

tar -cvf /home/awake/etc.tar /etc //将目录/etc创建为一个tar归档文件并存放到/home/awake/目录下并且没有压缩

tar –xvf /home/awake/etc.tar //将归档文件etc.tar解压到当前目录(我的当前目录是根的情况),注意没有提示,如果文件名相同,直接覆盖,很危险的一个操作。

tar –rvf abc.tar abc.txt //加入abc.txt文件到存在的归档abc.tar文件中,此命令也看到加入z或j参数

tar –zcvf xxx.tar.gz /etc /root/install.log //将/etc目录及/root/install.log文件打包为xxx.tar.gz并以gzip形式压缩

tar –jcvf xxx.tar.bz2 /etc /root/inistall.log //将/etc目录及/root/install.log文件打包为xxx.tar.gz并以bzip2形式压缩

tar –zpcvf /root/etc.tar.gz /etc //在/root/下创建etc.tar.gz备份文件,并保留/etc数据的原本权限与属性,-v表示正在作用的文件名就会显示在屏幕上。

tar –jpcvf /root/etc.tar.bz2 /etc //在/root/下创建etc.tar.bz2备份文件,并保留/etc数据的原本权限与属性,-v表示正在作用的文件名就会显示在屏幕上。

tar -ztvf VMwareTools-9.6.1-1378637.tar.gz | egrep *.so$ >eee //查看压缩文件中文件名为任意字符,扩展名以.so结尾的文件并输出到eee文件

tar –zxvf abc.tar.gz --wildcards "*.so" //这两个命令是有差别的,*.so$查找的只是文件而—wildcards "*.so"还包含匹配的目录

tar -jtvf /root/xxx.tar.bz2 | more(也可以egrep) //查看压缩文件内容

tar –zxvf archivefile.tar.gz //将archivefile.tar.gz解压到当前目录

tar –jxvf archivefile.tar.bz2 //将archivefile.tar.bz2解压到当前目录

tar z–xvf archivefile.tar.gz –C /home/awake //将文件解压到一个指定的目录或路径(-C表示改变目录,而且目录必须存在,否则报错)

tar -xvzf VMwareTools-9.6.1-1378637.tar.gz vmware-tools-distrib/vmware-install.pl vmware-tools-distrib/doc/README //提取单个或多个文件(这个提取过程将目录也同时携带出来,不是直接提取到当前目录下)

tar -jpPcvf log.tar.bz2 /root/install.log /root/install.log.syslog /root/anaconda-ks.cfg //携带绝对路径和权限将三个文件打包压缩

tar –jxvf log.tar.bz2 //解压log.tar.bz2将覆盖绝对路径下的上述三个文件,而且没有任何提示(使用绝对路径备份和恢复是比较危险的,他将直接覆盖目标文件,并且没有提示,所以在解压某文件时,还是要看一看他的路径属性为好)。

tar –jcvf /root/mm.tar.bz2 –exclude=/root/etc* --exclude=/root/mm.tar.bz2 /root /etc打包/root与/etc目录,但不包含目录下的某些文件的做法

tar –jcvf /root/etc.incremet150515.tar.bz2 --newer-mtime="2008/09/29" /etc/*备份/etc目录下的比20080929新的文件(此命令可以做定期备份,需要先学find命令,学会按时间查找文件)


(5)归纳总结

 

归档文件

gzip文件

bzip文件

创建

tar -cvf

tar -zcvf

tar -jcvf

查询

tar -tvf

tar -ztvf

tar –jtvf

解压或提取单个

tar -xvf

tar -zxvf

tar -jxvf

带属性创建

tar -cpvf

tar -zpcvf

tar –jpcvf

带绝对路径带属性创建

tar -cPpvf

tar -zPpcvf

tar –jPpcvf

添加文件或目录到归档

tar –rvf

tar -zrvf

tar –jrvf


(6)留意细节

注意一个细节,备份目录下的所有文件*和备份目录是有区别的,*首先不包含隐含文件,也不包含目录本身,如果备份目录且包含目录内的所有内容。

[root@awake ~]# tar -jcvf test16.tar.bz2 /test/*

tar: Removing leading `/' from member names

/test/1

/test/2

/test/3

[root@awake ~]# tar -jcvf test16.tar.bz2 /test

tar: Removing leading `/' from member names

/test/

/test/.sh.scrit

/test/3

/test/1

/test/2

[root@awake ~]# tar -xzvpf /tmp/etc.tar.gz –C /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!


(7)通过tar来进行备份

一个真实的场景是在固定的时间间隔内来备份目录,tar命令可以通过cron调度来实现这样一个备份,以下是一个样例

tar –cvzf archive-$(date+%y%m%d).tar.gz /home/new/

使用cron来运行上述的命令会保持创建类似以下名称的备份文件:archive-20150218.tar.gz


(8)cp和tar文件对属性的影响

1、cp文件与tar文件影响属性吗?

答:复制时如果不加入任何参数,对于root用户和普通用户会有两种不同的结果

以root用户拷贝文件

[awake@awake ~]$ ll(用户awake在家目录下创建一个awake. file2文件,其家目录下的文件,一共有两个)

-rw-r--r--. 1 root root 0 Apr 13 13:20 awake.file1

-rw-rw-r--. 1 awake awake 0 Apr 13 14:45 awake.file2

[root@awake awake]# cp /home/awake/* /root(以root用户将awake家目录下的两个文件cp到/root下)

[root@awake ~]# ll(发现文件的所有者和所属组都变成了root,而且原本awake.file2的读写属性也发生了变化,变成了644,644是一个复制过程中系统赋予的默认值)

-rw-r--r--. 1 root root 0 Apr 13 14:51 awake.file1

-rw-r--r--. 1 root root 0 Apr 13 14:51 awake.file2

以普通用户拷贝文件

[root@awake tmp]# ll(在/tmp下以root创建的两个不同读写权限的文件a和b)

-rw-rw-r--. 1 root root 0 Apr 13 15:11 a

-rw-r--r--. 1 root root 0 Apr 13 15:14 b

[awake@awake ~]$ cp /tmp/[ab] /home/awake(以普通用户将a和b两个文件复制到/home/awake文件夹下)

[awake@awake ~]$ ll(所有者和所属组都变成了awake,文件的读写权限没有发生变化,只能文件属主或特权用户才能使用该功能(chmod)来改变文件存取模式,说白了原来文件属主不是awake

-rw-rw-r--. 1 awake awake 0 Apr 13 15:15 a

-rw-r--r--. 1 awake awake 0 Apr 13 15:15 b

目录的拷贝读写执行权限不会变

总结:cp文件有点像复印文件原版是你的,复印一份后归我所有,至于读写权限的改变可能与umask有关。

关于tar

关于tar,与cp类似,tar在创建归档文件是,只要用户对文件有读取权限,就能对文件或目录归档,

新生成的tar文件未发现对源文件的归属权及读写权有什么改变。

但是在提取文件时,普通用户提取和root用户提取是不同的,普通用户与cp一样不能使用-p参数,只有root使用-p参数有意义

tar –xvpf参数提取tar文件权限信息(但我使用root用户时发现tar –xvf与tar –xvpf得到的结果是一致的)



阅读(2065) | 评论(0) | 转发(0) |
0

上一篇:程序管理PID/PPID

下一篇:数据流重定向

给主人留下些什么吧!~~