- 一、命令介绍
- 二、命令语法
- 三、常用选项
- 四、命令示例
- (一)对指定的目录进行打包(即备份归档),不压缩
- (二)对指定目录下的内容(不含目录本身)进行打包(即备份归档),不压缩
- (三)通过通配符筛选特定的文件进行打包,不压缩
- (四)将指定的多个文件打成一个包,不压缩
- (五)将多个文件打成一个包并进行压缩,且保留文件原来的权限和属性
- (六)将指定目录下的修改时间在一定范围的文件进行打包和压缩
- (七)对指定目录下的文件进行打包和压缩,且将特定的文件排除在外
- (八)更新原备份包中的文件,且使用文件的绝对路径作为文件名
- (九)将文件添加到已存在的文件包里面
- (十)更新指定文件包内的指定文件
- (十一)列出文件包中的所有文件
- (十二)解压后再查看文件包的内容
- 1.使用 gzip 解压后再查看文件包(.tar.gz)的内容
- 2.使用 bzip2 解压后再查看文件包(.tar.bz2)的内容
- (十三)将文件包(.tar)解包,提取文件包里的内容
- (十四)将指定文件包的内容提取到指定的目录下,且解包时去掉第一层目录结构
- (十五)只将压缩档内的部分文件解压解包出来
- 五、参考文档
tar 命令可以为 Linux 的文件和目录创建档案(就是打包备份文件的意思),也可以在档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip、bzip2等命令)。
二、命令语法语法:tar [选项]
参数:指定要打包的文件或目录列表
三、常用选项 选项说明-A
或--catenate
新增文件到已存在的备份文件-B
设置区块大小-c
或--create
建立新的备份文件-C
这个选项用在解压缩,选项后面跟着目录,若要在特定目录解压缩(就是把解压后的文件放置在特定目录下),可以使用这个选项-d记录文件的差别-x
或--extrac
t或--get
解包,即从备份文件中还原文件,或者说从归档文件中提取文件-t
或--list
列出备份文件的内容-z
或--gzip
或--ungzip
通过gzip指令处理备份文件,通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-j
通过bzip2
指令压缩/解压缩文件,文件名最好为*.tar.bz2
-Z
或--compress
或--uncompress
通过compress指令处理备份文件-J
大写J代表用xz算法来压缩/解压-f
或--file
指定备份文件-v
或--verbose
显示指令执行过程-r
或--append
向归档文件末尾追加文件,新增文件到已存在的备份文件的末尾部分-u
update,更新备份文件中的文件-v
显示操作过程-l
文件系统边界设置-k
保留原有文件不覆盖-m
保留文件不被覆盖-w
确认压缩文件的正确性-p
或--same-permissions
保留原来的文件权限与属性-P
或--absolute-names
使用文件名的绝对路径,不移除文件名称前的正斜杠/
-N
或 --newer
只将指定日期更新的文件保存到备份文件里--exclude
排除符合范本样式的文件-O
将文件解开到标准输出
四、命令示例
(一)对指定的目录进行打包(即备份归档),不压缩
对t2目录进行打包备份,这样会对t2目录及目录下的所有文件(包含隐藏文件)进行打包:
[root@htlwk0001host ~]# tar -cf tt.tar t2
说明:-c
是表示创建新的文件包,即创建新的备份文件;-f
用来指定包文件名。
这样只会对 t2 目录下的内容进行打包,不包含 t2 目录本身,也不包含 t2 目录下的隐藏文件:
[root@htlwk0001host ~]# tar -cf tt.tar t2/*
(三)通过通配符筛选特定的文件进行打包,不压缩
这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包:
[root@htlwk0001host ~]# tar -cf all.tar *.jpg
(四)将指定的多个文件打成一个包,不压缩
[root@htlwk0001host ~]# tar -cfv archive.tar foo bar # 将foo和bar这两个文件打包成archive.tar,且显示打包的过程信息
说明:-c
是表示创建新的文件包,即创建新的备份文件;-f
用来指定包文件名;-v
显示打包的过程信息。
[root@htlwk0001host ~]# tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log
说明:-c
是表示创建新的文件包,即创建新的备份文件;-f
用来指定包文件名;-v
显示打包的过程信息;-z
通过gzip指令压缩文件;-p
保留文件原来的权限和属性。
把test目录下的修改时间大于"2012/11/13"的文件进行打包和压缩:
[root@htlwk0001host ~]# tar -N "2012/11/13" -zcvf log17.tar.gz test
[root@htlwk0001host ~]# tar -N "2012/11/13" -jcvf log17.tar.bz2 test
说明:-N
只将指定日期更新的文件保存到备份文件里;-z
表示打包后,以 gzip 压缩;-j
表示打包后,以 bzip2 压缩。
备份且压缩 scf 目录下的文件,且把 scf/service 目录排除在外:
[root@htlwk0001host ~]# tar --exclude scf/service -zcvf scf.tar.gz scf/*
(八)更新原备份包中的文件,且使用文件的绝对路径作为文件名
[root@htlwk0001host ~]# tar -Puf backup.tar /home/user
说明:-P
使用文件名的绝对路径,不移除文件名称前的正斜杠 /
;-u
表示更新原包文件中的文件
将所有 .gif
的文件增加到 all.tar 的包里面去:
[root@htlwk0001host ~]# tar -rf all.tar *.gif
说明:-r
向归档文件末尾追加文件。
这条命令是更新文件包 all.tar 中 logo.gif 文件:
[root@htlwk0001host ~]# tar -uf all.tar logo.gif
(十一)列出文件包中的所有文件
列出包文件 all.tar 中的所有文件:
[root@htlwk0001host ~]# tar -tf all.tar
说明:-t
表示列出备份包内的文件
列出包文件 archive.tar 中的所有文件,且显示指令执行的过程:
[root@htlwk0001host ~]# tar -tvf archive.tar
(十二)解压后再查看文件包的内容
1.使用 gzip 解压后再查看文件包(.tar.gz)的内容
[root@htlwk0001host ~]# tar -ztvf log.tar.gz
2.使用 bzip2 解压后再查看文件包(.tar.bz2)的内容
[root@htlwk0001host ~]# tar -jtvf log.tar.bz2
(十三)将文件包(.tar)解包,提取文件包里的内容
从 archive.tar 提取所有文件:
[root@htlwk0001host ~]# tar -xf archive.tar
(十四)将指定文件包的内容提取到指定的目录下,且解包时去掉第一层目录结构
[root@htlwk0001host ~]# tar -xvf portal-web-v2.0.0.tar --strip-components 1 -C /home/wwwroot/liaowenxiong/portal
说明:--strip-components 1
表示解包的时候去掉第一层目录结构,--strip-components 2
表示解包的时候去掉前两层的目录结构。
举例:/root/src/opp/lll.txt 第一层目录:/root/ 第二层目录:/root/src/
(十五)只将压缩档内的部分文件解压解包出来[root@htlwk0001host ~]# tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
五、参考文档
线上工具