如何在 Linux 中創建和管理歸檔文件
簡而言之,歸檔是一個包含一系列文件和(或)目錄的單一文件。歸檔文件通常用於在本地或互聯網上傳輸,或作為一個一系列文件和目錄的備份副本,從而允許你使用一個文件來工作(如果壓縮,則其大小會小於所有文件的總和)。同樣的,歸檔也用於軟體應用程序打包。為了方便傳輸,可以很容易地壓縮這個單一文件,而存檔中的文件會保留原始結構和許可權。
我們可以使用 tar
工具來創建、列出和提取歸檔中的文件。用 tar
生成的歸檔通常稱為「tar 文件」、「tar 歸檔」或者「壓縮包」(因為所有已歸檔的文件被合成了一個文件)。
本教程會展示如何使用 tar
創建、列出和提取歸檔中的內容。這三個操作都會使用兩個公共選項 -f
和 -v
:使用 -f
指定歸檔文件的名稱,使用 -v
(「冗餘」)選項使 tar
在處理文件時輸出文件名。雖然 -v
選項不是必需的,但是它可以讓你觀察 tar
操作的過程。
在本教程的下面部分中,會涵蓋 3 個主題:1、創建一個歸檔文件;2、列出歸檔文件內容;3、提取歸檔文件內容。另外我們會回答歸檔文件管理的 6 個實際問題來結束本教程。你從本教程學到的內容對於執行與網路安全和雲技術相關的任務至關重要。
1、創建一個歸檔文件
要使用 tar
創建一個歸檔文件,使用 -c
(「創建」)選項,然後用 -f
選項指定要創建的歸檔文件名。通常的做法是使用帶有 .tar
擴展名的名稱,例如 my-backup.tar
。注意,除非另有特別說明,否則本文其餘部分中使用的所有命令和參數都以小寫形式使用。記住,在你的終端上輸入本文的命令時,無需輸入每個命令行開頭的 $
提示符。
輸入要歸檔的文件名作為參數;如果要創建一個包含所有文件及其子目錄的歸檔文件,提供目錄名稱作為參數。
要歸檔 project
目錄內容,輸入:
$ tar -cvf project.tar project
這個命令將創建一個名為 project.tar
的歸檔文件,包含 project
目錄的所有內容,而原目錄 project
將保持不變。
使用 -z
選項可以對歸檔文件進行壓縮,這樣產生的輸出與創建未壓縮的存檔然後用 gzip
壓縮是一樣的,但它省去了額外的步驟。
要從 project
目錄創建一個 project.tar.gz
的壓縮包,輸入:
$ tar -zcvf project.tar.gz project
這個命令將創建一個 project.tar.gz
的壓縮包,包含 project
目錄的所有內容,而原目錄 project
將保持不變。
注意: 在使用 -z
選項時,你應該使用 .tar.gz
擴展名而不是 .tar
擴展名,這樣表示已壓縮。雖然不是必須的,但這是一個很好的實踐。
gzip 不是唯一的壓縮形式,還有 bzip2 和 xz。當我們看到擴展名為 .xz
的文件時,我們知道該文件是使用 xz
壓縮的,擴展名為 .bz2
的文件是用 bzip2
壓縮的。隨著 bzip2 不再維護,我們將遠離它而關注 xz。使用 xz
壓縮時,需要花費更長的時間。然而,等待通常是值得的,因為壓縮效果要好的多,這意味著壓縮包通常比使用其它壓縮形式要小。更好的是,不同壓縮形式之間的解壓縮或提取文件並沒有太大區別。下面我們將看到一個使用 tar
壓縮文件時如何使用 xz 的示例:
$ tar -Jcvf project.tar.xz project
我們只需將 gzip
的 -z
選項轉換為 xz
的大寫 -J
即可。以下是一些輸出,顯示壓縮形式之間的差異:
如你所見,xz
的壓縮時間最長。但是,它在減小文件大小方面做的最好,所以值得等待。文件越大,壓縮效果也越好。
2、列出歸檔文件的內容
要列出 tar 歸檔文件的內容但不提取,使用 -t
選項。
要列出 project.tar
的內容,輸入:
$ tar -tvf project.tar
這個命令列出了 project.tar
歸檔的內容。-v
和 -t
選項一起使用會輸出每個文件的許可權和修改時間,以及文件名。這與 ls
命令使用 -l
選項時使用的格式相同。
要列出 project.tar.gz
壓縮包的內容,輸入:
$ tar -tzvf project.tar.gz
3、從歸檔中提取內容
要提取(解壓)tar 歸檔文件中的內容,使用 -x
(「提取」)選項。
要提取 project.tar
歸檔的內容,輸入:
$ tar -xvf project.tar
這個命令會將 project.tar
歸檔的內容提取到當前目錄。
如果一個歸檔文件被壓縮,通常來說它的擴展名為 .tar.gz
或 .tgz
,請包括 "-z" 選項。
要提取 project.tar.gz
壓縮包的內容,輸入:
$ tar -zxvf project.tar.gz
注意: 如果當前目錄中有文件或子目錄與歸檔文件中的內容同名,那麼在提取歸檔文件時,這些文件或子目錄將被覆蓋。如果你不知道歸檔中包含哪些文件,請考慮先查看歸檔文件的內容。
在提取歸檔內容之前列出其內容的另一個原因是,確定歸檔中的內容是否包含在目錄中。如果沒有,而當前目錄中包含許多不相關的文件,那麼你可能將它們與歸檔中提取的文件混淆。
要將文件提取到它們自己的目錄中,新建一個目錄,將歸檔文件移到該目錄,然後你就可以在新目錄中提取文件。
FAQ
現在我們已經學習了如何創建歸檔文件並列出和提取其內容,接下來我們可以繼續討論 Linux 專業人員經常被問到的 9 個實用問題。
可以在不解壓縮的情況下添加內容到壓縮包中嗎?
很不幸,一旦文件將被壓縮,就無法向其添加內容。你需要解壓縮或提取其內容,然後編輯或添加內容,最後再次壓縮文件。如果文件很小,這個過程不會花費很長時間,否則請等待一會。
可以在不解壓縮的情況下刪除歸檔文件中的內容嗎?
這取決壓縮時使用的 tar 版本。較新版本的 tar
支持 -delete
選項。
例如,假設歸檔文件中有 file1
和 file2
,可以使用以下命令將它們從 file.tar
中刪除:
$ tar -vf file.tar –delete file1 file2
刪除目錄 dir1
:
$ tar -f file.tar –delete dir1/*
壓縮和歸檔之間有什麼區別?
查看歸檔和壓縮之間差異最簡單的方法是查看其解壓大小。歸檔文件時,會將多個文件合併為一個。所以,如果我們歸檔 10 個 100kb 文件,則最終會得到一個 100kb 大小的文件。而如果壓縮這些文件,則最終可能得到一個只有幾 kb 或接近 100kb 的文件。
如何壓縮歸檔文件?
如上所說,你可以使用帶有 cvf
選項的 tar
命令來創建和歸檔文件。要壓縮歸檔文件,有兩個選擇:通過壓縮程序(例如 gzip
)運行歸檔文件,或在使用 tar
命令時使用壓縮選項。最常見的壓縮標誌 -z
表示 gzip
,-j
表示 bzip
,-J
表示 xz
。例如:
$ gzip file.tar
或者,我們可以在使用 tar
命令時使用壓縮標誌,以下命令使用 gzip
標誌 z
:
$ tar -cvzf file.tar /some/directory
如何一次創建多個目錄和/或文件的歸檔?
一次要歸檔多個文件,這種情況並不少見。一次歸檔多個文件和目錄並不像你想的那麼難,你只需要提供多個文件或目錄作為 tar 的參數即可:
$ tar -cvzf file.tar file1 file2 file3
或者
$ tar -cvzf file.tar /some/directory1 /some/directory2
創建歸檔時如何跳過目錄和/或文件?
你可能會遇到這樣的情況:要歸檔一個目錄或文件,但不是所有文件,這種情況下可以使用 --exclude
選項:
$ tar –exclude 『/some/directory』 -cvf file.tar /home/user
在示例中,/home/user
目錄中除了 /some/directory
之外都將被歸檔。將 --exclude
選項放在源和目標之前,並用單引號將要排除的文件或目錄引起來,這一點很重要。
總結
tar
命令對展示不需要的文件創建備份或壓縮文件很有用。在更改文件之前備份它們是一個很好的做法。如果某些東西在更改後沒有按預期正常工作,你始終可以還原到舊文件。壓縮不再使用的文件有助於保持系統乾淨,並降低磁碟空間使用率。還有其它實用程序可以歸檔或壓縮,但是 tar
因其多功能、易用性和受歡迎程度而獨佔鰲頭。
資源
如果你想了解有關 Linux 的更多信息,強烈建議閱讀以下文章和教程:
- Linux 文件系統架構和管理綜述
- Linux 文件和目錄系統工作原理的全面回顧
- 所有 Linux 系統發行版的綜合列表
- 特殊用途 Linux 發行版的綜合列表
- Linux 系統管理指南 - 製作和管理備份操作的最佳實踐
- Linux 系統管理指南 - Linux 虛擬內存和磁碟緩衝區緩存概述
- Linux 系統管理指南 - 監控 Linux 的最佳實踐
- Linux 系統管理指南 - Linux 啟動和關閉的最佳實踐
關於作者
Matt Zand 是一位創業者,也是 3 家科技創業公司的創始人: DC Web Makers、Coding Bootcamps 和 High School Technology Services。他也是 使用 Hyperledger Fabric 進行智能合約開發 一書的主要作者。他為 Hyperledger、以太坊和 Corda R3 平台編寫了 100 多篇關於區塊鏈開發的技術文章和教程。在 DC Web Makers,他領導了一個區塊鏈專家團隊,負責諮詢和部署企業去中心化應用程序。作為首席架構師,他為編碼訓練營設計和開發了區塊鏈課程和培訓項目。他擁有馬里蘭大學工商管理碩士學位。在區塊鏈開發和諮詢之前,他曾擔任一些初創公司的高級網頁和移動應用程序開發和顧問、天使投資人和業務顧問。你可以通過以下這個網址和他取得聯繫: https://www.linkedin.com/in/matt-zand-64047871。
Kevin Downs 是 Red Hat 認證的系統管理員和 RHCSA。他目前在 IBM 擔任系統管理員,負責管理數百台運行在不同 Linux 發行版上的伺服器。他是編碼訓練營的首席 Linux 講師,並且他會講授 5 個自己的課程。
via: https://www.linux.com/news/how-to-create-and-manage-archive-files-in-linux-2/
作者:LF Training 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive