如果您使用开源软件,那么您很有可能会遇到 .tar 文件。开源 tar 归档实用程序自 1979 年以来就已存在,因此它在 POSIX 世界中无处不在。它的目的是简单的:它接受一个或多个文件,并将它们“包装”到一个自包含的文件中,称为磁带归档文件,因为在 tar 发明时,它被用于将数据放置在存储磁带上。
不熟悉 tar 格式的人通常将它等同于 .zip 文件,但 tar 归档文件明显地*没有*被压缩。 tar 格式仅为文件创建一个容器,但可以使用单独的实用程序压缩这些文件。应用于 .tar 文件的常见压缩方式是 Gzip、bzip2 和 xz。这就是为什么您很少只看到 .tar 文件,而更常见的是遇到 .tar.gz 或 .tgz 文件。
安装 tar
在 Linux、BSD、Illumos 甚至 Mac OS 上,已经为您安装了 tar 命令。
在 Windows 上,处理 .tar 文件的最简单方法是安装 LGPL 开源 7-Zip 实用程序。 它的名字暗示它是一个 zip 实用程序,但它也适用于 tar 归档文件,甚至为 cmd 命令行界面提供命令。
如果您真的想要 Windows 上的实际 tar 实用程序,可以通过 Windows 10 上的 WSL 或通过 Cygwin 安装 GNU tar。
创建 tarball
tar 归档文件通常被称为 tarball,大概是因为我们黑客喜欢尽可能地将单词缩短到最少的音节,而“tarball”比“tar archive”更短更容易。
在 GUI 中,创建 tarball 最多是一个三步过程。我正在使用 KDE,但该过程在 Gnome 或 XFCE 上基本相同
- 创建一个目录
- 将您的文件放入目录中
- 右键单击目录并选择“压缩”

opensource.com
在 shell 中,它基本上是相同的过程。
要将一组文件收集到一个归档文件中,请将您的文件放在一个目录中,然后调用 tar,提供您要创建的归档文件的名称和您要归档的目录
$ tar --create --verbose --file archive.tar myfiles
tar 实用程序在命令中是独一无二的,因为它不需要短选项前面的破折号,允许高级用户缩写复杂的命令,例如
$ tar cvf archive.tar myfiles
您不必在归档之前将文件放入目录中,但不这样做被认为是不良礼仪,因为没有人希望在取消归档目录时将 50 个文件分散到他们的桌面上。 这种类型的归档有时被称为 tarbomb,尽管并非总是带有负面含义。 Tarbombs 对于补丁和软件安装程序很有用; 这只是一个知道何时使用它们以及何时避免它们的问题。
压缩归档文件
创建 tar 归档文件不会压缩您的文件,它只是使它们更容易作为一个 blob 移动。对于压缩,您可以让 tar 调用 Gzip 或 bzip
$ tar --create --bzip2 --file foo.tar.bz2 myfiles
$ tar --create --gzip --file foo.tar.gz myfiles
常见的扩展名是 tar.gz 和 .tgz 用于 Gzipped tar 文件,.tbz 和 .tar.bz2 用于 bzipped tar 文件。
提取归档文件
如果您从朋友或软件项目收到 tarball,您可以在 GUI 桌面或 shell 中提取它。 在 GUI 中,右键单击要提取的归档文件并选择“提取”。

opensource.com
Dolphin 文件管理器提供了一项功能,可以自动检测从归档文件中提取的文件是否包含在目录中,或者是否需要为它们创建一个新目录。 我使用此选项,以便当我从 tarbomb 中提取文件时,它们保持整洁并包含在内。
在 shell 中,提取归档文件的命令非常直观
$ tar --extract --file archive.tar.gz
高级用户将其缩短为
$ tar xf archive.tar.gz
您甚至可以使用 tar 实用程序来解压缩 .zip 文件
$ tar --extract --file archive.zip
高级 tar
tar 实用程序非常强大且灵活。 一旦您熟悉了基础知识,探索其他功能会很有用。
将文件或目录添加到现有 tarball
如果您有一个现有的 tarball 并且想要在其中添加一个新文件,您不必取消归档所有内容才能添加一个新文件。
大多数 Linux 和 BSD 桌面都带有一个图形归档实用程序。 使用它,您可以打开 tar 归档文件,就像它是任何其他目录一样,查看内部,提取单个文件,向其中添加文件,甚至预览它包含的文本文件和图像。

opensource.com
在 shell 中,只要未压缩,您就可以将文件或目录添加到 tar 归档文件中。 如果您的归档文件已被压缩,您必须解压缩它,但您不需要取消归档它。
例如,如果使用 Gzip 压缩了归档文件
$ gunzip archive.tar.gz
$ ls
archive.tar
现在您有了一个未压缩的 tar 归档文件,将一个文件和一个目录添加到其中
$ tar --append --file archive.tar foo.txt
$ tar --append --file archive.tar bar/
较短版本
$ tar rf archive.tar foo.txt
$ tar rf archive.tar bar/
查看 tarball 中的文件列表
要查看归档文件中的文件(压缩或未压缩),请使用 --list 选项
$ tar --list --file archive.tar.gz
myfiles/
myfiles/one
myfiles/two
myfiles/three
bar/
bar/four
foo.txt
高级用户将其缩短为
$ tar tf archive.tar.gz
仅提取一个文件或目录
有时您不需要归档文件中的所有文件,您只需要提取一两个文件。 在列出 tar 归档文件的内容后,使用通常的 tar 提取命令以及您要提取的文件的路径
$ tar xvf archive.tar.gz bar/four
bar/four
现在,文件“four”被提取到名为“bar”的新目录中。 如果“bar”已存在,则将“four”放置在现有目录中。
提取多个文件或目录基本相同
$ tar xvf archive.tar.gz myfiles/one bar/four
myfiles/one
bar/four
您甚至可以使用通配符
$ tar xvf archive.tar.gz --wildcards '*.txt'
foo.txt
将 tarball 提取到另一个目录
之前,我提到过一些 tarball 是 tarbombs,它们会将文件分散在您的计算机周围。 如果您列出一个 tar 归档文件并看到它的文件未包含在目录中,您可以为它们创建一个目标目录
$ tar --list --file archive.tar.gz
foo
bar
baz
$ mkdir newfiles
$ tar xvf archive.tar.gz -C newfiles
这会将归档文件中的所有文件整齐地放入“newfiles”目录中。
目标目录选项的用途远不止保持提取的文件整洁,例如,分发旨在复制到现有目录结构中的文件。 如果您正在处理网站并想向管理员发送一些新文件,您可以通过几种不同的方式来完成。 显而易见的方法是将文件通过电子邮件发送给站点管理员,并附上一些文本解释每个文件要放置的位置:“附加的 index.php 文件进入 /var/www/example.com/store,以及 vouchers.php 文件进入 /var/www/example.com/deals…”
更有效的方法是创建一个 tar 归档文件
$ tar cvf updates-20170621.tar.bz2 var
var/www/example.com/store/index.php
var/www/example.com/deals/voucher.php
var/www/example.com/images/banner.jpg
var/www/example.com/images/badge.jpg
var/www/example.com/images/llama-eating-apple-pie.gif
给定此结构,站点管理员可以将您传入的归档文件直接提取到服务器的根目录。 tar 实用程序自动检测 /var/www/example.com 的存在以及子目录 store、deals 和 images,并将文件分发到正确的目录中。 它是批量复制和粘贴,快速而轻松地完成。
GNU tar 和 BSD tar
tar 格式只是一种格式,它是一种开放格式,因此它可以由多个工具创建。
有两种常见的 tar 实用程序:GNU tar 实用程序(默认安装在 Linux 系统上)和 BSD tar 实用程序(默认安装在 BSD、Mac OS 和某些 Linux 系统上)。 对于一般用途,任何一种 tar 都可以。 例如,本文中的所有示例在 GNU 或 BSD tar 上都以相同的方式工作。 但是,这两个实用程序确实有一些细微的差异,因此一旦您熟悉了一个,您应该尝试另一个。
您可能必须手动安装“其他” tar(无论在您的系统上是什么)。 为了避免实用程序之间的混淆,GNU tar 通常命名为 gtar,BSD tar 命名为 bsdtar,命令 tar 是一个符号链接,或 alias,指向预安装在您的计算机上的实用程序。
5 条评论