版本
常用的tar是自由軟體基金會開發的GNU版,穩定版本是1.28,發布於2014年7月27日
同時,它有多個壓縮率不同的版本,如tar.xz和tar.gz,前者的壓縮率更高,但可能有兼容性問題。
作用
tar命令是Unix/Linux系統中備份檔案的可靠方法,幾乎可以工作於任何環境中,它的使用許可權是所有用戶。
縮寫
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。
•-J,--xz,--lzma 調用XZ Utils執行壓縮或解壓縮。依賴XZ Utils。
•-z,--gzip,--gunzip,--ungzip 調用gzip執行壓縮或解壓縮。
•-Z,--compress,--uncompress 調用compress執行壓縮或解壓縮。
主要參數
使用該命令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。
主選項
-c 創建新的檔案檔案。如果用戶想備份一個目錄或是一些檔案,就要選擇這個選項。
-r 把要存檔的檔案追加到檔案檔案的末尾。例如用戶已經做好備份檔案,又發現還有一個目錄或是一些檔案忘記備份了,這時可以使用該選項,將忘記的目錄或檔案追加到備份檔案中。
-t 列出檔案檔案的內容,查看已經備份了哪些檔案。
-u 更新檔案。就是說,用新增的檔案取代原備份檔案,如果在備份檔案中找不到要更新的檔案,則把它追加到備份檔案的最後。
-x 從檔案檔案中釋放檔案。
3.2 輔助選項:
-b 該選項是為磁帶機設定的,其後跟一數字,用來說明區塊的大小,系統預設值為20(20×512 bytes)。
-f 使用檔案檔案或設備,這個選項通常是必選的。
-k 保存已經存在的檔案。例如把某個檔案還原,在還原的過程中遇到相同的檔案,不會進行覆蓋。
-m 在還原檔案時,把所有檔案的修改時間設定為。
-M 創建多卷的檔案檔案,以便在幾個磁碟中存放。
-v 詳細報告tar處理的檔案信息。如無此選項,tar不報告檔案信息。
-w 每一步都要求確認。
-j 代表使用‘bzip2’程式進行檔案的壓縮
-J代表調用“xz”程式進行檔案的壓縮(但在RHEL5的1.53上面無法使用,在RHEL6的2.23上面可以使用)
-z 用gzip來壓縮/解壓縮檔案,加上該選項後可以將檔案檔案進行壓縮,但還原時也一定要使用該選項進行解壓縮。
-A,--catenate,--concatenate
將一存檔與已有的存檔合併
-d,--diff,--compare
比較存檔與當前檔案的不同之處
--delete
從存檔中刪除
其他參數
--atime-preserve
不改變轉儲檔案的存取時間
-b,--block-size N
指定塊大小為 Nx512 位元組(預設時 N=20)
-B,--read-full-blocks
讀取時重組塊(???!!!)
-C,--directory DIR
轉到指定的目錄
--checkpoint
讀取存檔時顯示目錄名
-f,--file [HOSTNAME:]F
指定存檔或設備 (預設為 /dev/rmt0)
--force-local
強制使用本地存檔,即使存在克隆
-F,--info-script F --new-volume-script F
在每個磁碟結尾使用腳本 F (隱含 -M)
-G,--incremental
建立老 GNU 格式的備份
-g,--listed-incremental F
建立新 GNU 格式的備份
-h,--dereference
不轉儲動態連結,轉儲動態連結指向的檔案。
-i,--ignore-zeros
忽略存檔中的 0 位元組塊(通常意味著檔案結束)
--ignore-failed-read
當遇上不可讀檔案時不要以非零值退出
-k,--keep-old-files
保存現有檔案;從存檔中展開時不進行覆蓋
-K,--starting-file F
從存檔檔案 F 開始
-l,--one-file-system
在本地檔案系統中創建存檔
-L,--tape-length N
在寫入 N*1024 個位元組後暫停,等待更換磁碟
-m,--modification-time
當從一個檔案中恢復檔案時,不使用新的時間標籤
-M,--multi-volume
建立多卷存檔,以便在幾個磁碟中存放
-N,--after-date DATE,--newer DATE
僅存儲時間較新的檔案
-o,--old-archive,--portability
以 V7 格式存檔,不用 ANSI 格式
-O,--to-stdout
將檔案展開到標準輸出
-p,--same-permissions,--preserve-permissions
展開所有保護信息
-P,--absolute-paths
不要從檔案名稱中去除 '/'
--preserve
like -p -s
與 -p -s 相似
-R,--record-number
顯示信息時同時顯示存檔中的記錄數
--remove-files
建立存檔後刪除源檔案
-s,--same-order,--preserve-order
為解壓至匹配歸檔排序名稱
--same-owner
展開以後使所有檔案屬於同一所有者
-S,--sparse
高效處理
-T,--files-from F
從檔案中得到要展開或要創建的檔案名稱
--null
讀取空結束的檔案名稱,使 -C 失效
--totals
顯示用 --create 參數寫入的總位元組數
-v,--verbose
詳細顯示處理的檔案
-V,--label NAME
為存檔指定卷標
--version
顯示 tar 程式的版本號
-w,--interactive,--confirmation
每個操作都要求確認
-W,--verify
寫入存檔後進行校驗
--exclude FILE
不把指定檔案包含在內
-X,--exclude-from FILE
從指定檔案中讀入不想包含的檔案的列表
-y,--bzip2,--bunzip2
用 bzip2 對存檔壓縮或解壓
-Z,--compress,--uncompress
用 compress 對存檔壓縮或解壓
-z,--gzip,--ungzip
用 gzip 對存檔壓縮或解壓
--use-compress-program PROG
用 PROG 對存檔壓縮或解壓 ( PROG 需能接受 -d 參數)
--block-compress
為便於磁碟存儲,按塊記錄存檔
-[0-7][lmh]
指定驅動器和密度[低中高]
例如:
將當前目錄下所有.txt檔案打包並壓縮歸檔到檔案this.tar.gz,我們可以使用
1.將當前目錄下所有.txt檔案打包並壓縮歸檔到檔案this.tar.gz,我們可以使用
tar zcvf this.tar.gz ./*.txt
2.將當前目錄下的this.tar.gz中的檔案解壓到當前目錄我們可以使用
tar xzvf this.tar.gz ./
在windows下支持TAR格式的軟體有WinMount等。
套用示例
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這個子目錄。