Linux操作系统-压缩与解压
2026/7/23 1:39:27 网站建设 项目流程

Linux 压缩与解压完全指南:从 zip 到 xz,再到分片与合并

在 Linux 世界里,压缩与解压几乎是每位用户每天都会遇到的操作——无论是备份文件、传输数据,还是节省磁盘空间。但面对ziptargzipbzip2xz等众多工具,你是否曾感到困惑?什么时候该用哪个?如何分割大压缩包?又该如何合并回来?

本文将为你一次性讲透,附带大量实操示例,让你从此得心应手。


一、压缩工具概览

工具算法压缩比(越高越慢)是否保留源文件是否支持多文件/目录常见后缀
zipDEFLATE中等是(默认保留).zip
gzipDEFLATE中等否(默认替换)否(仅单文件).gz
bzip2BWT + 游程编码较高,较慢.bz2
xzLZMA2极高,极慢.xz
tar仅归档(不压缩).tar

核心概念tar本身不是压缩工具,而是归档器(将多个文件/文件夹打包成单个流)。通常我们会将tar与压缩算法结合,生成.tar.gz.tar.bz2.tar.xz等。


二、各工具详细用法

1. zip / unzip —— 跨平台通用

zip是 Windows 和 Linux 间最常用的格式,自带压缩并支持目录。

压缩

# 压缩单个文件ziparchive.zip file1.txt# 压缩多个文件ziparchive.zip file1.txt file2.jpg# 递归压缩整个目录zip-rarchive.zip myfolder/# 添加密码保护zip-esecure.zip secret.txt

解压

unziparchive.zip# 解压到当前目录unziparchive.zip-d/target/# 解压到指定目录unzip-larchive.zip# 仅查看内容,不解压

优点:兼容性好;缺点:压缩比一般,不支持 Linux 权限(如可执行位)。


2. gzip / gunzip —— 最常用单文件压缩

gzip只压缩单个文件,不保留源文件(默认替换原文件),速度较快。

# 压缩(替换原文件为 .gz)gzipfile.txt# 生成 file.gz,原 file.txt 消失# 保留原文件(使用 -c 重定向)gzip-cfile.txt>file.txt.gz# 解压(替换 .gz 为原文件)gunzip file.gz# 恢复为 file.txt# 查看压缩文件内容zcat file.gz

搭配 tar(最经典组合):

tar-czvfarchive.tar.gz /path/to/folder# 压缩tar-xzvfarchive.tar.gz# 解压

参数解释:-c创建,-z通过 gzip,-v显示过程,-f指定文件名。


3. bzip2 / bunzip2 —— 高压缩比,较慢

压缩比优于 gzip,适合对空间敏感的场景,但速度稍慢。

bzip2file.txt# 生成 file.bz2,原文件被替换bzip2-kfile.txt# -k 保留原文件bunzip2 file.bz2# 解压# 与 tar 结合tar-cjvfarchive.tar.bz2 /folder# 压缩tar-xjvfarchive.tar.bz2# 解压

4. xz / unxz —— 顶级压缩比,耗时最长

xz提供目前主流工具中最高的压缩比,尤其适合长期归档或网络传输。

xz file.txt# 生成 file.xz,原文件替换xz-kfile.txt# 保留原文件unxz file.xz# 解压# 与 tar 结合tar-cJvfarchive.tar.xz /folder# 压缩(注意大写 J)tar-xJvfarchive.tar.xz# 解压

5. tar 独立使用(无压缩)

有时我们只需要归档而不压缩(例如用于备份磁带或后续二次压缩):

tar-cvfarchive.tar /folder# 打包tar-xvfarchive.tar# 解包

三、压缩工具性能对比与选择建议

使用场景推荐工具
临时传输,需要快速gzip(搭配 tar)
长期存储,不关心时间xz(搭配 tar)
需要 Windows 用户打开zip
开源软件源码发布.tar.gz.tar.xz(常见)
备份日志文件(单文件)gzipxz

经验法则

  • 压缩时间:gzip < bzip2 < xz
  • 压缩比:xz > bzip2 > gzip
  • 内存占用:xz默认较高(可调整),gzip最轻量。

四、压缩包分片与合并

当压缩包过大(例如超过 4GB 无法上传网盘,或邮件附件限制),我们需要将其切分成多个小文件,并在接收端合并还原。

1. 使用split分割任意文件

split是 Linux 自带的文件分割工具,按大小或行数切割。

# 将 big.tar.gz 分割成每个 100MB 的小文件,前缀为 part_split-b100M big.tar.gz part_# 生成文件:part_aa, part_ab, part_ac, ...

2. 合并分割文件

使用cat直接按顺序拼接即可恢复原文件:

catpart_*>big.tar.gz

然后正常解压:

tar-xzvfbig.tar.gz

3. 结合 tar 与 split 一步到位(压缩并分片)

tar-czvf- /large/folder|split-b100M - archive.tar.gz.part_
  • -表示 tar 输出到标准输出,再通过管道传给split
  • 生成文件:archive.tar.gz.part_aa,...

合并(同理):

catarchive.tar.gz.part_*|tar-xzvf-

4. 使用zip原生分卷

zip支持直接创建分卷(多部分)压缩包,但跨平台兼容性略差:

zip-r-s100m archive.zip large_folder/
  • 生成archive.z01,archive.z02, …,archive.zip
  • 解压时只需unzip archive.zip(会自动合并)

五、高级技巧与实用小贴士

1. 查看压缩文件内容而不解压

  • .zipunzip -l archive.zip
  • .tar.gztar -tzvf archive.tar.gz
  • .tar.bz2tar -tjvf archive.tar.bz2
  • .tar.xztar -tJvf archive.tar.xz

2. 压缩时排除特定文件

tar-czvfbackup.tar.gz /home/user--exclude='*.log'--exclude='cache'

3. 解压时保留原始权限和所有权(需要 root)

tar-xzvfarchive.tar.gz --same-owner

4. 多线程加速(适用于多核 CPU)

  • pigz(并行 gzip):tar -cvf - /folder | pigz -p 4 > archive.tar.gz
  • pbzip2(并行 bzip2):tar -cvf - /folder | pbzip2 -p4 > archive.tar.bz2
  • xz本身支持多线程:tar -cJvf archive.tar.xz /folder --xz-options='-T 4'

5. 压缩进度条(使用pv

tar-czvf- /bigdata|pv-s$(du-sb/bigdata|awk'{print $1}')|split-b1G - data.tar.gz.part_

六、总结

需求命令速查
压缩目录为.tar.gztar -czvf out.tar.gz dir/
解压.tar.gztar -xzvf out.tar.gz
压缩为.tar.xztar -cJvf out.tar.xz dir/
解压.tar.xztar -xJvf out.tar.xz
压缩为.zip(带目录)zip -r out.zip dir/
解压.zipunzip out.zip
大文件分片split -b 100M bigfile part_
合并分片cat part_* > bigfile
压缩并分片tar -czvf - dir/ | split -b 100M - out.tar.gz.part_
合并并解压cat out.tar.gz.part_* | tar -xzvf -

掌握这些工具和技巧,你就能在 Linux 下自如应对各种压缩场景。记住:没有最好的工具,只有最适合场景的工具。对于日常备份,我推荐tar + xz(极致空间);对于快速分享,ziptar.gz更为稳妥。

希望这篇指南对你有帮助!如果你有其他压缩工具的疑问,欢迎在评论区交流讨论🎈。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询