linux下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压缩为⽂件
tar -zcvf /tmp/ /etc
把/etc⽬录中所有的⽂件打包并使⽤bzip2压缩为etc.tar.bz2⽂件
这⾥的,或tar.bz2都是惯例,为⽅便标识的,例如:tgz等,并不是特定条件,但建议遵循惯例
tar -jcvf /tmp/etc.tar.bz2 /etc
查看备份包中的内容,若为已经压缩的⽂件,需加上-z或者-j参数
tar -ztvf /tmp/
默认情况下,tar打包时都是使⽤相对路径的,所以,释放时,需要先进⼊⽬录⽬录,然后再解压
同样的,根据使⽤的压缩⽅式,应加上-z或者-j参数
cd /tmp && tar -zxvf /tmp/
这是另⼀种写法,结果和上⾯的相同,其会先进⼊/tmp⽬录,然后再释放包的
tar -zxvf /tmp/ -C /tmp
释放单个etc/passwd⽂件,正如前⾯提到的,tar包中的是相对路径,所以不能使⽤“/etc/passwd”
⽽且,这⾥不能使⽤-C参数,释放⽂件是当前路径的相对路径,并带⽬录释放
tar -zxvf /tmp/ 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
除/home/dmtsai⽬录外,/home和/etc⽬录的所有东西都打包
tar --exclude /home/dmtsai -zcvf /home/* /etc
删除etc.tar⽂件中的f⽂件
tar --delete f -vf etc.tar
把tmp.tar⽂件附加到etc.tar后⾯
tar -A tmp.tar -vf etc.tar
根据-T参数后的样式⽂件,打包/etc中指定的⽂件,同样的,默认也是相对路径的
find . -name "*.d" -o -name "*.conf" >
tar - -czvf /etc
通过管道,使⽤⼀条命令实现上⾯相同的功能
find . -name "*.d" -o -name "*.conf" | tar -czvf -T -
※值得注意⼏个地⽅
引⽤
1)-f后⾯必须紧跟备份⽂件,xxx.tar或者
2)使⽤--delete、-u、-r、-A的时候,后⾯跟的备份⽂件都必须为未压缩的,若备份⽂件已经压缩,需要使⽤gunzip先解压,操作完后再gzip;
也就是说,不能对、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
linux查看当前文件夹内容覆盖已经存在的⽬录
--recursive-unlink
释放前,先删除整个⽬录下所有⽂件的连接
举例:
释放⽂件时,设置为备份⽂件中的相同所有者(仅对管理员⽽⾔)
tar --same-owner -xzvf
通过管道,把/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
帮助信息

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。