Linux 压缩打包入门:tar 与 zip 怎么用
在服务器上干活,压缩打包几乎每天都会遇到:想把弹性云服务器上的日志发给同事定位问题,想把整个网站目录备份一份再升级,或者把本地代码传到服务器部署。文件一多、目录一深,一个个传既慢又容易漏,tar 和 zip 就是为这件事准备的。下面只讲新手最常用的用法。
一、tar 最常用的四个组合
tar 只做一件事:把多个文件和目录打包成一个文件,本身不压缩,想变小要再加压缩选项。下面四个组合最常用。
tar -cvf website.tar website/
tar -czvf website.tar.gz website/
tar -xzvf website.tar.gz
tar -tzvf website.tar.gz
四个命令分别是只打包、打包并用 gzip 压缩、解压到当前目录、只看包里有什么而不解压。选项很好记:c 创建、x 解压、t 查看列表、v 显示过程、f 指定包名、z 用 gzip 压缩。
二、zip 和 unzip 怎么用,和 tar 有什么区别
zip 打包和压缩一步完成,Windows、macOS 不用装额外工具就能打开,跨平台传文件时更方便。
zip -r site.zip site/
unzip site.zip
unzip -l site.zip
unzip site.zip -d /tmp/restore
四个命令分别是打包目录、解压到当前目录、只看包里有什么、解压到指定目录。打包目录要加 -r,否则只会打包一个空目录名。
怎么选?备份用 tar,传给别人用 zip。tar 在 Linux 服务器上备份效果更好,压出来的包通常也更小;zip 的优势是通用,对方用 Windows 还是 macOS,双击基本就能打开。
三、排除文件和指定解压目录
打包前先看目录有多大:
du -sh website/
日志和缓存不要一起压进去,tar 用 --exclude 排除,zip 用 -x 排除:
tar --exclude='*.log' --exclude='cache' -czvf website.tar.gz website/
zip -r site.zip site/ -x "*.log" "*/cache/*"
解压到指定目录,tar 用 -C,unzip 用 -d:
mkdir -p /data/restore
tar -xzvf website.tar.gz -C /data/restore
unzip site.zip -d /data/restore
四、新手最容易踩的三个坑
第一个坑是路径写错,目录套得太深。在根目录执行 tar -czvf backup.tar.gz /home/user/site,解压出来会是 home/user/site 三层嵌套。正确做法是先进到上一级目录再打包:
cd /home/user
tar -czvf /tmp/site.tar.gz site
第二个坑是压了不该压的缓存和日志。日志、缓存、node_modules、临时文件动不动几个 GB,备份包一下子变大,传起来也慢。先用 du -sh website/* | sort -h 看大户,再用 --exclude 或 -x 排除。
第三个坑是解压覆盖同名文件。在原目录直接解压,包里的同名文件会覆盖原来的,改过的配置可能就丢了。先看列表再解压:
tar -tzvf website.tar.gz
unzip -l site.zip
没有同名重要文件再解压,或解到新建空目录,核对后再移过去;不想覆盖可用 unzip -n,遇到同名文件时直接跳过。
五、速查表
| 想做的事 | 命令 |
|---|---|
| 只打包 | tar -cvf a.tar dir |
| 打包并压缩 | tar -czvf a.tar.gz dir |
| 只看 tar 包内容 | tar -tzvf a.tar.gz |
| 解压 tar 包 | tar -xzvf a.tar.gz |
| 打包成 zip | zip -r a.zip dir |
| 只看 zip 包内容 | unzip -l a.zip |
| 解压 zip 到指定目录 | unzip a.zip -d /path |
记住一句口诀:备份用 tar 加 gzip,传给别人用 zip;打包前先看目录、排除缓存和日志,解压前先看列表、解到新目录。
- 点赞
- 收藏
- 关注作者
评论(0)