Tar 命令在 Linux/Unix 中的使用及示例

2025年3月17日 | 阅读 7 分钟

在 Linux 中,tar 命令是 tape archive(磁带归档)的缩写。此命令用于创建和提取归档文件。在 Linux 中,它是促进归档功能的重要命令之一。我们可以使用此命令创建未压缩和压缩的归档文件,还可以对其进行修改和维护。

Tar 是计算机软件的一种实用程序,用于在计算中将多个文件收集到一个单一的归档文件中。通常,它被称为 tarball,用于备份和分发目的。其名称源自“tape archive”(磁带归档),因为它最初是为使用文件系统之外的顺序 I/O 设备指定数据而开发的。tar 创建的归档数据包含许多文件系统参数,如目录组织、文件访问权限、所有权、时间戳和名称。为了支持 pax,POSIX 放弃了 tar,但 tar 仍然被广泛使用。

它首先于 1979 年 1 月在 Version 7 Unix 中发布,取代了 tp 程序。为了存储数据,文件结构在 POSIX.1-1988 和后来的 POSIX.1-2001 中标准化,并成为几乎所有现代文件归档系统支持的模式。类 Unix 操作系统通常包含支持 tar 文件和用于压缩它们的实用程序(如 bzip2 和 gzip)的工具。
自 Microsoft 2018 年 4 月 10 日更新以来,BSD-tar 已包含在 Microsoft Windows 中,并且有两个或多个第三方工具可以在 Windows 上读取和写入这些模式。

tar 的文件格式

有许多 tar 文件格式可用,包括当前和历史上的格式。tar 的两种格式在 POSIX 中定义:pax 和 ustar。

头文件

文件头记录包含文件的元数据。在头记录中,信息以 ASCII 标准编码,以确保在具有不同字节顺序的不同体系结构之间具有灵活性。因此,如果归档中的每个文件都是 ASCII 文本文件并包含 ASCII 名称,则该归档就是一个 ASCII 文本文件(包含一些 NUL 字符)。

下表列出了原始 Unix tar 格式定义的几个字段。链接文件/指示符表包含一些现代扩展。如果一个字段未使用,则用各种 NUL 字节填充。

POSIX.1-1988 之前的 tar 头

字段字段 大小字段 偏移量
文件名1000
文件模式8100
所有者的数字用户 ID8108
组的数字用户 ID8116
文件大小(字节)12124
最后修改时间(数字 Unix 时间格式)12136
头记录的校验和8148
链接指示符1156
链接文件名100157

Ustart 格式

在 Ustar 格式中,几乎所有现代 tar 程序都会读取和写入归档,该格式由 1988 年的 POSIX IEEE P1003.1 标准引入。它引入了额外的头字段。以前的 tar 程序会忽略这些额外信息,但新程序会检查“Ustar”字符串是否存在以确定是否正在使用较新格式。

字段字段 大小字段 偏移量
许多字段与先前格式相同1560
类型标志1156
与先前格式类似的字段100157
“ustar” Ustar 指示符,后跟 NUL6257
“00” Ustar 版本2263
所有者的用户名32265
所有者的组名32297
设备的主编号8329
设备的次编号8337
文件名前缀155345

POSIX.1-2001/pax

Sun 在 1997 年提出了一种向 tar 格式添加扩展的技术。后来,它被批准为 POSIX.1-2001 标准。该格式称为 pax 格式或扩展 tar 格式。一些标签由 POSIX 标准指定,包括 mtime、atime、linkpath、gname、uname、sizes、gid、uid,以及组/用户名和路径名的字符集定义。

tar 的主要实现

主要实现按原始顺序提及

  • Solaris tar 是 Solaris OS 上的默认版本,基于原始 Unix V7。
  • GNU tar 是几乎所有 Linux 发行版的默认版本。它基于 1987 年开始的公共领域实现 pdtar。最新版本可以使用多种格式,如 GNU、pax、v7 和 ustar。
  • FreeBSD tar 已成为几乎所有基于 Berkeley Software Distribution 的操作系统(如 Mac OS X)上的默认 tar。
  • Schily tar 在历史上很重要,因为它的某些扩展非常有名。它于 1997 年 4 月首次发布。
  • Python tarfile 支持两种或更多 tar 格式,如 gnu、pax 和 ustar;它可以读取但不能创建 SunOS tar 扩展和 V7 格式;pax 是创建归档的默认格式。自 2003 年以来一直可供用户使用。

此外,大多数 cpio 和 pax 实现可以创建和读取两种或更多类型的 tar 文件。

tar 命令的语法

tar 命令中的选项

tar 命令中的各种选项如下所列

  1. -c: 此选项用于创建归档。
  2. -f: 此选项用于使用提供的文件名创建归档。
  3. -x: 此选项用于提取归档。
  4. -u: 可用于将归档添加到现有归档文件。
  5. -t: 用于显示或列出归档文件中的文件。
  6. -A: 此选项用于连接归档文件。
  7. -v: 可用于显示详细信息。
  8. -j: 用于使用 tbzip 过滤归档 tar 文件。
  9. -z: 这是一个 zip 文件,告知 tar 命令使用 gzip 创建 tar 文件。
  10. -r: 此选项用于更新和添加目录或文件到现有的 .tar 文件。
  11. -W: 此选项用于验证归档文件。

归档文件简介

归档文件可以定义为包含多个带元数据的文件。这些文件用于将多个数据文件收集到一个单独的文件中,以便于存储和移植。它还可以用于压缩文件以节省存储空间。

tar 命令示例

tar 命令中一些广泛使用的重要示例如下

1. 使用 -cvf 选项创建未压缩的 tar 归档

此选项创建一个名为 file.tar 的 tar 文件。它是 mydir 目录中所有 .txt 文件的归档。

命令如下:


Tar command in Linux

2. 使用 -xvf 选项从归档中提取文件

此选项可以从归档中提取文件。

命令如下:


Tar command in Linux

3. 使用 -z 选项对 tar 归档进行 gzip 压缩

此选项创建一个名为 file.tar.gz 的 tar 文件。它是所有 .txt 文件的归档。

命令如下:


Tar command in Linux

4. 使用 -xvzf 选项提取 gzip tar 归档

此选项可以从 file.tar.gz tar 归档文件中提取文件。

命令如下:


Tar command in Linux

5. 使用 -j 选项创建压缩的 tar 文件

此选项将帮助我们创建和压缩归档文件。与 gzip 相比,解压缩和压缩都需要更长的时间。

命令如下:


Tar command in Linux

6. 在 Linux 中解压单个指定目录或文件

此选项用于在当前目录或指定目录中使用 -C 选项解压任何文件。

命令如下:


Tar command in Linux

或者,


Tar command in Linux

7. 在 Linux 中解压多个 .tar.tbz, .tar.gz, .tar 文件

此选项将帮助我们从 tar.bz2、tar.gz 和 tar 归档文件中解压或提取多个文件。

此选项的示例如下


Tar command in Linux

或者,


Tar command in Linux

或者,


Tar command in Linux

8. 检查现有 tar.tbz, tar.gz, tar 文件的大小

此命令将帮助我们以千字节 (KB) 为单位显示上面提到的归档文件的大小。

命令如下:

或者,

或者,


Tar command in Linux

9. 更新现有的 tar 文件

在 Linux 中,更新现有 tar 文件的命令如下

10. 使用 tf 选项列出内容并描述 tar 文件

此选项将帮助我们列出整个归档文件的列表。此外,我们还可以列出任何 tar 文件中的特定内容。

命令如下:


Tar command in Linux

11. 使用 -tvf 选项查看归档

在 Linux 中,我们可以使用 -tvf 选项来查看归档。

命令如下:


Tar command in Linux

12. 将文件名作为参数传递以查找 tar 文件

此选项可以查看归档文件及其信息。

命令如下:


Tar command in Linux

13. 使用管道将 'grep 命令' 传递以搜索我们正在寻找的内容

此选项将帮助我们仅列出通过归档文件在 grep 中提到的图像或文本。

命令如下:

或者,


Tar command in Linux

通配符简介

在 Linux 中,通配符也被称为通配符字符或野字符。它是一个用于表示或替换多个字符的符号。

通常,通配符是问号 (?),表示单个字符,或者星号 (*),表示多个字符。

示例-

14. 查找 .png 格式的图像

这将帮助我们仅从 file.tar 归档中提取带有 .png 扩展名的文件。-wildcards 选项告知 tar 解释要提取的文件名中的通配符。

文件名 (*.png) 被包含在单引号中,以防止通配符 (*) 被任何 shell 错误地扩展。

命令如下:


Tar command in Linux

注意:在上面的命令中,"*" 符号被用作文件名来匹配该特定目录中的每个文件。

15. 从 tar 归档中删除文件

我们可以使用 --delete 选项从 tar 归档中移除文件。

命令如下:

示例

输出

Tar command in Linux

hello1.txt 文件已从 file.tar 归档中删除

Tar command in Linux
下一个主题Linux Find File