不管是备份网站、传输源码,还是打包日志归档,Linux 服务器上最常用的压缩方式就是 tar。很多新手一看到 tar -zxvf xxx.tar.gz 这种命令就发懵——那么多字母到底什么意思?这篇文章把 tar 的打包、压缩、解压、常用参数和实战场景讲清楚,照着用就行。
一、tar 是什么
tar(tape archive)最开始是"磁带归档"工具,作用是把一堆文件打包成一个文件。它本身不做压缩,但能通过 -z(gzip)、-j(bzip2)、-J(xz)等各种压缩算法组合使用。
所以大家平时说的"打包压缩"其实是两步:先 tar 打包,再 gzip 压缩,合成一个 .tar.gz 文件。
基本语法:
tar [参数] [压缩文件名] [要打包的文件或目录]
二、最常用的三个解压命令
记住下面这几个,就能应对绝大多数情况:
tar -zxvf xxx.tar.gz # 解压 .tar.gz(gzip 压缩)
tar -jxvf xxx.tar.bz2 # 解压 .tar.bz2(bzip2 压缩)
tar -Jxvf xxx.tar.xz # 解压 .tar.xz(xz 压缩)
参数拆开记:
-z:用 gzip,对应.gz-j:用 bzip2,对应.bz2-J:用 xz,对应.xz-x:解包(extract)-v:显示过程(verbose,可省略)-f:后面跟文件名(filename),-f必须放在最后
所以可以看出 -zxvf = 用 gzip 解包 + 显示过程 + 指定文件。
三、最常用的打包压缩命令
打包并压缩成一个 .tar.gz:
tar -czvf backup.tar.gz /www/wwwroot/site
只打包不压缩(所以文件、很少改动时更高效):
tar -cvf backup.tar /www/backup
参数里的 -c 表示创建(create)。
四、指定解压到某个目录
默认解压到当前目录,会散落一地。用 -C 指定解压目录:
tar -zxvf wordpress.tar.gz -C /www/wwwroot/
五、只解压(打包)单个文件或目录
从包里只解出某个文件:
tar -zxvf backup.tar.gz wp-config.php
只打包其中一部分:
tar -czvf site.tar.gz /www/site --exclude=/www/site/cache
--exclude 排除不参与打包的目录(比如缓存、日志)。
六、查看压缩包内容(不解压)
用 -t 列出包里的文件列表:
tar -tzvf backup.tar.gz
加 -v 能显示每个文件的权限、大小、日期,方便解压前确认。
七、网站备份实战(最常用场景)
备份整站时,最理想的是"排除缓存、日志 → gzip 压缩 → 存到独立目录":
tar -czf /backup/site_$(date +%Y%m%d).tar.gz \
--exclude='/www/wwwroot/site/runtime' \
--exclude='/www/wwwroot/site/cache' \
/www/wwwroot/site
再用 mysqldump 备份数据库,一起打包:
mysqldump -uroot -p yourdb > /backup/db.sql
tar -czf /backup/day_$(date +%Y%m%d).tar.gz /backup/site_*.tar.gz /backup/db.sql
配合作本站的 crontab 定时任务教程,就能实现每天自动备份,非常实用。
八、压缩率与速度的选择
不同压缩算法,速度、体积差别明显。常规用 gzip 即可:
| 算法 | 命令 | 特点 |
|---|---|---|
| gzip | -z |
速度快,最常用 |
| bzip2 | -j |
压缩率高,速度慢一点 |
| xz | -J |
压缩率最高,但慢、占内存 |
| 不压缩 | 不写 | 快,但文件大 |
追求速度就 gzip,追求体积选 xz。文本类(源码、配置)压缩率高,图片/视频本身已压缩,再打包空间省不了多少。
九、其他常用操作
追加文件到已存在的 tar(不压缩):
tar -rf backup.tar newfile.txt
验证包是否完整:
tar -tzf backup.tar.gz # 能列出即基本完好
注意:想给 tar.gz 只追加或只删除文件比较麻烦,一般直接重新打包更省事。
打包软链接/保留权限: tar 默认保留权限和属主,通常不需要额外参数;-p 可强制保留权限。
解压时报"gzip: stdin: not in gzip format"? 说明拿到的是没压缩的 .tar,用 tar -xvf(去掉 z)解。
十、常见问题
Q1:解压后文件放在哪了?
在当前目录下展开。想放指定位置用 -C /目录。解压前最好 cd 到目标目录或先 tar -tzf 看包内结构,避免把文件散到当前目录。
Q2:备份后磁盘爆炸?
压缩包会占两份空间(原文件 + 压缩包)。打包前清掉日志和缓存,磁盘空间不够时优先用 gzip(-z),或把包放到其他盘/直接传走。
Q3:解压权限/属主不对?
非 root 用户解压时可能保留不了原属主。用 root 解压,或用 --no-same-owner 强制归当前用户。
Q4:忘了参数,压缩包打不开?
.tar.gz→tar -zxvf.tar.bz2→tar -jxvf.tar.xz→tar -Jxvf.tar(未压缩)→tar -xvf.zip→ 用unzip,不归 tar 管
总结
tar 是 Linux 打包压缩的核心命令,记住三句话:-c 创建打包、-x 解包、-z 用 gzip,-f 永远放最后。常用组合 tar -czvf file.tar.gz 目录(打包)、tar -zxvf file.tar.gz -C /目录(解压)。配合 --exclude 排除缓存、配 crontab 定时,就能轻松搞定网站自动备份。更多自动化思路参考本站 crontab 与网站备份教程。
