Linux 压缩与解压终极指南:全格式、分卷与进阶操作

Linux 压缩与解压终极指南:全格式、分卷与进阶操作

这是一份 Linux 下最全的压缩包处理手册。不仅涵盖常见的 .tar.gz, .zip,还包括了单文件压缩 .bz2,以及如何处理大文件的分卷压缩


1. 基础概念:打包 vs 压缩

在 Linux 中,这两个概念是分开的:

  • 打包 (Archive) : 把一堆文件捆在一起变成一个文件,大小不变。工具:tar
  • 压缩 (Compress) : 通过算法减小文件体积。工具:gzip, bzip2, xz 等。

这也是为什么你常看到 .tar.gz ------ 先用 tar 打包,再用 gz 压缩。但在实际操作中,tar 命令可以一次性搞定。


2. 瑞士军刀:Tar 系列 (打包+压缩)

这是 Linux 最主流的格式。

核心参数

  • -c: 创建 (Create)
  • -x: 解压 (Extract)
  • -f: 指定文件名 (File, 必选且放最后)
  • -C: 指定解压路径 (Change Directory)

2.1 常见组合 (.tar.gz, .tar.bz2, .tar.xz)

格式后缀 压缩参数 创建命令 解压命令 特点
.tar.gz -z tar -czvf file.tar.gz dir/ tar -xzvf file.tar.gz 速度快,兼容性最好
.tar.bz2 -j tar -cjvf file.tar.bz2 dir/ tar -xjvf file.tar.bz2 压缩率比 gz 高,速度稍慢
.tar.xz -J tar -cJvf file.tar.xz dir/ tar -xJvf file.tar.xz 压缩率极高,压缩非常慢
.tar.zst --zstd tar -I zstd -cvf file.tar.zst dir/ tar -I zstd -xvf file.tar.zst Facebook新格式,速度极快且压缩率高 (需装 zstd)

2.2 指定目录与部分解压

  • 解压到指定目录 :

    bash 复制代码
    tar -xvf archive.tar.gz -C /path/to/target
  • 只解压其中一个文件 :

    bash 复制代码
    # 只想拿出包里的 readme.txt
    tar -xvf archive.tar.gz readme.txt

3. 单文件纯压缩 (.bz2, .gz, .xz, .Z)

这里回答你的疑问 :如果文件名只有 .bz2 而没有 .tar(例如 database.sql.bz2),说明它没有被打包 ,只是单纯被压缩了。处理这种文件不要用 tar

3.1 .bz2 (Bzip2)

  • 安装 : sudo apt install bzip2

  • 解压 :

    bash 复制代码
    bzip2 -d file.bz2
    # 或者
    bunzip2 file.bz2
    # 结果:file.bz2 消失,生成 file
  • 压缩 :

    bash 复制代码
    bzip2 file
    # 结果:file 消失,生成 file.bz2
  • 保留原文件压缩/解压 : 使用 -k (keep) 参数。
    bzip2 -dk file.bz2

3.2 .gz (Gzip)

  • 解压 : gzip -d file.gzgunzip file.gz
  • 压缩 : gzip file

3.3 .xz (XZ Utils)

  • 解压 : xz -d file.xz
  • 压缩 : xz file

3.4 .Z (老式 Unix Compress)

  • 安装 : sudo apt install ncompress
  • 解压 : uncompress file.Z
  • 压缩 : compress file

4. 跨平台与高压缩率 (.zip, .7z, .rar)

4.1 ZIP (Windows 最通用)

  • 安装 : sudo apt install zip unzip
  • 压缩 : zip -r archive.zip folder/
  • 解压 : unzip archive.zip
  • 解压到目录 : unzip archive.zip -d /path/to/target
  • 解决中文乱码 : unzip -O CP936 archive.zip (指定编码)

4.2 7z (高压缩率首选)

  • 安装 : sudo apt install p7zip-full
  • 压缩 : 7z a archive.7z folder/
  • 解压 : 7z x archive.7z (保持目录结构)
  • 解压到目录 : 7z x archive.7z -o/path/to/target (注意-o后面无空格)

4.3 RAR (通常只解压)

  • 安装 : sudo apt install unrar
  • 解压 : unrar x archive.rar
  • 解压到目录 : unrar x archive.rar /path/to/target

5. 进阶操作:分卷压缩与解压 (Split Archives)

当文件太大(如 10GB),需要拆分成多个小包(如 1GB 一个)以便传输时使用。

场景 A:使用 7z 分卷 (推荐,最简单)

  • 分卷压缩 (每个包 100MB):

    bash 复制代码
    # -v 后跟大小,k/m/g
    7z a archive.7z target_folder/ -v100m

    结果会生成:archive.7z.001, archive.7z.002 ...

  • 合并解压 :

    只需解压第一个文件 .001,程序会自动寻找后续分卷。

    bash 复制代码
    7z x archive.7z.001

场景 B:使用 Zip 分卷

  • 分卷压缩 :

    bash 复制代码
    zip -s 100m -r archive.zip target_folder/
  • 合并解压 :
    zip 的分卷解压比较麻烦,通常需要先合并成一个大文件再解压,或者使用 7z 来解压 zip 分卷。

    bash 复制代码
    # 方法:先合并
    cat archive.z01 archive.z02 archive.zip > full_archive.zip
    unzip full_archive.zip

场景 C:使用 Tar + Split (Linux 原生流派)

这是最"Linux"的做法,利用管道。

  • 分卷压缩:

    bash 复制代码
    # 将 folder 打包,通过管道传给 split,切成 100M 的块,命名为 part_aa, part_ab...
    tar -cvzf - folder/ | split -b 100M - archive.tar.gz.part_

    结果生成:archive.tar.gz.part_aa, archive.tar.gz.part_ab ...

  • 合并解压:

    bash 复制代码
    # 用 cat 把所有分卷拼起来,通过管道传给 tar 解压
    cat archive.tar.gz.part_* | tar -xvzf -

6. 软件安装汇总 (Ubuntu/Debian)

复制以下命令一次性安装所有常用工具:

bash 复制代码
sudo apt update
sudo apt install unzip zip p7zip-full unrar bzip2 ncompress zstd

7. 终极速查表 (Cheat Sheet)

格式 典型文件名 压缩命令 (示例) 解压命令 解压到指定目录
Tar+Gzip .tar.gz tar -czvf a.tar.gz src/ tar -xzvf a.tar.gz -C /path
Tar+Bzip2 .tar.bz2 tar -cjvf a.tar.bz2 src/ tar -xjvf a.tar.bz2 -C /path
Tar+Xz .tar.xz tar -cJvf a.tar.xz src/ tar -xJvf a.tar.xz -C /path
Bzip2单文件 file.bz2 bzip2 file bzip2 -d file.bz2 (仅单文件)
Gzip单文件 file.gz gzip file gzip -d file.gz (仅单文件)
Zip .zip zip -r a.zip src/ unzip a.zip -d /path
7z .7z 7z a a.7z src/ 7z x a.7z -o/path (无空格)
Rar .rar (需付费版rar工具) unrar x a.rar 直接跟路径
Zstd .zst zstd file zstd -d file.zst -o /path/file
分卷 7z .7z.001 7z a a.7z src -v100m 7z x a.7z.001 -o/path
分卷 Tar .part_aa `tar ... split ...` `cat parts*
相关推荐
江湖有缘1 小时前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
实心儿儿1 小时前
Linux —— 应用层协议HTTP
linux·网络·http
流星白龙1 小时前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
有续技术2 小时前
哈斯 (Haas) 机床 IP、端口号配置内容总结
运维·服务器
小张同学a.2 小时前
LAMP架构2
linux·运维·网络·架构·负载均衡
千河殇 多想和她2 小时前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
VortMall2 小时前
出海引流运维双升级|VortMall微服务商城系统v1.3.12 升级更新
运维·微服务·facebook
心念枕惊2 小时前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
躺不平的理查德2 小时前
CMAKE备忘录
linux·运维·服务器
9624562 小时前
跨域与私有网络访问限制排查实录
运维·服务器·网络