什么是焦油? 焦油代表“磁带存档”,指的是早期计算时将数据备份到磁带时的一种做法。 尽管名称的起源很怀旧,但 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 命令指南吗? 我希望所有这些技巧都能教会你一些新的东西。
如果您喜欢本指南,请在社交媒体上分享。 如果您有任何意见或问题,请在下方留言。
如果您对希望看到的主题有任何建议,也请随时留下。 谢谢阅读。