tar 命令入门

什么是焦油? 焦油代表“磁带存档”,指的是早期计算时将数据备份到磁带时的一种做法。 尽管名称的起源很怀旧,但 tar 非常强大,它使用现代技术来归档和压缩文件。

刷新基础知识:存档与压缩

tar 命令对于 Linux 用户理解很重要。 在我们深入探讨这个主题之前,让我们先做一点澄清。

  • 归档 – 将多个文件存储为一个文件的行为。
  • 压缩 – 压缩一个或多个较大文件的行为。

Tar 是一个归档工具。 它从多个文件中创建一个文件。 这可以在传输文件时节省网络带宽、时间和处理能力。 由于文件开销,一个 100 MB 的文件比传输 100 个 1 MB 的文件要少得多。

这就是为什么您经常会在“压缩包‘。 Tarball 是用于 tar 文件的常用术语。

虽然 tar 本身不能压缩文件,但您可以在创建 tarball 时使用一种常见的压缩算法来压缩文件。 稍后我将在本基本 tar 教程中向您展示如何做到这一点。

常见的 tar 文件

以下是一些常见的“tar 文件”:

。柏油: 这是一个压缩包文件。 它只是一个存档,不执行压缩。

.焦油.Gz 或 .tgz:这是压缩文件的扩展名 压缩包.

.Tar.Bz2 或 .tbz: 这是用 Bz2 压缩的档案的扩展。 这是一项相对较新的技术。 它具有更高的压缩比,但增加的收缩能力意味着它需要更长的时间才能完成。

.Tar.xz 或 .txz 等。: Tar 还内置了对 xz、lzip 等的支持。 这些工具主要使用相同的压缩算法 LZMA。 流行的 7z 在 Windows 环境中变得相当普遍的也使用此算法。 文件的进一步差异来自结构和元数据。 我不会在我们的示例中详细介绍这些细节,但我想提及它们。

重要的是要记住,在 Linux 和其他基于 Unix 的系统上不需要扩展。 无论扩展名如何,您的 Unix 系统通常可以通过文件头来识别文件,但是使用通用命名方案可以帮助避免混淆。 您可以在 Linux 中使用 file 命令来了解文件的类型。

tar 命令示例

对于本文,我想演示一些使用 tar 归档和压缩文件的常用方法。

我在我的 Documents 文件夹中组装了一些不同类型的文件。 有库存图像和一些文本文件。 我们将通过几个例子来看看文件大小是如何被压缩改变的。

这是将要使用的文件的完整列表。

[email protected]:~/Documents$ ll
total 7404
drwxr-xr-x  2 christopher christopher    4096 May  5 10:55 ./
drwxr-xr-x 17 christopher christopher    4096 May  5 10:59 ../
-rw-r--r--  1 christopher christopher 5094932 Apr 30 23:54 aerial-view-of-bushes-on-sand-field-3876435.jpg
-rw-r--r--  1 christopher christopher   13268 Apr 30 23:57 lorem1.txt
-rw-r--r--  1 christopher christopher   13268 Apr 30 23:57 lorem2.txt
-rw-r--r--  1 christopher christopher   13268 Apr 30 23:57 lorem3.txt
-rw-r--r--  1 christopher christopher   13268 Apr 30 23:56 lorem.txt
-rw-r--r--  1 christopher christopher 2411919 Apr 30 23:54 mountain-range-2397645.jpg

我已经谈到了 tar 的功能。 它是一个强大的工具,有很多选择。 各种选项和文件类型可能会使命令看起来比实际更复杂。 与往常一样,我的目标是揭开命令行的神秘面纱。 因此,在组合示例中的几个选项之前,让我们将事情分解成更小的部分。

这是常用选项的表格。 请记住,这仅仅是开始。 我建议您自己阅读帮助文档,以便在您感觉舒适时找到更多可能性。

转变广泛的选择描述
-C,-创造创建一个新档案
-d,-diff,-比较查找归档和文件系统之间的差异
-r,-附加将文件附加到存档的末尾
-t,-列表列出档案的内容
-u,-更新仅在存档中追加比副本更新的文件
-X,–提取,–获取从档案中提取文件
-j,–bzip2通过 bzip2 过滤存档
-z,–gzip、–gunzip、–ungzip通过 gzip 过滤存档

1)创建一个压缩包

前面我提到了与 tar 命令相关的常见文件类型。 这可能是最基本的。

tar cvf output_tarball.tar source_directory

不会应用压缩,因此文件将占用至少与文档文件夹中的文件一样多的空间。

[email protected]:~$ tar cvf doc.tar ~/Documents

tar cvf (create, verbose, file-archive):它从 ~/Documents 中的所有文件创建一个名为 doc.tar 的新 tar 文件。

[email protected]:~$ ll doc.tar
-rw-r--r-- 1 christopher christopher 7567360 May  5 11:00 doc.tar

请注意,tarball 将具有与 tarball 的源目录相同的目录结构。

2) 创建一个 gzip 压缩包

让我们在创建 tarball 时尝试 gzip 压缩。

[email protected]:~$ tar cvzf doc.tar.gz ~/Documents

tar cvzf (create, verbose, g-zip, file-archive):它从 ~/Documents 中的所有文件创建一个名为 doc.tar.gz 的新 tar 文件。 它在创建 tarball 时使用 gzip 压缩(带有选项 z)。

[email protected]:~$ ll doc.tar.gz 
-rw-r--r-- 1 christopher christopher 7512498 May  5 11:01 doc.tar.gz

如您所见,gzip 压缩的 tarball 大小比普通的未压缩 tarball 少 54862 字节 (53MB)。

使用连字符时要注意 – 带有 tar 选项

通常,当您将选项与 Linux 命令一起使用时,您会在选项前添加连字符 (-)。
选项前的连字符不是强制性的,最好避免使用。 这就是为什么我没有在示例中使用它的原因。
如果在选项前使用连字符,则应始终将 f 保留在选项的末尾。 如果您使用 tar -cvfz,z 将成为选项 z 的参数。 然后你会看到这样的错误:

tar:doc.tar.gz:无法统计:没有这样的文件或目录

这就是为什么在所有其他选项的末尾使用选项 f 是一个很好的做法,这样即使您出于习惯使用连字符也不会产生问题。

3) 创建一个 bz2 压缩包

假设您要创建一个 bz2 压缩包。 步骤与上一个相同。 您只需要将选项 z (gzip) 更改为 j (bz2)。 请参阅我之前提到的选项表。

[email protected]:~$ tar cvjf doc.tar.bz2 ~/Documents

tar cvfj(创建、详细、bz2 类型、文件归档)。

[email protected]:~$ ll doc.tar.bz2
-rw-r--r-- 1 christopher christopher 7479782 May  5 11:04 doc.tar.bz2

注意尺寸? 它甚至比 gzipped tarball 还要少。

4) 列出压缩包的内容

您可以使用 -t 选项(而不是 -c)来查看存档文件的内容。 无论文件是否被压缩,这都是一样的。 它将列出实际文件大小,而不是压缩大小。

[email protected]:~$ tar tvf doc.tar
drwxr-xr-x christopher/christopher 0 2020-05-05 10:55 home/christopher/Documents/
-rw-r--r-- christopher/christopher 5094932 2020-04-30 23:54 home/christopher/Documents/aerial-view-of-bushes-on-sand-field-3876435.jpg
-rw-r--r-- christopher/christopher   13268 2020-04-30 23:57 home/christopher/Documents/lorem1.txt
-rw-r--r-- christopher/christopher   13268 2020-04-30 23:56 home/christopher/Documents/lorem.txt
-rw-r--r-- christopher/christopher 2411919 2020-04-30 23:54 home/christopher/Documents/mountain-range-2397645.jpg
-rw-r--r-- christopher/christopher   13268 2020-04-30 23:57 home/christopher/Documents/lorem3.txt
-rw-r--r-- christopher/christopher   13268 2020-04-30 23:57 home/christopher/Documents/lorem2.txt

5) 将更多文件添加到 tarball

您可以使用将文件附加到 tarball 存档 -r. 如果不先使用 tar 命令解压缩文件,就无法将文件添加到压缩存档中。

您也可以使用 -u 更新选项。 这个选项应该只根据帮助文档添加新文件,但在我的实践中,它的工作方式与追加相同,添加所有文件的新副本。

[email protected]:~$ tar rvf doc.tar ~/Documents/

6)提取一个压缩包

现在您已经了解了不同类型的压缩如何影响整体文件大小,让我们来看看提取这些文件。

[email protected]:~$ cd docs
[email protected]:~/docs$ tar xvf ~/doc.tar.gz 

我更改为一个名为 docs 的新目录。 然后我使用 tar xvf (extract, verbose, file-archive) 来解压这里的内容。

[email protected]:~/docs/home/christopher/Documents$ ls
aerial-view-of-bushes-on-sand-field-3876435.jpg  lorem1.txt  lorem2.txt  lorem3.txt  lorem.txt  mountain-range-2397645.jpg

重要的是要注意 tar 保留文件结构,因此当我提取文件时,它们位于 /home/christopher/Documents 中。 为避免这种情况,您可以切换到所需的目录(~/Documents)并使用 * 通配符而不是目录结构复制所有文件。

7) 将压缩包解压到特定目录

默认情况下,tarball 的内容被提取到当前目录中。 这并不总是可取的。

您可以通过以下方式将 tarball 解压缩到特定目录:

tar xvf tar_file -C destination_directory

目标目录必须存在,因此请确保事先使用 mkdir 命令创建一个。

概括

在 Linux 中使用 tar 时需要牢记以下几点:
它几乎总是以 tar cf 或 tar xvf 格式使用。 记住这一点:

  • c 代表 create:你用它来创建一个 tarball
  • x 代表提取:您使用它来提取 tarball
  • f 代表文件:您使用它作为 tar 文件名(用于创建或提取)。 尝试在选项末尾使用它。
  • v 代表详细:它是可选的,但它显示了命令发生的情况。

    当然,您不能在同一个 tar 命令中同时使用 c 和 x 选项。

结论

您喜欢我们的 tar 命令指南吗? 我希望所有这些技巧都能教会你一些新的东西。

如果您喜欢本指南,请在社交媒体上分享。 如果您有任何意见或问题,请在下方留言。

如果您对希望看到的主题有任何建议,也请随时留下。 谢谢阅读。