tar是Linux環(huán)境下最常用的備份工具之一。tar(tap archive)原意為操作磁帶文件,但基于Linux的文件操作機(jī)制,同樣也可適用于普通的磁盤文件。tar可用于建立、還原、查看、管理文件,也可方便的追加新文件到備份文件中,或僅更新部分的備份文件,以及解壓、刪除指定的文件。熟悉其常用參數(shù),能方便日常的系統(tǒng)管理工作。
一、版本還是那句,不同的操作系統(tǒng),tar的命令參數(shù)是有點(diǎn)區(qū)別的:
引用
# tar --version
tar (GNU tar) 1.14
二、簡(jiǎn)單操作命令格式:
tar [options] [tarfile] [other-files]
tar--long-option -function-options files
tar可使用的參數(shù)非常多,先列舉幾個(gè)最常用的參數(shù):
引用
-t, --list
列出歸檔文件內(nèi)容目錄
-x, --extract, --get
從歸檔文件中解析文件
-c, --create
創(chuàng)建新的歸檔文件
上面三個(gè)參數(shù),不能同時(shí)存在,僅能使用其中一個(gè),即t/x/c
-f file, --file=file
指定備份文件,或設(shè)備,例如磁帶機(jī)/dev/st0
-v, --verbose
顯示命令的執(zhí)行過程
-Z, --compress, --uncompress
使用compress命令處理備份文件
-z, --gzip, --gunzip, --ungzip
使用gzip命令處理備份文件
-j, --I, --bzip
使用bzip2命令處理備份文件
-z和-j都是在備份文件打包后才進(jìn)行壓縮的操作的,并且,該操作會(huì)影響其他的參數(shù),后面會(huì)再提到
-C directory, --directory=directory
先進(jìn)入指定的目錄,再釋放
簡(jiǎn)單使用:
把/etc目錄中所有的文件打包為etc.tar文件
tar -cvf /tmp/etc.tar /etc
把/etc目錄中所有的文件打包并使用gzip壓縮為etc.tar.gz文件
tar -zcvf /tmp/etc.tar.gz /etc
把/etc目錄中所有的文件打包并使用bzip2壓縮為etc.tar.bz2文件
這里的,tar.gz或tar.bz2都是慣例,為方便標(biāo)識(shí)的,例如:tgz等,并不是特定條件,但建議遵循慣例
tar -jcvf /tmp/etc.tar.bz2 /etc
查看備份包中的內(nèi)容,若為已經(jīng)壓縮的文件,需加上-z或者-j參數(shù)
tar -ztvf /tmp/etc.tar.gz
默認(rèn)情況下,tar打包時(shí)都是使用相對(duì)路徑的,所以,釋放時(shí),需要先進(jìn)入目錄目錄,然后再解壓
同樣的,根據(jù)使用的壓縮方式,應(yīng)加上-z或者-j參數(shù)
cd /tmp && tar -zxvf /tmp/etc.tar.gz
這是另一種寫法,結(jié)果和上面的相同,其會(huì)先進(jìn)入/tmp目錄,然后再釋放包的
tar -zxvf /tmp/etc.tar.gz -C /tmp
釋放單個(gè)etc/passwd文件,正如前面提到的,tar包中的是相對(duì)路徑,所以不能使用“/etc/passwd”
而且,這里不能使用-C參數(shù),釋放文件是當(dāng)前路徑的相對(duì)路徑,并帶目錄釋放
tar -zxvf /tmp/etc.tar.gz etc/passwd
tar還可以支持很多額外的參數(shù),方便我們?cè)趥浞莺歪尫诺臅r(shí)候進(jìn)行控制。
三、更多參數(shù)
以三大常見操作為序說明。
1、備份引用
-d, --diff, --compare
找出歸檔文件和文件系統(tǒng)的不同之處
-r, --append
將文件附加到歸檔文件之后
-u, --update
只附加比歸檔中新的文件
-A, --catenate
將 tar 文件附加到歸檔文件之后
--concatenate
與 -A 相同
--delete
從歸檔文件中刪除 (不能在磁帶上?。?br>-N date, --newer=date, --after-date=date
只將比指定日期更新的文件保存到備份文件
--exclude=pattern
排除符合查找模式的文件
-P, --absolute-names
備份文件中的文件名使用絕對(duì)路徑,而不移除文件名前的“/”,默認(rèn)是相對(duì)路徑的
-l, --one-file-system
復(fù)制文件或目錄存放的文件系統(tǒng)必須和tar命令當(dāng)前執(zhí)行的文件系統(tǒng)相同,否則不執(zhí)行;也就是講,不處理其他分區(qū)的文件。(可忽略mount掛載分區(qū)的問題)
--mode=permissions
備份時(shí),把加入備份文件中的文件屬性修改為指定的屬性,格式和chmod命令接受的格式相同
--group=group
備份時(shí),把加入備份文件中的文件所屬組設(shè)定成指定的組
--owner=owner
備份時(shí),把把加入備份文件中的文件所有者設(shè)定成指定的用戶
--numeric-owner
以UID和GID代替用戶名和組名
--recursion
遞歸模式(默認(rèn))
--no-recursion
不進(jìn)行遞歸處理,即不把指定目錄下的所有文件和文件夾都備份
--newer-mtime=date
Add only files whose contents have changed since date to the archive.
僅增加指定日期后修改過內(nèi)容的文件到備份文件中
--anchored
排除時(shí),排除匹配式中匹配整個(gè)文件路徑(默認(rèn))
--no-anchored
排除時(shí),排除匹配式中可匹配“/”后的路徑
--ignore-case
排除時(shí),排除匹配式中忽略大小寫
--no-ignore-case
排除時(shí),排除匹配式中大小寫敏感(默認(rèn))
--wildcards
排除匹配式支持通配符(默認(rèn))
--no-wildcards
排除匹配式不支持通配符
--wildcards-match-slash
排除匹配式的通配符匹配“/”(默認(rèn))
--no-wildcards-match-slash
排除匹配式的通配符不匹配“/”
-X file, --exclude-from file
指定樣式文件,供程序執(zhí)行時(shí)剔除符合條件的文件
--remove-files
刪除已經(jīng)加入到備份文件中的文件
舉例:
創(chuàng)建當(dāng)前目錄的全備份到backup.tar文件
(使用find的原因是,這樣可以打包所有隱含文件或不符合命令規(guī)范的文件和目錄)
tar cvf - `find . -print` > backup.tar
比2005年6月1日新的文件才會(huì)備份
tar -N '2005/06/01' -zcvf home.tar.gz /home
除/home/dmtsai目錄外,/home和/etc目錄的所有東西都打包
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
刪除etc.tar文件中的etc/pbm2ppa.conf文件
tar --delete etc/pbm2ppa.conf -vf etc.tar
把tmp.tar文件附加到etc.tar后面
tar -A tmp.tar -vf etc.tar
根據(jù)-T參數(shù)后的樣式文件list.txt,打包/etc中指定的文件,同樣的,list.tx默認(rèn)也是相對(duì)路徑的
find . -name "*.d" -o -name "*.conf" > list.txt
tar -T list.txt -czvf etc.tar.gz /etc
通過管道,使用一條命令實(shí)現(xiàn)上面相同的功能
find . -name "*.d" -o -name "*.conf" | tar -czvf etc.tar.gz -T -
※值得注意幾個(gè)地方引用
1)-f后面必須緊跟備份文件,xxx.tar或者xxx.tar.gz
2)使用--delete、-u、-r、-A的時(shí)候,后面跟的備份文件都必須為未壓縮的,若備份文件已經(jīng)壓縮,需要使用gunzip先解壓,操作完后再gzip;
也就是說,不能對(duì)tar.gz、tar.bz2等文件直接操作的;
3)備份打包時(shí),默認(rèn)為相對(duì)路徑;而排除匹配式默認(rèn)也是全路徑匹配的
所以,在打包時(shí),會(huì)提示:“tar: Removing leading `/' from member names”
除非你使用-P參數(shù)或特定的參數(shù)指定
2、釋放
引用
-k, --keep-old-files
還原備份文件時(shí),不覆蓋已存在的文件
-m, --modification-time, --touch
還原文件時(shí),不變更文件的更改時(shí)間
-p, --same-permissions
解析許可權(quán)限信息,即保留備份文件中的權(quán)限信息
-s, --same-order, --preserve-order
以與備份文件相同的順序還原文件
--preserve
等于同時(shí)設(shè)置-p和-s
--no-same-permissions
不解析許可權(quán)限信息,這是普通用戶的默認(rèn)設(shè)置,僅對(duì)影響管理員的操作有影響
--no-same-owner
不使用備份文件中的所有者信息,而以您自己的身份解析文件
--same-owner
使用相同的文件所有者還原文件
--overwrite
覆蓋已經(jīng)存在的文件和目錄
--overwrite-dir
覆蓋已經(jīng)存在的目錄
--recursive-unlink
釋放前,先刪除整個(gè)目錄下所有文件的連接
舉例:
釋放文件時(shí),設(shè)置為備份文件中的相同所有者(僅對(duì)管理員而言)
tar --same-owner -xzvf etc.tar.gz
通過管道,把/etc目錄用tar整個(gè)“拷貝”到/backup/etc,而不用建立任何臨時(shí)文件
因?yàn)楦静恍枰蓚浞莅募赃@里不需要-z參數(shù)
tar cvf - /etc | tar xvf - -C /backup/etc
這里同上面的原理是一樣的,只不過通過ssh直接“拷貝”到遠(yuǎn)端機(jī)器上而已
配合ssh密鑰匹配,可實(shí)現(xiàn)不用人工干預(yù)的備份工作
tar cvf - /etc | (ssh root@192.168.228.244 'tar xvf - -C /backup/etc')
3、操作磁帶設(shè)備部分參數(shù)只適用于磁帶設(shè)備,不適用于常規(guī)的磁盤文件。
引用
-K file, --starting-file=file
從指定的文件開始還原(按順序)
-L length, --tape-length=length
設(shè)置磁帶的容量,單位為1024字節(jié)(bytes)
-M, --multivolume
在建立、還原備份文件或列出其中內(nèi)容時(shí),采用多卷模式(不能對(duì)文件操作)
-V name, --label=name
建立使用指定卷標(biāo)的備份文件
-W, --verify
寫入備份文件后,校驗(yàn)文件是否正常
-F script, --info-script=script, --new-volume-script=script
更換磁帶時(shí)執(zhí)行指定的腳本文件,必須與參數(shù)-M同時(shí)使用
舉例:
把/bin、/usr/bin目錄都打包到st0磁帶設(shè)備中
tar cvf /dev/st0 /bin /usr/bin
把old.dmp文件追加到st0磁帶中(使用cvf,會(huì)刪除原來(lái)的文件的)
Linux下使用磁帶機(jī)的簡(jiǎn)單方法,可以見這里:
點(diǎn)擊tar rvf /dev/st0 old.dmp
4、其他還有一些控制參數(shù)這里不詳細(xì)討論了,請(qǐng)自行測(cè)試。
但提醒一句,-T參數(shù)比較重要哦。
引用
--null
-T從null設(shè)備讀取文件名,覆蓋-C的設(shè)置
-o, --old-archive, --portability
將數(shù)據(jù)寫入備份文件時(shí)使用V7格式
--posix
將數(shù)據(jù)寫入備份文件時(shí)使用POSIX格式
-G, --incremental
處理舊GNU格式的增量備份
--rsh-command=command
不使用rsh命令連接遠(yuǎn)程主機(jī),而使用指定的命令進(jìn)行
--suffix=suffix
指定要?jiǎng)h除文件前備份文件,該備份文件使用的后綴,默認(rèn)是“~”
--totals
創(chuàng)建備份文件時(shí),列出已建立的備份文件的大小
tar --totals -cvf tmp.tar tmp/
-R, --block-number
在輸出信息時(shí),一同block number信息
-S, --sparse
若文件中有大量連續(xù)0字節(jié)時(shí),將該文件保存成稀疏文件
-T file, --files-from=file
指定樣式文件,文件內(nèi)容為一個(gè)或多個(gè)條件樣式,供程序還原或創(chuàng)建符合指定條件的文件
--use-compress-program=program
使用指定的壓縮程序?qū)浞菸募嚎s或解壓
--volno-file=FILE
使用或更新FILE文件中指定的卷號(hào)碼
-w, --interactive, --confirmation
當(dāng)遇到問題時(shí),要求用戶先確認(rèn)
-B, --read-full-records
讀取數(shù)據(jù)是重設(shè)扇區(qū)大小,僅適用于BSD 4.2的管道操作
-O, --to-stdout
把從備份文件里還原的文件輸出到標(biāo)準(zhǔn)輸出設(shè)備
--version
版本信息
--help
幫助信息