Linux 压缩与解压缩

一、压缩基础概念

1.1 压缩原理与类型

压缩类型 原理 特点 常见工具
有损压缩 丢弃不必要数据 文件变小,质量降低 JPEG、MP3
无损压缩 算法压缩,可完全恢复 保持原文件质量 gzip、bzip2、xz
归档+压缩 先打包再压缩 处理多个文件 tar + 压缩工具

1.2 压缩格式比较

格式 扩展名 压缩率 速度 CPU占用 工具
gzip .gz 中等 快 低 gzip, gunzip
bzip2 .bz2 高 慢 高 bzip2, bunzip2
xz .xz 很高 很慢 很高 xz, unxz
zip .zip 中等 中等 中等 zip, unzip
7z .7z 很高 慢 高 7z, 7za
Z .Z 低 快 低 compress

二、gzip/gunzip 工具

2.1 gzip - 压缩文件

命令格式:

bash 复制代码
gzip [选项] 文件

常用选项:

  • -k:压缩并保留原文件
  • -c:压缩到标准输出
  • -9:最大压缩率(最慢)
  • -1:最快压缩(压缩率最低)
  • -d:解压缩
  • -l:查看压缩文件信息
  • -t:测试压缩文件完整性
  • -r:递归压缩目录中所有文件
  • -v:显示详细信息

使用示例:

bash 复制代码
# 压缩当前目录下document.pdf 文件为document.pdf.gz
gzip document.pdf

# 压缩多个文件(每个文件单独压缩)
gzip file1.txt file2.txt file3.txt

# 压缩当前目录下的所有文件,目录不会进行压缩
gzip *

# 保留原文件压缩
gzip -k important.log

# 最大压缩率
gzip -9 large_file.dat

# 压缩/test目录以及其子目录下的所有文件
gzip -r /test

# 显示将file.txt 文件为file.txt.gz的执行过程
gzip -v file.txt

# 查看file.txt.gz压缩文件中的内容
gzip -l file.txt.gz
# compressed uncompressed  ratio uncompressed_name
#     123456      654321   81.0% data.txt

# 解压缩file.txt.gz压缩文件
gzip -d file.txt.gz

2.2 gunzip - 解压缩

命令格式:

bash 复制代码
gunzip [选项] 文件.gz

常用选项:

  • -k:解压并保留压缩文件
  • -c:解压到标准输出
  • -l:列出压缩文件的相关信息
  • -d:解压(等同于gzip -d)
  • -t:测试压缩文件
  • -r:递归解压目录
  • -f:强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接
  • -q:不显示警告信息
  • -v:显示详细信息

使用示例:

bash 复制代码
# 解压缩file.txt.gz文件到当前目录
gunzip file.txt.gz

# 保留压缩文件
gunzip -k backup.gz   

# 解压缩file.txt.gz文件时显示执行过程
gunzip -v file.txt.gz

# 查看压缩包内容
gunzip -l file.txt.gz

# 查看前10行     
gunzip -c data.gz | head -n 10  

# 递归解压目录
gunzip -r compressed_logs/  

三、bzip2/bunzip2 工具

3.1 bzip2 - 高压缩率工具

命令格式:

bash 复制代码
bzip2 [选项] 文件

常用选项:

  • -k:压缩并保留原文件
  • -9:最大压缩率(默认)
  • -1:最快压缩
  • -d:解压缩
  • -f:强行压缩文件,若输出文件与现有文件同名会直接覆盖现有文件
  • -t:测试完整性
  • -l:查看压缩文件信息
  • -v:显示详细信息

使用示例:

bash 复制代码
# 将test.txt文件压缩成.bz2格式,并删除test.txt文件
bzip2 test.txt

# 将test.txt文件压缩成.bz2格式,并保留test.txt文件
bzip2 -k test.txt

# 最大压缩并显示信息
bzip2 -v -9 important.log  

# 强制将test.txt文件压缩成.bz2格式,并显示压缩的详细信息
bzip2 -fv test.txt

# 测试test.txt.bz2压缩文件的完整性
bzip2 -t test.txt.bz2

# 查看压缩信息
bzip2 -l data.bz2
# 文件大小 压缩后大小 压缩率 解压后大小 文件名

# 将test.txt.bz2压缩文件进行解压
bzip2 -d test.txt.bz2

3.2 bunzip2 - 解压缩

命令格式:

bash 复制代码
bunzip2 [选项] 文件.bz2

常用选项:

  • -k:完成解压后,会保留有原文件
  • -c:解压到标准输出
  • -d:解压(等同于bzip2 -d)
  • -t:测试完整性
  • -f:强行解压,若输出文件与现有文件同名会直接覆盖现有文件
  • -v:显示详细信息

使用示例:

bash 复制代码
# 解压test.txt.bz2文件,完成解压后删除test.txt.bz2文件
bunzip2 test.txt.bz2

# 解压test.txt.bz2文件,完成解压后保留test.txt.bz2文件
bunzip2 -k test.txt.bz2

# 最大压缩并显示信息
bzip2 -v -9 important.log  

# 强制解压test.txt.bz2文件,若当前目录已存在解压的文件,直接覆盖掉当前目录下原有文件
bunzip2 -f test.txt.bz2

# 查看压缩信息
bzip2 -l data.bz2
# 文件大小 压缩后大小 压缩率 解压后大小 文件名

四、zip/unzip - 跨平台压缩工具

4.1 zip - 创建ZIP压缩包

命令格式:

bash 复制代码
zip [选项] 压缩包名.zip 文件...

常用选项:

  • -r:递归压缩目录
  • -e:加密压缩(设置密码)
  • -9:最大压缩率(0-9,默认6)
  • -p password:直接指定密码(不安全)
  • -q:安静模式(不显示输出)
  • -u:更新压缩包(添加新文件)
  • -m:压缩后删除原文件
  • -F:修复损坏的ZIP文件
  • -T:测试ZIP文件完整性
  • -v:显示详细信息
  • -j:不包含路径(只存储文件名)
  • -y:存储符号链接本身(不指向目标)
  • -n:不压缩指定扩展名的文件
  • -x:指定不压缩的文件

使用示例:

bash 复制代码
# 创建基本ZIP
zip backup.zip important.txt config.ini

# 压缩目录
zip -r website.zip /var/www/html

# 加密压缩
zip -e secret.zip confidential.pdf
# 会提示输入密码

# 最大压缩率
zip -9 archive.zip large_file.iso

# 排除某些文件
zip -r backup.zip /home -x "*.mp4" "*.iso"

# 从文件列表创建
find . -name "*.txt" | zip -@ textfiles.zip

# 更新现有ZIP
zip -u backup.zip new_document.pdf

4.2 unzip - 解压ZIP文件

命令格式:

bash 复制代码
unzip [选项] 压缩包.zip

常用选项:

  • -l:查看压缩文件内所包含的文件,但不进行解压
  • -v:查看文件详细信息,也不进行解压
  • -n:解压缩时不要覆盖原有的文件
  • -o:不必先询问用户,执行后覆盖原有文件
  • -d <存储目录>:指定文件解压缩后所要存储的目录
  • -t:检查压缩文件是否损坏
  • -j:忽略目录结构(所有文件到当前目录)
  • -P:使用密码解压
  • -q:安静模式(不显示输出)
  • -x:解压时排除某些文件

使用示例:

bash 复制代码
# 基本解压
unzip backup.zip

# 解压到特定目录
unzip archive.zip -d /tmp/extracted

# 列出内容
unzip -l archive.zip
# Archive:  archive.zip
#   Length      Date    Time    Name
# ---------  ---------- -----   ----
#    123456  2024-01-01 10:00   document.pdf
#      7890  2024-01-01 10:00   config.ini
# ---------                     -------
#    131346                     2 files

# 解压特定文件
unzip archive.zip "*.pdf" "*.doc"  # 只解压PDF和DOC文件

# 密码解压
unzip -P mypassword encrypted.zip

# 测试ZIP文件
unzip -t archive.zip
# No errors detected in archive.zip.

# 交互式解压(解压时选择文件)
unzip archive.zip -x "*"  # 先不解压任何文件
unzip archive.zip file1.txt file2.txt  # 然后选择文件解压

五、xz/unxz - 高压缩率工具(现代)

5.1 xz - 压缩文件

命令格式:

bash 复制代码
xz [选项] 文件

常用选项:

  • -c:压缩到stdout
  • -k:压缩并保留原文件
  • -9:最大压缩率(0-9,默认6)
  • -0:不压缩(只做预处理)
  • -e:极限压缩(比-9更好但更慢)
  • -T4:使用4个线程压缩
  • -v:显示压缩信息
  • -l:列出压缩文件信息
  • -d:解压缩(同unxz)
  • -t:测试完整性

使用示例:

bash 复制代码
# 压缩为large_archive.tar.xz
xz large_archive.tar    

# 极限压缩并保留原文件    
xz -9ek database.sql   

# 使用所有CPU核心(T0=自动)     
xz -T0 file.iso       

# 压缩所有日志文件并显示信息      
xz -v *.log                 

5.2 unxz - 解压缩

命令格式:

bash 复制代码
unxz [选项] 文件.xz

常用选项:

  • -c:解压到stdout
  • -k:解压并保留压缩文件
  • -v:显示解压信息
  • -T2:使用2个线程解压

使用示例:

bash 复制代码
# 解压为archive.tar
unxz archive.tar.xz     

# 解压并保留.xz文件    
unxz -k data.xz             

# 批量解压
unxz *.xz      

六、7z - 高压缩率多格式工具

命令格式:

bash 复制代码
7z [选项] [命令] 压缩包名称 [文件列表]

常用选项:

  • -m:设置压缩方法
  • -p:设置密码
  • -o:设置输出目录
  • -r:递归子目录
  • -y:对所有询问回答"是"
  • -v:分卷压缩

常用命令:

  • a:添加文件到压缩包
  • d:从压缩包删除文件
  • e:解压文件到当前目录(无目录结构)
  • x:解压文件保持完整目录结构
  • l:列出压缩包内容
  • t:测试压缩包完整性
  • u:更新文件到压缩包
  • rn:重命名压缩包内文件
  • i:显示支持的格式信息

使用示例:

bash 复制代码
# 基本压缩
7z a archive.7z file.txt                 # 压缩单个文件
7z a archive.7z file1.txt file2.jpg      # 压缩多个文件
7z a archive.7z *.txt                    # 通配符压缩
7z a archive.7z directory/               # 压缩目录

# 递归压缩
7z a -r archive.7z folder/               # 递归压缩目录
7z a -r archive.7z *.log                 # 递归压缩所有log文件

# 指定压缩格式
7z a -t7z archive.7z files/              # 7z格式(默认)
7z a -tzip archive.zip files/            # zip格式
7z a -tgzip archive.gz file.txt          # gzip格式(单文件)
7z a -tbzip2 archive.bz2 file.txt        # bzip2格式(单文件)
7z a -ttar archive.tar files/            # tar格式(仅归档)

# 压缩级别控制(0-9)
7z a -mx0 archive.7z files/              # 仅复制(不压缩)
7z a -mx1 archive.7z files/              # 最快压缩
7z a -mx3 archive.7z files/              # 快速压缩
7z a -mx5 archive.7z files/              # 正常压缩(默认)
7z a -mx7 archive.7z files/              # 最大压缩
7z a -mx9 archive.7z files/              # 极限压缩

# 字典大小(影响压缩率和内存)
7z a -md16m archive.7z files/            # 16MB字典
7z a -md32m archive.7z files/            # 32MB字典
7z a -md64m archive.7z files/            # 64MB字典(默认)
7z a -md128m archive.7z files/           # 128MB字典

# 单词大小(影响文本压缩)
7z a -mfb32 archive.7z documents/        # 32个词位
7z a -mfb64 archive.7z documents/        # 64个词位

# 固实压缩(提高压缩率)
7z a -ms=on archive.7z files/            # 启用固实压缩
7z a -ms=off archive.7z files/           # 禁用固实压缩
7z a -ms archive.7z files/               # 默认固实模式

# 分卷压缩
7z a -v10m archive.7z largefile.iso      # 10MB分卷
7z a -v1g archive.7z bigdata/            # 1GB分卷
7z a -v650m archive.7z diskimage.img     # CD容量分卷

# 设置密码(加密文件名)
7z a -p archive.7z file.txt              # 提示输入密码
7z a -p123456 archive.7z file.txt        # 指定密码(不安全)
7z a -p'complex pass' archive.7z files/  # 复杂密码
# 加密文件名
7z a -pPASSWORD -mhe=on archive.7z secret/  # 加密文件名
# AES-256 加密
7z a -pPASSWORD -mhe=on -m0=AES256 archive.7z files/

# 基本列出
7z l archive.7z                          # 列出内容
7z l archive.zip
7z l archive.tar.gz
# 详细列出
7z l -slt archive.7z                     # 技术信息列表
7z l -slt archive.7z | grep -E "Path|Size|Method"
# 特定格式
7z l -slt archive.7z | grep "Method"     # 查看压缩方法
7z l -slt archive.7z | grep "CRC"        # 查看CRC校验

# 测试完整性
7z t archive.7z                          # 测试压缩包
7z t -r archive.7z                       # 递归测试所有压缩包
# 测试特定文件
7z t archive.7z file.txt                 # 测试单个文件
7z t archive.7z *.pdf                    # 测试pdf文件

# 完整路径解压(保持目录结构)
7z x archive.7z                          # 解压到当前目录
7z x archive.7z -ofolder/                # 解压到指定目录
7z x archive.7z -o/home/user/extract/    # 解压到绝对路径

# 解压到当前目录(不保持路径)
7z e archive.7z                          # 所有文件到当前目录
7z e archive.7z -ofolder/                # 解压到文件夹

# 解压特定文件
7z x archive.7z file.txt                 # 解压单个文件
7z x archive.7z *.jpg                    # 解压所有jpg文件
7z x archive.7z docs/*.pdf               # 解压目录中的pdf文件

# 解压到标准输出
7z e -so archive.7z file.txt             # 输出到stdout
7z e -so archive.7z file.txt | less      # 查看内容

# 覆盖选项
7z x -aoa archive.7z                     # 直接覆盖所有文件
7z x -aos archive.7z                     # 跳过已存在文件
7z x -aou archive.7z                     # 自动重命名
7z x -aot archive.7z                     # 自动重命名现有文件

# 解压加密文件
7z x -pPASSWORD archive.7z               # 密码解压
7z x -p archive.7z                       # 交互式输入密码

# 解压分卷压缩
7z x archive.7z.001                      # 自动识别分卷
7z x archive.part1.7z                    # 自动处理连续分卷

# 解压并保持权限
7z x archive.tar.gz | tar xzf -          # 配合tar保持权限

# 更新压缩包
7z u archive.7z newfile.txt              # 添加或更新文件
7z u archive.7z *.log                    # 更新所有log文件
7z u -t7z -uq0 archive.7z folder/        # 仅更新新文件

# 从压缩包删除文件
7z d archive.7z file.txt                 # 删除单个文件
7z d archive.7z *.tmp                    # 删除所有tmp文件
7z d archive.7z -r folder/               # 删除目录

# 重命名压缩包内文件
7z rn archive.7z oldname.txt newname.txt # 重命名文件
7z rn archive.7z dir1/ dir2/             # 重命名目录

# 示例:
# 更新修改过的文件
find . -name "*.txt" -newer timestamp -exec 7z u archive.7z {} \;

# 删除过期文件
7z d archive.7z $(find . -name "*.log" -mtime +30)

# 批量重命名
7z rn archive.7z *.htm *.html            # 扩展名批量修改

七、tar - 归档工具(打包与压缩结合)

命令格式:

bash 复制代码
tar [选项] 压缩包名 文件...

常用选项:

  • -c:创建归档(打包)
  • -x:提取归档(解包)
  • -t:列出归档内容
  • -r:追加文件到归档
  • -u:更新比归档中新的文件
  • -d:比较归档和文件系统差异
  • -f:指定归档文件名(必须)
  • -v:显示详细信息
  • -z:使用gzip压缩/解压 (.tar.gz, .tgz)
  • -j:使用bzip2压缩/解压 (.tar.bz2, .tbz2)
  • -J:使用xz压缩/解压 (.tar.xz, .txz)
  • -Z:使用compress压缩/解压 (.tar.Z)
  • -C:切换到指定目录
  • -k:不覆盖已存在文件

使用示例:

bash 复制代码
# 创建归档(打包)
tar -cf archive.tar file1 file2 dir1/
tar -cvf archive.tar file1 file2 dir1/  # 显示过程

# 列出归档内容
tar -tf archive.tar
tar -tvf archive.tar                   # 详细列表

# 提取归档
tar -xf archive.tar
tar -xvf archive.tar                   # 显示过程
tar -xvf archive.tar -C /tmp           # 提取到/tmp

# 创建并压缩归档
tar -czf archive.tar.gz files/         # gzip压缩 (.tar.gz)
tar -cjf archive.tar.bz2 files/        # bzip2压缩 (.tar.bz2)
tar -cJf archive.tar.xz files/         # xz压缩 (.tar.xz)

# 列出压缩归档内容
tar -tzf archive.tar.gz                # gzip压缩的
tar -tjf archive.tar.bz2               # bzip2压缩的
tar -tJf archive.tar.xz                # xz压缩的

# 提取压缩归档
tar -xzf archive.tar.gz                # 解压.tar.gz
tar -xjf archive.tar.bz2               # 解压.tar.bz2
tar -xJf archive.tar.xz                # 解压.tar.xz

# 追加文件到归档
tar -rf archive.tar newfile.txt

# 更新归档(添加新文件或更新的文件)
tar -uf archive.tar changedfile.txt

# 排除文件
tar -czf backup.tar.gz --exclude="*.log" --exclude="*.tmp" /home/

# 使用通配符
tar -czf docs.tar.gz *.pdf *.docx

# 从列表文件添加
tar -czf backup.tar.gz -T filelist.txt

# 多卷归档(分割)
tar -czf - large_dir/ | split -b 100M - backup.tar.gz.part
# 恢复:cat backup.tar.gz.part* | tar -xz

# 增量备份
tar -g snapshot.snar -czf backup-full.tar.gz /data
tar -g snapshot.snar -czf backup-incr.tar.gz /data

# 保留权限和属性
tar -cpzf backup.tar.gz --same-owner --numeric-owner /etc/

# 只打包不包含某些目录
tar -czf site.tar.gz --exclude="node_modules" --exclude=".git" website/  
相关推荐
wtblszn11 小时前
自动化包装生产线设备可视化管理方案
运维·自动化
跨境小彭12 小时前
Temu拉美站点铺货实操复盘:手动复制痛点与批量自动化解决方案
服务器·人工智能·搜索引擎·自动化·temu电商运营
心之语歌12 小时前
Tkinter 画布基本梳理
运维·服务器·python
Shulex13 小时前
面向跨境电商多渠道消息系统的技术架构:亚马逊站内信合规对接与自动化执行链路设计
运维·架构·自动化
bloglin9999913 小时前
vmware部署centos7启动docker容器后无法访问服务
运维·docker·容器
夜听莺儿鸣14 小时前
502-003_Linux 中断与异常(一):从Linux角度理解中断与异常
linux·中断与异常·linux中断
杨云龙UP14 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
梦帮科技15 小时前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
向成科技15 小时前
XC3576H工控主板|深度适配Ubuntu 26.04 LTS,释放边缘AI与工业开发新潜能
linux·人工智能·ubuntu·机器人·硬件·主板·边缘ai
逐流人15 小时前
Ceph分布式存储集群配置与池管理:从配置优先级到PG、复本池与纠删码池
运维·分布式·ceph·云原生·云计算·rados