TAR 归档 (.tar)
POSIX.1-1988(ustar)/ 标准磁带归档 (TAR) 是 Unix 和 Linux 中无处不在的文件打包格式,它将多个文件、目录和文件系统元数据组合成一个专为磁带备份和软件分发设计的未压缩流。
将 ZIP 转换为 TAR
免费的浏览器端 ZIP 转 TAR 转换器。在您的设备上即时转换文件。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 TAR 文件:
字节级文件头签名 (魔数)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 TAR 文件:
十六进制签名 (偏移量 257):
75 73 74 61 72ASCII 表示形式: ustar
标准化: POSIX.1-1988(ustar)/ POSIX.1-2001(pax)
技术规格
| 容器架构 | 由一系列 512 字节的数据块组成:每个文件先有 512 字节的文件头,后接向上补齐至 512 字节的数据,最后以两个全零数据块结束。 |
| 压缩方式 | 未压缩的归档容器(设计为可通过管道传给 gzip、bzip2、xz 或 zstd) |
| 字节序 | 八进制 ASCII 字符串字段;数值扩展字段采用大端序 |
| 色彩空间 | 不适用(归档容器) |
| 通道与结构 | Unix 文件目录树、符号链接、硬链接、字符/块设备及 FIFO 管道 |
| 最大尺寸 | 经典 ustar 的大小上限为 8 GB;现代 PAX 格式实际上没有上限 |
| 透明度 | 完整保留 POSIX 文件权限、所有者 UID/GID、访问时间及扩展属性 |
| 流式传输与渐进式加载 | 面向顺序数据流的设计,可直接写入磁带驱动器 |
技术对比矩阵:TAR 对比同类产品
| 技术属性 | TAR (当前) | ZIP | 7Z | CPIO |
|---|---|---|---|---|
| 原生压缩 | 无(纯打包容器) | 内置 Deflate 压缩 | 内置 LZMA/LZMA2 压缩 | 无(纯打包容器) |
| Unix 权限保留 | 100% POSIX 属性、符号链接、UID/GID | 有限的 Unix 权限支持 | 保留基本权限 | 100% POSIX 属性 |
| 流式提取 | 支持从管道进行完整的流式提取 | 需要读取文件末尾 (EOF) 的中央目录 | 需要读取结束标头 | 支持完整的流式提取 |
| 文件的随机访问 | 慢(线性顺序扫描) | 瞬时(中央目录查找) | 中等(索引查找) | 慢(线性顺序扫描) |
常见损坏模式与十六进制恢复指南
提取错误:"tar: Skipping to next header"或"A lone zero block at X"。
根本原因: 512 字节块对齐受损或数据流提前终止。
恢复方法: 使用"tar -i"提取以忽略损坏的块,或使用 File2File.app Tar 工具进行修复。
安全分析与解析器攻击向量
TAR 提取程序必须清理文件路径,以防止通过目录遍历攻击进行任意文件覆盖。
已知攻击向量
- "Slip"目录遍历(例如 '../etc/passwd'),在提取过程中覆盖关键系统文件。
- 符号链接竞争条件,创建指向系统目录的符号链接,随后进行文件写入。
- 通过循环硬链接造成拒绝服务。
防御性最佳实践: 严格清理存档文件路径,并拒绝任何包含父目录引用('..')的条目。
历史渊源与里程碑
2001IEEE POSIX.1-2001 引入了 PAX(可移植归档交换)标准,打破了传统的 8 GB 大小限制。
1988IEEE POSIX 将"ustar"(Unix 标准 Tar)标头格式标准化。
1979由贝尔实验室在 Version 7 Unix (V7) 中引入,用于将文件树写入磁带驱动器。
核心优势与特点
- 忠实保留 Unix 文件系统属性:POSIX 权限、符号链接、硬链接和所有权。
- 面向磁带的流式设计:可以直接从网络管道提取,而无需定位到文件末尾。
- 所有 Linux 服务器、容器镜像 (Docker/OCI) 和 Unix 软件发行版通用的标准。
技术局限与劣势
- 无原生压缩:未压缩的 .tar 文件的大小与合并后的原始文件大小大致相同。
- 随机访问速度慢:从大型归档文件的中间提取单个文件需要从头开始扫描。
- 传统的 ustar 标头会截断超过 100 个字符的文件名(在现代 PAX/GNU tar 中已解决)。
趣味技术冷知识
- 魔数“ustar”位于每个 512 字节文件头块的偏移量 257 处。
- TAR 最初是为控制 9 磁道盘式磁带驱动器而编写的。
- Docker 和 OCI 容器镜像实际上是由多个标准 .tar 归档层叠组成,其中存放根文件系统差异。
常见技术问题
为什么我的 .tar 文件没有被压缩?
TAR 仅仅是一个归档程序(它将多个文件打包成一个文件),本身并不进行压缩。若要对其进行压缩,请将其与 gzip 搭配使用以创建 .tar.gz 文件。
ustar 和 GNU tar 有什么区别?
Ustar 是 1988 年的 POSIX 标准,对文件名有 100 个字符的限制,而 GNU tar 是一种扩展格式,支持无限的路径长度和稀疏文件。
如何在 Windows 上打开 .tar 文件?
Windows 10 和 11 通过命令行('tar -xf file.tar')原生支持 tar,或者您也可以直接在网页浏览器中使用 File2File.app 进行可视化提取。