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*
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式