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