tar 与 gzip
100%

软件包 · 第 3 课

tar 与 gzip

学习如何用 `tar` 归档文件、用 `gzip` 压缩数据流,并在安全提取前检查归档。

归档与压缩解决的是不同问题。归档把目录树及其元数据组合成一个数据流;压缩则对数据流重新编码以减小体积。.tar.gz 文件通常是数据流经过 gzip 压缩的 tar 归档。

使用 `gzip` 压缩单个数据流

默认情况下,gzip 会压缩文件,并用一个 .gz 文件替换原来的名称:

$ gzip report.txt

成功创建 report.txt.gz 后,通常会移除 report.txt。使用以下命令解压:

$ gunzip report.txt.gz

在支持的系统上,可以用 gzip -k report.txt 保留输入文件;需要明确控制时,也可以使用标准流。文件扩展名只是一种约定,不能证明实际格式;file 等工具可以检查内容。

本课中 gzip 的主要作用是什么?

创建 Tar 归档

使用以下命令创建未压缩归档:

$ tar -cvf project.tar file1 file2 directory1
  • -c 创建新归档。
  • -v 在处理时列出成员,可省略。
  • -f project.tar 指定归档文件;由于 -f 会使用一个参数,应把文件名紧跟在它旁边。

路径会作为归档成员名称保存。应从有意识选择的工作目录创建归档,避免意外收录密钥、缓存、套接字或范围过大的绝对路径。

哪个 tar 选项用于创建新归档?

创建 Gzip 压缩的 Tar 归档

GNU tar 和许多其他实现可以通过 -z 调用 gzip:

$ tar -czvf project.tar.gz file1 file2 directory1

结果是一个经过 gzip 压缩的 tar 数据流。压缩不会加密归档,也无法向能够读取并解压它的人隐藏内容。如果需要保密性,应采用适当的认证加密流程,并单独管理密钥。

所示 tar 命令中的 -z 请求什么?

提取前先列出内容

应把他人提供的归档视为不受信任输入。先列出成员名称:

$ tar -tzf download.tar.gz

检查意外的绝对路径、.. 路径穿越组成部分、可疑的符号链接或硬链接、设备文件,以及会覆盖重要文件的名称。现代 tar 实现会提供一定保护,但行为和选项不尽相同,而且提取仍会创建攻击者选择的名称与内容。

应提取到新创建的非特权暂存目录:

$ mkdir extraction-stage
$ tar -xzf download.tar.gz -C extraction-stage

不要以 root 身份提取未经审查的归档。把选定文件移到最终位置前,应先核实实际创建的内容。

哪个操作只列出归档成员而不提取?

其他压缩格式

Tar 实现还可以配合 bzip2 和 xz 等压缩程序;在 GNU tar 中通常分别用 -j-J 选择。格式支持和自动检测会有差异,因此应查阅 tar --help 或本机手册。ZIP 是另一种归档格式,使用 zipunzip 等工具操作。

Gzip 压缩会让 tar 归档具有保密性吗?

课程已完成

你已完成 tar 与 gzip

现在,你可以安全地把 tar 归档与 gzip 压缩结合使用。

  • 区分 tar 归档与 gzip 压缩。

  • 使用 -c 创建归档,使用 -z 处理 gzip 数据流。

  • 提取前先用 -t 列出成员,再用 -x 提取。

  • 把不受信任内容提取到非特权暂存目录。

  • 将压缩与加密视为不同概念。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 软件包