tar文件是什么
tar是Unix和类Unix系统上的文件打包工具,可以将多个文件打包合并为一个文件。打包后的文件名通常为”*.tar”。另外可通过gzip,bzip2对tar文件进行压缩,压缩后扩展名分别为.tar.gz,.tar.bz2。此外需要注意, 扩展名 在linux下并没有特殊意义,只是为了我们方便记忆。
tar语法
tar参数很多,以下是常用参数:
tar [-j | -z] [cv] [-f 新建文件名] filename #打包与压缩
tar [-j | -z] [tv] [-f 新建文件名] #查看包内文件名
tar [-j | -z] [xv] [-f 新建的文件名] -C [ 目录] #解压放置指定目录
arguments:
-c 新建打包文件 ,搭配-v查看打包过程中的文件名
-t 查看打包文件内包含的文件名
-x 解打包或者压缩的功能,搭配-C 在解开到指定目录
-j 通过bzip2进行压缩/解压,文件扩展名为.tar.bz2
-z 通过gzip进行压缩/解压,问价扩展名为.tar.gz
-v 在压缩/解压过程中查看正在处理的文件名
-f -f 后面接被处理的文件名
-C -C后面接目录,可在指定目录中解开
-p 保留备份文件原本属性与权限,常用于备份(-c) 重要的配置文件
-P 保留绝对路径,允许备份数据含有根目录存在
-N 选择出比某个时间点更新的文件(mtime)进行打包
-T 根据-T参数后的样式文件list.txt,进行打包
-A 将一个tar文件附加到另一个tar文件中
--delete 删除打包文件中的某一文件
--exclude=FILE 在压缩过程中,不要将FILE打包
注:此处的-p可以保留原文件的权限和属性。同样,在cp命令中 默认复制后的文件权限和属性会发生变化,因此也可通过-p -a 在复制后保留原文件属性等。
简单使用
[root@www ~] # tar -zpcv -f /tmp/etc.tar.gz /etc #打包(-c)并通过gzip(-z)压缩
[root@www ~] # tar -ztv -f /tmp/etc.tar.gz #显示文件(-t)如已压缩,需要参数-j -z
[root@www ~] # tar -zpxv -f /tmp/etc.tar.gz -C ~/ #解压(-x)并放到用户主目录下(-C)
进阶使用
1.仅解开压缩文件中的某一个文件
[root@www ~] # tar -zpxv -f /tmp/etc.tar.gz /etc/shadow #解压时 在命令后加上文件名称
2.打包某个目录,但是不含某些文件
#将root目录下除testFile以外的文件打包 并放置到root目录下
[root@www ~] # tar -zpcv -f /root/root.tar.gz --exclude=/root/testFile --exclude=/root/root.tar.gz /root
注:因为新压缩的文件也放置在root下,故需要把该文件也排除在外
3.仅备份比某个时刻还要新的文件
某些情况下会需要备份新的文件,并不是旧的文件。此时需要参数 -N,–newer-mtime
#将比/etc/passwd mtime更新的文件找出来并且打包到/tmp文件下
[root@www ~] # find -newer /etc/passwd #将比/etc/passwd mtime更新的文件找出来
[root@www ~] # ll /etc/passwd #查看passed的mtime
[root@www ~] # tar -zcvf /tmp/etc.tar.gz --newer-mtime="2016/11/19" /etc/*
4.把tmp.tar文件附加到etc.tar后面
[root@www ~] tar -vf /tmp/etc.tar -A tmp.tar
5.删除etc.tar文件中的etc/passwd文件
[root@www ~] tar -vf /tmp/etc.tar --delete etc/passwd
6.将list.txt中列出的文件进行压缩
方式一:
[root@www ~] find /etc -name "*.d" -o -name "*.conf" >list.txt
[root@www ~] tar -jcvf /tmp/etc.tar.bz2 -T list.txt
方式二:通过管道
[root@www ~] find /etc -name "*.d" -o -name "*.conf" | tar -jcvf /tmp/etc.tar.bz2 -T
7.tar除了把数据打包成文件,还可以将文件打包到某些特殊的设备上。比如将/home /etc /root备份到(/dev/st0)时,可以使用 “tar -cv -f /dev/st0 /home /root /etc”
值得注意的地方
1. -f后面必 须紧跟备份文件,xxx.tar或者xxx.tar.gz
2. 使用–delete、-u、-r、-A的时候,后面跟的备份文件都必须为未压缩的,若备份文件已经压缩,需要使用gunzip先解压,操作完后再 gzip;
也就是说,不能对tar.gz、tar.bz2等文件直接操作的;
3.备份打包时,默认为相对路径;而排除匹配式默认也是全路径匹配的
所以,在打包时,会提示:“tar: Removing leading `/’ from member names”除非你使用-P参数或特定的参数指定