如果您使用开源软件,很可能会遇到 .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(tar包),大概是因为我们黑客喜欢将单词缩短到尽可能少的音节,而“tarball”比“tar 归档文件”更短且更容易发音。
在 GUI 中,创建 tarball 最多是一个三步过程。我使用的是 KDE,但该过程在 Gnome 或 XFCE 上基本相同
- 创建一个目录
- 将您的文件放入目录中
- 右键单击该目录并选择“压缩”

opensource.com
在 shell 中,它基本上是相同的过程。
要将一组文件收集到一个归档文件中,请将您的文件放入一个目录中,然后调用 tar,提供您要创建的归档文件的名称以及您要归档的目录
$ tar --create --verbose --file archive.tar myfiles
tar 实用程序在命令中是独一无二的,因为它不需要在其短选项前加破折号,从而允许高级用户缩写复杂的命令,如下所示
$ tar cvf archive.tar myfiles
您不必在归档文件之前将文件放入目录中,但最好还是这样做,因为没有人希望在解压缩目录时将 50 个文件散落在他们的桌面上。 这些类型的归档文件有时称为 tarbomb(tar炸弹),尽管并非总是带有负面含义。 Tar炸弹对于补丁和软件安装程序很有用; 只是要知道何时使用它们以及何时避免使用它们。
压缩归档文件
创建 tar 归档文件不会压缩您的文件,它只是使它们更容易作为一个 blob 移动。 对于压缩,您可以让 tar 调用 Gzip 或 bzip
$ tar --create --bzip2 --file foo.tar.bz2 myfiles
$ tar --create --gzip --file foo.tar.gz myfiles
常见的扩展名是 tar.gz 和 .tgz 用于 Gzip 压缩的 tar 文件,.tbz 和 .tar.bz2 用于 bzip 压缩的 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 是 tar 炸弹,它们会将文件散落在您的计算机上。 如果您列出一个 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 条评论