target="_blank">归档、压缩和提取文件是 Linux 管理员最常见的一些任务。如果您曾经使用过具有 .tar、.tar.gz、.xz 或 .bz2 扩展名的“tarball”文件,那么它很可能是使用 .tar 实用程序创建的。在本文中,我们将演示如何使用该tar实用程序在 Linux 系统上归档、压缩和提取文件。我们将使用 Ubuntu 20.04 作为所有示例,但您可以在任何使用tar.
什么是焦油?
tar— “磁带存档”的缩写 — 是一个用于创建和提取存档的 GNU 命令行工具。
存档是包含多个文件或目录的单个文件。在开源和 Linux 社区中,tarball 是分发源代码和其他重要文件的最常用方法之一。
除了创建档案外,tar还可以使用多种不同的压缩实用程序(例如gzip和bzip2.
tar 与 gzip
在处理 Linux 归档文件时,您可能经常在类似的上下文中听说过tar和。gzip
这两个工具的基本区别是:在压缩文件
tar的同时从多个文件创建存档。gzip
然而,这些工具并不相互排斥。tar可以gzip用来压缩它归档的文件。tar的z开关使tar命令使用gzip。
gzip 与 bzip2 与 xz 压缩
gzip不是唯一tar可以使用的压缩程序。它还支持bzip2和xz。下表详细说明了这些压缩工具之间的一些基本区别。
压缩包 | bzip2 | xz | |
---|---|---|---|
压缩算法 | 放气 | 伯罗斯-惠勒 | LZMA |
常用文件扩展名 | .tar.gz、.tgz、.gz | 焦油.bz2, .bz2 | 焦油.xz,.xz |
tar命令开关 | -z | -j | -J |
一般来说,从压缩和性能的角度来看,gzip和是可比的,但使用更广泛。往往会提供最佳的整体压缩,但也需要更多的时间和计算资源。bzip2gzip.xz
注意:在我们的示例中,我们将专注于使用gzip. 在命令中替换-z为-j将使用bzip2而不是 gzip。使用-Jinstead of-z将使用xzinstead of gzip。
如何压缩单个文件或目录
在 Linux 中压缩单个文件或目录的一般命令是:
tar -czvf <archive name> </path/to/file/or/directory>
以下是每个开关的含义:
- c- 创建档案。
- z- 通过运行存档gizp。
- v- 详细列出文件。
- f- 使用特定的存档文件。
例如,要将/pepper目录压缩到名为 的存档egg.tar.gz,请运行以下命令:
tar -czvf egg.tar.gz /pepper
输出将类似于:
tar: Removing leading `/' from member names /pepper/ /pepper/pepperAndegg.log /pepper/pepperAndEgg.txt /pepper/pepperandegg.log
如果我们省略v开关而是使用命令tar -czf egg.tar.gz /pepper,输出将不会包括每个文件。相反,它看起来类似于此
tar: Removing leading `/' from member names
如果没有错误或需要从成员名称中删除的字符——例如,如果我们正在压缩当前工作目录中的文件——则不会有输出。
注意:tar指定开关的方法不止一种。您会注意到我们-在指定tar开关之前使用。虽然这是一个常见的约定,但通常并不需要。tar czvf <archive name> </path/to/file/or/directory>也会工作。一样会tar -cf <archive name> -vz </path/to/file/or/directory>。tar我们将坚持我们在其余示例中使用的约定,但请记住,指定选项的方法不止一种。
如何将多个文件或目录压缩到一个存档
在 Linux 中压缩单个文件或目录的一般命令是:
tar -czvf <archive name> </path/to/file/or/directory1> </path/to/file/or/directory2> ... </path/to/file/or/directoryN>
例如,要将文件one.txt、two.mp4和压缩three.iso到名为 的存档egg.tar.gz,请运行以下命令:
tar -czvf egg.tar.gz one.txt two.mp4 three.iso
归档时如何排除目录和文件
如果您指定一个目录来创建存档,则可能有一些文件要从存档中排除。该--exclude选项允许您指定要从存档中排除的模式。
任何与传递给--exclude选项的模式相匹配的文件都不会包含在存档tar创建中。
tar从存档中排除文件的一般命令是:
tar --exclude=<PATTERN> <Options> <archive name> </path/to/directory>
例如,假设我们的/pepper目录中有这些文件:
- 一个.txt
- 二.mp4
- 三.iso
- 四.日志
- 输出.log
我们希望将除 .log 文件之外的所有内容压缩到egg.tar.gz存档中。我们可以使用这个命令:
tar --exclude='*.log' -czvf egg.tar.gz /pepper
如果需要,您可以--exclude在单个命令中指定多个模式。
如何将文件添加到现有存档
如果你有一个现有的档案并且你想向它添加文件,你可以使用-r或--append选项。附加到 .tar 档案的一般命令是:
tar -rf <tar archive> </path/to/file>
但是,-r与--append压缩档案不兼容。这意味着您只能将它们与未通过压缩程序(如 、 或 )运行的 tarballgzip一起bzip2使用xz。
如果您尝试在压缩存档上使用-r或--append,您可能会看到类似于以下内容的错误:
tar: Cannot update compressed archives tar: Error is not recoverable: exiting now
由于此限制以及 和 的其他一些细微差别-r,--append在许多情况下,使用附加文件创建新存档会更容易。
如何列出档案的内容
-t您可以使用或--list选项列出存档的内容。列出档案内容的一般命令是:
tar -tvf <archive>
和选项适用于压缩和未压缩的档案-t。 --list
例如,要列出egg.tar.xz当前工作目录中存档的内容,请运行以下命令:
tar -tvf egg.tar.xz
如何提取档案
tar的-x开关用于提取档案。在 Linux 中提取存档的一般命令是:
tar -xf <archive>
该tar -xf命令适用于压缩和未压缩的档案。
例如,要egg.tar.gz在我们当前的工作目录中提取一个档案,我们可以使用这个命令:
tar -xf egg.tar.gz
如何将档案提取到特定目录
在某些情况下,您可能希望将文件提取到当前工作目录以外的目录中。tar的-C开关在这种情况下很有用。
将档案提取到特定目录的一般命令是:
tar -xf <archive> -C </path/to/destination>
例如,要将我们的egg.tar.gz存档提取到/tmp/cherry,我们可以使用以下命令:
tar -xf egg.tar.gz -C /tmp/cherry
结论
现在您已经了解了使用 .tar 的基础知识tar,您可以像专业人士一样使用“tarballs”。请记住,tar它是灵活的,您可以组合不同的开关来产生不同的结果并调整输出。要深入了解tar,请查看官方GNU tar 手册