歸檔、壓縮和提取文件是 Linux 管理員最常見的一些任務(wù)。如果您曾經(jīng)使用過具有 .tar、.tar.gz、.xz 或 .bz2 擴展名的“tarball”文件,那么它很可能是使用 .tar 實用程序創(chuàng)建的。在本文中,我們將演示如何使用該tar實用程序在 Linux 系統(tǒng)上歸檔、壓縮和提取文件。我們將使用 Ubuntu 20.04 作為所有示例,但您可以在任何使用tar.
什么是焦油?
tar— “磁帶存檔”的縮寫 — 是一個用于創(chuàng)建和提取存檔的 GNU 命令行工具。
存檔是包含多個文件或目錄的單個文件。在開源和 Linux 社區(qū)中,tarball 是分發(fā)源代碼和其他重要文件的最常用方法之一。
除了創(chuàng)建檔案外,tar還可以使用多種不同的壓縮實用程序(例如gzip和bzip2.
tar 與 gzip
在處理 Linux 歸檔文件時,您可能經(jīng)常在類似的上下文中聽說過tar和。gzip
這兩個工具的基本區(qū)別是:在壓縮文件
tar的同時從多個文件創(chuàng)建存檔。gzip
然而,這些工具并不相互排斥。tar可以gzip用來壓縮它歸檔的文件。tar的z開關(guān)使tar命令使用gzip。
gzip 與 bzip2 與 xz 壓縮
gzip不是唯一tar可以使用的壓縮程序。它還支持bzip2和xz。下表詳細(xì)說明了這些壓縮工具之間的一些基本區(qū)別。
壓縮包 | bzip2 | xz | |
---|---|---|---|
壓縮算法 | 放氣 | 伯羅斯-惠勒 | LZMA |
常用文件擴展名 | .tar.gz、.tgz、.gz | 焦油.bz2, .bz2 | 焦油.xz,.xz |
tar命令開關(guān) | -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>
以下是每個開關(guān)的含義:
- c- 創(chuàng)建檔案。
- z- 通過運行存檔gizp。
- v- 詳細(xì)列出文件。
- 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開關(guān)而是使用命令tar -czf egg.tar.gz /pepper,輸出將不會包括每個文件。相反,它看起來類似于此
tar: Removing leading `/' from member names
如果沒有錯誤或需要從成員名稱中刪除的字符——例如,如果我們正在壓縮當(dāng)前工作目錄中的文件——則不會有輸出。
注意:tar指定開關(guān)的方法不止一種。您會注意到我們-在指定tar開關(guān)之前使用。雖然這是一個常見的約定,但通常并不需要。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
歸檔時如何排除目錄和文件
如果您指定一個目錄來創(chuàng)建存檔,則可能有一些文件要從存檔中排除。該--exclude選項允許您指定要從存檔中排除的模式。
任何與傳遞給--exclude選項的模式相匹配的文件都不會包含在存檔tar創(chuàng)建中。
tar從存檔中排除文件的一般命令是:
tar --exclude=<PATTERN> <Options> <archive name> </path/to/directory>
例如,假設(shè)我們的/pepper目錄中有這些文件:
- 一個.txt
- 二.mp4
- 三.iso
- 四.日志
- 輸出.log
我們希望將除 .log 文件之外的所有內(nèi)容壓縮到egg.tar.gz存檔中。我們可以使用這個命令:
tar --exclude='*.log' -czvf egg.tar.gz /pepper
如果需要,您可以--exclude在單個命令中指定多個模式。
如何將文件添加到現(xiàn)有存檔
如果你有一個現(xiàn)有的檔案并且你想向它添加文件,你可以使用-r或--append選項。附加到 .tar 檔案的一般命令是:
tar -rf <tar archive> </path/to/file>
但是,-r與--append壓縮檔案不兼容。這意味著您只能將它們與未通過壓縮程序(如 、 或 )運行的 tarballgzip一起bzip2使用xz。
如果您嘗試在壓縮存檔上使用-r或--append,您可能會看到類似于以下內(nèi)容的錯誤:
tar: Cannot update compressed archives tar: Error is not recoverable: exiting now
由于此限制以及 和 的其他一些細(xì)微差別-r,--append在許多情況下,使用附加文件創(chuàng)建新存檔會更容易。
如何列出檔案的內(nèi)容
-t您可以使用或--list選項列出存檔的內(nèi)容。列出檔案內(nèi)容的一般命令是:
tar -tvf <archive>
和選項適用于壓縮和未壓縮的檔案-t。?--list
例如,要列出egg.tar.xz當(dāng)前工作目錄中存檔的內(nèi)容,請運行以下命令:
tar -tvf egg.tar.xz
如何提取檔案
tar的-x開關(guān)用于提取檔案。在 Linux 中提取存檔的一般命令是:
tar -xf <archive>
該tar -xf命令適用于壓縮和未壓縮的檔案。
例如,要egg.tar.gz在我們當(dāng)前的工作目錄中提取一個檔案,我們可以使用這個命令:
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 手冊