
你执行tar -czf backup.tar.gz /var/www/html,知道它会把网站文件压缩成一个.tar.gz包。但-c、-z、-f每个参数代表什么,你不确定。遇到.zip文件时,你又要临时查unzip的用法。
今天把tar、gzip、zip三个工具放在一起,讲清楚各自用途和区别。
先看一个数据
在GitHub的代码仓库中,.tar.gz是最常见的发布包格式,占所有压缩包格式的60%以上,其次是.zip。Linux系统上.tar.gz是事实标准,而Windows生态更习惯.zip。
tar:打包,不是压缩
tar是“tape archive”的缩写,它的本职工作是把多个文件合并成一个文件(归档),本身不压缩。
bash
# 创建归档(不压缩) tar -cf archive.tar /var/www/html # 查看归档内容 tar -tf archive.tar # 解包 tar -xf archive.tar
参数拆解:-c创建归档,-f指定归档文件名,-t查看内容,-x解包,-v显示详细信息。
单独的.tar文件体积和原文件总和一样,没有压缩效果。实际工作中,我们几乎不会用纯tar,而是配合压缩工具一起使用。
gzip:单文件压缩
gzip是压缩工具,只压缩单个文件,不能打包多个文件。把大文件变小,但没有“合并多个文件”的能力。
bash
# 压缩文件 gzip access.log # 生成 access.log.gz,原文件被替换 # 解压 gunzip access.log.gz # 查看压缩文件内容(不解压) zcat access.log.gz
gzip的压缩率通常在60%-80%(取决于文件类型),对文本类文件(日志、代码)效果显著,对已压缩的图片、视频几乎没有效果。
tar + gzip:黄金组合
tar负责打包,gzip负责压缩,配合使用就是最常见的.tar.gz格式。
bash
# 打包并压缩(创建) tar -czf archive.tar.gz /var/www/html
参数拆解:-c创建,-z通过gzip压缩,-f指定文件名。
解压时用-x替换-c:
bash
tar -xzf archive.tar.gz
zip:跨平台
zip是“打包+压缩”一体的工具,兼容Windows、macOS、Linux。
bash
# 压缩目录 zip -r archive.zip /var/www/html # 解压 unzip archive.zip -d /目标目录 # 查看内容 unzip -l archive.zip
zip默认不保留Linux文件权限(可执行位、所有者信息)。用tar打包的程序(如编译好的二进制文件)用tar.gz更合适。
三种工具对比总结
| 对比 | tar+gzip | zip |
|---|---|---|
| 压缩率 | 较高 | 中等(默认) |
| 跨平台 | Linux为主 | 全平台 |
| 权限保留 | 保留 | 不保留 |
| 流式处理 | 支持 | 不支持 |
| 适用于 | 备份、程序分发 | 临时共享、跨平台传输 |
tar+gzip更适合Linux服务器备份和程序分发,zip更适合需要Windows用户打开的临时文件传输。
真实案例
备份服务器上的网站文件,执行tar -czf backup.tar.gz /var/www/html。需要只备份特定目录时,可以用--exclude排除缓存目录:
bash
tar -czf backup.tar.gz --exclude='cache' --exclude='logs' /var/www/html
最后一句
tar和gzip的关系是:tar打包,gzip压缩。zip是打包压缩一步到位。跨平台传文件用zip,Linux服务器备份用tar.gz,临时在命令行看压缩包内容用zcat。搞清楚它们的分工,你就知道在什么场景该用什么工具了。




