文章

Linux 打包、压缩和解压命令

概述

归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。通常,归档总是会和系统(数据)备份联系在一起。
压缩,和归档文件类似,压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小
在 Linux 中可以识别的常见压缩格式有十几种,比如:".zip"、".gz"、".bz2"、“tar”、".tar.gz"、".tar.bz2" ……

".zip" 格式

".zip" 是 Windows 中最常用的压缩格式,Linux 也可正确识别 ".zip" 格式。常用于 windows 和 Linux 之间传递文件

".zip" 格式压缩命令

zip [选项] 压缩包名 源文件或这源目录
选项:
-r: 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩
-m: 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中
-v: 显示详细的压缩过程信息
-q: 在压缩的时候不显示命令的执行过程
[- 压缩级别]: 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。
-u: 更新压缩文件,即往压缩文件中添加新文件

zip myzip.zip demo.txt demo2.yml

".zip" 格式解压命令

unzip [选项] 压缩包名
选项
[-d 目录名]: 将压缩文件解压到指定目录下
-n: 解压时并不覆盖已经存在的文件
-o: 解压时覆盖已经存在的文件,并且无需用户确认
-v: 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作
-t: 测试压缩文件有无损坏,但并不解压
[-x 文件列表]: 解压文件,但不包含文件列表中指定的文件

".gz" 格式(不能打包)

".gz" 格式压缩命令

gzip [选项] 压缩包名 源文件或这源目录
选项:
-c: 将压缩数据输出到标准输出中,可以用于保留源文件
​> -d:解压缩
-r:递归压缩指定目录下以及子目录下的所有文件
gzip 压缩文件后会把源文件删除掉,它是不支持保留源文件的

[root@phixlin phixlin]# gzip abc.txt 
[root@phixlin phixlin]# ll
总用量 12
-rw-rw-r--. 1 phixlin phixlin   60 2 月  22 01:33 abc.txt.gz
# 压缩完之后源文件也会被删除掉

----------------------------------------------------------------------------
[root@phixlin phixlin]# gzip -c bcd.txt > bcd.txt.gz
[root@phixlin phixlin]# ll
总用量 16
-rw-------. 1 phixlin phixlin    0 2 月  21 00:37 bcd.txt
-rw-r--r--. 1 root      root        28 2 月  25 00:55 bcd.txt.gz

# 你使用 gzip -c bcd.txt 命令,会把压缩数据输出到屏幕上,现在我不让它输出到屏幕上,而是重定向到一个压缩文件中,这样就实现了在压缩你文件的同时不删除源文件

----------------------------------------------------------------------------
[root@phixlin phixlin]# gzip -r aaaa/
[root@phixlin phixlin]# ll aaaa/
总用量 8
-rw-r--r--. 1 root root 26 2 月  25 01:02 a.txt.gz
-rw-r--r--. 1 root root 26 2 月  25 01:02 b.txt.gz
# 你使用 gzip -r 命令,它是把这个目录下的所有文件都压缩,而不会把这个目录压缩 (不能打包)

".gz" 格式解压缩命令

gzip -d 压缩包名
gunzip 压缩包名

".bz2" 格式(不能压缩目录)

".bz2" 格式,是 Linux 的另一种压缩格式,从理论上来讲,".bz2" 格式的算法更先进、压缩比更好;而 ".gz" 格式相对来讲压缩时间更快
".bz2" 格式压缩命令

bzip2 [选项] 源文件
选项:
​> -d:解压缩
​> -k:压缩时保留源文件
​> -v:显示压缩的详细信息

[root@phixlin phixlin]# bzip2 -k bcd.txt 
[root@phixlin phixlin]# ll
总用量 20
-rw-------. 1 phixlin phixlin    0 2 月  21 00:37 bcd.txt
-rw-------. 1 phixlin phixlin   14 2 月  21 00:37 bcd.txt.bz2

# 保留源文件压缩

这条命令不能压缩目录,压缩目录就会报错。前面的 gzip 命令是不能打包,你用 gzip 命令压缩目录,它会把你目录下的文件进行压缩,不会把你这个目录进行压缩

".bz2" 格式解压缩命令

bzip2 -d 压缩包
bunzip2 压缩包
上面两个命令都可以

".tar" 格式

".tar" 格式的打包和解打包都使用 tar 命令,区别只是选项不同。
".tar" 格式打包命令

tar [选项] [-f 压缩包名] 源文件或目录
选项:
​> -c:将多个文件或目录进行打包
​> -f:指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名。
​> -v:显示打包文件过程

[root@phixlin phixlin]# tar -cvf test.tar abd.txt bcd.txt 
abd.txt
bcd.txt

".tar" 格式解打包命令

tar [选项] 压缩包
选项:
​> -x:对 tar 包做解打包操作
​> -f:指定要解压的 tar 包的包名
-t: 只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作
[-C 目录]: 指定解打包位置
​> -v:显示解打包文件过程

[root@phixlin phixlin]# tar -xvf test.tar 
abd.txt
bcd.txt

".tar.gz" 格式和 ".tar.bz2" 格式

使用 tar 命令直接打包压缩

tar [选项] 压缩包 源文件或目录
选项:
​> -z:压缩和解压缩 ".tar.gz" 格式
​> -j: 压缩和解压缩 ".tar.bz2" 格式

# 压缩
[root@phixlin phixlin]# tar -jcvf test.gz.bz2 abd.txt bcd.txt 
abd.txt
bcd.txt
[root@phixlin phixlin]# ll
总用量 24
-rw-r--r--. 1 root      root        160 2 月  25 23:11 test.gz.bz2
---------------------------------------------------------------
# 解压缩
[root@phixlin phixlin]# tar -jxvf test.gz.bz2 
abd.txt
bcd.txt
----------------------------------------------------------------
# 压缩
[root@phixlin phixlin]# tar -zcvf test.tar.gz abd.txt bcd.txt 
abd.txt
bcd.txt
[root@phixlin phixlin]# ll
总用量 12
-rw-r--r--. 1 root      root         0 2 月  22 02:09 abd.txt
-rw-------. 1 phixlin phixlin    0 2 月  21 00:37 bcd.txt
-rw-r--r--. 1 root      root       154 2 月  25 23:14 test.tar.gz
----------------------------------------------------------------
# 解压缩
[root@phixlin phixlin]# tar -zxvf test.tar.gz 
abd.txt
bcd.txt

--------------------------------------------------------------
# 只查看不解压
[root@phixlin phixlin]# tar -ztvf test.tar.gz 
-rw-r--r-- root/root         0 2019-02-22 02:09 abd.txt
-rw------- phixlin/phixlin 0 2019-02-21 00:37 bcd.txt

--------------------------------------------------------------
# 解压到指定目录 (-C 一定要跟在压缩包后面)[root@phixlin phixlin]# tar -zxvf test.tar.gz -C aaaa/
abd.txt
bcd.txt

--------------------------------------------------------------
# 解压指定文件
[root@phixlin phixlin]# tar -ztvf test.tar.gz         # 我先查看这个压缩包里面有哪些文件
-rw-r--r-- root/root         0 2019-02-22 02:09 abd.txt
-rw------- phixlin/phixlin 0 2019-02-21 00:37 bcd.txt
[root@phixlin phixlin]# tar -zxvf test.tar.gz -C aaaa/ abd.txt 
abd.txt
# 我只把 abd.txt 文件解压到 aaaa 目录下
License:  CC BY 4.0