天天一個linux命令(28):tar命令

經過SSH訪問服務器,不免會要用到壓縮,解壓縮,打包,解包等,這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小,五臟俱全,功能強大。linux


tar命令能夠爲linux的文件和目錄建立檔案。利用tar,能夠爲某一特定文件建立檔案(備份文件),也能夠在檔案中改變文件,或者向檔案中加入新的文件。tar最初被用來在磁帶上建立檔案,如今,用戶能夠在任何設備上建立檔案。利用tar命令,能夠把一大堆的文件和目錄所有打包成一個文件,這對於備份文件或將幾個文件組合成爲一個文件以便於網絡傳輸是很是有用的。算法


首先要弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件經過一些壓縮算法變成一個小文件。服務器


爲何要區分這兩個概念呢?這源於Linux中不少壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包(tar命令),而後再用壓縮程序進行壓縮(gzip bzip2命令)。網絡


linux下最經常使用的打包程序就是tar了,使用tar程序打出來的包咱們常稱爲tar包,tar包文件的命令一般都是以.tar結尾的。生成tar包後,就能夠用其它的程序來進行壓縮。ide


1.命令格式:工具


tar[必要參數][選擇參數][文件]ip


2.命令功能:it


用來壓縮和解壓文件。tar自己不具備壓縮功能。他是調用壓縮功能實現的io


3.命令參數:class


必要參數有以下:


-A 新增壓縮文件到已存在的壓縮


-B 設置區塊大小


-c 創建新的壓縮文件


-d 記錄文件的差異


-r 添加文件到已經壓縮的文件


-u 添加改變了和現有的文件到已經存在的壓縮文件


-x 從壓縮的文件中提取文件


-t 顯示壓縮文件的內容


-z 支持gzip解壓文件


-j 支持bzip2解壓文件


-Z 支持compress解壓文件


-v 顯示操做過程


-l 文件系統邊界設置


-k 保留原有文件不覆蓋


-m 保留文件不被覆蓋


-W 確認壓縮文件的正確性


可選參數以下:


-b 設置區塊數目


-C 切換到指定目錄


-f 指定壓縮文件


--help 顯示幫助信息


--version 顯示版本信息


4.常看法壓/壓縮命令


tar

解包:tar xvf FileName.tar

打包:tar cvf FileName.tar DirName

(注:tar是打包,不是壓縮!)



.gz

解壓1:gunzip FileName.gz

解壓2:gzip -d FileName.gz

壓縮:gzip FileName


.tar.gz 和 .tgz

解壓:tar zxvf FileName.tar.gz

壓縮:tar zcvf FileName.tar.gz DirName


.bz2

解壓1:bzip2 -d FileName.bz2

解壓2:bunzip2 FileName.bz2

壓縮: bzip2 -z FileName


.tar.bz2

解壓:tar jxvf FileName.tar.bz2

壓縮:tar jcvf FileName.tar.bz2 DirName


.bz

解壓1:bzip2 -d FileName.bz

解壓2:bunzip2 FileName.bz

壓縮:未知


.tar.bz

解壓:tar jxvf FileName.tar.bz

壓縮:未知


.Z

解壓:uncompress FileName.Z

壓縮:compress FileName


.tar.Z

解壓:tar Zxvf FileName.tar.Z

壓縮:tar Zcvf FileName.tar.Z DirName


.zip

解壓:unzip FileName.zip

壓縮:zip FileName.zip DirName


.rar

解壓:rar x FileName.rar

壓縮:rar a FileName.rar DirName


5.使用實例


實例1:將文件所有打包成tar包


命令:


tar -cvf log.tar log2012.log


tar -zcvf log.tar.gz log2012.log


tar -jcvf log.tar.bz2 log2012.log


輸出:


[root@localhost test]# ls -al log2012.log


---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log


[root@localhost test]# tar -cvf log.tar log2012.log


log2012.log


[root@localhost test]# tar -zcvf log.tar.gz log2012.log


log2012.log


[root@localhost test]# tar -jcvf log.tar.bz2 log2012.log


log2012.log


[root@localhost test]# ls -al *.tar*


-rw-r--r-- 1 root root 307200 11-29 17:54 log.tar


-rw-r--r-- 1 root root 1413 11-29 17:55 log.tar.bz2


-rw-r--r-- 1 root root 1413 11-29 17:54 log.tar.gz


說明:


tar -cvf log.tar log2012.log 僅打包,不壓縮!


tar -zcvf log.tar.gz log2012.log 打包後,以 gzip 壓縮


tar -zcvf log.tar.bz2 log2012.log 打包後,以 bzip2 壓縮


在參數 f 以後的文件檔名是本身取的,咱們習慣上都用 .tar 來做爲辨識。 若是加 z 參數,則以 .tar.gz 或 .tgz 來表明 gzip 壓縮過的 tar包; 若是加 j 參數,則以 .tar.bz2 來做爲tar包名。


實例2:查閱上述 tar包內有哪些文件


命令:


tar -ztvf log.tar.gz


輸出:


[root@localhost test]# tar -ztvf log.tar.gz


---xrw-r-- root/root 302108 2012-11-13 06:03:25 log2012.log


說明:


因爲咱們使用 gzip 壓縮的log.tar.gz,因此要查閱log.tar.gz包內的文件時,就得要加上 z 這個參數了。


實例3:將tar 包解壓縮


命令:


tar -zxvf /opt/soft/test/log.tar.gz


輸出:


[root@localhost test3]# ll


總計 0[root@localhost test3]# tar -zxvf /opt/soft/test/log.tar.gz


log2012.log


[root@localhost test3]# ls


log2012.log


[root@localhost test3]#


說明:


在預設的狀況下,咱們能夠將壓縮檔在任何地方解開的


實例4:只將 /tar 內的 部分文件解壓出來


命令:


tar -zxvf /opt/soft/test/log30.tar.gz log2013.log


輸出:


[root@localhost test]# tar -zcvf log30.tar.gz log2012.log log2013.log


log2012.log


log2013.log


[root@localhost test]# ls -al log30.tar.gz


-rw-r--r-- 1 root root 1512 11-30 08:19 log30.tar.gz


[root@localhost test]# tar -zxvf log30.tar.gz log2013.log


log2013.log


[root@localhost test]# ll


-rw-r--r-- 1 root root 1512 11-30 08:19 log30.tar.gz


[root@localhost test]# cd test3


[root@localhost test3]# tar -zxvf /opt/soft/test/log30.tar.gz log2013.log


log2013.log


[root@localhost test3]# ll


總計 4


-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log


[root@localhost test3]#


說明:


我能夠透過 tar -ztvf 來查閱 tar 包內的文件名稱,若是單隻要一個文件,就能夠透過這個方式來解壓部分文件!


實例5:文件備份下來,而且保存其權限


命令:


tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log


輸出:


[root@localhost test]# ll


總計 0


-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log


-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log


-rw-r--r-- 1 root root 0 11-16 14:41 log2016.log


[root@localhost test]# tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log


log2014.log


log2015.log


log2016.log


[root@localhost test]# cd test6


[root@localhost test6]# ll


[root@localhost test6]# tar -zxvpf /opt/soft/test/log31.tar.gz


log2014.log


log2015.log


log2016.log


[root@localhost test6]# ll


總計 0


-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log


-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log


-rw-r--r-- 1 root root 0 11-16 14:41 log2016.log


[root@localhost test6]#


說明:


這個 -p 的屬性是很重要的,尤爲是當您要保留本來文件的屬性時


實例6:在 文件夾當中,比某個日期新的文件才備份


命令:


tar -N "2012/11/13" -zcvf log17.tar.gz test


輸出:


[root@localhost soft]# tar -N "2012/11/13" -zcvf log17.tar.gz test


tar: Treating date `2012/11/13' as 2012-11-13 00:00:00 + 0 nanoseconds


test/test/log31.tar.gz


test/log2014.log


test/linklog.log


test/log2015.log


test/log2013.log


test/log2012.log


test/log2017.log


test/log2016.log


test/log30.tar.gz


test/log.tar


test/log.tar.bz2


test/log.tar.gz


說明:


實例7:備份文件夾內容是排除部分文件


命令:


tar --exclude scf/service -zcvf scf.tar.gz scf/*


輸出:


[root@localhost test]# tree scf


scf


|-- bin


|-- doc


|-- lib


`-- service


`-- deploy


|-- info


`-- product


7 directories, 0 files


[root@localhost test]# tar --exclude scf/service -zcvf scf.tar.gz scf/*


scf/bin/


scf/doc/


scf/lib/


[root@localhost test]#

相關文章
相關標籤/搜索