tar 是什么
tar 把一组文件与目录打包成单个归档文件,本身不做压缩与加密,只负责保留目录结构以及权限、属主、时间戳等元数据。归档可再叠加 gzip、bzip2、xz、zstd 形成 .tar.gz、.tar.zst 等格式。它是备份与迁移场景最通用的载体,也是多数压缩工具的输入来源。
基本信息
| 常用动作 | -c 创建 / -x 解包 / -t 列表 |
|---|---|
| 指定文件 | -f 后紧跟归档文件名 |
| 压缩 | -z gzip、-j bzip2、-J xz、--zstd zstd |
| 元数据 | 保留权限、属主、时间戳与目录结构 |
| 适用范围 | Linux 与 macOS 自带;Windows 可用 bsdtar 或 WSL |
创建、查看与解包
创建、查看与解包
tar -czf /backup/site-$(date +%F).tar.gz -C /var/www site # 创建并 gzip 压缩
tar -tzf /backup/site-2026-10-12.tar.gz | head # 查看内容不解包
tar -xzf /backup/site-2026-10-12.tar.gz -C /tmp/restore # 解包到指定目录
tar -czf /backup/etc.tar.gz -C / etc # 备份配置目录
tar -tzf /backup/etc.tar.gz | wc -l # 条目数作基本校验常用选项速记
常用选项速记
-c 创建 -x 解包 -t 列表 -f 指定归档文件 -C 切换目录 -v 显示过程
-z gzip -j bzip2 -J xz --zstd zstd(较新版本 tar 支持)
-p 保留权限 --exclude 排除路径 -T 从文件读取路径清单
--strip-components=N 提取时去掉前 N 层目录常见组合与用途
| 命令组合 | 用途 | 备注 |
|---|---|---|
| -czf | 创建 gzip 归档 | 最通用的备份格式 |
| -tzf | 列出归档内容 | 恢复前核对路径 |
| -xzf 加 -C | 解包到指定目录 | 脚本中始终显式指定 |
| -cf - 接管道 | 流式压缩与传输 | 免落盘中间文件 |
| --listed-incremental | 增量归档 | 需配合快照文件使用 |
典型使用场景
- 目录备份:把站点目录或配置目录整体打包留存,便于快速回滚
- 迁移与交付:跨主机同步整棵目录树,保留权限与属主信息
- 误删恢复:从归档中按路径提取单个文件,不必整包解开
- 流式备份:tar 与压缩、加密、网络传输串联,减少中间落盘
- 增量归档:用 --listed-incremental 记录变化,降低每日备份量
与其他备份方式的分工
tar 产出独立归档文件,可离线保存、异地传输与长期归档,代价是每次都要重读全量数据;rsync 面向目录镜像,只传差异但不产生历史版本;存储快照依赖底层存储,恢复快但通常与源卷同位置。三者常组合使用:快照保证短时回滚,rsync 维持镜像副本,tar 归档保留历史版本。
校验归档完整性
校验归档完整性
tar -tzf /backup/site-2026-10-12.tar.gz > /dev/null # 通读全包校验结构
sha256sum /backup/site-2026-10-12.tar.gz > site.sha256
sha256sum -c site.sha256 # 传输后核对校验和
tar -dzf /backup/site.tar.gz -C / # 与现有文件逐项比对-f 必须是选项组里的最后一个并紧跟归档文件名:tar -czf 与 tar -cfz 语义不同,后者会把 z 当成文件名的一部分。
解包默认在当前目录展开并覆盖同名文件,脚本中应始终显式加 -C 指定目录,必要时先解到临时目录核对再替换。
归档格式选择
| 格式 | 压缩方式 | 适用场景 |
|---|---|---|
| .tar | 不压缩 | 需要随机提取、后续自行压缩或加密 |
| .tar.gz | gzip 或 pigz | 兼容性最好,跨系统交付最稳妥 |
| .tar.zst | zstd | 速度与压缩率均衡,恢复时解压更快 |
| .tar.xz | xz | 压缩率优先,CPU 与内存开销偏大 |
打包前需要确认的点
- 目录内是否含挂载点:跨文件系统打包会连带拉入其他卷内容,必要时使用 --one-file-system
- 排除规则是否到位:缓存、临时文件与归档目标目录本身要排除,避免归档自我嵌套导致体积失控
- 空间是否充足:目标位置剩余容量应大于预估归档体积,中途写满会得到不完整归档
- 数据是否处于一致状态:数据库目录与活跃日志文件应先停写或用快照,否则存档可能停在半写状态
- 恢复路径是否演练过:解包目标目录、属主与权限要求都应提前确认,而不是等故障当天摸索
tar 自身不提供加密:归档落在磁带或对象存储等易转移介质上时,应配合 gpg 或存储侧加密,并把密钥与归档分开保存。