歸檔、target="_blank">壓縮和提取文件是 Linux 管理員最常見的一些任務(wù)。如果您曾經(jīng)使用過具有 .tar、.tar.gz、.xz 或 .bz2 擴(kuò)展名的“tarball”文件,那么它很可能是使用 .tar 實(shí)用程序創(chuàng)建的。在本文中,我們將演示如何使用該tar實(shí)用程序在 Linux 系統(tǒng)上歸檔、壓縮和提取文件。我們將使用 Ubuntu 20.04 作為所有示例,但您可以在任何使用tar.
什么是焦油?
tar— “磁帶存檔”的縮寫 — 是一個(gè)用于創(chuàng)建和提取存檔的 GNU 命令行工具。
存檔是包含多個(gè)文件或目錄的單個(gè)文件。在開源和 Linux 社區(qū)中,tarball 是分發(fā)源代碼和其他重要文件的最常用方法之一。
除了創(chuàng)建檔案外,tar還可以使用多種不同的壓縮實(shí)用程序(例如gzip和bzip2.
tar 與 gzip
在處理 Linux 歸檔文件時(shí),您可能經(jīng)常在類似的上下文中聽說過tar和。gzip
這兩個(gè)工具的基本區(qū)別是:在壓縮文件
tar的同時(shí)從多個(gè)文件創(chuàng)建存檔。gzip
然而,這些工具并不相互排斥。tar可以gzip用來壓縮它歸檔的文件。tar的z開關(guān)使tar命令使用gzip。
gzip 與 bzip2 與 xz 壓縮
gzip不是唯一tar可以使用的壓縮程序。它還支持bzip2和xz。下表詳細(xì)說明了這些壓縮工具之間的一些基本區(qū)別。
| 壓縮包 | bzip2 | xz | |
|---|---|---|---|
| 壓縮算法 | 放氣 | 伯羅斯-惠勒 | LZMA |
| 常用文件擴(kuò)展名 | .tar.gz、.tgz、.gz | 焦油.bz2, .bz2 | 焦油.xz,.xz |
| tar命令開關(guān) | -z | -j | -J |
一般來說,從壓縮和性能的角度來看,gzip和是可比的,但使用更廣泛。往往會提供最佳的整體壓縮,但也需要更多的時(shí)間和計(jì)算資源。bzip2gzip.xz
注意:在我們的示例中,我們將專注于使用gzip.?在命令中替換-z為-j將使用bzip2而不是 gzip。使用-Jinstead of-z將使用xzinstead of?gzip。
如何壓縮單個(gè)文件或目錄
在 Linux 中壓縮單個(gè)文件或目錄的一般命令是:
tar -czvf <archive name> </path/to/file/or/directory>
以下是每個(gè)開關(guān)的含義:
- c- 創(chuàng)建檔案。
- z- 通過運(yùn)行存檔gizp。
- v- 詳細(xì)列出文件。
- f- 使用特定的存檔文件。
例如,要將/pepper目錄壓縮到名為 的存檔egg.tar.gz,請運(yùn)行以下命令:
tar -czvf egg.tar.gz /pepper
輸出將類似于:
tar: Removing leading `/' from member names /pepper/ /pepper/pepperAndegg.log /pepper/pepperAndEgg.txt /pepper/pepperandegg.log

如果我們省略v開關(guān)而是使用命令tar -czf egg.tar.gz /pepper,輸出將不會包括每個(gè)文件。相反,它看起來類似于此
tar: Removing leading `/' from member names
如果沒有錯(cuò)誤或需要從成員名稱中刪除的字符——例如,如果我們正在壓縮當(dāng)前工作目錄中的文件——則不會有輸出。
注意:tar指定開關(guān)的方法不止一種。您會注意到我們-在指定tar開關(guān)之前使用。雖然這是一個(gè)常見的約定,但通常并不需要。tar czvf <archive name> </path/to/file/or/directory>也會工作。一樣會tar -cf <archive name> -vz </path/to/file/or/directory>。tar我們將堅(jiān)持我們在其余示例中使用的約定,但請記住,指定選項(xiàng)的方法不止一種。
如何將多個(gè)文件或目錄壓縮到一個(gè)存檔
在 Linux 中壓縮單個(gè)文件或目錄的一般命令是:
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,請運(yùn)行以下命令:
tar -czvf egg.tar.gz one.txt two.mp4 three.iso

歸檔時(shí)如何排除目錄和文件
如果您指定一個(gè)目錄來創(chuàng)建存檔,則可能有一些文件要從存檔中排除。該--exclude選項(xiàng)允許您指定要從存檔中排除的模式。
任何與傳遞給--exclude選項(xiàng)的模式相匹配的文件都不會包含在存檔tar創(chuàng)建中。
tar從存檔中排除文件的一般命令是:
tar --exclude=<PATTERN> <Options> <archive name> </path/to/directory>
例如,假設(shè)我們的/pepper目錄中有這些文件:
- 一個(gè).txt
- 二.mp4
- 三.iso
- 四.日志
- 輸出.log
我們希望將除 .log 文件之外的所有內(nèi)容壓縮到egg.tar.gz存檔中。我們可以使用這個(gè)命令:
tar --exclude='*.log' -czvf egg.tar.gz /pepper

如果需要,您可以--exclude在單個(gè)命令中指定多個(gè)模式。
如何將文件添加到現(xiàn)有存檔
如果你有一個(gè)現(xiàn)有的檔案并且你想向它添加文件,你可以使用-r或--append選項(xiàng)。附加到 .tar 檔案的一般命令是:
tar -rf <tar archive> </path/to/file>
但是,-r與--append壓縮檔案不兼容。這意味著您只能將它們與未通過壓縮程序(如 、 或 )運(yùn)行的 tarballgzip一起bzip2使用xz。
如果您嘗試在壓縮存檔上使用-r或--append,您可能會看到類似于以下內(nèi)容的錯(cuò)誤:
tar: Cannot update compressed archives tar: Error is not recoverable: exiting now
由于此限制以及 和 的其他一些細(xì)微差別-r,--append在許多情況下,使用附加文件創(chuàng)建新存檔會更容易。
如何列出檔案的內(nèi)容
-t您可以使用或--list選項(xiàng)列出存檔的內(nèi)容。列出檔案內(nèi)容的一般命令是:
tar -tvf <archive>
和選項(xiàng)適用于壓縮和未壓縮的檔案-t。?--list
例如,要列出egg.tar.xz當(dāng)前工作目錄中存檔的內(nèi)容,請運(yùn)行以下命令:
tar -tvf egg.tar.xz

如何提取檔案
tar的-x開關(guān)用于提取檔案。在 Linux 中提取存檔的一般命令是:
tar -xf <archive>
該tar -xf命令適用于壓縮和未壓縮的檔案。
例如,要egg.tar.gz在我們當(dāng)前的工作目錄中提取一個(gè)檔案,我們可以使用這個(gè)命令:
tar -xf egg.tar.gz

如何將檔案提取到特定目錄
在某些情況下,您可能希望將文件提取到當(dāng)前工作目錄以外的目錄中。tar的-C開關(guān)在這種情況下很有用。
將檔案提取到特定目錄的一般命令是:
tar -xf <archive> -C </path/to/destination>
例如,要將我們的egg.tar.gz存檔提取到/tmp/cherry,我們可以使用以下命令:
tar -xf egg.tar.gz -C /tmp/cherry

結(jié)論
現(xiàn)在您已經(jīng)了解了使用 .tar 的基礎(chǔ)知識tar,您可以像專業(yè)人士一樣使用“tarballs”。請記住,tar它是靈活的,您可以組合不同的開關(guān)來產(chǎn)生不同的結(jié)果并調(diào)整輸出。要深入了解tar,請查看官方GNU tar 手冊














