linux下tar命令详解 
 
tar是Linux环境下最常用的备份工具之一。tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件。tar可用于建立、还原、查看、管理文件,也可方 便的追加新文件到备份文件中,或仅更新部分的备份文件,以及解压、删除指定的文件。熟悉其常用参数,能方便日常的系统管理工作。

一、版本
还是那句,不同的操作系统,tar的命令参数是有点区别的:

引用
# tar --version
tar (GNU tar) 1.14

二、简单操作
命令格式:

  1. tar [options] [tarfile] [other-files]
  2. tar--long-option -function-options files

tar可使用的参数非常多,先列举几个最常用的参数:

引用
-t, --list
列出归档文件内容目录
-x, --extract, --get
从归档文件中解析文件
-c, --create
创建新的归档文件
上面三个参数,不能同时存在,仅能使用其中一个,即t/x/c
-f file, --file=file
指定备份文件,或设备,例如磁带机/dev/st0
-v, --verbose
显示命令的执行过程
-Z, --compress, --uncompress
使用compress命令处理备份文件
-z, --gzip, --gunzip, --ungzip
使用gzip命令处理备份文件
-j, --I, --bzip
使用bzip2命令处理备份文件
-z和-j都是在备份文件打包后才进行压缩的操作的,并且,该操作会影响其他的参数,后面会再提到
-C directory, --directory=directory
先进入指定的目录,再释放

简单使用:
把/etc目录中所有的文件打包为etc.tar文件

  1. tar -cvf /tmp/etc.tar /etc

把/etc目录中所有的文件打包并使用gzip压缩为etc.tar.gz文件

  1. tar -zcvf /tmp/etc.tar.gz /etc

把/etc目录中所有的文件打包并使用bzip2压缩为etc.tar.bz2文件
这里的,tar.gz或tar.bz2都是惯例,为方便标识的,例如:tgz等,并不是特定条件,但建议遵循惯例

  1. tar -jcvf /tmp/etc.tar.bz2 /etc

查看备份包中的内容,若为已经压缩的文件,需加上-z或者-j参数

  1. tar -ztvf /tmp/etc.tar.gz

默认情况下,tar打包时都是使用相对路径的,所以,释放时,需要先进入目录目录,然后再解压
同样的,根据使用的压缩方式,应加上-z或者-j参数

  1. cd /tmp && tar -zxvf /tmp/etc.tar.gz

这是另一种写法,结果和上面的相同,其会先进入/tmp目录,然后再释放包的

  1. tar -zxvf /tmp/etc.tar.gz -C /tmp

释放单个etc/passwd文件,正如前面提到的,tar包中的是相对路径,所以不能使用“/etc/passwd”
而且,这里不能使用-C参数,释放文件是当前路径的相对路径,并带目录释放

  1. tar -zxvf /tmp/etc.tar.gz etc/passwd

tar还可以支持很多额外的参数,方便我们在备份和释放的时候进行控制。

 
三、更多参数
以三大常见操作为序说明。
1、备份

引用
-d, --diff, --compare
找出归档文件和文件系统的不同之处
-r, --append
将文件附加到归档文件之后
-u, --update
只附加比归档中新的文件
-A, --catenate
将 tar 文件附加到归档文件之后
--concatenate
与 -A 相同
--delete
从归档文件中删除 (不能在磁带上!)
-N date, --newer=date, --after-date=date
只将比指定日期更新的文件保存到备份文件
--exclude=pattern
排除符合查找模式的文件
-P, --absolute-names
备份文件中的文件名使用绝对路径,而不移除文件名前的“/”,默认是相对路径的
-l, --one-file-system
复制文件或目录存放的文件系统必须和tar命令当前执行的文件系统相同,否则不执行;也就是讲,不处理其他分区的文件。(可忽略mount挂载分区的问题)
--mode=permissions
备份时,把加入备份文件中的文件属性修改为指定的属性,格式和chmod命令接受的格式相同
--group=group
备份时,把加入备份文件中的文件所属组设定成指定的组
--owner=owner
备份时,把把加入备份文件中的文件所有者设定成指定的用户
--numeric-owner
以UID和GID代替用户名和组名
--recursion
递归模式(默认)
--no-recursion
不进行递归处理,即不把指定目录下的所有文件和文件夹都备份
--newer-mtime=date
Add only files whose contents have changed since date to the archive.
仅增加指定日期后修改过内容的文件到备份文件中
--anchored
排除时,排除匹配式中匹配整个文件路径(默认)
--no-anchored
排除时,排除匹配式中可匹配“/”后的路径
--ignore-case
排除时,排除匹配式中忽略大小写
--no-ignore-case
排除时,排除匹配式中大小写敏感(默认)
--wildcards
排除匹配式支持通配符(默认)
--no-wildcards
排除匹配式不支持通配符
--wildcards-match-slash
排除匹配式的通配符匹配“/”(默认)
--no-wildcards-match-slash
排除匹配式的通配符不匹配“/”
-X file, --exclude-from file
指定样式文件,供程序执行时剔除符合条件的文件
--remove-files
删除已经加入到备份文件中的文件

举例:
创建当前目录的全备份到backup.tar文件
(使用find的原因是,这样可以打包所有隐含文件或不符合命令规范的文件和目录)

  1. tar cvf - `find . -print` > backup.tar

比2005年6月1日新的文件才会备份

  1. tar -N '2005/06/01' -zcvf home.tar.gz /home

除/home/dmtsai目录外,/home和/etc目录的所有东西都打包

  1. tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

删除etc.tar文件中的etc/pbm2ppa.conf文件

  1. tar --delete etc/pbm2ppa.conf -vf etc.tar

把tmp.tar文件附加到etc.tar后面

  1. tar -A tmp.tar -vf etc.tar

根据-T参数后的样式文件list.txt,打包/etc中指定的文件,同样的,list.tx默认也是相对路径的

  1. find . -name "*.d" -o -name "*.conf" > list.txt
  2. tar -T list.txt -czvf etc.tar.gz /etc

通过管道,使用一条命令实现上面相同的功能

  1. find . -name "*.d" -o -name "*.conf" | tar -czvf etc.tar.gz -T -

※值得注意几个地方

引用
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参数或特定的参数指定
 
2、
释放

引用
-k, --keep-old-files
还原备份文件时,不覆盖已存在的文件
-m, --modification-time, --touch
还原文件时,不变更文件的更改时间
-p, --same-permissions
解析许可权限信息,即保留备份文件中的权限信息
-s, --same-order, --preserve-order
以与备份文件相同的顺序还原文件
--preserve
等于同时设置-p和-s
--no-same-permissions
不解析许可权限信息,这是普通用户的默认设置,仅对影响管理员的操作有影响
--no-same-owner
不使用备份文件中的所有者信息,而以您自己的身份解析文件
--same-owner
使用相同的文件所有者还原文件
--overwrite
覆盖已经存在的文件和目录
--overwrite-dir
覆盖已经存在的目录
--recursive-unlink
释放前,先删除整个目录下所有文件的连接

举例:
释放文件时,设置为备份文件中的相同所有者(仅对管理员而言)

tar --same-owner -xzvf etc.tar.gz

通过管道,把/etc目录用tar整个“拷贝”到/backup/etc,而不用建立任何临时文件
因为根本不需要生成备份包文件,所以这里不需要-z参数

tar cvf - /etc | tar xvf - -C /backup/etc

这里同上面的原理是一样的,只不过通过ssh直接“拷贝”到远端机器上而已
配合ssh密钥匹配,可实现不用人工干预的备份工作

tar cvf - /etc | (ssh root@192.168.228.244 'tar xvf -
-C /backup/etc')

3、操作磁带设备
部分参数只适用于磁带设备,不适用于常规的磁盘文件。

引用
-K file, --starting-file=file
从指定的文件开始还原(按顺序)
-L length, --tape-length=length
设置磁带的容量,单位为1024字节(bytes)
-M, --multivolume
在建立、还原备份文件或列出其中内容时,采用多卷模式(不能对文件操作)
-V name, --label=name
建立使用指定卷标的备份文件
-W, --verify
写入备份文件后,校验文件是否正常
-F script, --info-script=script, --new-volume-script=script
更换磁带时执行指定的脚本文件,必须与参数-M同时使用

举例:
把/bin、/usr/bin目录都打包到st0磁带设备中

tar cvf /dev/st0 /bin /usr/bin

把old.dmp文件追加到st0磁带中(使用cvf,会删除原来的文件的)
Linux下使用磁带机的简单方法,可以见这里:点击

tar rvf /dev/st0 old.dmp

4、其他
还有一些控制参数这里不详细讨论了,请自行测试。
但提醒一句,-T参数比较重要哦。

引用
--null
-T从null设备读取文件名,覆盖-C的设置
-o, --old-archive, --portability
将数据写入备份文件时使用V7格式
--posix
将数据写入备份文件时使用POSIX格式
-G, --incremental
处理旧GNU格式的增量备份
--rsh-command=command
不使用rsh命令连接远程主机,而使用指定的命令进行
--suffix=suffix
指定要删除文件前备份文件,该备份文件使用的后缀,默认是“~”
--totals
创建备份文件时,列出已建立的备份文件的大小
tar --totals -cvf tmp.tar tmp/
-R, --block-number
在输出信息时,一同block number信息
-S, --sparse
若文件中有大量连续0字节时,将该文件保存成稀疏文件
-T file, --files-from=file
指定样式文件,文件内容为一个或多个条件样式,供程序还原或创建符合指定条件的文件
--use-compress-program=program
使用指定的压缩程序对备份文件压缩或解压
--volno-file=FILE
使用或更新FILE文件中指定的卷号码
-w, --interactive, --confirmation
当遇到问题时,要求用户先确认
-B, --read-full-records
读取数据是重设扇区大小,仅适用于BSD 4.2的管道操作
-O, --to-stdout
把从备份文件里还原的文件输出到标准输出设备
--version
版本信息
--help
帮助信息

linux下tar命令详解的更多相关文章

  1. Linux下 tar 命令详解

    tar 是 unix/linux下的打包器 [解压] 输入命令: # tar  -zxvf  filename.tar.gz 参数解释: z :表示 tar 包是被 gzip 压缩过的 (后缀是.ta ...

  2. 【Linux下tar命令详解】

    tar命令用于建立.还原备份文件,它可以加入.解开备份文件内的文件. 参数 带有*号的为常用的参数 . -A 新增压缩文件到已存在的压缩包 . -c 建立新的压缩文件* . -d 记录文件的差别 . ...

  3. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  4. Linux下rar命令详解

    Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...

  5. Linux下chkconfig命令详解(转)

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

  6. Linux知识积累(4) Linux下chkconfig命令详解

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

  7. Linux下top命令详解

    Linux下top命令详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷 ...

  8. 转载的 Linux下chkconfig命令详解

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

  9. 转 linux下cat命令详解

    linux下cat命令详解 http://www.cnblogs.com/perfy/archive/2012/07/23/2605550.html 简略版: cat主要有三大功能:1.一次显示整个文 ...

随机推荐

  1. android 入门-引用库项目

    http://blog.csdn.net/arui319/article/details/6831164

  2. 第一篇:SOUI是什么?

    概述 用C++做产品最痛苦的是什么?肯定是做UI. SOUI的使命就是把痛苦的UI变化成快乐的UI. 什么?UI还能快乐?脑子进水了吗? 当你看完这个系统教程的时候相信你面对UI至少不会再痛苦.你可以 ...

  3. VS2010下配置OpenMesh

    从www.openmesh.org下载最新版的安装包或者源代码,注意下载与自己系统匹配的版本,我下的是VS2010预编译版的,下载源码自己编译是一样的.安装好Visual Studio. 安装Open ...

  4. Error: Could not find or load main class test.EditFile

    今天写了一个简单的小程序,运行之后发现Error: Could not find or load main class test.EditFile,项目无法启动.删除main中的所有内容之后依旧提示该 ...

  5. Printf()输出格式控制(转)

    int printf(const char *format,[argument]); format 参数输出的格式,定义格式为: %[flags][width][.perc] [F|N|h|l]typ ...

  6. 【MyEcplise 插件】反编译插件jad

    jad是一个使用比较广泛的反编译插件. 这里说如何将jad安装到My Ecplise中. 1.下载jad的jar http://nchc.dl.sourceforge.net/project/jadc ...

  7. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  8. poj1222 EXTENDED LIGHTS OUT 高斯消元||枚举

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8481   Accepted: 5479 Description In an ...

  9. vs2008/2010安装无法打开数据文件解决方案

    本人在安装VS2008或2010时,在开始的第一个页面(进度条大约加载到75%左右),提示“无法打开数据文件 'C:/Documents and Settings/Administrator/Loca ...

  10. iOS开发实用干货——强化你的Xcode控制台

    f(x) 郑秀晶程序员不要整天看代码,偶尔也要看看风景?? www.90168.org先上一张我的Xcode控制台的图片让你们感受一下 酷炫控制台 是不是觉得很酷?不过仅仅是酷还是远远不够的,当你点击 ...