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 指定目录与部分解压
-
解压到指定目录 :
bashtar -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 -
解压 :
bashbzip2 -d file.bz2 # 或者 bunzip2 file.bz2 # 结果:file.bz2 消失,生成 file -
压缩 :
bashbzip2 file # 结果:file 消失,生成 file.bz2 -
保留原文件压缩/解压 : 使用
-k(keep) 参数。
bzip2 -dk file.bz2
3.2 .gz (Gzip)
- 解压 :
gzip -d file.gz或gunzip 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,程序会自动寻找后续分卷。bash7z x archive.7z.001
场景 B:使用 Zip 分卷
-
分卷压缩 :
bashzip -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* |