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 小时前
UTM+Ubuntu配置MPICH并行环境
linux·运维·ubuntu
r***86981 小时前
Nginx解决前端跨域问题
运维·前端·nginx
落日漫游1 小时前
ansible中角色概念
运维·云原生·自动化
2301_807288631 小时前
MPRPC项目制作(第四天)
java·服务器·前端
_kank_1 小时前
Linux 文件权限深度解析与实战指南
linux
LCG米1 小时前
工业自动化嵌入式开发实战:基于ARM7与μC/OS-II的焊接机控制系统设计与实现
运维·c语言·自动化
@YDWLCloud1 小时前
做独立站,用阿里云国际版还是 Cloudflare?答案出乎意料
服务器·网络·阿里云·云计算
执笔论英雄2 小时前
【RL]expand_requests干啥的
服务器·开发语言·python
Zeku2 小时前
20251125 - 为什么Linux是非实时操作系统?
linux·服务器