tar命令详解

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

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

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


二、简单操作
命令格式:

tar [options] [tarfile] [other-files]
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文件

tar -cvf /tmp/etc.tar /etc


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

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


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

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


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

tar -ztvf /tmp/etc.tar.gz


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

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


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

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


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

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的原因是,这样可以打包所有隐含文件或不符合命令规范的文件和目录)
tar cvf - `find . -print` > backup.tar

比2005年6月1日新的文件才会备份
tar -N '2005/06/01' -zcvf home.tar.gz /home

除/home/dmtsai目录外,/home和/etc目录的所有东西都打包
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

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

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

根据-T参数后的样式文件list.txt,打包/etc中指定的文件,同样的,list.tx默认也是相对路径的
find . -name "*.d" -o -name "*.conf" > list.txt
tar -T list.txt -czvf etc.tar.gz /etc

通过管道,使用一条命令实现上面相同的功能
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
 帮助信息

本文来自ChinaUnix博客,如果查看原文请点: http://blog.chinaunix.net/u2/67395/showart_1098338.html
linux tar命令详解 tar命令 tar能为文件和目录创建档案。利用tar,用户能为某一特定文件创建档案(备份文件),也能在档案中改动文件,或向档案中加入新的文件。tar最初被用来在磁带上创建档案,目前,用户能在所有设备上创建档案,如软盘。利用tar命令,能把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。 语法:tar [主选项+辅选项] 文件或目录 使用该命令时,主选项是必须要有的,他告诉tar要做什么事情,辅选项是辅助使用的,能选用。 主选项: c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。 r 把要存档的文件追加到档案文件的未尾。例如用户已作好备份文件,又发现更有一个目录或是一些文件忘记备份了,这时能使用该选项,将忘记的目录或文件追加到备份文件中。 t 列出档案文件的内容,查看已备份了哪些文件。 u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中未找到要更新的文件,则把他追加到备份文件的最后。 x 从档案文件中释放文件。 辅助选项: b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。 f 使用档案文件或设备,这个选项通常是必选的。 k 保存已存在的文件。例如我们把某个文件还原,在还原的过程中,遇见相同的文件,不会进行覆盖。 m 在还原文件时,把所有文件的修改时间设定为目前。 M 创建多卷的档案文件,以便在几个磁盘中存放。 v 周详报告tar处理的文件信息。如无此选项,tar不报告文件信息。 w 每一步都需求确认。 z 用gzip来压缩/解压缩文件,加上该选项后能将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。 Linux下的压缩文件剖析 对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说,单单就压缩文件为例,我们知道在视窗系统下最常见的压缩文件就只有两种,一是,zip,另一个是.rap。可是Linux就不同了,他有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名,此外windows下的.zip和.rar也能在Linux下使用,不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结,希望你下次遇见这些文件时不至于被搞晕:)   在具体总结各类压缩文件之前呢,首先要 弄清两个概念:打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?其实这源于Linux中的非常多压缩程式只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另他的工具将这一大堆文件先打成一个包,然后再就原来的压缩程式进行压缩。   Linux下最常用的打包程式就是tar了,使用tar程式打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就能用其他的程式来进行压缩了,所以首先就来讲讲tar命令的基本用法:   tar命令的选项有非常多(用man tar能查看到),但常用的就那么几个选项,下面来举例说明一下:   # tar -cf all.tar *.jpg   这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。   # tar -rf all.tar *.gif   这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。 # tar -uf all.tar logo.gif   这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。   # tar -tf all.tar   这条命令是列出all.tar包中所有文件,-t是列出文件的意思   # tar -xf all.tar   这条命令是解出all.tar包中所有文件,-t是解开的意思   以上就是tar的最基本的用法。为了方便用户在打包解包的同时能压缩或解压文件,tar提供了一种特别的功能。这就是tar能在打包或解包的同时调用其他的压缩程式,比如调用gzip、bzip2等。   1) tar调用gzip   gzip是GNU组织研发的一个压缩程式,.gz结尾的文件就是gzip压缩的结果。和gzip相对的解压程式是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下:   # tar -czf all.tar.gz *.jpg   这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz   # tar -xzf all.tar.gz   这条命令是将上面产生的包解开。   2) tar调用bzip2   bzip2是个压缩能力更强的压缩程式,.bz2结尾的文件就是bzip2压缩的结果。和bzip2相对的解压程式是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下:   # tar -cjf all.tar.bz2 *.jpg   这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为all.tar.bz2   # tar -xjf all.tar.bz2   这条命令是将上面产生的包解开。 3)tar调用compress   compress也是个压缩程式,不过好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。和compress相对的解压程式是uncompress。tar中使用-Z这个参数来调用gzip。下面来举例说明一下:   # tar -cZf all.tar.Z *.jpg   这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z   # tar -xZf all.tar.Z   这条命令是将上面产生的包解开   有了上面的知识,你应该能解开多种压缩文件了,下面对于tar系列的压缩文件作一个小结:   1)对于.tar结尾的文件   tar -xf all.tar   2)对于.gz结尾的文件   gzip -d all.gz   gunzip all.gz   3)对于.tgz或.tar.gz结尾的文件   tar -xzf all.tar.gz   tar -xzf all.tgz   4)对于.bz2结尾的文件   bzip2 -d all.bz2   bunzip2 all.bz2   5)对于tar.bz2结尾的文件   tar -xjf all.tar.bz2   6)对于.Z结尾的文件   uncompress all.Z   7)对于.tar.Z结尾的文件   tar -xZf all.tar.z   另外对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压他们:   1)对于.zip   linux下提供了zip和unzip程式,zip是压缩程式,unzip是解压程式。他们的参数选项非常多,这里只做简单介绍,依旧举例说明一下其用法:   # zip all.zip *.jpg   这条命令是将所有.jpg的文件压缩成一个zip包 # unzip all.zip   这条命令是将all.zip中的所有文件解压出来   2)对于.rar   要在linux下处理.rar文件,需要安装RAR for Linux,能从网上下载,但要记住,RAR for Linux 不是免费的;然后安装:   # tar -xzpvf rarlinux-3.2.0.tar.gz   # cd rar   # make   这样就安装好了,安装后就有了rar和unrar这两个程式,rar是压缩程式,unrar是解压程式。他们的参数选项非常多,这里只做简单介绍,依旧举例说明一下其用法:   # rar a all *.jpg   这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程式会将.rar 扩展名将自动附加到包名后。   # unrar e all.rar   这条命令是将all.rar中的所有文件解压出来   到此为至,我们已介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、 zip、unzip、rar、unrar等程式,你应该已能够使用他们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了,以后应该不必为下载了一个软件而不知道怎么在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。   本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、 unzip、rar、unrar等程式,及怎么使用他们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值