【Linux】打包命令——tar

?打包和壓縮

雖然打包和壓縮都涉及將多個文件組合成單個實體,但它們之間存在重要差異。

打包和壓縮的區別

  1. 打包是將多個文件或目錄組合在一起,但不對其進行壓縮。這意味著打包后的文件大小可能與原始文件相同或更大。此外,打包后的文件仍然可以直接訪問其中的每個文件。
  2. 壓縮是將一個或多個文件通過特定算法壓縮成一個更小的文件。這通常會減小該實體的大小,并且需要特殊工具才能訪問其中的內容。

在Linux中,? gzip、bzip2、xz大多僅能針對單一文件來進行壓縮,雖然gzip、bzip2、xz也能夠針對目錄來進行壓縮,不過,這三個命令對目錄的壓縮指的是將目錄內的所有文件【分別】進行壓縮的操作。

而不像在Windows的系統,可以使用類似WinRAR這一類的壓縮軟件來將好多數據打包成一個文件的樣式

????????這種將多個文件或目錄包成一個大文件的命令功能,我們可以稱它是一種打包命令,那Linux有沒有這種打包命令?

有,那就是鼎鼎大名的tar,tar 可以將多個目錄或文件打包成一個大文件,同的還可以通過gzip、bzip2、xz的支持,將該文件同時進行壓縮。

????????更有趣的是,由于tar的使用太廣泛了,目前Windows的WinRAR也支持.tar.gz文件名的解壓縮。很不錯吧!所以下面我們就來玩一玩這個東西。

1.tar

tar的選項與參數非常多,我們只講幾個常用的選項,更多選項您可以自行man tar查詢。

  1. 打包與壓縮:tar [-z | -j | -J] [ cv ] [ -f 待建立的新文件名]? filename...? ? ? ?
  2. 查看文件名:tar [-z | -j | -J]? [ tv ]? [ -f 既有的 tar文件名]
  3. 解壓縮:tar [-z |? -j |? -J] [ xv ] [-f? ?既有的 tar 文件名]? ?[-C 目錄]

選項與參數:

  1. -c:建立打包文件,可搭配 -v 來查看過程中被打包的文件名(filename)
  2. -t:查看打包文件的內容含有哪些文件名,重點在查看【文件名】
  3. -x:解包或解壓縮的功能,可以搭配-C(大寫)在特定目錄解壓,特別留意的是,-c、-t、-x不可同時出現在一串命令行中:
  4. -z:通過 gzip 的支持進行壓縮/解壓縮:此時文件名最好為 *.tar.gz;
  5. -j:通過 bzip2的支持進行壓縮/解壓縮:此時文件名最好為*.tar.bz2;
  6. -J:通過xz的支持進行壓縮/解壓縮:此時文件名最好為*.tar.xz,特別留意,-z、-j、-J不可以同時出現在一串命令行中
  7. -v:在壓縮/解壓縮的過程中,將正在處理的文件名顯示出來;
  8. -f filename-f 后面要立刻接著 被打包后的新文件的文件名,建議-f單獨寫一個選項。(比較不會忘記);
  9. -C 目錄:這個選項用在解壓縮、若要在特定目錄解壓縮、可以使用這個選項。

其他后續練習會使用到的選項介紹:

  1. -p(小寫):保留備份數據的原本權限與屬性、常用于備份(-c)重要的配置文件;
  2. -P(大寫):保留絕對路徑,亦即允許備份數據中含有根目錄存在之意;
  3. --exclude=FILE:在壓縮的過程中,不要將 FILE打包;

其實最簡單的使用tar就只要記住下面的命令即可:

  1. 壓縮:tar -jcv -f? filename.tar.bz2? ? 要被壓縮的文件或目錄名稱;
  2. 查詢:tar -jtv -f filename.tar.bz2;
  3. 解壓縮:tar -jxv -f filename.tar.bz2? -C? 欲解壓縮的目錄。

那個filename.tar.bz2是打完包的新文件的文件名,是我們自己取的文件名,tar并不會主動的產生建立的文件名,我們要自定義,所以擴展名就顯的很重要了。

  1. 如果不加[-z | -j | -J]的話,文件拓展名最好取為tar即可。
  2. 如果是-j選項,代表有bzip2的支持,因此文件拓展名最好就取為.tar.bz2,因為bzip2會產生.bz2的擴展名之故。
  3. 如果是-J選項,代表有xz的支持,文件拓展名最好取為.tar.xz
  4. 至于如果是加上了-z的gzip的支持,那文件拓展名最好為.tar.gz

另外,由于 【-f filename】是緊接在一起的,

  • 過去很多文章常會寫成【-jcvf filename 】,這樣是對的,
  • 但由于選項的順序理論上是可以變換的,所以很多讀者會誤認為【-jvfc filename】也可以,事實上這樣會導致產生的文件名變成c,因為-fc嘛。

所以,建議您在學習tar時,將【-f filename】與其他選項獨立出來,會比較不容易發生問題。

就像下面這樣子

閑話少說,讓我們來測試幾個常用的tar方法。

1.1.使用tar加入-z、-j或-J的參數備份/etc/目錄

有事沒事備份一下/etc這個目錄是件好事,備份/etc最簡單的方法就是使用tar,讓我們先來玩玩:

因為備份/etc 需要 root 的權限,否則會出現一堆錯誤.

1.1.1.-z選項

我們先看-z選項——也就是使用gzip來壓縮的

下面是命令的解釋:

  • tar:這是用于打包和壓縮文件的命令。
  • -z:表示使用gzip進行壓縮。
  • -p:保留原有文件的權限。
  • -c?:創建一個新的打包文件
  • -v:顯示命令執行過程中的詳細信息。
  • -f :/root/etc.tar.gz:指定輸出文件的路徑和文件名,這里是 /root/etc.tar.gz 。
  • /etc:指定要打包的目錄,這里是 /etc目錄。

也就是說/etc的文件被打包到/root里面去了,叫/etc.tar.gz

執行完

?怎么樣?是不是如我所說

我們回到上面那個time tar -zpcv -f /root/etc.tar.gz /etc的執行?

注意這個警告啊,我們1.2節會講解

?多了time 會顯示程序運行的時間,看 real就好了,花去了1.616s.

  1. 由于加上-v這個選項,因此正在作用中的文件名就會顯示在屏幕上。
  2. 你會發現出現上面的錯誤信息,下面會講解。
  3. 至于-p的選項,重點在于【保留原本文件的權限與屬性】之意。

1.1.2.-j選項

我們再看看-j選項——也就是使用bzip2進行壓縮的

我們執行一下

用時2.089秒啊

1.1.3.-J選項

我們看看-J選項啊,也就是使用xz進行壓縮的


顯示的信息會跟上面一模一樣,不過時間會花比較多,使用了-J時,會花更多時間。

1.1.4.總結

我們來到/root目錄下面看一下結果啊

實際目錄約占有25MB的意思。
?

壓縮比越好當然要花費的運算時間越多。

  1. 我們從上面可以看到,雖然使用gzip的速度相當快,總時間花費不到1秒,但是壓縮率最糟糕。
  2. 如果使用xz的話,雖然壓縮比最佳,不過竟然花了11秒的時間。這還僅是備份25MB的/etc而已,如果備份的數據很大,那你真的要考慮時間成本才行。

至于加上【-p】這個選項的原因是為了保存原本文件的權限與屬性。我們知道權限與文件類型(例如鏈接文件)對復制的不同影響。

同樣的,在備份重要的系統數據時,這些原本文件的權限需要做完整的備份比較好。

此時-p這個選項就派的上用場了

1.2.查看tar 文件的數據內容(可查看文件名),與備份文件名有否根目錄的意義

我們在開頭說了打包了可以進去看看,那現在讓我們看著打包文件內有什么數據存在?

要查tar 文件內部的文件列表非常的簡單,可以這樣做:

我們拿我們已經打包好的/root/etc.tar.bz2來試試

………(前面省略)……

????????如果加上-v這個選項時,詳細的文件權限/屬性都會被列出來。如果只是想要知道文件名而已那么就將-v拿掉即可。

從上面的數據我們可以發現一件很有趣的事情,那就是每個文件名都沒了根目錄。

這也是上一個練習中出現的那個警告信息所告知的情況。

那為什么要去掉根目錄?

主要是為了安全。

????????我們使用tar備份的數據可能會需要解壓縮回來使用,在tar 所記錄的文件名(就是我們剛剛使用tar-jtvf所查看到的文件名)那就是解壓縮后的實際文件名。

????????如果拿掉了根目錄,假設你將備份數據在/tmp 解開,那么解壓縮的文件名就會變成【/tmp/etc/xxx】,但如果沒有去掉根目錄,解壓縮后的文件名就會是絕對路徑,即解壓縮后的數據一定會被放置到/etc/xxx去,如此一來,你的原本的/etc/下面的數據,就會被備份數據所覆蓋。

你會說,既然是備份數據,那么還原回來也沒有什么問題吧?

????????想象一個狀況,你備份的數據是兩年前的舊版CentOS6.x,你只是想要了解一下過去的備份內容究竟有哪些數據而已,結果一解開該文件,卻發現你目前新版的CentOS7.x下面的/etc 被舊版的備份數據覆蓋。

????????此時你該如何是好?大概除了哭你也不能做啥事吧?

所以,當然是拿掉根目錄比較安全一些。

如果你確定你就是需要備份根目錄到tar的文件中,那可以使用-P(大寫)這個選項,請看下面的例子分析:

  • -P:保留絕對路徑,亦是允許備份數據中含有根目錄的存在

范例:將文件名中的(根)目錄也備份下來,并查看一下備份文件的內容文件名。

我們先把/etc目錄備份(帶上根目錄式的備份)到/root下面的一個叫etc.and.root.bz2

我們來查看一下這個打包文件里是什么

# 這次查看文件名不含-v選項,所以僅有文件名而已,沒有詳細屬性/權限等參數.

有發現不同點了吧?如果加上-P選項,那么文件名內的根目錄就會存在。

不過,個人建議。還是不要加上-P這個選項來備份。

????????畢竟很多時候,我們備份是為了要未來追蹤問題用的,倒不一定需要還原回原本的系統中。所以拿掉根目錄后,備份數據的應用會比較有彈性,也比較安全。

1.3.將備份的數據解壓縮,并考慮特定目錄的解壓縮操作(-C選項的應用)

那如果想要解打包?

很簡單的操作就是直接進行解打包嘛。


………(前面省略)……

此時該打包文件會在本目錄(我的是/root)下進行解壓縮的操作。

所以,你等一下就會在根目錄下面發現一個名為etc的目錄。

所以,如果你想要將該文件在/tmp下面解開,可以cd/tmp后,再執行上述的命令即可。

不過,這樣好像很麻煩,有沒有更簡單的方法可以指定欲解開的目錄?

有,可以使用-C 這個選項

  • -C 目錄:這個選項用在解壓縮、若要在特定目錄解壓縮、可以使用這個選項。


這樣一來,你就能夠將該文件在不同的目錄解開,鳥哥個人是認為,這個-C的選項務必要記憶
一下,好了,處理完畢后,

請記得將這兩個目錄刪除一下。


再次強調,這個【rm-rf】是很危險的命令,執行時請務必要確認一下后面接的文件名,我們要
刪除的是/root/etc與/tmp/etc,您可不要將/etc/刪除了,系統會死掉的。

1.4.僅解開單一文件的方法

剛剛上面我們解壓縮都是將整個打包文件的內容全部解開。

想象一個情況,如果我只想要解開打包文件內的其中一個文件而已,那該如何做?

很簡單,你只要使用-jtv找到你要的文件名,然后將該文件名解開即可,我們用下面的例子來說明一下:

# 1、先找到我們要的文件名,

假設解開 shadow 文件。

先查找重要的文件名,其中那個 grep是截取關鍵詞的功能.

這里您先有個概念即可,那個管道 | 配合grep 可以截取關鍵詞的意思。

2.將該文件解開,語法與實際做法如下。

tar -jxv -f 打包文件.tar.bz2 待解開文件名

這個單一文件被解開到當前目錄來了



很有趣。此時只會解開一個文件而已不過,重點是那個文件名,你要找到正確的文件名。
在本例中,你不能寫成/etc/shadow,因為記錄在etc.tar.bz2內的并沒有/。

????????在這個練習之前,你可能要先將前面練習所產生的/root/etc刪除才行/root/etc/shadow會重復存在,而其他的前面實驗的文件也會存在,那就看不出什么了。

1.5.打包某目錄,但不含該目錄下的某些文件之做法

????????假設我們想要打包 /etc/? ? ?/root 這幾個重要的目錄,但卻不想要打包/root/etc*開頭的文件,因為該文件都是剛剛我們才建立的備份文件。

????????而且假設這個新的打包文件要放置為/root/system.tar.bz2,當然這個文件自己不要打包自己(因為這個文件放置在/root 下面),此時我們可以通過-—exclude的幫忙。

  • --exclude=FILE:在壓縮的過程中,不要將 FILE打包;

這個exclude就是不包含的意思,所以你可以這樣做:

上面的命令其實是一整列,不過為了方便,我改成了兩行輸入

如果想要兩行輸入時,最后面加上反斜杠(\)并立刻按下[Enter],就能夠到第二行繼續輸入了

通過這個--exclude="file"的操作,我們可以將幾個特殊的文件或目錄排除在打包之列,讓打包的操作變的更簡便。

1.6.僅備份比某個時刻還要新的文件

某些情況下你會想要備份新的文件而已,并不想要備份舊文件,此時--newer-mtime 這個選項就很重要。

其實有兩個選項,一個是【--newer 】,另一個就是【--newer-mtime】,這兩個選項有何不同?

我們在touch介紹中談到過三種不同的時間參數,

  • 當使用--newer時,表示后續的日期包含mtime與ctime,
  • 而--newer-mtime 則僅是mtime而已

這樣知道了吧!那就讓我們來嘗試處理一下。

1.先由find找出比/etc/passwd還要新的文件。

?#此時會顯示出比/etc/passwd這個文件的mtime還要新的文件名
#這個結果在每臺主機都不相同,您先自行查看自己的主機即可,不會跟我的一樣。


好了,那么使用tar 來進行打包吧!日期為上面看到的2024/07/07

?最后行顯示的是【沒有被備份的】,亦即not dumped的意思

3.顯示出文件即可


通過這個命令可以調用出tar.bz2內的結尾非/的文件名,就是我們要的。

????????現在你知道這個命令的好用了吧!

????????甚至可以進行差異文件的記錄與備份,這樣的備份就會顯得更容易。你可以這樣想象,如果我在一個月前才進行過一次完整的數據備份,那么這個月想要備份時,當然可以僅備份上個月進行備份的那個時間點之后的更新的文件即可。

為什么?

因為原本的文件已經有備份了,干嘛還要進行一次?只要備份新數據即可,這樣可以降低備份的容量。


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42577.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win10精英控制器2代青春版 設備刪除失敗,藍牙連接斷斷續續

前提 更新了主板rog z790帶WiFi、藍牙,但是精英控制器連上老師斷斷續續。 過程 在設備管理中嘗試了卸載、重裝主板對應的藍牙驅動,怎么都不行,都已經想放棄了。 但是想起來之前主板沒有藍牙,用的是綠聯的USB藍牙接收器&#xf…

Ubuntu24.04修改系統的環境變量

apache/tomcat配置要用到JDK,使用torch有時也會用到系統庫,涉及到環境變量 1. 查看環境變量 cat /etc/environment2. 新建環境變量 sudo nano /etc/environment在文件底部添加新的環境變量 MY_VARIABLE"your_value"3. 修改環境變量 臨時—…

數字化精益生產系統--APS 排程管理系統

APS(Advanced Planning and Scheduling)排程管理系統,即高級生產計劃與排程系統,是一種高度智能化的計劃和排程系統。它通過整合各種生產和供應鏈數據,運用先進的算法和數據模型,根據各種約束條件&#xff…

MySQL篇三:數據類型

文章目錄 前言1. 數值類型1.1 tinyint類型1.2 bit類型1.3 小數類型1.3.1 float1.3.2 decimal 2. 字符串類型2.1 char2.2 varchar2.3 char和varchar比較 3. 日期類型4. enum和set 前言 數據類型分類: 1. 數值類型 1.1 tinyint類型 在MySQL中,整型可以指…

排隊系統、Head and Tail of the Queue 題目

題目 JAVA40 排隊系統描述輸入描述:輸出描述: 分析:代碼: JAVA41 Head and Tail of the Queue(隊列的頭和尾)描述輸入描述:輸出描述: 示例:分析:代碼:大佬代碼…

【Java13】包

“包”這個機制,類似于分組。主要作用是區分不同組內的同名類。例如,高三三班有一個“王五”,高二八班也有一個“王五”。高三三班和高三八班就是兩個不同的包。 Java中的包(package)機制主要提供了類的多層命名空間&…

MISRA C2012學習筆記(6)-Rules 8.11

文章目錄 8.11 指針類型轉換(Pointer type conversions)Rule 11.1 不能在函數指針和任何其他類型指針之間進行轉換Rule 11.2 不得在指向不完整類型的指針和其他任何類型間進行轉換Rule 11.3 不得在指向不同對象類型的指針之間執行強制轉換Rule 11.4 不得在指向對象的指針和整數…

HTTP長連接

長連接優點 HTTP為什么要開啟長連接呢? 主要是為了節省建立的時間,請求可以復用同一條TCP鏈路,不用重復進行三握+四揮 如果沒有長連接,每次請求都做三握+四揮 如果有長鏈接,在一個 TCP 連接中可以持續發送多份數據而不會斷開連接,即請求可以復用TCP鏈路 長連接缺點 …

第六十八回 東平府誤陷九紋龍 宋公明義釋雙槍將-文心大模型ernie-speed免費使用方法

宋江和盧俊義抓鬮兒,宋江打東平府,盧俊義打東昌府,誰先打下誰做梁山泊主。宋江帶領林沖、花榮、劉唐等二十八人,盧俊義帶領吳用、公孫勝、關勝等二十八人。 宋江等人到了東平府外安山鎮,郁保四和王定六自告奮勇去下戰…

比Elasticsearch更高效的開源搜索引擎Meilisearch——筑夢之路

功能說明 快速與高效: Meilisearch 旨在提供快速的搜索速度。它可以在毫秒級別內返回查詢結果,即使在處理大型數據集時也是如此。 例如,在官方提供的基準測試中,使用 Meilisearch 處理 10 萬個文檔時,平均搜索時間為 …

vue3制作輪播圖+vue輪播圖的圖片引入方式

對應的<teemplate> <template><div class"box"><ul class"ul1" ref"ul1"><li v-for"(img, idx) in images" :key"idx" :style"{ zIndex: img.zIndex }"><img :src"img.s…

深度學習驅動的中文情感分析:PlugLink 在實踐中的橋梁作用

深度學習驅動的中文情感分析&#xff1a;PlugLink 在實踐中的橋梁作用 情感分析技術則如同濾網&#xff0c;幫助我們從這股洪流中篩選出有價值的情感信號。特別是對于中文這樣的多音字、同音詞豐富且語境復雜度高的語言&#xff0c;深度學習模型展現了無與倫比的優勢。本文將以…

代碼隨想錄第45天|動態規劃

300.最長遞增子序列 參考 dp[i] 表示以 i 為結尾的最長遞增子序列長度遞推公式: 使用 i 和 j 判斷 dp[i] max(dp[j] 1, dp[i])每次 j 都需要從頭遍歷 初始化: dp[i] 1 class Solution { public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums…

基于STM32設計的管道有害氣體檢測裝置(ESP8266局域網)176

基于STM32設計的管道有害氣體檢測裝置(176) 文章目錄 一、前言1.1 項目介紹【1】項目功能介紹【2】項目硬件模塊組成【3】ESP8266模塊配置【4】上位機開發思路【5】項目模塊劃分【6】LCD顯示屏界面布局【7】上位機界面布局1.2 項目功能需求1.3 項目開發背景1.4 開發工具的選擇1…

國產化新標桿:TiDB 助力廣發銀行新一代總賬系統投產上線

隨著全球金融市場的快速發展和數字化轉型的深入推進&#xff0c;金融科技已成為推動銀行業創新的核心力量。特別是在當前復雜多變的經濟環境下&#xff0c;銀行業務的高效運作和風險管理能力顯得尤為重要。總賬系統作為銀行會計信息系統的核心&#xff0c;承載著記錄、處理和匯…

2024年06月CCF-GESP編程能力等級認證Python編程二級真題解析

本文收錄于專欄《Python等級認證CCF-GESP真題解析》&#xff0c;專欄總目錄&#xff1a;點這里&#xff0c;訂閱后可閱讀專欄內所有文章。 一、單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09; 第 1 題 小楊父母帶他到某培訓機構給他報名參加CCF組織的GESP認證…

云動態摘要 2024-07-07

給您帶來云廠商的最新動態,最新產品資訊和最新優惠更新。 最新優惠與活動 數據庫上云優選 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系產品新用戶低至首年6折起! [免費體驗]智能助手ChatBI上線 騰訊云 2024-07-02 基于混元大模型打造,可通過對話方式生成可視化…

說一說null 和 undefined 的區別,如何讓一個屬性變為null

共同點 null和undefined是JavaScript中的兩個基本數據類型 不同點 undefined&#xff1a;這個值表示變量已聲明但還沒被賦值。 null&#xff1a;這個值表示空值或無值&#xff0c;通常用于手動置一個變量為空 要將一個屬性設置為null&#xff0c;你可以直接給屬性賦值 let…

18_特征金字塔網絡FPN結構詳解

1.1 簡介 在深度學習領域&#xff0c;尤其是計算機視覺和目標檢測任務中&#xff0c;Feature Pyramid Networks (FPN) 是一種革命性的架構設計&#xff0c;它解決了多尺度特征檢測和融合的關鍵問題。FPN最初由何凱明等人在2017年的論文《Feature Pyramid Networks for Object …

保護您的數據:應對MKP勒索病毒的有效策略

導言&#xff1a; 在當今數字化時代&#xff0c;.mkp勒索病毒等惡意軟件已經成為廣泛存在的安全威脅&#xff0c;對個人用戶和企業的數據安全構成了嚴峻挑戰。本文將探討.mkp勒索病毒的特點、傳播方式以及創新的應對策略&#xff0c;旨在幫助讀者更有效地應對這一威脅。如不幸…