Linux 压缩与解压完全指南从 zip 到 xz再到分片与合并在 Linux 世界里压缩与解压几乎是每位用户每天都会遇到的操作——无论是备份文件、传输数据还是节省磁盘空间。但面对zip、tar、gzip、bzip2、xz等众多工具你是否曾感到困惑什么时候该用哪个如何分割大压缩包又该如何合并回来本文将为你一次性讲透附带大量实操示例让你从此得心应手。一、压缩工具概览工具算法压缩比越高越慢是否保留源文件是否支持多文件/目录常见后缀zipDEFLATE中等是默认保留是.zipgzipDEFLATE中等否默认替换否仅单文件.gzbzip2BWT 游程编码较高较慢否否.bz2xzLZMA2极高极慢否否.xztar仅归档不压缩—是是.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只压缩单个文件不保留源文件默认替换原文件速度较快。# 压缩替换原文件为 .gzgzipfile.txt# 生成 file.gz原 file.txt 消失# 保留原文件使用 -c 重定向gzip-cfile.txtfile.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# 压缩注意大写 Jtar-xJvfarchive.tar.xz# 解压5. tar 独立使用无压缩有时我们只需要归档而不压缩例如用于备份磁带或后续二次压缩tar-cvfarchive.tar /folder# 打包tar-xvfarchive.tar# 解包三、压缩工具性能对比与选择建议使用场景推荐工具临时传输需要快速gzip搭配 tar长期存储不关心时间xz搭配 tar需要 Windows 用户打开zip开源软件源码发布.tar.gz或.tar.xz常见备份日志文件单文件gzip或xz经验法则压缩时间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.gz3. 结合 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.xz2. 压缩时排除特定文件tar-czvfbackup.tar.gz /home/user--exclude*.log--excludecache3. 解压时保留原始权限和所有权需要 roottar-xzvfarchive.tar.gz --same-owner4. 多线程加速适用于多核 CPUpigz并行 gziptar -cvf - /folder | pigz -p 4 archive.tar.gzpbzip2并行 bzip2tar -cvf - /folder | pbzip2 -p4 archive.tar.bz2xz本身支持多线程tar -cJvf archive.tar.xz /folder --xz-options-T 45. 压缩进度条使用pvtar-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极致空间对于快速分享zip或tar.gz更为稳妥。希望这篇指南对你有帮助如果你有其他压缩工具的疑问欢迎在评论区交流讨论。