Linux tar 命令详解:tar.gz 打包压缩、解压解包、增量备份,一个命令全搞定


不管是备份网站、传输源码,还是打包日志归档,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 与网站备份教程。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Nginx 开启 Gzip 压缩教程:带宽省一半、首屏秒开,一行配置就提速

Linux find 命令详解:按名字、类型、大小、时间查找文件,运维效率翻倍

评 论
更换验证码