Linux tar 命令完全指南:文件归档与压缩
前言
在 Linux 系统中,文件归档和压缩是最基础也是最常用的操作之一。tar 命令(Tape ARchive)自 Unix 早期就已存在,至今仍是系统管理员和开发者必不可少的工具。本文将系统讲解 tar 命令的方方面面,从基础用法到高级技巧,帮助你彻底掌握文件归档与压缩。
一、tar 的核心概念
tar 最初设计用于将数据写入磁带设备(Tape ARchive 的名称也由此而来),如今已成为创建和解包归档文件的标准工具。它的工作原理是将多个文件和目录打包成一个单一的归档文件(通常称为 tarball),然后可以配合压缩工具进一步缩小体积。
压缩格式的选择
tar 本身只负责打包,不执行压缩。压缩由外部工具完成,tar 通过参数调用它们:
| 压缩格式 | tar 参数 | 扩展名 | 压缩率 | 速度 | 适用场景 |
|---|---|---|---|---|---|
| 无压缩 | 无 | .tar | - | 最快 | 仅打包不压缩 |
| gzip | -z | .tar.gz / .tgz | 中等 | 快 | 日常使用、分发包 |
| bzip2 | -j | .tar.bz2 / .tbz2 | 较高 | 较慢 | 需要更高压缩率时 |
| xz | -J | .tar.xz | 最高 | 慢 | 归档备份、最小体积 |
| zstd | --zstd | .tar.zst | 高 | 极快 | 需要平衡速度和压缩率 |
经验建议:日常使用推荐 gzip(-z),兼具速度和可接受的压缩率;归档备份推荐 xz(-J),体积最小;大规模部署包推荐 zstd(–zstd),解压速度极快。
二、基础用法
2.1 创建归档
1 | # 基本语法:tar -cf 归档文件名 要打包的文件/目录 |
参数说明:
-c:创建归档(create)-f:指定归档文件名(file)-z/-j/-J:分别使用 gzip / bzip2 / xz 压缩
2.2 解包归档
1 | # 解包 .tar |
参数说明:
-x:解包(extract)-C:切换到指定目录(一般用于指定解包目标位置)
2.3 查看归档内容
1 | # 列出归档中的文件列表 |
-t 参数仅列出内容而不解包,非常适合快速预览归档结构。
三、日常实战场景
3.1 备份网站目录
1 | # 创建带时间戳的备份 |
3.2 打包多个文件/目录
1 | # 打包不连续的多个目录和文件 |
3.3 向已有归档追加文件
注意:只对未压缩的 .tar 文件有效,压缩后的归档无法直接追加。
1 | # 创建未压缩归档 |
3.4 从归档中提取特定文件
1 | # 提取单个文件 |
3.5 增量备份
1 | # 创建快照文件来跟踪已备份的文件 |
.snar 文件记录了文件的元数据(mtime、大小等),第二次运行时 tar 会自动比较,只打包有变化的文件。
四、高级用法
4.1 保留文件属性
1 | # 保留权限、所有权、时间戳等元数据 |
-p(或 --preserve-permissions)在创建和提取时保留文件权限,--acls、--xattrs、--selinux 分别保留扩展属性。
4.2 通过 SSH 远程归档
1 | # 在远程服务器上创建归档并下载到本地 |
这里的 - 表示标准输入/输出,使 tar 可以作为管道中的链接。
4.3 分割大归档
当归档文件太大无法写入单个存储介质时,可以使用 split 分割:
1 | # 创建未压缩的大归档 |
4.4 检验归档完整性
1 | # 验证归档文件是否损坏 |
更可靠的方式是配合校验和:
1 | # 创建归档时同时生成校验和 |
4.5 排除与包含模式
1 | # 多模式排除 |
五、常用选项速查表
| 选项 | 长选项 | 作用 |
|---|---|---|
| -c | --create | 创建新归档 |
| -x | --extract | 解包归档 |
| -t | --list | 列出归档内容 |
| -f | --file | 指定归档文件名(或设备) |
| -v | --verbose | 显示详细处理信息 |
| -z | --gzip | 通过 gzip 压缩/解压 |
| -j | --bzip2 | 通过 bzip2 压缩/解压 |
| -J | --xz | 通过 xz 压缩/解压 |
| --zstd | — | 通过 zstd 压缩/解压 |
| -p | --preserve-permissions | 保留文件权限 |
| -r | --append | 追加文件到归档末尾 |
| -u | --update | 仅追加比归档中更新的文件 |
| -C | --directory | 切换到指定目录 |
| --exclude | — | 排除匹配模式的文件 |
| -X | --exclude-from | 从文件中读取排除模式 |
| --include | — | 只包含匹配模式的文件 |
| --delete | — | 从归档中删除文件(不适用于压缩归档) |
| --acls | — | 保留 ACL 权限 |
| --xattrs | — | 保留扩展属性 |
| --listed-incremental | — | 创建/使用增量快照 |
| --wildcards | — | 在文件名中使用通配符 |
| -d | --diff | 比较归档与文件系统的差异 |
六、实际案例:完整备份脚本
以下是一个实用的每日网站备份脚本,综合了本文的多种技巧:
1 |
|
七、常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| tar: Removing leading `/' from member names | 使用了绝对路径 | 使用 -C / 切换到根目录再指定相对路径,如 tar -czf backup.tar.gz -C / var/www/html |
| gzip: stdin: unexpected end of file | 归档文件被截断或损坏 | 重新下载或创建归档,使用 sha256sum 校验 |
| Can't open 'file': Permission denied | 解包时没有写入权限 | 使用 sudo 或解包到有权限的目录 |
| Cannot open: No such file or directory | 归档文件路径不正确 | 检查文件路径,使用 ls -la 确认 |
| tar: Error is not recoverable; exiting now | 归档文件严重损坏 | 尝试 tar -xzf 时加 --ignore-zeros 跳过坏块 |
| 归档解包后文件散落四处 | 打包时使用了绝对路径或未在目录内打包 | 打包前 cd 到目标目录上层,使用相对路径 |
八、安全最佳实践
- 校验完整性:归档操作后始终执行
tar -tzf file.tar.gz > /dev/null验证,并配合 SHA256 校验和 - 敏感数据加密:归档包含敏感信息时,结合 GPG 加密:
1
2
3tar -czf - /data/secrets | gpg -c > secrets.tar.gz.gpg
# 解密
gpg -d secrets.tar.gz.gpg | tar -xzf - - 避免根目录解包覆盖:解包前先用
tar -tf查看内容,确认是否有顶层级目录 - 保留文件属性:生产环境备份始终使用
-p参数保留权限 - 定期验证备份可恢复性:每月至少执行一次完整的恢复演练
九、总结
tar 命令是 Linux 系统管理的瑞士军刀。掌握了本文涵盖的内容,你就能够:
- 使用 4 种主流压缩格式创建和解包归档
- 灵活地包含/排除特定文件
- 通过 SSH 远程归档和传输
- 创建增量备份策略
- 编写完整的备份脚本
- 排查常见的归档问题
核心口诀:c 创建、x 解包、t 查看、f 指定文件名、z/j/J/--zstd 选压缩器、v 看详情、C 指定目标目录。
将这些结合到日常工作中,文件管理效率将大幅提升。
本文由AI辅助生成,内容仅供参考
- 标题: Linux tar 命令完全指南:文件归档与压缩
- 作者: Someone
- 创建于 : 2026-06-09 18:30:00
- 更新于 : 2026-06-18 08:39:57
- 链接: https://demo-blog.qusite.cn/2026-06-09-tar-command-guide/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。