Linux压缩解压实战指南:tar、gzip、zip 完整操作清单
Linux压缩解压实战指南:tar、gzip、zip 完整操作清单
【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial
本文出自开源项目 linux-tutorial,按使用场景梳理 Linux 压缩解压命令,讲清 tar/gzip/zip 命令的高频组合。读完即可处理 .tar、.tar.gz、.zip 的解压、整目录压缩与排除文件等场景。
在 Linux 上收到一个源码包,或者收到同事从 Windows 发来的 .zip 文件,第一个动作都一样——打开它。下面是打开这些压缩包、再把东西发出去的整套命令。
1. 先识别再动手:这个压缩包到底是什么
别上来就敲解压命令,先用file判断真实格式,它比看后缀更可靠:
file shop.tar.gz app.zip notes.tar # shop.tar.gz: gzip compressed data # app.zip: Zip archive data # notes.tar: POSIX tar archive (GNU)确认格式后,按用途选命令:
| 你的场景 | 推荐格式 | 记住的命令 | 为什么 |
|---|---|---|---|
| 服务器目录备份 | .tar.gz | tar -czf | 体积小、速度快,Linux 上最常见 |
| 和 Windows 交换文件 | .zip | zip -r | 两边直接打开,无需转换 |
| 只把几个文件捆走 | .tar | tar -cf | 不压缩,最省时间 |
| 单个大文件只省空间 | .gz | gzip | 不需要目录结构 |
| 长期归档、体积最小 | .tar.xz | tar -cJf | 体积最小,但最慢 |
💡 一句话:留在 Linux 上用 .tar.gz,要发 Windows 就用 .zip。
2. 把目录压成小包:tar 负责捆,gzip 负责挤
这两个词最容易混。tar 的本职是"打包"——把一堆文件和目录捆成一个档案,本身完全不省空间。真正压体积的是压缩工具,tar 加一个字母就能调用它:
-z:调 gzip,产出 .tar.gz-j:调 bzip2,产出 .tar.bz2-J:调 xz,产出 .tar.xz
.tar.gz 这个双后缀就是这么来的:前半段是 tar 的打包结果,后半段是 gzip 的压缩结果。常用参数:
| 参数 | 作用 |
|---|---|
| -c / -x / -t | 创建档案 / 还原 / 只看内容 |
| -z / -j / -J | 用 gzip / bzip2 / xz 压缩 |
| -f | 指定档案名,必须放最后 |
| -v | 逐行显示文件清单 |
| -C | 还原到指定目录 |
tar -czf /backup/shop_$(date +%F).tar.gz /var/www/shop tar -tzf /backup/shop_2026-08-23.tar.gz | head tar -xzf /backup/shop_2026-08-23.tar.gz -C /tmp/restore第二行只列档案里前几项,第三行用-C指定还原位置,避免文件散落满当前目录。
⚠️
-f必须紧跟在最后,它的下一位就是文件名。写错位置会看到tar: -f: No such file or directory。
3. zip 递归压缩目录,压缩时排除文件的正确写法
zip 最大的价值是跨平台:Linux 上压出来,Windows 双击就能开。压缩目录要加-r递归进子目录:
zip -r dist_v1.2.zip build/ docs/ -x "*.tmp" -x "build/cache/*" unzip -l dist_v1.2.zip unzip -d /tmp/preview dist_v1.2.zip-x跟在档案名后面,排除规则要加引号;排除多个就各写一个-xunzip -l只列内容不还原;-d指定解压目录;加-o覆盖同名文件不再询问- 加密包解压时加
-P跟密码
4. 实战脚本:备份目录,自动清理旧备份
把前面的命令组合起来,就是一段每天备份一个目录、只留最近 7 份的脚本:
#!/bin/bash TARGET="/opt/myapp/data" DEST="/backup/myapp" NAME="myapp_$(date +%F).tar.gz" mkdir -p "$DEST" tar -czf "$DEST/$NAME" -C "$(dirname "$TARGET")" "$(basename "$TARGET")" ls -t "$DEST" | grep -v "$NAME" | tail -n +7 | xargs -r rm -f -- "$DEST"/{}tar 那行有个小技巧:用-C先跳到 data 的父目录,再打包目录名本身。这样档案里的路径变成data/...这种相对路径,换机器还原时不会把绝对路径搞混。
5. 新手高频踩坑
5.1 记不住参数:如何解压 tar.gz
只记一组对照:创建tar -czf,解压tar -xzf,查看tar -tzf。把c换成x就是反方向。
5.2 遇到 .tar.bz2、.tar.xz 怎么办
思路相同:-j配 bzip2,大写-J配 xz。解压写成tar -xjf pkg.tar.bz2或tar -xJf pkg.tar.xz。
J 是 j 按住 Shift 的键。最常见的错误就是用 xz 包敲了小写 j,报
not bzip2 compressed data。
5.3 gzip 报 "Not a directory"
gzip 只处理单个文件,不能直接压目录。目录先交给 tar 捆起来,再用-z让 tar 顺带调 gzip,这是唯一顺路。
5.4 只想还原大档案里的一个文件
在解压命令末尾追加文件名:tar -xzf shop_2026-08-23.tar.gz var/www/shop/config/app.yml。只还原这一个文件,几百 GB 的档案也不用全量解开。
6. 下一步建议
👉 先找个任意小目录,把tar -czf和tar -tzf各敲三遍,再用zip -r试一次排除全部*.log文件。参数细节可对照项目内 docs/linux/cli/linux-cli-file-compress.md 这一章。
【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
