UNIX命令解析——tar 命令高級應用

原文地址:UNIX命令解析——tar 命令高級應用  作者:macg

tar -cvf tar文件 源文件
源文件可以是*,可以是目錄,可以是多個目錄)
tar –czvf sqlhosts.tar *
tar –czvf sqlhosts.tar /.rhosts
tar –czvf sqlhosts.tar /.rhosts /home1/scadm/.rhosts /home1/unoadmin/.rhosts


tar命令無法自動生成.tar.gz擴展名,得自己加
[macg@localhost ~]$ tar -czvf wwwtar www
[macg@localhost ~]$ ls -l
drwxrwxr-x 7 macg macg 4096 Dec 1 12:46 www
-rw-rw-r-- 1 macg macg 1866761 Dec 3 18:38 wwwtar


tar三個重要參數
-f 允許指定文件名
不帶f參數,後面的文件名參數就不管用,系統會取缺省文件名
-v Verbose , 顯示每個被處理的文件名
如無此選項,tar不報告文件信息
-z 用gzip來壓縮/解壓縮文件


tar 是連文件屬性一起tar和解 tar的,相當於cp –rp,所以tar是非常好的備分工具
[root@localhost tiptest]# ls -l www
total 608
-rw-r--r-- 1 macg macg 6396 Nov 29 15:12 book.TXT
-rw-r--r-- 1 macg macg 1161 Nov 29 19:25 car-right1.html
-rw-r--r-- 1 macg macg 1096 Nov 29 15:12 car-right.html
-rw-r--r-- 1 macg macg 3242 Nov 29 15:12 cc.html
-rw-r--r-- 1 macg macg 3259 Nov 29 15:12 cc.html.bak
drwxr-xr-x 4 macg macg 4096 Feb 9 13:53 data
[root@localhost tiptest]# tar -cvf tipwww.tar www

[root@localhost]# tar -xvf tipwww.tar

[root@localhost]# ls -l www
total 608
-rw-r--r-- 1 macg macg 6396 Nov 29 15:12 book.TXT
-rw-r--r-- 1 macg macg 1161 Nov 29 19:25 car-right1.html
-rw-r--r-- 1 macg macg 1096 Nov 29 15:12 car-right.html
-rw-r--r-- 1 macg macg 3242 Nov 29 15:12 cc.html
-rw-r--r-- 1 macg macg 3259 Nov 29 15:12 cc.html.bak
drwxr-xr-x 4 macg macg 4096 Feb 9 13:53 data


Tar幾個不常用的選項
-t 列出tar文件內內容
-r 追加到檔案文件的未尾
例如用戶已經做好備份文件,又發現還有一個目錄或是一些文件忘記備份了,這時可以使用該選項,將忘記的目錄或文件追加到備份文件中
-u 更新
相同文件會比較更新日期,修改過的文件會被tar入


tar -tvf
[macg@localhost ~]$ tar -tvf wwwtar
drwxrwxr-x macg/macg 0 2006-12-01 12:46:07 www/
-rw-r--r-- macg/macg 6396 2006-11-29 15:12:04 www/book.TXT
-rw-r--r-- macg/macg 1096 2006-11-29 15:12:04 www/car-right.html
-rw-r--r-- macg/macg 3242 2006-11-29 15:12:04 www/cc.html
-rw-r--r-- macg/macg 58368 2006-11-29 15:12:04 www/fire2.xls
-rw-r--r-- macg/macg 25371 2006-11-29 15:12:05 www/resume.html


tar -rvf 追加
$ tar -rvf mysqlt mysqltmp/testtar1.file 追加一個文件
mysqltmp/testtar1.file

$ tar -tvf mysqlt
drwxrwxr-x macg/macg 0 2006-12-03 18:52:34 mysqltmp/
-rw-rw-r-- macg/macg 3140 2006-11-14 13:38:41 mysqltmp/pp.c
-rw-rw-r-- macg/macg 2687 2006-11-14 13:38:36 mysqltmp/pp.c~
-rw-rw-r-- macg/macg 0 2006-12-03 18:52:34 mysqltmp/testtar.file
-rw-rw-r-- macg/macg 0 2006-12-03 19:09:30 mysqltmp/testtar1.file


tar -uvf 比較tar文件和目錄中文件的最近更新時間,修改過的才tar入
常用於定期對目錄tar備分
· 文件更新不替換舊文件
$ tar -cvf txing.tar tiptest/ 建立一個tar文件
tiptest/
tiptest/tt.c
tiptest/slave1.sh
tiptest/testm.c
tiptest/ttt1

改變目錄中一文件大小
$ cd tiptest/
[macg@localhost tiptest]$ ls -l ttt1
-rw-rw-r-- 1 macg macg 529 Feb 7 19:16 ttt1
$ echo hahahahahahahah >> ttt1
$ ls -l ttt1
-rw-rw-r-- 1 macg macg 545 Feb 7 19:37 ttt1

$ cd ..
$ tar -uvf txing.tar tiptest/ tar更新
tiptest/
tiptest/ttt1 -uvf 只把新文件加入

$ tar -tvf txing.tar 看結果,新舊兩個文件都在,新文件不覆蓋舊文件,
。。。
-rw-rw-r-- macg/macg 365 2006-12-22 12:56:57 tiptest/testm.c
-rw-rw-r-- macg/macg 529 2007-02-07 19:16:57 tiptest/ttt1
drwxrwxr-x macg/macg 0 2007-02-07 19:36:41 tiptest/
-rw-rw-r-- macg/macg 545 2007-02-07 19:37:28 tiptest/ttt1


· -utar更新,對新文件就是追加
$ cd tiptest/
$ touch gogo
$ cd ..
$ tar -uvf txing.tar tiptest/
tiptest/
tiptest/gogo



追加-rvf,更新-uvf都只支持tar文件,不支持tar.gz
即使不帶-z也不行,因爲本身文件是被壓縮過的,也打不開

--directory 先到目錄..,然後再tar
tar -zcvf test.tar.gz --directory /home
先cd /home
再tar文件,但source缺省就是當前目錄(/home)
本參數主要是一種“傻瓜式”的指令,在任何路徑都能執行tar

--exclude= 不要備份所指定的檔案或目錄
tar -zcvpf /archive/full-backup-`date '+%d-%B-%Y'`.tar.gz --directory / --exclude=mnt --exclude=proc --exclude=var/spool
--exclude和--directory合用:除exclude外,directory下所有文件目錄都tar入


tar -xzvf tar文件 解tar
只需要tar文件作參數


tar時,自動把路徑名的第一個/給去掉,這樣解tar時,就可以在當前目錄,建立目錄路徑
即:“tar是絕對路徑,解tar是相對路徑”
[root@nm ntshellhttp]# tar -cvf ntshellhttp.tar /var/www/html/* /var/www/cgi-bin/* /etc/sudoers /etc/mime.types /etc/httpd/conf/httpd.conf
tar: Removing leading `/' from member names
/var/www/html/addr.shtml
/var/www/html/banner.jpg
/var/www/cgi-bin/modiaddr
/var/www/cgi-bin/pass
/var/www/cgi-bin/power
/var/www/cgi-bin/showint
/var/www/cgi-bin/snmp
/var/www/cgi-bin/up.inc
/etc/sudoers
/etc/mime.types
/etc/httpd/conf/httpd.conf

[root@nm ntshellhttp]# tar -tvf ntshellhttp.tar
-rw-r----- apache/apache 238 2007-11-01 12:48:45 var/www/html/addr.shtml
-rw-r----- apache/apache 23782 2007-10-29 07:47:07 var/www/html/banner.jpg
-rw-r----- apache/apache 237 2007-11-01 12:46:52 var/www/html/date.shtml
-rw-r----- apache/apache 239 2007-11-01 12:46:51 var/www/html/dbinit.shtml
-rwxr----- apache/apache 134 2007-11-01 12:46:40 var/www/cgi-bin/showint
-rwxr----- apache/apache 1707 2007-11-01 12:46:40 var/www/cgi-bin/snmp
-rwxr--r-- apache/apache 49 2007-10-29 05:02:17 var/www/cgi-bin/up.inc
-r--r----- root/root 627 2007-10-31 13:42:51 etc/sudoers
-rw-r--r-- root/root 13167 2007-08-20 13:45:17 etc/mime.types
-rw-r--r-- root/root 34670 2007-11-01 12:45:37 etc/httpd/conf/httpd.conf


因爲tar的時候,去掉文件路徑最前面的“/”,所以解tar不會將文件解TAR到原目錄,只能將這些文件解tar到當前目錄下(以當前目錄爲根目錄,然後建立該建的目錄)
所以如果想原位置覆蓋,必須先 cd 到原來的目錄
cd /
tar -xvf ntshellhttp.tar

tar -kx 解壓時不會覆蓋overwrite
把某個文件還原,在還原的過程中遇到相同的文件,不會進行覆蓋
[macg@localhost ~]$ tar -kxzvf mysqlsample.tar.gz
mysqltmp/
mysqltmp/liu.c
tar: mysqltmp/liu.c: Cannot open: File exists
mysqltmp/makefile
tar: mysqltmp/makefile: Cannot open: File exists
mysqltmp/liu.o
tar: mysqltmp/liu.o: Cannot open: File exists 文件存在,就不覆蓋
mysqltmp/main.c
tar: mysqltmp/main.c: Cannot open: File exists
mysqltmp/liu
tar: mysqltmp/liu: Cannot open: File exists
mysqltmp/main.o
tar: mysqltmp/main.o: Cannot open: File exists
mysqltmp/tt.c
tar: mysqltmp/tt.c: Cannot open: File exists
mysqltmp/tt
tar: mysqltmp/tt: Cannot open: File exists
tar: Error exit delayed from previous errors
如果不是刻意要覆蓋原文件的話,解壓最好用-kxzvf代替-xzvf,不覆蓋


解tar,如何解到正確的位置
·1。tar -t 看路徑
·2。cd 當前位置到合適的路徑
·3。截tar,就會覆蓋
比如/root/test.tar
裏面文件/etc,/usr
則:
cd /
tar -xvf /root/test.tar


部分解tar -----------把tar文件中指定文件解出
# tar xvf backup.tar tt.txt


部分解tar -----------從tar文件中tar出一個子目錄來
# tar -tvf export.tar | grep kkk
drwxr-xr-x 102/1 0 2006 12月 7 15:54 /export/home/kkk/
-rw-r--r-- 102/1 144 2006 12月 7 15:53 /export/home/kkk/.profile
-rw-r--r-- 102/1 136 2006 12月 7 15:53 /export/home/kkk/local.cshrc
-rw-r--r-- 102/1 157 2006 12月 7 15:53 /export/home/kkk/local.login
-rw-r--r-- 102/1 174 2006 12月 7 15:53 /export/home/kkk/local.profile
-rw-r--r-- 102/1 0 2006 12月 7 15:54 /export/home/kkk/go
-rw-r--r-- 101/1 0 2006 12月 7 14:52 /export/test/kkk

# tar -xvf export.tar /export/home/kkk

x /export/home/kkk, 0 bytes, 0磁帶塊
x /export/home/kkk/.profile, 144 bytes, 1磁帶塊
x /export/home/kkk/local.cshrc, 136 bytes, 1磁帶塊
x /export/home/kkk/local.login, 157 bytes, 1磁帶塊
x /export/home/kkk/local.profile, 174 bytes, 1磁帶塊
x /export/home/kkk/go, 0 bytes, 0磁帶塊


從tar包中提取單個文件/目錄的缺陷
缺陷一:單個文件必須加全路徑提取
# tar -tvf etc.tar| grep defaultrouter
-rw-r--r-- 0/0 12 2006 12月 7 02:10 /etc/defaultrouter 先查-tvf
# tar -xvf etc.tar defaultrouter
tar: 1 文件未提取
# tar -xvf etc.tar /etc/defaultrouter
/etc/defaultrouter, 12 bytes, 1磁帶塊
缺陷二:只能放到tar前的原始路徑處(可能會覆蓋),不能先提出到本地目錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章