适用场景与准备工作
网站搬家、服务器之间传文件、给整站做备份、把几个月的访问日志打包存档,这些场景都离不开 tar 命令。它是 Linux 系统自带的打包工具,不需要额外安装,配合 gzip 压缩后生成的 .tar.gz 文件兼容性好、体积小,是服务器运维里使用频率最高的命令之一。本文以常见的宝塔面板环境为例,演示从打包、查看到解压的完整操作,步骤可以直接照做。
在动手之前,先确认两件事。第一是磁盘空间:打包会在源目录之外额外占用一份空间,空间不足时打包到一半失败,还可能影响业务。先用 df -h 查看目标目录所在分区是否充裕。第二是路径:本文示例中的 /www/wwwroot/example.com 是宝塔面板默认的站点目录,实际操作时请替换成自己的网站路径,不确定路径时可以在宝塔「网站」菜单或使用 ls 命令确认。对于正在运行的重要站点,建议避开访问高峰期执行打包,减少磁盘 IO 波动带来的影响。
tar --version
df -h /www
第一步:把网站目录打包成 tar.gz
打包并压缩的核心命令是 tar -czf,三个参数的含义分别是:c 表示创建新包,z 表示调用 gzip 压缩,f 表示指定文件名。把站点目录整体打成压缩包,只需要一条命令,执行完成后用 ls -lh 查看生成文件的大小,确认包体完整。
tar -czf /www/backup/example.com_20261028.tar.gz /www/wwwroot/example.com
ls -lh /www/backup/
如果站点目录里含有缓存、临时文件,打包前可以用 --exclude 参数排除,能显著减小包体、缩短打包时间。exclude 可以写多个,注意排除目录也建议使用绝对路径,避免匹配不到。对于数据库,不要试图用 tar 打包数据目录来充当备份,正确做法是先用 mysqldump 导出 SQL 文件,再把 SQL 文件一起打进压缩包。
tar -czf /www/backup/example.com.tar.gz /www/wwwroot/example.com \
--exclude=/www/wwwroot/example.com/runtime \
--exclude=/www/wwwroot/example.com/cache
第二步:查看与解压压缩包
拿到一个 .tar.gz 包,不放心直接解压时,可以先用 -t 参数列出包内文件清单,确认内容和目录结构符合预期,再决定解压到哪里。
tar -tzf /www/backup/example.com.tar.gz | head -20
解压使用 -x 参数,并强烈建议搭配 -C 指定解压目标目录,不要图省事在当前目录直接解压。解压目标最好是一个空目录或已做好备份的目录,因为 tar 解压时会直接覆盖同名文件,不会逐一询问。新版 GNU tar 的 -xf 还能自动识别 gz、bz2、xz 等格式,忘记压缩参数时也能正常解开。
mkdir -p /www/restore
tar -xzf /www/backup/example.com.tar.gz -C /www/restore
还有一点安全习惯值得强调:只解压来源可信的压缩包。解压前先用 tar -tf 检查一遍,如果发现包内文件带有 ../ 开头的相对路径或 / 绝对路径,说明可能被构造过路径穿越,应立即停止并删除。以 root 权限解压时,包内的属主和权限信息会被保留,恢复后注意检查属主是否为 www 用户,必要时用 chown -R 修正。

第三步:zip 与 unzip,与 Windows 互传文件
服务器之间传输优先用 tar.gz,但如果压缩包是给 Windows 用户准备的,或者对方上传上来的是 .zip 文件,就需要 zip 和 unzip。部分精简安装的系统默认没有这两个命令,CentOS 用 yum install -y zip unzip,Ubuntu/Debian 用 apt install -y zip unzip 安装即可。
解压 zip 包时,unzip -l 可以先查看内容,-d 参数指定解压目录,-o 表示直接覆盖已存在的文件。反过来把目录打成 zip 包用 zip -r,接收方在 Windows 上双击就能打开,不需要额外工具。
unzip -l upload.zip
unzip -o upload.zip -d /www/wwwroot/example.com
zip -r site.zip /www/wwwroot/example.com
压缩包做好之后,服务器之间传输可以用 scp 命令直接推送,比先下载到本地再上传更高效。把本机打包好的备份文件传到另一台服务器,格式为 scp 本地文件 远程用户@服务器IP:目标路径;反过来从远程拉取文件,把两个参数位置对调即可。第一次连接新服务器时会提示确认指纹,输入 yes 并输入密码即可,建议同时参考 SSH 密钥登录配置,免去每次输密码的麻烦。
scp /www/backup/example.com.tar.gz root@192.168.1.10:/www/backup/
scp root@192.168.1.10:/www/backup/example.com.tar.gz /www/backup/
常见问题
问题一:解压时提示 No such file or directory 怎么办?大多数情况是压缩包不在当前目录,却只写了文件名。先用 ls -lh 确认文件位置,再用绝对路径执行,例如 tar -xzf /www/backup/example.com.tar.gz -C /tmp,不要先 cd 来cd去,路径越简单越不容易出错。
问题二:.tar.gz 和 .tar 有什么区别?.tar 只是把多个文件打成一个包,并不压缩;.tar.gz 才是经过 gzip 压缩的包,体积通常能降到原来的几分之一。两者都可以用 tar -xf 解开,新版 GNU tar 会自动识别格式;单独拿到 .tar 文件时,也可以用 gzip -d 压缩、gunzip 解压来转换。
问题三:压缩率不够高,包还是太大怎么办?可以先用 tar -cf 打包,再手动执行 gzip -9 提高压缩等级,对文本、日志、代码这类文件效果明显;如果机器配置允许,也可以换用 xz 格式(tar -cJf)获得更高压缩率,代价是耗时更长。需要注意图片、视频本身就是压缩格式,再压一遍收益很小。
问题四:解压把现有文件覆盖了,还能恢复吗?这恰恰是最需要预防的情况。tar 解压不提示、不备份,直接覆盖同名文件,所以解压前务必备份目标目录,例如 cp -a /www/wwwroot/example.com /www/wwwroot/example.com.bak。如果不幸覆盖,立即停止写入操作,从之前的备份包中恢复,并检查网站是否能正常访问。
总结
tar 命令的逻辑可以归纳为三件事:-c 打包、-t 查看、-x 解压,加上 -z 或 -j、-J 选择压缩格式,-f 指定文件名,-C 指定目录,就能覆盖绝大多数日常场景。与 Windows 互传时用 zip/unzip,服务器之间传输优先 tar.gz。
tar -czf 备份.tar.gz 目录 # 打包并压缩
tar -tzf 备份.tar.gz # 查看包内文件
tar -xzf 备份.tar.gz -C 目标目录 # 解压到指定目录
zip -r 包.zip 目录 # 打成 zip
unzip -o 包.zip -d 目标目录 # 解压 zip
最后再提醒一次操作顺序:先确认磁盘空间,先备份重要数据,解压来历不明的包之前先 tar -tf 检查内容。把这些习惯固定下来,打包解压这类基础操作就不会成为网站迁移和备份中的风险点。











暂无评论内容