概覽
Unix和類Unix系統(Linux)上的壓縮打包工具,可以將多個文件合並為一個文件,打包後的文件名亦為“tar”。目前,tar文件格式已經成為POSIX標准,最初是POSIX.1-1988,目前是POSIX.1-2001。 本程序最初的設計目的是將文件備份到磁帶上(tape archive),因而得名tar。
版本
常用的tar是自由軟件基金會開發的GNU版,目前的穩定版本是1.26,發布於2011年3月13日
同時,它有多個壓縮率不同的版本,如tar.xz和tar.gz,前者的壓縮率更高,但可能有兼容性問題。
縮寫
tar代表未被壓縮的tar文件。已被壓縮的tar文件則追加壓縮文件的擴展名,如經過gzip壓縮後的tar文件,擴展名為“.tar.gz”。由於受到DOS8.3文件名格式的限制,常使用下列縮寫:
-
.tgz等價於.tar.gz
-
.tbz與tb2等價於.tar.bz2
-
.taz等價於.tar.Z
-
.tlz等價於.tar.lzma
-
.txz等價於.tar.xz
GNU tar的用法
命令格式是
tar 功能 選項 文件
可以將代表功能和選項的單個字母合並;當使用單個字母時,可以不用在字母前面加“-”。某些版本的tar要求嚴格按照功能字、選項字的順序,而有些版本的tar並不在意這個順序。
功能
-
-c,--create 創建新的tar文件
-
-x,--extract,--get 解開tar文件
-
-t,--list 列出tar文件中包含的文件的信息
-
-r,--append 附加新的文件到tar文件中
-
-u,--update 用已打包的文件的較新版本更新tar文件
-
-A,--catenate,--concatenate 將tar文件作為一個整體追加到另一個tar文件中
-
-d,--diff,--compare 將文件系統裡的文件和tar文件裡的文件進行比較
-
--delete 刪除tar文件裡的文件。注意,這個功能不能用於已保存在磁帶上的tar文件!
常用選項
-
-v,--verbose 列出每一步處理涉及的文件的信息,只用一個“v”時,僅列出文件名,使用兩個“v”時,列出權限、所有者、大小、時間、文件名等信息。
-
-k,--keep-old-files 不覆蓋文件系統上已有的文件
-
-f,--file [主機名:]文件名 指定要處理的文件名。可以用“-”代表標准輸出或標准輸入。
-
-P,--absolute-names 使用絕對路徑
-
-j,--bzip2 調用bzip2執行壓縮或解壓縮。注意,由於部分老版本的tar使用-I實現本功能,因此,編寫腳本時,最好使用--bzip2。
-
-z,--gzip,--gunzip,--ungzip 調用gzip執行壓縮或解壓縮
-
-Z,--compress,--uncompress 調用compress執行壓縮或解壓縮
應用示例
tar -cvf home_backup.tar /home
可以將/home目錄下的所有文件打包入home_backup.tar文件中。理解這個命令時,請注意“home_backup.tar”實際上是-f選項的參數。tar默認記錄相對路徑,即使給出的是絕對路徑,也會自動將代表根目錄的“/”去掉,所以,在這個例子中,使用“/home”和“home”是相同的。要想使用絕對路徑,請加上“P”選項,但一般不推薦使用絕對路徑,原因之一是可能導致tar炸彈攻擊。
cd /home
tar -cvf home_backup.tar *
這也是一種制作備份的方法,但是不推薦這樣做。因為tar在默認解壓時,會將文件直接輸出到當前目錄下,而不會新建並輸出到一個名為home的子目錄,令到當前目錄顯得很凌亂。這也是一種形式的tar炸彈攻擊。
tar -tf home_backup.tar
列出home_backup.tar文件裡已被打包的文件。此時僅僅顯示文件名。如果加上“v”,則能列出權限、所有者、大小、時間、文件名等信息。為防止tar炸彈攻擊,應該養成解壓前查看tar文件內容的好習慣。
tar -xvf home_backup.tar
在當前目錄下解壓home_back.tar。解壓後的文件,其訪問權限得到保留;其所有者是執行tar命令的用戶,如果tar的執行者是root,則所有者是文件原來的所有者。 解壓前,最好先查看tar文件的內容,以決定是否需要新建一個臨時子目錄安放。
tar -xvf home_backup.tar home/test.c
指定解壓出test.c這個文件。解壓過程中會自動創建home這個子目錄。
其他
由於備份策略的進步,逐漸采用dump、restore等工具替代tar。此後,tar多與gzip聯用,彌補後者無法將多個文件打包的不足。這一用法沿用至今,新的tar版本已能自動調用多種壓縮工具執行壓縮。已壓縮的tar文件也叫“tarball”。大部分自由軟件的源代碼采用tarball的形式發布。
tar炸彈
攻擊者利用絕對路徑,或者“tar -cf bomb.tar *”的方式創建的tar文件,然後誘騙受害者在根目錄下解壓,或者使用絕對路徑解壓。可能使受害系統上已有的文件被覆蓋掉,或者導致當前工作目錄凌亂不堪,這就是所謂的“tar炸彈”。因此,要養成良好的解壓習慣:
-
解壓前用“t”查看tar的文件內容。
-
拒絕使用絕對路徑。
-
新建一個臨時子目錄,然後在這個子目錄裡解壓。
tar管道
管道用法:
tar -c "${源目錄}" | tar -xvC "${目標目錄}"
文件默認是標准輸入/輸出,不需再額外指定。 可以將源目錄下的文件及子目錄復制到目標目錄中,尤其適用於復制含有特殊文件(如軟鏈接、設備文件)的目錄。