天天看點

Linux每天一個指令:tar

Linux tar指令簡介:

    tar指令可以為linux的檔案和目錄建立檔案。利用tar,可以為某一特定檔案建立檔案(備份檔案),也可以在檔案中改變檔案,或者向檔案中加入新的檔案。tar最初被用來在錄音帶上建立檔案,現在,使用者可以在任何裝置上建立檔案。利用tar指令,可以把一大堆的檔案和目錄全部打包成一個檔案,這對于備份檔案或将幾個檔案組合成為一個檔案以便于網絡傳輸是非常有用的。   

    首先要弄清兩個概念:打包和壓縮。打包是指将一大堆檔案或目錄變成一個總的檔案;壓縮則是将一個大的檔案通過一些壓縮算法變成一個小檔案。

    為什麼要區分這兩個概念呢?這源于Linux中很多壓縮程式隻能針對一個檔案進行壓縮,這樣當你想要壓縮一大堆檔案時,你得先将這一大堆檔案先打成一個包(tar指令),然後再用壓縮程式進行壓縮(gzip bzip2指令)。

    linux下最常用的打包程式就是tar了,使用tar程式打出來的包我們常稱為tar包,tar封包件的指令通常都是以.tar結尾的。生成tar包後,就可以用其它的程式來進行壓縮。

tar 指令文法如下:

    1.指令格式:

    tar[必要參數][選擇參數][檔案] 

    2.指令功能:

    用來壓縮和解壓檔案。tar本身不具有壓縮功能。他是調用壓縮(gzip bzip2等指令)功能實作的 

    3.指令參數:

主要選項
-c 建立新的歸檔(打包)檔案。
-r 把要歸檔(打包)的檔案追加到檔案檔案的末尾。
-t 列出檔案檔案的内容,檢視已經備份了哪些檔案。
-u 更新檔案。就是說,用新增的檔案取代原備份檔案,如果在備份檔案中找不到要更新的檔案,則把它追加到備份檔案的最後。
-x 從歸檔的檔案中提取檔案
輔助選項
-b N該選項是為錄音帶機設定的,其後跟一數字,用來說明區塊的大小,系統預設值為20(20×512 bytes)
-f 指定打包壓縮檔案或裝置,這個選項通常是必選的。
-k 儲存已經存在的檔案。例如把某個檔案還原,在還原的過程中遇到相同的檔案,不會進行覆寫。
-m 在還原檔案時,把所有檔案的修改時間設定為目前時間

-v 詳細報告tar處理的檔案資訊。如無此選項,tar不報告檔案資訊。
-w 每一步都要求确認。
-J代表調用“xz”程式進行檔案的壓縮
-A,--catenate,--concatenate 新增壓縮檔案到已存在的壓縮
-d,--diff,--compare 比較歸檔(打包)與目前檔案的不同之處将一歸檔(打包)與已有的歸檔(打包)合并
--delete 從歸檔檔案中删除-C,--directory DIR 解壓到指定的目錄-h,--dereference 不轉儲動态連結,轉儲動态連結指向的檔案。
-k,--keep-old-files 儲存現有檔案;從歸檔中展開時不進行覆寫
#-N,--after-date DATE,--newer DATE 僅存儲時間較新的檔案(藐視linux上tar不支援)
-P,--absolute-paths 以絕對路徑打封包件,不要從檔案名中去除 '/'
--remove-files 建立存檔後删除源檔案
--exclude FILE 不把指定檔案包含在内
-X,--exclude-from FILE 從指定檔案中讀入不想包含的檔案的清單

-j 代表使用‘bzip2’程式進行檔案的壓縮
-Z,--compress,--uncompress 用 compress 對存檔壓縮或解壓
-z,--gzip,--ungzip 用 gzip 對存檔壓縮或解壓      

示例1:-c 建立一個歸檔檔案

[root@localhost ~]# ll
total 9468
-rw-------. 1 root root    1304 May 26  2017 anaconda-ks.cfg
-rw-r--r--. 1 root root     507 May 26 12:30 group
-rw-r--r--. 1 root root   11301 May 26 12:37 passwd
-rw-r--r--. 1 root root 9665555 May 26 13:16 tmp.tar.bz2
-rw-r--r--. 1 root root    2301 May 26 12:49 tmp.tg
-rw-r--r--. 1 root root     674 May 26 12:57 tmp.tgz
[root@localhost ~]# tar cvf /tmp/root.tar ./*
./anaconda-ks.cfg
./group
./passwd
./tmp.tar.bz2
./tmp.tg
./tmp.tgz
      

示例2:-t 檢視歸檔内容 

[root@localhost ~]# tar tvf /tmp/root.tar 
-rw------- root/root      1304 2017-05-26 15:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-26 12:30 ./group
-rw-r--r-- root/root     11301 2017-05-26 12:37 ./passwd
-rw-r--r-- root/root   9665555 2017-05-26 13:16 ./tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-26 12:49 ./tmp.tg
-rw-r--r-- root/root       674 2017-05-26 12:57 ./tmp.tgz      

示例 3:-r 追加檔案到歸檔(tar)檔案中 

[root@localhost ~]# tar tvf /tmp/root.tar 
-rw------- root/root      1304 2017-05-26 15:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-26 12:30 ./group
-rw-r--r-- root/root     11301 2017-05-26 12:37 ./passwd
-rw-r--r-- root/root   9665555 2017-05-26 13:16 ./tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-26 12:49 ./tmp.tg
-rw-r--r-- root/root       674 2017-05-26 12:57 ./tmp.tgz
[root@localhost ~]# tar -rvf /tmp/root.tar /etc/issue
tar: Removing leading `/' from member names    #若以絕對路徑打包的話,tar預設會将'/'去除
/etc/issue
[root@localhost ~]# tar tvf /tmp/root.tar 
-rw------- root/root      1304 2017-05-26 15:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-26 12:30 ./group
-rw-r--r-- root/root     11301 2017-05-26 12:37 ./passwd
-rw-r--r-- root/root   9665555 2017-05-26 13:16 ./tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-26 12:49 ./tmp.tg
-rw-r--r-- root/root       674 2017-05-26 12:57 ./tmp.tgz
-rw-r--r-- root/root        23 2016-11-29 13:12 etc/issue      

示例 4:-u 更新歸檔檔案

[root@localhost ~]# tar tvf /tmp/root.tar 
-rw------- root/root      1304 2017-05-26 15:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-26 12:30 ./group
-rw-r--r-- root/root     11301 2017-05-26 12:37 ./passwd
-rw-r--r-- root/root   9665555 2017-05-26 13:16 ./tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-26 12:49 ./tmp.tg
-rw-r--r-- root/root       674 2017-05-26 12:57 ./tmp.tgz
-rw-r--r-- root/root        23 2016-11-29 13:12 etc/issue
[root@localhost ~]# tar -uvf /tmp/root.tar /etc/sysconfig/network
tar: Removing leading `/' from member names
/etc/sysconfig/network
[root@localhost ~]# tar tvf /tmp/root.tar 
-rw------- root/root      1304 2017-05-26 15:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-26 12:30 ./group
-rw-r--r-- root/root     11301 2017-05-26 12:37 ./passwd
-rw-r--r-- root/root   9665555 2017-05-26 13:16 ./tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-26 12:49 ./tmp.tg
-rw-r--r-- root/root       674 2017-05-26 12:57 ./tmp.tgz
-rw-r--r-- root/root        23 2016-11-29 13:12 etc/issue
-rw-r--r-- root/root        22 2017-05-26 15:47 etc/sysconfig/network      

示例5:-x 從歸檔的檔案中提取檔案

[root@localhost root_tar]# tar xvf /tmp/root.tar
./anaconda-ks.cfg
./group
./passwd
./root_tar/
./root_tar/anaconda-ks.cfg
./root_tar/group
./root_tar/passwd
./root_tar/tmp.tar.bz2
./root_tar/tmp.tg
./root_tar/tmp.tgz
./tmp.tar.bz2
./tmp.tg
./tmp.tgz      

示例 6:-C 提取 tar 檔案到指定目錄

[root@localhost tmp]# tar xvf root.tar -C /root/root_tar/
./anaconda-ks.cfg
./group
./passwd
./root_tar/
./root_tar/anaconda-ks.cfg
./root_tar/group
./root_tar/passwd
./root_tar/tmp.tar.bz2
./root_tar/tmp.tg
./root_tar/tmp.tgz
./tmp.tar.bz2
./tmp.tg
./tmp.tgz
[root@localhost tmp]# ls -al /root/root_tar/
total 9468
drwxr-xr-x. 3 root root     120 Sep 19 09:42 .
dr-xr-x---. 3 root root     258 May 26 13:30 ..
-rw-------. 1 root root    1304 May 26 15:47 anaconda-ks.cfg
-rw-r--r--. 1 root root     507 May 26 12:30 group
-rw-r--r--. 1 root root   11301 May 26 12:37 passwd
drwxr-xr-x. 2 root root     104 May 26 13:30 root_tar
-rw-r--r--. 1 root root 9665555 May 26 13:16 tmp.tar.bz2
-rw-r--r--. 1 root root    2301 May 26 12:49 tmp.tg
-rw-r--r--. 1 root root     674 May 26 12:57 tmp.tgz      

示例7:-m 在還原檔案時,把所有檔案的修改時間設定為目前時間

[root@localhost ~]# tar -tvf /tmp/root.tar 
-rw------- root/root      1304 2017-05-27 03:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-27 00:30 ./group
-rw-r--r-- root/root     11301 2017-05-27 00:37 ./passwd
drwxr-xr-x root/root         0 2017-05-27 01:30 ./root_tar/
-rw------- root/root      1304 2017-05-27 03:47 ./root_tar/anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-27 00:30 ./root_tar/group
-rw-r--r-- root/root     11301 2017-05-27 00:37 ./root_tar/passwd
-rw-r--r-- root/root   9665555 2017-05-27 01:16 ./root_tar/tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-27 00:49 ./root_tar/tmp.tg
-rw-r--r-- root/root       674 2017-05-27 00:57 ./root_tar/tmp.tgz
-rw-r--r-- root/root   9665555 2017-05-27 01:16 ./tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-27 00:49 ./tmp.tg
-rw-r--r-- root/root       674 2017-05-27 00:57 ./tmp.tgz
[root@localhost ~]# ll /root/root_tar/
total 0
[root@localhost ~]# tar xmvf /tmp/root.tar ./root_tar/
./root_tar/
./root_tar/anaconda-ks.cfg
./root_tar/group
./root_tar/passwd
./root_tar/tmp.tar.bz2
./root_tar/tmp.tg
./root_tar/tmp.tgz
[root@localhost ~]# ll /root/root_tar/
total 9468
-rw-------. 1 root root    1304 Sep 19 21:55 anaconda-ks.cfg
-rw-r--r--. 1 root root     507 Sep 19 21:55 group
-rw-r--r--. 1 root root   11301 Sep 19 21:55 passwd
-rw-r--r--. 1 root root 9665555 Sep 19 21:55 tmp.tar.bz2
-rw-r--r--. 1 root root    2301 Sep 19 21:55 tmp.tg
-rw-r--r--. 1 root root     674 Sep 19 21:55 tmp.tgz
[root@localhost ~]# date
Tue Sep 19 21:55:57 CST 2017      

示例8:-A,--catenate,--concatenate 新增歸檔檔案到已存在的歸檔檔案

tar Avf 追加的歸檔檔案 新增歸檔檔案

[root@localhost tmp]# tar tvf tmp.tar 
-rw-r--r-- root/root  27627520 2017-09-19 21:59 ./etc.tar
lrwxrwxrwx root/root         0 2017-05-27 00:30 ./group -> /root/group
-rwx------ root/root       836 2017-05-27 03:47 ./ks-script-hjy08p
-rw-r--r-- root/root     11301 2017-05-27 00:39 ./pass
lrwxrwxrwx root/root         0 2017-05-27 00:30 ./passwd -> /root/passwd
drwx------ root/root         0 2017-05-26 21:15 ./systemd-private-85aa472335ef4117a4ffab639e34b392-httpd.service-WejRSA/
drwxrwxrwt root/root         0 2017-05-26 21:15 ./systemd-private-85aa472335ef4117a4ffab639e34b392-httpd.service-WejRSA/tmp/
-rw-r--r-- root/root         0 2017-05-27 00:53 ./tar.txt
drwxr-xr-x root/root         0 2017-05-27 00:46 ./test/
-rw------- root/root         0 2017-05-27 03:43 ./yum.log
[root@localhost tmp]# tar Avf tmp.tar root.tar 
[root@localhost tmp]# tar tvf tmp.tar 
-rw-r--r-- root/root  27627520 2017-09-19 21:59 ./etc.tar
lrwxrwxrwx root/root         0 2017-05-27 00:30 ./group -> /root/group
-rwx------ root/root       836 2017-05-27 03:47 ./ks-script-hjy08p
-rw-r--r-- root/root     11301 2017-05-27 00:39 ./pass
lrwxrwxrwx root/root         0 2017-05-27 00:30 ./passwd -> /root/passwd
drwx------ root/root         0 2017-05-26 21:15 ./systemd-private-85aa472335ef4117a4ffab639e34b392-httpd.service-WejRSA/
drwxrwxrwt root/root         0 2017-05-26 21:15 ./systemd-private-85aa472335ef4117a4ffab639e34b392-httpd.service-WejRSA/tmp/
-rw-r--r-- root/root         0 2017-05-27 00:53 ./tar.txt
drwxr-xr-x root/root         0 2017-05-27 00:46 ./test/
-rw------- root/root         0 2017-05-27 03:43 ./yum.log
dr-xr-x--- root/root         0 2017-09-19 21:50 root/
-rw-r--r-- root/root        18 2013-12-29 10:26 root/.bash_logout
-rw-r--r-- root/root       176 2013-12-29 10:26 root/.bash_profile
-rw-r--r-- root/root       176 2013-12-29 10:26 root/.bashrc
-rw-r--r-- root/root       100 2013-12-29 10:26 root/.cshrc
-rw-r--r-- root/root       129 2013-12-29 10:26 root/.tcshrc
-rw------- root/root      1304 2017-05-27 03:47 root/anaconda-ks.cfg
-rw------- root/root      5021 2017-05-27 00:16 root/.bash_history
-rw------- root/root        73 2017-05-27 00:51 root/.lesshst
-rw-r--r-- root/root     11301 2017-05-27 00:37 root/passwd
-rw-r--r-- root/root       507 2017-05-27 00:30 root/group
-rw-r--r-- root/root      2301 2017-05-27 00:49 root/tmp.tg
-rw-r--r-- root/root   9665555 2017-05-27 01:16 root/tmp.tar.bz2
drwxr-xr-x root/root         0 2017-09-19 21:55 root/root_tar/
-rw------- root/root      1304 2017-09-19 21:55 root/root_tar/anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-09-19 21:55 root/root_tar/group
-rw-r--r-- root/root     11301 2017-09-19 21:55 root/root_tar/passwd
-rw-r--r-- root/root   9665555 2017-09-19 21:55 root/root_tar/tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-09-19 21:55 root/root_tar/tmp.tg
-rw-r--r-- root/root       674 2017-09-19 21:55 root/root_tar/tmp.tgz
-rw-r--r-- root/root       674 2017-05-27 00:57 root/tmp.tgz
-rw------- root/root      5189 2017-09-19 21:50 root/.viminfo      

示例9:--delete 從歸檔檔案中删除指定檔案

[root@localhost ~]# tar tvf rootbak.tar 
-rw------- root/root      1304 2017-05-27 03:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-27 00:30 ./group
-rw-r--r-- root/root     11301 2017-05-27 00:37 ./passwd
drwxr-xr-x root/root         0 2017-09-19 21:55 ./root_tar/
-rw------- root/root      1304 2017-09-19 21:55 ./root_tar/anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-09-19 21:55 ./root_tar/group
-rw-r--r-- root/root     11301 2017-09-19 21:55 ./root_tar/passwd
-rw-r--r-- root/root   9665555 2017-09-19 21:55 ./root_tar/tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-09-19 21:55 ./root_tar/tmp.tg
-rw-r--r-- root/root       674 2017-09-19 21:55 ./root_tar/tmp.tgz
-rw-r--r-- root/root   9665555 2017-05-27 01:16 ./tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-05-27 00:49 ./tmp.tg
-rw-r--r-- root/root       674 2017-05-27 00:57 ./tmp.tgz
[root@localhost ~]# tar --delete -vf rootbak.tar ./tmp.tg
[root@localhost ~]# tar tvf rootbak.tar 
-rw------- root/root      1304 2017-05-27 03:47 ./anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-05-27 00:30 ./group
-rw-r--r-- root/root     11301 2017-05-27 00:37 ./passwd
drwxr-xr-x root/root         0 2017-09-19 21:55 ./root_tar/
-rw------- root/root      1304 2017-09-19 21:55 ./root_tar/anaconda-ks.cfg
-rw-r--r-- root/root       507 2017-09-19 21:55 ./root_tar/group
-rw-r--r-- root/root     11301 2017-09-19 21:55 ./root_tar/passwd
-rw-r--r-- root/root   9665555 2017-09-19 21:55 ./root_tar/tmp.tar.bz2
-rw-r--r-- root/root      2301 2017-09-19 21:55 ./root_tar/tmp.tg
-rw-r--r-- root/root       674 2017-09-19 21:55 ./root_tar/tmp.tgz
-rw-r--r-- root/root   9665555 2017-05-27 01:16 ./tmp.tar.bz2
-rw-r--r-- root/root       674 2017-05-27 00:57 ./tmp.tgz      

示例9:--exclude FILE 不把指定檔案包含在内

[root@localhost root_tar]# ll
total 9456
-rw-------. 1 root   root      1304 Sep 19 21:55 anaconda-ks.cfg
-rw-r--r--. 1 apache apache   11301 Sep 19 21:55 passwd
-rw-r--r--. 1 root   root   9665555 Sep 19 21:55 tmp.tar.bz2
[root@localhost root_tar]# tar cvf test.tar ./* --exclude tmp.tar.bz2
./anaconda-ks.cfg
./passwd
[root@localhost root_tar]# tar tvf test.tar 
-rw------- root/root      1304 2017-09-19 21:55 ./anaconda-ks.cfg
-rw-r--r-- apache/apache 11301 2017-09-19 21:55 ./passwd      

示例 10:建立并壓縮歸檔檔案(.tar.gz 或 .tgz)

假設我們需要打包 /etc檔案夾,并用 gzip 工具将其壓縮。可以在 tar 指令中使用 -z 選項來實作。這種 tar 檔案的擴充名可以是 .tar.gz 或者 .tgz。

[root@localhost ~]# tar -zcpvf myarchive.tar.gz /etc
或
[root@localhost ~]# tar -zcpvf myarchive.tgz /etc      

示例 11:建立并壓縮歸檔檔案(.tar.bz2 或 .tbz2)

假設我們需要打包 /etc檔案夾,并使用 bzip2 壓縮。可以在 tar 指令中使用 -j 選項來實作。這種 tar 檔案的擴充名可以是 .tar.bz2 或者 .tbz。

[root@linuxtechi ~]# tar -jcpvf myarchive.tar.bz2 /etc
或
[root@linuxtechi ~]# tar -jcpvf myarchive.tbz2 /etc      

示例 12:列出 .tar.gz /.tgz或.tar.bz2/.tbz2 檔案中的内容

[root@localhost root_tar]# tar t[z|j]vf myarchive.tar.gz | less


drwxr-xr-x root/root         0 2017-05-27 01:31 etc/
-rw-r--r-- root/root       465 2017-05-27 03:43 etc/fstab
-rw------- root/root         0 2017-05-27 03:43 etc/crypttab
lrwxrwxrwx root/root         0 2017-05-27 03:43 etc/mtab -> /proc/self/mounts
-rw-r--r-- root/root       101 2017-05-26 19:57 etc/resolv.conf
drwxr-xr-x root/root         0 2017-05-27 03:44 etc/pki/
drwxr-xr-x root/root         0 2017-05-27 03:43 etc/pki/rpm-gpg/
-rw-r--r-- root/root      1690 2016-11-30 02:12 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
-rw-r--r-- root/root      1004 2016-11-30 02:12 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
-rw-r--r-- root/root      1690 2016-11-30 02:12 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7
drwxr-xr-x root/root         0 2017-05-27 03:43 etc/pki/ca-trust/
-rw-r--r-- root/root       166 2016-11-05 00:34 etc/pki/ca-trust/README
-rw-r--r-- root/root       980 2016-11-05 00:34 etc/pki/ca-trust/ca-legacy.conf
drwxr-xr-x root/root         0 2017-05-27 03:43 etc/pki/ca-trust/extracted/
-rw-r--r-- root/root       560 2016-11-05 00:34 etc/pki/ca-trust/extracted/README
drwxr-xr-x root/root         0 2017-05-27 03:43 etc/pki/ca-trust/extracted/java/
-rw-r--r-- root/root       726 2016-11-05 00:34 etc/pki/ca-trust/extracted/java/README
-r--r--r-- root/root    194984 2017-05-27 03:43 etc/pki/ca-trust/extracted/java/cacerts
drwxr-xr-x root/root         0 2017-05-27 03:43 etc/pki/ca-trust/extracted/openssl/
-rw-r--r-- root/root       787 2016-11-05 00:34 etc/pki/ca-trust/extracted/openssl/README
-r--r--r-- root/root    346654 2017-05-27 03:43 etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
drwxr-xr-x root/root         0 2017-05-27 03:43 etc/pki/ca-trust/extracted/pem/
-rw-r--r-- root/root       898 2016-11-05 00:34 etc/pki/ca-trust/extracted/pem/README
-r--r--r-- root/root    262042 2017-05-27 03:43 etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
-r--r--r-- root/root    208874 2017-05-27 03:43 etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
-r--r--r-- root/root    208976 2017-05-27 03:43 etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
drwxr-xr-x root/root         0 2017-05-27 03:43 etc/pki/ca-trust/source/
-rw-r--r-- root/root       932 2016-11-05 00:34 etc/pki/ca-trust/source/README
drwxr-xr-x root/root         0 2016-11-06 01:45 etc/pki/ca-trust/source/anchors/
drwxr-xr-x root/root         0 2016-11-06 01:45 etc/pki/ca-trust/source/blacklist/
...      

示例 13:解壓 .tar.gz 或 .tgz 檔案

使用 -x 和 -z 選項來解壓 .tar.gz 或 .tgz 檔案。如下:

[root@localhost ~]# tar -zxpvf myarchive.tgz -C /tmp/

以上指令将 tar 檔案解壓到 /tmp 目錄。

注:現今的 tar 指令會在執行解壓動作前自動檢查檔案的壓縮類型,這意味着我們在使用 tar 指令是可以不用指定檔案的壓縮類型。如下:

[root@localhost ~]# tar -xpvf myarchive.tgz -C /tmp/      

示例 14:解壓 .tar.bz2 或 .tbz2 檔案

使用 -j 和 -x 選項來解壓 .tar.bz2 或 .tbz2 檔案。如下:

[root@localhost ~]# tar -jxpvf myarchive.tbz2 -C /tmp/

或

[root@localhost ~]# tar xpvf myarchive.tbz2 -C /tmp/      

示例 15:使用 -T 及 -X 建立壓縮歸檔檔案

想像這樣一個場景:把想要歸檔和壓縮的檔案及目錄記錄到到一個檔案,然後把這個檔案當做 tar 指令的傳入參數來完成歸檔任務;而有時候則是需要排除上面提到的這個檔案裡面記錄的特定路徑後進行歸檔和壓縮。

在 tar 指令中使用 -T 選項來指定該輸入檔案,使用 -X 選項來指定包含要排除的檔案清單。

假設要歸檔 /root 目錄,并排除 /root/rootbak.tar和 /root/tmp.tar.bz2檔案,可以建立 /root/tar-include 和 /root/tar-exclude 然後分别輸入以下内容

[root@localhost ~]# cat tar-include 
/root
[root@localhost ~]# cat tar-exclude 
/root/rootbak.tar
/root/tmp.tar.bz2
運作以下指令來建立一個壓縮歸檔檔案。

[root@localhost ~]# tar zcpvf mybackup-$(date +%Y-%m-%d).tgz -T /root/tar-include -X /root/tar-exclude      

示例 16:檢視 .tar、.tgz 和 .tbz2 檔案的大小

使用如下指令來檢視 (壓縮) tar 檔案的體積。

[root@localhost tmp]# tar czf - root.tar | wc -c
48227906
[root@localhost tmp]# tar czf - tmp.tar | wc -c
29090060      

示例 17:分割體積龐大的 tar 檔案為多份小檔案

類 Unix 系統中使用 split 指令來将大體積檔案分割成小體積檔案。大體積的 tar 當然也可以使用這個指令來進行分割。

假設需要将 “mybackup-2017-09-19.tgz” 分割成每份 6 MB 的小檔案。

Syntax : split -b <Size-in-MB> .<extension> “prefix-name”

[root@localhost tmp]# split -b 6M mybackup-2017-09-19.tgz mybackup-parts

以上指令會在目前目錄分割 mybackup-2017-09-19.tgz檔案成為多個 6 MB 的小檔案,檔案名為 mybackup-partsaa ~ mybackup-partsag。如果在要在分割檔案後以數字而非字母來區分,可以在以上的 split 指令使用-d 選項。

[root@localhost tmp]# split -b 6M mybackup-2017-09-19.tgz mybackup-parts
[root@localhost tmp]# ll
total 157888
-rw-r--r--. 1 root root 27627520 Sep 19 21:59 etc.tar
-rwx------. 1 root root      836 May 27 03:47 ks-script-hjy08p
-rw-r--r--. 1 root root 19223011 Sep 19 22:40 mybackup-2017-09-19.tgz
-rw-r--r--. 1 root root  6291456 Sep 19 22:46 mybackup-partsaa
-rw-r--r--. 1 root root  6291456 Sep 19 22:46 mybackup-partsab
-rw-r--r--. 1 root root  6291456 Sep 19 22:46 mybackup-partsac
-rw-r--r--. 1 root root   348643 Sep 19 22:46 mybackup-partsad
-rw-r--r--. 1 root root    11301 May 27 00:39 pass
-rw-r--r--. 1 root root 48537600 Sep 19 22:42 root.tar
drwx------. 3 root root       17 May 26 21:15 systemd-private-85aa472335ef4117a4ffab639e34b392-httpd.service-WejRSA
-rw-r--r--. 1 root root        0 May 27 00:53 tar.txt
drwxr-xr-x. 2 root root        6 May 27 00:46 test
-rw-r--r--. 1 root root 47042560 Sep 19 22:01 tmp.tar
-rw-------. 1 root root        0 May 27 03:43 yum.log      

然後通過網絡将這些分割檔案轉移到其他伺服器,就可以合并成為一個單獨的 tar 檔案了,如下:

[root@localhost mnt]# ll
total 18776
-rw-r--r--. 1 root root 6291456 Sep 19 22:48 mybackup-partsaa
-rw-r--r--. 1 root root 6291456 Sep 19 22:48 mybackup-partsab
-rw-r--r--. 1 root root 6291456 Sep 19 22:48 mybackup-partsac
-rw-r--r--. 1 root root  348643 Sep 19 22:48 mybackup-partsad
[root@localhost mnt]# cat mybackup-partsa* > mybackup-2017-09-19.tgz
[root@localhost mnt]# ll
total 37552
-rw-r--r--. 1 root root 19223011 Sep 19 22:48 mybackup-2017-09-19.tgz
-rw-r--r--. 1 root root  6291456 Sep 19 22:48 mybackup-partsaa
-rw-r--r--. 1 root root  6291456 Sep 19 22:48 mybackup-partsab
-rw-r--r--. 1 root root  6291456 Sep 19 22:48 mybackup-partsac
-rw-r--r--. 1 root root   348643 Sep 19 22:48 mybackup-partsad
[root@localhost mnt]# du -sh ./*
19M    ./mybackup-2017-09-19.tgz
6.0M    ./mybackup-partsaa
6.0M    ./mybackup-partsab
6.0M    ./mybackup-partsac
344K    ./mybackup-partsad
[root@localhost mnt]# du -sh /tmp/mybackup-2017-09-19.tgz 
19M    /tmp/mybackup-2017-09-19.tgz      

***********************************************************

 學習永遠不晚。——高爾基