Tar Gzip 归档 (.tar.gz)
POSIX.1 标准Tar Gzip(.tar.gz,也称为 .tgz)是 Linux 和开源世界中标准的软件分发与归档打包格式,它将 Unix 原生的 TAR 打包与通用的 Gzip 压缩结合在一起。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 TAR.GZ 文件:
字节级文件头签名 (魔数)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 TAR.GZ 文件:
十六进制签名 (偏移量 0):
1F 8B 08ASCII 表示形式: ..\x08
标准化: POSIX.1 ustar(由 RFC 1952 Gzip 封装)
技术规格
| 容器架构 | 封装在 RFC 1952 Gzip 压缩容器中的 POSIX ustar / GNU tar 归档数据流 |
| 压缩方式 | 两阶段打包:先序列化为 TAR,再使用 DEFLATE 压缩 |
| 字节序 | 小端序 Gzip 封装,内含八进制 POSIX tar 数据块 |
| 色彩空间 | 不适用(归档容器) |
| 通道与结构 | 多文件 Unix 目录树、符号链接、文件所有权和权限位 |
| 最大尺寸 | 归档大小不限,支持流式处理 |
| 透明度 | 100% 按位精确保留文件系统结构和数据 |
| 流式传输与渐进式加载 | 端到端管道式流处理:单遍完成解压和提取 |
技术对比矩阵:TAR.GZ 对比同类产品
| 技术属性 | TAR.GZ (当前) | ZIP | 7Z | TAR.BZ2 |
|---|---|---|---|---|
| Unix 权限 | 100% 保留原生 POSIX 属性 | 有限支持 / 通常会丢失 | 保留基本属性 | 100% 保留原生 POSIX 属性 |
| 压缩率 | 中等(Gzip DEFLATE) | 中等(ZIP DEFLATE) | 很高(LZMA2) | 高(Bzip2 BWT) |
| 解压速度 | 快(约 300 MB/s) | 快(约 300 MB/s) | 中等(约 100 MB/s) | 慢(约 40 MB/s) |
| Linux 生态标准 | 通用的开源默认标准 | 消费级桌面默认标准 | Windows 爱好者最爱 | 传统 Linux 源码发布 |
常见损坏模式与十六进制恢复指南
命令行报错:“gzip: stdin: invalid compressed data--format violated”。
根本原因: Gzip 封装中的字节损坏,或下载未完成。
恢复方法: 尝试使用 File2File.app 归档提取器或“tar -izxf broken.tar.gz”恢复部分内容。
安全分析与解析器攻击向量
如果提取时不加小心,TAR.GZ 归档文件会同时带来压缩炸弹和目录遍历攻击的风险。
已知攻击向量
- 类似 ZIP 炸弹的放大攻击:微小的 .tar.gz 文件解压后可能膨胀为数 TB 的零数据。
- 目录遍历(例如“../../root/.ssh/authorized_keys”)导致特权文件被覆盖。
- 在以 root 身份提取期间创建恶意设备节点。
防御性最佳实践: 以非特权用户身份提取归档,并清理所有目标路径以防目录遍历。
历史渊源与里程碑
2015Docker 容器分发架构将分层的 .tar.gz rootfs 镜像标准化。
1996IETF 将底层的 Gzip 规范标准化为 RFC 1952。
1993GNU 项目引入了集成的 'tar -z' 标志,确立了 .tar.gz 作为默认 Linux 包格式的地位。
核心优势与特点
- 开源源代码发布、Linux 软件包和 Docker 容器层的无可争议的标准。
- 将完整保留 POSIX 权限和符号链接的能力与可靠、快速的 Gzip 压缩结合在一起。
- 完全支持流式处理:可以通过网络管道下载、解压和解包,而无需在磁盘上写入临时文件。
技术局限与劣势
- 提取单个文件需要解压整个归档文件直到该文件的位置。
- 压缩率低于 .tar.xz 或 .tar.zst 等现代替代方案。
- 在较旧的 Windows 系统上,它不如广泛支持的 ZIP 格式直观易用。
趣味技术冷知识
- 在具有 8.3 文件名限制的 MS-DOS 系统上,'.tar.gz' 被缩写为 '.tgz'。
- 每次运行 'npm install' 时,npm 都会在后台下载并提取 .tgz (tar.gz) 软件包。
- Linux 用户普遍通过助记符 'eXtract Ze File' 来记住提取 tar.gz 文件的命令:tar -xzf file.tar.gz。
常见技术问题
.tar.gz 和 .zip 有什么区别?
.zip 独立压缩每个文件并在末尾有一个中央目录。.tar.gz 首先将所有文件组合成一个单一的流,从而保留完整的 Linux 权限和符号链接。
.tgz 和 .tar.gz 是一样的吗?
是的。.tgz 只是 .tar.gz 的简写 3 字母文件扩展名,最初是为诸如 DOS 等具有 8.3 短文件名限制的操作系统而创建的。
如何在 Windows 上提取 .tar.gz 文件?
您可以直接在网页浏览器中使用 File2File.app 提取 .tar.gz 文件,而无需安装 WinRAR 或 7-Zip。