压缩和解压缩

​ 为什么需要这部分?因为在工作中我们使用更多的是命令行处理。不可能把文档发到自己电脑上压缩后再上传上去,这对数据来说是十分危险的。所以为了数据安全也为了审计方便,我们将使用命令行来完成压缩和解压缩

注:Linux上的压缩工具只会压缩文件,不会压缩目录。如果想压缩目录需要先打包

zip可以直接压缩目录,但会丢失目录权限,元数据等信息

压缩率排行: xz > bzip2 > gzip > zip > compress

compress 和 uncompress

​ 注:此工具来自于ncompress包,此工具目前以及很少使用

对应的文件是.Z后缀

1
2
3
4
5
6
7
8
9
10
11
#压缩
compress [选项] [文件名]
#解压
uncompress [选项] [文件名]

#常用选项
-d #解压缩,相当于uncompress
-c #结果输出至标准输出,不删除原文件(默认压缩后删除原文件)
-f #覆盖已存在的目标文件
-v #显示过程
-r #递归压缩目录中的所有文件

gzip 和 gunzip

​ 来自于 gzip 包

对应的文件是.gz后缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#压缩
gzip [选项] [文件名]
#解压
gunzip [选项] [文件名]

#常用选项
-c|--stdout #将压缩数据输出到标准输出中,并保留原文件
-d|--decompress #解压缩,相当于gunzip
-f|--force #覆盖已存在目标文件
-k|--keep #保留原文件
-l|--list #显示原文件大小,压缩文件大小,压缩比,压缩前文件名
-q|--quiet #安静模式,忽略警告
-r|--recursive #递归压缩目录内所有文件
-S|--suffix=SUF #指定压缩文件后缀
-t|--test #测试,检测压缩文件是否完整
-v|--verbose #显示过程
-1|--fast #最快压缩,压缩比最低,但压缩速度快
-9|--best #最好压缩,压缩比最高,但压缩速度慢
-N #指定压缩登记,取值为1-9之间,默认6

bzip2 和 bunzip2

​ 来自于 bzip2 包

对应的文件是.bz2后缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#压缩
bzip2 [选项] [文件名]
#解压
bunzip2 [选项] [文件名]

#常用选项
-d|--decompress #解压缩,相当于bunzip2
-z|--compress #强制压缩
-k|--keep #保留原文件
-f|--force #覆盖已存在的目标文件
-t|--test #测试,检测压缩文件是否完整
-c|--stdout #将压缩数据输出到标准输出中,并保留原文件
-q|--quiet #静默模式,忽略警告
-v|--verbose #显示过程
-N #指定压缩等级,取值为1-9之间,默认9
--fast #同 -1
--best #同 -9

xz 和 unxz

​ 来自于 xz 包

对应的文件是 .xz 后缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#压缩
xz [选项] [文件名]
#解压
unxz [选项] [文件名]

#常用格式
-z|--compress #强制压缩
-d|--decompress #解压缩,相当于unxz
-t|--test #测试,检测压缩文件是否完整
-l|--list #查看压缩文件相关信息
-k|--keep #保留原文件
-f|--force #覆盖已存在目标文件
-c|--stdout #将压缩数据输出到标准输出中,并保留原文件
-T|--threads=NUM #开多线程,默认为1
-q|--quiet #安静模式,忽略警告
-v|--verbose #显示过程
-N #指定压缩登记,取值为1-9之间,默认为6

zip 和 unzip

​ zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,比如所有者和组信息

分别来自于 zip 和 unzip 包

对应的文件是 .zip 后缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#压缩
zip [选项] [压缩包输出目录] [压缩的文件目录]
#解压
unzip [选项] [压缩包路径] [解压文件路径]

#zip常用选项
-f #更换较新的文件到压缩文件内
-u #如果压缩包内有,就更新文件。如果没有,就追加进压缩包
-d #从压缩包内删除指定的文件
-m #将文件压缩之后,删除原始文件
-r #递归压缩目录(压缩目录时使用)
-j #只保存文件名称及其内容,而不存放任何目录名称
-l   #压缩文件时,把LF字符置换成LF+CR字符,unzip -l 表示显示压缩文件的内容
-1   #最快压缩,数字1              
-9   #最高压缩比,数字9
-q   #安静模式            
-v   #显示过程
-c   #替每个被压缩的文件加上注释
-z   #给压缩包加注释,unzip -z 查看注释
-x   #压缩时排除指定文件
-i   #仅压缩指定文件
-D   #压缩文件内不建立目录名称
-T   #测试,检测压缩文件是否完整      
-X   #不保存额外的文件属性
-y   #直接保存符号连接,而非该链接所指向的文件
-n   #不压缩以特定字符串结尾的文件
-P #加密码

#unzip常用选项
-p #将压缩内容通过管道传送    
-l #显示压缩文件内所包含的文件
-t #测试,检测压缩文件是否完整  
-z #查看注释
-v #列出包内文件信息
-x #指定不需要解压缩的文件
-d #指定解压后的目标目录
-n #解压缩时不要覆盖原有的文件        
-q #安静模式
-o #直接覆盖      
-a #对文本文件进行必要的字符转换
-j #不处理压缩文件中原有的目录路径  
-C #压缩文件中的文件名称区分大小写    
-L #将压缩文件中的全部文件名改为小写
-X #解压缩时同时回存文件原来的UID/GID                  
-V #保留VMS的文件版本信息
-K #解压缩后还原权限  
-M #将输出结果送到more程序处理

zcat

​ zcat 是”zip cat”的缩写,用于在不解压的情况下查看压缩文件内容

1
2
3
4
5
6
7
8
zcat [选项] [参数]

#常用选项
-c #将内容输出到标准输出,默认
-d #解压缩
-l #显示压缩文件(包)内的文件列表
-r #在目上递归操作
-t #测试压缩文件完整性

打包和解包

​ 打包的目的是保留Linux系统的文件权限以及所有者等信息。便于对文件进行转移

tar

​ 命令tar即 Tape ARchive 磁带归档,可以对目录和多个文件打包成一个文件进行归档

其本身不具备压缩功能,但可以使用参数调用相应的压缩命令进行压缩

此命令可以保留文件属性,推荐Linux更多使用该方法打包文件

​ 对应的文件后缀是.tar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tar [选项] [文件]

#常用选项
-A|--catenate|--concatenate   #追加 tar 文件至归档
-c|--create               #创建一个新归档
-d|--diff|--compare     #找出归档和文件系统的差异
--delete               #从归档(非磁带设备!)中删除
-r|--append               #追加文件至归档结尾
-t|--list                 #列出归档内容
--test-label           #测试归档卷标并退出
-u|--update               #仅追加比归档中副本更新的文件
-x|--extract|--get       #从归档中解出文件

#基本必带选项
-f|--file=ARCHIVE #指定压缩包文件,大部分时候是必选

注:选项-v可以不带,带了会显示详细信息。但一般不会看这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#tar常用组合选项

1.打包压缩
#压缩为.tar.gz
tar -zcvf 压缩包名.tar.gz 要压缩的文件或目录
#压缩为.tar.bz2
tar -jcvf 压缩包名.tar.bz2 要压缩的文件或目录
#压缩为.tar.xz
tar -Jcvf 压缩包名.tar.xz 要压缩的文件或目录

2.仅打包不压缩
tar -cvf 打包名.tar 要打包的文件或目录

3.查看包内容
tar -tvf 包文件名

4.解压包
tar -xvf 压缩包名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#其它选项
-G|--incremental #处理老式的 GNU 格式的增量备份
-n|--seek                 #归档可检索
-S|--sparse               #高效处理离散文件
-k|--keep-old-files #解包时不覆盖已有的文件
-U|--unlink-first         #解压之前先删除文件的链接
-W|--verify               #在写入以后尝试校验归档
-O|--to-stdout           #解压文件至标准输出
--to-command=COMMAND #将解压的文件通过管道传送至另一个程序
-m|--touch               #不要解压文件的修改时间
-p|--preserve-permissions|--same-permissions #保留文件权限信息
-s|--preserve-order|--same-order #成员参数按归档中的文件顺序列出
-M|--multi-volume         #创建/列出/解压多卷归档文件
-B|--read-full-records   #读取时重新分块(只对 4.2BSD 管道有效)
-i|--ignore-zeros         #忽略归档中的零字节块(即文件结尾)
-a|--auto-compress       #使用归档后缀名来决定压缩程序
-j|--bzip2               #使用 bzip2 压缩或解压缩
-J|--xz                   #使用 xz 压缩或解压缩
  --lzip|--lzma|--lzop     #lzip|xz --format=lzma|lzop
-z|--gzip|--gunzip|--ungzip #通过 gzip 压缩或解压缩
-Z|--compress|--uncompress #通过 compress 压缩或解压缩
-h|--dereference #将软链接指向的目标文件也压缩打包
--hard-dereference #将硬链接指向的目标文件也压缩打包
-P|--absolute-names       #不要从文件名中清除引导符‘/’
-l|--check-links #只输出非链接文件的信息
-R|--block-number         #每个信息都显示归档内的块数
-v|--verbose               #列出文件详细信息
-w|--interactive|--confirmation #操作前手动确认
-o                         #用老旧的 V7 tar 格式打包或解包
1
2
3
4
#压缩选项
-z #相当于gzip压缩工具
-j #相当于bzip2压缩工具
-J #相当于xz压缩工具
1
2
3
4
5
6
7
#额外选项
--show-defaults       #显示 tar 默认选项
--exclude #排除文件
-C|--directory=DIR #指定目录
-T|--files-from=FILE   #从文件中读取要处理的文件
-X|--exclude-from=FILE #从文件中读取要排除的文件
--version #显示版本号

split

​ 命令split是一个分割工具。主要用于将一个tar.gz包切成多个小分。在如今借助网络资源传输时偶尔会碰到单个文件最大大小限制,这时候就得用到split了

1
2
3
4
5
6
7
8
split [选项] [文件]

#常用选项
-b|--bytes=SIZE       #按大小指定分割单位
-C|--line-bytes=SIZE  #同-b,但是在切割时将尽量维持每行的完整性
-d                   #切割后小文件的后缀用数字表示
-l|--lines=NUMBER     #指定行数,按多少行切一个小文件
--verbose     #显示过程