linux入门:使用tar命令备份文件

tar是Unix和类Unix系统上的文件打包工具,可以将多个文件打包合并为一个文件。打包后的文件名通常为”*.tar”。另外可通过gzip,bzip2对tar文件进行压缩,压缩后扩展名分别为.tar.gz,.tar.bz2。此外需要注意, 扩展名 在linux下并没有特殊意义,只是为了我们方便记忆。

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参数或特定的参数指定