在Linux日常使用、文件传输、软件安装中,还有一项绕不开的核心技能——文件的压缩与解压。
作为Linux新手,你是否也曾遇到过这些烦恼?
网上下载的软件包格式五花八门,.tar.gz、.zip、.tgz分不清,不知道该用哪个命令解压;
想把一堆日志文件打包备份,却记不住tar命令那一堆复杂的参数,每次都要搜教程;
用gzip压缩完文件,原文件直接消失了,手足无措不知道怎么恢复;
从Windows传过来的zip压缩包,在Linux里解压全是中文乱码,完全没法用;
打包的文件太大,想排除掉不用的日志、缓存文件,却不知道怎么操作。
其实Linux压缩解压没那么复杂,只要搞懂4个核心工具——tar、gzip、zip、unzip,记住几个高频参数,就能搞定99%的压缩解压场景。本文是专为初学者打造,从核心概念、参数详解,到高频实战、避坑指南,全程用通俗解释+可直接复制的代码,新手跟着敲一遍就能完全掌握,再也不用为压缩解压发愁。
前置说明
- 本文所有命令完全适配 Ubuntu 18.04+/Debian 10+、CentOS 7+/Anolis OS/Rocky Linux等所有主流Linux发行版,命令100%通用;
tar、gzip几乎所有Linux系统默认预装,zip/unzip部分极简系统未预装,文中会给出安装命令;- 普通用户可执行大部分压缩解压操作,仅涉及系统目录(如/root、/etc)的操作需要
sudo 提权; - 文中所有代码块均标注「可直接复制」,实操时注意替换文件名、目录路径等占位符;
- 本文聚焦入门实战与高频用法,不展开小众压缩格式(如bzip2、xz)的复杂参数,新手掌握核心内容即可应对所有日常场景。
一、先搞懂核心概念:归档 vs 压缩(新手必学)
很多新手学不会tar命令,本质是没搞懂「归档」和「压缩」的区别,这是Linux压缩解压的底层逻辑,先用人话讲透,后面的命令一学就会。
| | | |
|---|
| 把多个文件、整个目录,打包成一个单独的文件,文件大小不会变化 | 解决“大量小文件传输慢、管理麻烦”的问题,把零散文件整合成一个包 | |
| | | |
关键结论(新手必记):
tar本身是归档工具,只负责打包,不负责压缩;但它可以调用gzip等压缩工具,在打包的同时完成压缩,这也是我们最常用的用法。
比如.tar.gz格式,就是先用tar打包,再用gzip压缩后的文件。
二、四大核心工具详解(按使用频率排序)
我们按Linux日常使用频率从高到低,逐个讲解每个工具的核心用法、高频实战、参数解释,所有代码可直接复制执行。
2.1 tar:Linux最主流的归档+压缩工具(重点必学)
tar是Linux中使用频率最高的打包压缩工具,几乎所有Linux软件包都是用tar打包发布的,它功能强大,支持打包目录、调用压缩工具、排除文件、增量备份等,新手重点掌握高频用法即可。
2.1.1 新手必背:核心参数通俗解释
tar的参数很多,新手不用全记,记住这6个核心参数,就能应对90%的场景,给大家整理了通俗口诀,好记不混淆:
⚠️ 致命避坑提醒!
-f参数必须放在所有参数的最后一位,后面必须紧跟文件名!
错误写法:tar -zfvf test.tar.gz test/(f在v前面,会把vf当成文件名,直接报错)
正确写法:tar -zcvf test.tar.gz test/(f在最后,后面紧跟文件名)
2.1.2 高频实战用法(可直接复制)
我们按「打包压缩」和「解压提取」两大场景分类,所有命令都是日常用得最多的,新手直接复制就能用。
场景1:打包压缩(最常用)
# 1. 【最常用】打包并压缩整个目录为.tar.gz格式# 语法:tar -zcvf 压缩后的文件名.tar.gz 要打包的目录/文件tar -zcvf project_backup.tar.gz project/# 解读:把project目录打包压缩成project_backup.tar.gz,显示详细过程
# 2. 打包多个文件和目录到同一个压缩包tar -zcvf backup.tar.gz /etc/passwd /home/test /var/log/nginx/# 解读:把系统用户文件、test目录、nginx日志,打包到同一个backup.tar.gz
# 3. 打包压缩时,排除指定的文件/目录(用--exclude)tar -zcvf project_backup.tar.gz project/ --exclude=project/logs --exclude=project/*.tmp# 解读:打包project目录,排除logs目录和所有.tmp临时文件
# 4. 只打包不压缩(纯归档,不减小体积)tar -cvf file_pack.tar test/# 解读:把test目录打包成file_pack.tar,不压缩,速度快
场景2:解压提取(最常用)
# 1. 【最常用】解压.tar.gz格式压缩包到当前目录tar -zxvf project_backup.tar.gz# 解读:解压project_backup.tar.gz到当前目录,显示详细解压过程
# 2. 解压压缩包到指定目录(用-C,必须提前创建目录)# 先创建目标目录mkdir -p /data/backup# 解压到指定目录tar -zxvf project_backup.tar.gz -C /data/backup# 解读:把压缩包内容解压到/data/backup目录,而不是当前目录
# 3. 只查看压缩包内容,不解压(确认文件是否正确)tar -ztvf project_backup.tar.gz# 解读:列出压缩包里的所有文件和目录,不执行解压
# 4. 只解压压缩包里的单个文件/目录tar -zxvf project_backup.tar.gz project/config/app.conf# 解读:只解压压缩包里的project/config/app.conf文件,其他文件不解压
# 5. 解压纯归档的.tar文件(无压缩)tar -xvf file_pack.tar
2.1.3 进阶实用技巧
# 1. 增量备份:只打包修改过的文件(适合日常备份)# 第一次全量备份tar -g snapshot -zcvf full_backup.tar.gz project/# 第二次增量备份,只打包第一次备份后修改过的文件tar -g snapshot -zcvf inc_backup_$(date +%Y%m%d).tar.gz project/
# 2. 打包时保留文件的绝对路径(默认会去掉根目录/,避免解压覆盖系统文件)# 谨慎使用!解压时会直接覆盖绝对路径的文件,容易误改系统配置tar -zcvf etc_backup.tar.gz -P /etc/nginx/# 解压带绝对路径的包,也要加-Ptar -zxvf etc_backup.tar.gz -P
2.2 gzip:Linux原生纯压缩工具
gzip是Linux系统原生的压缩工具,也是tar命令默认调用的压缩算法,核心特点是只能压缩单个文件,不能压缩目录,压缩率高、速度快,适合压缩单个日志文件、配置文件。
2.2.1 核心特点(新手必看)
- 压缩后默认会删除原文件,生成
.gz后缀的压缩文件;
2.2.2 高频实战用法
# 1. 压缩单个文件(压缩后原文件会被删除,生成test.txt.gz)gzip test.txt
# 2. 压缩文件,保留原文件(新手推荐,避免原文件丢失)gzip -c test.txt > test.txt.gz# 或者用-k参数(部分系统支持)gzip -k test.txt
# 3. 解压.gz文件(解压后.gz文件会被删除,还原原文件)gzip -d test.txt.gz# 等价于 gunzip 命令gunzip test.txt.gz
# 4. 解压.gz文件,保留压缩包gzip -dk test.txt.gz
# 5. 查看.gz压缩文件的内容,不解压(适合文本文件)zcat test.txt.gz# 分页查看zcat test.txt.gz | less
# 6. 压缩目录下的所有文件(逐个压缩,不会打包成一个文件)gzip *.log# 解读:压缩当前目录下所有.log后缀的日志文件,每个文件生成一个.gz包
⚠️ 新手避坑提醒:
不要直接用gzip 目录名压缩目录,会直接报错!gzip不支持压缩目录,想压缩目录请用tar+gzip,或者zip命令。
2.3 zip/unzip:跨平台压缩解压工具(兼容Windows)
zip和unzip是跨平台的压缩解压工具,最大的优势是全平台兼容——Windows、Linux、macOS都能直接打开,不用额外安装软件,非常适合给Windows用户传输文件、跨平台分享内容。
2.3.1 安装命令
部分极简系统默认未预装,执行以下命令安装即可:
# Ubuntu/Debian 安装sudo apt install zip unzip -y# CentOS/Anolis/Rocky 安装sudo yum install zip unzip -y
2.3.2 zip 压缩命令高频用法
zip命令压缩后会保留原文件,支持压缩目录、多个文件,默认不会删除原文件,对新手非常友好。
# 1. 【最常用】压缩整个目录(包括子目录)# 语法:zip -r 压缩后的文件名.zip 要压缩的目录/文件zip -r project.zip project/# 解读:-r参数表示递归压缩,必须加,否则只会压缩目录本身,不会压缩里面的文件
# 2. 压缩多个文件和目录到同一个zip包zip -r backup.zip /etc/passwd /home/test /var/log/nginx/
# 3. 压缩时排除指定文件/目录(用-x)zip -r project.zip project/ -x "project/logs/*""project/*.tmp"# 解读:压缩project目录,排除logs目录下的所有文件和.tmp临时文件
# 4. 设置压缩级别(1-9,1最快压缩率最低,9最慢压缩率最高,默认6)zip -r -9 project.zip project/# 解读:用最高压缩率压缩,适合大文件,节省空间
2.3.3 unzip 解压命令高频用法
# 1. 【最常用】解压zip包到当前目录unzip project.zip
# 2. 解压zip包到指定目录(用-d,目录不存在会自动创建)unzip project.zip -d /data/backup/# 解读:把压缩包内容解压到/data/backup目录,无需提前创建目录
# 3. 只查看zip包内容,不解压unzip -l project.zip
# 4. 只解压压缩包里的单个文件/目录unzip project.zip project/config/app.conf
# 5. 解压时覆盖已有文件,不提示确认unzip -o project.zip# 谨慎使用!会直接覆盖同名文件,不会询问
# 6. 解压时不覆盖已有文件,跳过已存在的文件unzip -n project.zip# 适合增量解压,不会覆盖已修改的文件
2.3.4 新手必看:中文乱码终极解决方法
这是新手最常遇到的坑:从Windows传过来的zip压缩包,在Linux里解压后中文文件名全是乱码。
根本原因:Windows的zip默认用GBK/GB2312编码,而Linux默认用UTF-8编码,编码不兼容导致乱码。
解决方法:解压时指定编码格式
# 解压Windows生成的zip包,指定GBK编码,完美解决中文乱码unzip -O GBK 中文文件.zip# 部分系统支持GB18030,兼容性更强unzip -O GB18030 中文文件.zip
三、工具对比与选型指南(新手一眼看懂怎么选)
很多新手不知道什么时候该用哪个工具,一张表讲透四个工具的区别、适用场景,新手直接对照选择即可。
| | | | | | |
|---|
| .tar.gz | | Linux/macOS原生支持,Windows需第三方解压软件 | | | Linux系统内文件备份、软件包安装、服务器之间文件传输 |
| .gz | | | | | |
| .zip | | Windows/Linux/macOS全平台原生支持 | | | |
新手一句话选型结论:
Linux系统内部用,选tar + gzip;要给Windows用户传文件,选zip/unzip;单个文本文件压缩,选gzip。
四、新手高频实战场景合集(直接复制就能用)
整理了Linux日常工作中最常用的6个压缩解压场景,所有代码可直接复制,拿来就能用。
场景1:网站项目备份(打包代码+排除日志缓存)
# 打包网站项目,排除日志、缓存、临时文件,按日期命名tar -zcvf website_backup_$(date +%Y%m%d).tar.gz /var/www/html/ --exclude=/var/www/html/runtime --exclude=/var/www/html/logs
场景2:跨平台传输文件(Windows兼容)
# 打包文件为zip格式,Windows能直接打开zip -r data_share.zip report.pdf 设计图/ 数据表格/
场景3:日志文件批量压缩归档
# 压缩当前目录下所有30天前的.log日志文件,节省磁盘空间find ./ -name "*.log" -mtime +30 | xargs gzip
场景4:解压软件包到指定安装目录
# 解压nginx安装包到/usr/local/目录tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/
场景5:查看压缩包内容,确认文件是否正确
# 查看tar.gz包内容tar -ztvf backup.tar.gz# 查看zip包内容unzip -l data.zip
场景6:解压乱码的Windows zip包
# 解决中文乱码,指定GBK编码解压unzip -O GBK 中文资料.zip -d /data/
五、常见问题与避坑指南(重中之重)
整理了新手学习压缩解压时,最容易踩的8个坑,每个坑都给出原因和解决方法,帮你少走弯路。
1. tar命令执行报错“tar: 拒绝创建空归档”
- 原因:90%的情况是
-f参数位置不对,或者要打包的文件/目录路径写错了,不存在; - 解决方法:确保
-f放在所有参数的最后一位,检查要打包的目录/文件路径是否正确,是否存在。
2. gzip压缩后原文件消失了
- 原因:gzip默认压缩后会删除原文件,生成.gz压缩包;
- 解决方法:压缩时加
-c参数重定向,或者-k参数保留原文件:# 保留原文件压缩gzip -c test.txt > test.txt.gz
3. unzip解压中文文件名全是乱码
- 原因:Windows和Linux的zip编码格式不兼容,Windows用GBK,Linux用UTF-8;
- 解决方法:解压时指定编码:
unzip -O GBK 文件名.zip。
4. 解压tar.gz包报错“not in gzip format”
- 原因:文件不是gzip格式,可能是bzip2格式(.tar.bz2)、zip格式,或者文件下载损坏了;
- 解决方法:先用
file 文件名查看文件真实格式,再用对应的命令解压:# 查看文件真实格式file test.tar.gz# 如果是bzip2格式,用-j参数解压tar -jxvf test.tar.bz2# 如果是zip格式,用unzip解压unzip test.zip
5. tar解压后,文件的权限、所属用户变了
- 原因:普通用户解压,无法保留root用户的权限,会自动把文件所属用户改成当前用户;
- 解决方法:解压系统文件、备份文件时,加
-p参数保留文件权限:# 解压时保留文件原有的权限、所属用户sudo tar -zxvpf etc_backup.tar.gz
6. zip压缩目录,解压后只有空目录,没有文件
- 原因:压缩目录时没有加
-r递归参数,只会压缩目录本身,不会压缩里面的子文件和子目录; - 解决方法:压缩目录必须加
-r参数:zip -r 文件名.zip 目录名/。
7. 用tar打包绝对路径的目录,解压后覆盖了系统文件
- 原因:tar默认会去掉路径开头的
/,避免解压时直接覆盖系统文件,如果加了-P参数保留绝对路径,解压时会直接覆盖原文件; - 解决方法:非必要不要用
-P参数打包绝对路径,尽量进入目录的上级目录,用相对路径打包。
8. 压缩包太大,想拆分成分卷压缩
- 场景:单个压缩包太大,无法传输,需要拆分成多个小文件;
- 解决方法:用split命令拆分,cat命令合并解压:
# 打包后拆分成每个100M的分卷tar -zcvf - project/ | split -b 100M - project_backup.tar.gz.# 生成的文件:project_backup.tar.gz.aa、project_backup.tar.gz.ab...# 解压分卷压缩包cat project_backup.tar.gz.* | tar -zxvf -
六、常用命令速查表(建议收藏,日常直接查)
# ===================== tar 命令(最常用) =====================# 打包压缩tar -zcvf 文件名.tar.gz 要打包的目录/文件 # 最常用打包压缩tar -zcvf 文件名.tar.gz 目录 --exclude=排除路径 # 打包时排除文件tar -cvf 文件名.tar 目录/文件 # 只打包不压缩# 解压tar -zxvf 文件名.tar.gz # 最常用解压到当前目录tar -zxvf 文件名.tar.gz -C 目标目录 # 解压到指定目录tar -ztvf 文件名.tar.gz # 查看压缩包内容,不解压tar -zxvf 文件名.tar.gz 要提取的文件 # 只解压单个文件# ===================== gzip 命令 =====================gzip 文件名 # 压缩单个文件,删除原文件gzip -c 文件名 > 文件名.gz # 压缩,保留原文件gzip -d 文件名.gz # 解压.gz文件gunzip 文件名.gz # 等价于gzip -dzcat 文件名.gz # 查看压缩文件内容,不解压# ===================== zip/unzip 命令 =====================# 压缩zip -r 文件名.zip 目录/文件 # 压缩目录/文件,跨平台兼容zip -r 文件名.zip 目录 -x 排除路径 # 压缩时排除文件# 解压unzip 文件名.zip # 解压到当前目录unzip 文件名.zip -d 目标目录 # 解压到指定目录unzip -l 文件名.zip # 查看压缩包内容unzip -O GBK 文件名.zip # 解决中文乱码解压
七、总结
本文完整讲解了Linux最常用的4个压缩解压工具,核心要点总结如下:
- 先搞懂底层逻辑:
tar负责归档打包,gzip负责压缩,两者结合是Linux最主流的用法; - tar命令新手必背口诀:压缩用zcvf,解压用xzvf,查看用tvf,
-f必须放在参数最后一位,永远不会错; - 工具选型:Linux内部用tar.gz,跨平台传Windows用zip,单个文件压缩用gzip;
- 避坑核心:gzip压缩保留原文件加
-c,zip压缩目录必须加-r,Windows zip解压中文乱码加-O GBK; - 学习技巧:不用死记硬背所有参数,重点掌握文中的高频用法,遇到问题对照速查表和常见问题,慢慢就能形成肌肉记忆。
压缩解压是Linux日常使用、运维工作的基础必备技能,学会这些核心用法,你就能轻松应对所有文件打包、传输、备份的场景。
如果你觉得本文对你有帮助,欢迎点赞、推荐、转发,关注我,后续会分享更多Linux入门干货!
文 / 零距技术仓记录每一次真实的折腾 (#^.^#)🚀 想看到更多实用折腾技巧?👉 先关注💬 评论区说说你的经历或想看的内容👍 点赞表示支持🔁 顺手分享给也在折腾的人,让大家都少踩坑 😎