一:tar 的功能介绍
tar(tape archive)
是Linux或类 Unix 系统中用于打包和压缩文件的常用命令,使用tar可以将多个文件打包为一个文件,也可以将一个tar包进行解包。并且tar还支持使用特定的压缩算法将打包后的归档文件进行压缩,减少体积大小。
-
打包:将几个文件整合成一个大文件,文件的整体大小不会像压缩一样被改变;
-
压缩:通过某种算法来减小文件的大小;
二:tar 打包和压缩
1、打包一个或多个文件
-
命令格式:
tar [option] 打包后的文件名 需要将哪些文件进行打包
-
常用选项:
-c
:创建一个新的归档文件,这个选项必须有。-f
:指定归档文件的名称,这个选项必须且如果有多个选项,需要放在最后。-v
:显示详细的操作过程(可以不加这个选项)-z
:打包后,再通过gzip
压缩打包后的文件,减少体积-j
:通过bzip2
压缩归档文件-J
:通过xz
压缩归档文件-C
:临时改变到指定目录后再进行打包或解包。
- 归档文件命名
- 为了方便区分,打包后的归档文件一般以
.tar
来结尾 - 如果归档包使用了
gzip
压缩,命名为xxx.tar.gz
- 如果归档包使用
bzip2
压缩,命名为xxx.tar.b.bz2
- 如果归档包使用了
xz
压缩算法,命名为xxx.tar.xz
- 为了方便区分,打包后的归档文件一般以
- 注意事项
- 如果归档包只是一个文件名(相对路径),则归档包默认存放在当前路径下,如果归档包是一个指定路径下的文件名,则归档包会存在在指定目录下。
- 如果路径下存在同名文件,默认会将这个同名文件覆盖,造成数据丢失。
- 需要进行打包的文件需要使用相对路径,否则会把完整的绝对路径包含在归档文件中。解压时,它会在目标系统上还原这个绝对路径,从根目录开始创建文件和目录结构;因为
tar
默认会保留指定路径的结构。所以可以用tar 的-C
选项指定路径,然后再进行打包。 - 多个参数写在一起时,
f
参数只能位于这些参数的最后面,并且f
参数后面必须跟打包后的文件名;
例如: 将指定目录下的日志目录打包
tar -czf log.tar.gz -C ~/work/PythonWorker3 Log -C ~/work/html/EHCommon/runtime log -C ~/work/html/OnlyDoor/runtime log2
例如: 将打包后的归档包存指定路径下
tar -czf /backup/job.tar.gz job opscripts DataBackUp
2、排除指定文件不打包
如果打包某个目录文件时,需要排除目录下的指定文件不进行打包,可以通过 --exclude
参数实现。
--exclude
使用说明:
格式:--exclude=需要排除的文件
(支持通配符)
说明:
-
如果需要排除的是一个目录,目录名后面不能加
/
; -
--exclude
参数的路径是在执行 tar 时相对于-C
指定的目录来计算,如果没有使用-C
参数,--exclude
的路径通常也是相对于当前工作目录的相对路径,而不是绝对路径;
例如: 排除/home/ubuntu/test目录下以sh结尾的文件
tar -czf test.tar.gz -C /home/ubuntu/ --exclude="test/*.sh" test
例如: 排除opscripts/image目录不进行打包
tar -czf opscripts.tar.gz --exclude="opscripts/image" opscripts
三:tar 解压归档包
1、解压某个 tar 包
命令格式:tar [options] 需要解压的归档包名称
常用选项:
-f
:指定需要解压的归档包名称-x
:表示是进行解压操作-z
:表示如果归档包使用gzip算法压缩了,就使用gzip进行解压-j
:表示如果归档表使用bzip2压缩了,就是用bizip2进行解压。-J
:表示如果归档表使用xe压缩了,就是用xz进行解压。- -C:临时改变到指定目录后再进行打包或解包。
使用说明:
- 如果解压某个归档包的时候没有指定压缩算法,则tar会自动选择合适的压缩算法进行解压。
- 默认是解压到当前目录下,使用
-C
选项,可以让tar
执行的时候临时进入指定目录,从而实现解压到指定目录下。 - 如果指定目录下存在同名文件,则会将现有的文件进行覆盖,导致数据丢失。
例如:解压到/var/www/html目录下
# 让`tar`执行的时候临时进入指定目录,从而实现解压到指定目录下
tar -xf file.tar.gz -C /var/www/html
2、解压文件覆盖说明
覆盖规则:
-
普通文件:如果解压后的文件是普通文件,且路径下存在同名文件,默认就会将旧文件进行覆盖;
-
目录文件:如果解压后的文件是目录文件,且路径下存在同名目录文件,则目录中的同名文件会被覆盖,不同名文件不会受到影响
预防方法:
- 使用tar的
-k
选项时,如果路径下存在同名文件,则解压失败。
例如:
tar -xfk file.tar.gz -C /var/www/html