200字
压缩和解压缩
2025-11-26
2025-11-26

压缩和解压缩

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

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

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

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

compress 和 uncompress

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

对应的文件是.Z后缀

#压缩
compress [选项]  [文件名]
#解压
uncompress [选项] [文件名]

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

gzip 和 gunzip

​ 来自于 gzip 包

对应的文件是.gz后缀

#压缩
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后缀

#压缩
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 后缀

#压缩
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 后缀

#压缩
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"的缩写,用于在不解压的情况下查看压缩文件内容

zcat [选项] [参数]

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

打包和解包

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

tar

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

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

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

​ 对应的文件后缀是.tar

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可以不带,带了会显示详细信息。但一般不会看这个

#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 压缩包名
#其它选项
-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 格式打包或解包
#压缩选项
-z		#相当于gzip压缩工具
-j		#相当于bzip2压缩工具
-J		#相当于xz压缩工具
#额外选项
--show-defaults        #显示 tar 默认选项
--exclude          #排除文件
-C|--directory=DIR #指定目录
-T|--files-from=FILE    #从文件中读取要处理的文件
-X|--exclude-from=FILE  #从文件中读取要排除的文件
--version          #显示版本号

split

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

split [选项] [文件]

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

评论