分类: 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 |
(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得到的结果是一致的)