1. 程式人生 > 其它 >【第八章】打包命令tar

【第八章】打包命令tar

技術標籤:# Linux(鳥哥的私房菜)

文章目錄

tar

tar能將多個目錄或檔案打包成一個大檔案,同時可以通過gzip、bzip2和xz進行壓縮。

tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename //打包和壓縮
tar [-z|-j|-J] [tv] [-f 既有的tar檔名]  //檢視檔名
tar [-z|-j|-J] [xv] [-f 待建立的新檔名] [-C 目錄]  //解壓縮
//c、t、x不能同時出現在一個命令列
-c 建立打包檔案,搭配-v來檢視過程中被打包的檔名 -t 檢視打包檔案的內容含有哪些檔名,重點在檢視檔名 -x 解包或壓縮的功能,搭配-C在特定目錄解壓 -z 通過gzip的支援進行壓縮/解壓縮,此時檔名最好為*.tar.gz -j 通過bzip2的支援進行壓縮/解壓縮,此時檔名最好為*.tar.bz2 -J 通過xz的支援進行壓縮/解壓縮,此時檔名最好為*.tar.xz -v 壓縮/解壓縮的過程中,將正在處理的檔名顯示出來 -f 檔名 -f後面立刻接被處理的檔名,建議-f單獨寫一個選項 -C 目錄 若要在特定目錄解壓縮,可以用這個選項 -p 保留備份資料的原本許可權和屬性,常用於備份重要的配置檔案 -
P 保留絕對路徑,即允許備份資料中含有根目錄存在的意思 --exclude==FILE 在壓縮過程中不要將FILE打包

將/etc壓縮排/root裡,並更名為當時所用的壓縮程式
在這裡插入圖片描述
這裡沒有加-v選項,所以沒把正在作用的檔名顯示在螢幕上。這裡-p保留了原本檔案的許可權和屬性。
在這裡插入圖片描述
在這裡插入圖片描述
這裡xz果然花費了很久。
這裡每次執行壓縮指令後都有個Removing leading…意思是刪除了檔名開頭的/。這樣做是為了安全。如果去掉/則在某個資料夾下解壓縮後就會變成該目錄的子檔案,如果沒有去掉根目錄,則解壓縮後的檔名就會是絕對路徑!,如果壓縮的檔名是/etc/…則解開後會直接覆蓋掉原來根目錄下的/etc。
如果確定就是需要備份根目錄到tar檔案中,可以使用-P這個選項。

在這裡插入圖片描述

檢視tar檔案的資料內容

在這裡插入圖片描述
加上-v能將詳細的檔案許可權/屬性列出來,只想知道檔名只要將-v去掉就行了。
在這裡插入圖片描述
使用該指令進行解壓縮,該打包檔案會在本目錄下進行解壓縮。如果想讓該檔案在/tmp下解開,可以進入/tmp之後再執行該指令。還有一種方法就是使用-C這個選項
在這裡插入圖片描述

僅解開單一檔案的方法

上面解壓縮都是將整個打包檔案的內容全部解開。如果只想解開打包檔案內的其中一個檔案可以這樣做

  1. 先找到我們想要的檔名,比如這裡我們想要etc/shadow。grep是擷取關鍵詞的意思在這裡插入圖片描述
  2. 將該檔案解開在這裡插入圖片描述
    此時就解壓出一個資料夾etc,裡面有個shadow。

打包某目錄,但不含該目錄下某些檔案的方法

比如打包/etc和/root這幾個重要的目錄但是不打包/root/etc*開頭的檔案。而且假設這個新的打包檔案要放置成為/root/system.tar.bz2,當然這個檔案不能自己打包自己(因為這個檔案放置在/root下)。此時可以用–exclude。

tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \
> --exclude=/root/system.tar.bz2 /etc /root

這裡的\能到第二行繼續輸入

僅備份比某個時刻還要新的檔案

有時候只想要備份新的檔案,不備份舊檔案,可以用--newer--newer-mtime這個選項。--newer表示後續的日期包含mtime和ctime,而--newer-mtime僅表示mtime。
先用find找到比/etc/passwd還新的檔案(mtime),再用tar來打包。
在這裡插入圖片描述
後面幾個字尾有not dumped的就是沒有進行備份的
在這裡插入圖片描述

稱呼

僅進行打包沒有壓縮的檔案叫做tarfile。有進行壓縮的,稱呼為tarball