linux tar命令疑難解析(經驗總結)
linux tar命令疑難解析(多年經驗總結)
一、-T:從檔名清單建立tar歸檔
1、名單檔案
# find / -name "*.txt" -o -name "*.log" > txtlog.lst
2、從檔名清單建立tar歸檔
# tar -czPf log.tgz -T txtlog.lst
3、補充:檔名匹配選項(同時影響排除和包括模式串):
--ignore-case 忽略大小寫
--no-ignore-case 匹配大小寫(預設)
--no-wildcards 逐字匹配字串
--no-wildcards-match-slash 萬用字元不匹配‘/’
--wildcards use wildcards (default)
二、-P, --absolute-names:不要從檔名中清除引導符‘/’
1、有-P——預設還原到原絕對目錄下
# rm -rf /a1;rm -rf /tmp/*;mkdir -p /a1/a2/a3
# tar -cvPWf a1.tar /a1 補充:-W, --verify在寫入以後嘗試校驗歸檔
/a1/
/a1/a2/
/a1/a2/a3/
Verify /a1/
Verify /a1/a2/
Verify /a1/a2/a3/
# rm -rf /a1
# tar -xvPf a1.tar
/a1/
/a1/a2/
/a1/a2/a3/
# tree /a1
/a1
`-- a2
`-- a3
2、無-P——預設還原到當前目錄下
# rm -rf /a1
# rm -rf /tmp/*
# mkdir -p /a1/a2/a3
# tar -cvf a1.tar /a1
tar: Removing leading `/' from member names
/a1/
/a1/a2/
/a1/a2/a3/
# rm -rf /a1
# tar -xvPf a1.tar
a1/
a1/a2/
a1/a2/a3/
# tree /a1
/a1 [error opening dir]
# tree ./a1
./a1
`-- a2
`-- a3
三、-N,--newer=DATE:只打包更新過的檔案
# date
Tue Jul 15 16:23:54 CST 2014
# tar -N "2014/07/14" -cf 15.tar /u01/crs_1/racg 打包壓縮比2014/07/14新的檔案
# tar -tvf 15.tar |grep -v ^d|awk '{print $4,$NF}'
2014-07-15 u01/crs_1/racg/tmp/ora.rac1.ons.tmp
2014-07-15 u01/crs_1/racg/tmp/ora.RACDB.RACDB1.inst.mode
四、--exclude:打包目錄時排除子目錄或排除目錄中的檔案
# mkdir -p /dir1/dir2
# touch /dir1/{a2.txt,a2.log,f2,jpg}
# ls /dir1
a2.log a2.txt dir2 f2 jpg
# touch /dir1/dir2/{f3.txt,f3.log,f3.jpg}
# ls /dir1/dir2
f3.jpg f3.log f3.txt
# tar -cvf dir1.tar /dir1 --exclude dir2 --exclude a2.txt --exclude *.log (排除子目錄dir2時不要加/)
tar: Removing leading `/' from member names
/dir1/
/dir1/f2
/dir1/jpg
五、打包壓縮並分割成多個檔案
1、打包並分割
# tar cf - /boot |split -b 5m - boot.tar
# ls
boot.taraa boot.tarab boot.tarac boot.tarad
2、作為整體解包
# cat boot.tara* | tar x
# du -sh boot
18M boot
# du -sh /boot
18M /boot
六、老式的tar增量備份不支援壓縮:-u, --update
1、第一次增量
# rm -rf test;mkdir test;touch test/a #建立測試路徑與檔案
# tar cvf backup.tar test #備份資料
test/
test/a
2、第二次增量
# touch test/b;echo 123 > test/a #新增一個檔案, 並改動一個檔案內容
# tar uvf test.tar test #更新 (-u 只能處理未壓縮的 tarball)
test/
test/a
test/b
3、還原
# rm -rf test #清除測試資料
# tar xf test.tar #解包 tarball
# tree test #檢視測試資料
test
|-- a
`-- b
七、GNU 格式的tar增量備份支援壓縮:-g
1、完整備份
# rm -rf test;mkdir test;touch test/a #建立測試環境
# tar -g snapshot -zvcf test_full.tgz test #執行完整備份
test/
test/a
2、第一次增量備份
# touch test/b #新增
# tar -g snapshot -zvcf test_incremental_1.tgz test #執行第一次的差量備份
test/
test/b
3、第二次增量備份
# touch test/c;echo 123 > test/a #新增+改變
# tar -g snapshot -zcf test_incremental_2.tgz test #執行第二次的差量備份 (注意 tarball 名)
# tar ztf test_incremental_2.tgz #檢視 tarball 內容
test/
test/a
test/c
4、還原
# rm -rf test #清空測試資料
# tar zxf test_full.tgz #開始進行資料還原
# tar zxf test_incremental_1.tgz
# tar zxf test_incremental_2.tgz
5、驗證
# ls test
a b c
八、其它技巧
1、解壓其中的兩個檔案
# tar -cf etc.tar /etc
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
# tar -xvf etc.tar etc/sysconfig/network etc/inittab
etc/inittab
etc/sysconfig/network
# tree etc
etc
|-- inittab
`-- sysconfig
`-- network
1 directory, 2 files
2、-r, --append:追加檔案至歸檔結尾
# tar -tvf etc.tar etc/sysconfig/network
-rw-r--r-- root/root 48 2011-06-03 23:22:26 etc/sysconfig/network
# tar -vf etc.tar --delete etc/sysconfig/network
# tar -tvf etc.tar etc/sysconfig/network
tar: etc/sysconfig/network: Not found in archive
tar: Error exit delayed from previous errors
# tar -rvf etc.tar /etc/sysconfig/network
tar: Removing leading `/' from member names
/etc/sysconfig/network
# tar -tvf etc.tar etc/sysconfig/network
-rw-r--r-- root/root 48 2011-06-03 23:22:26 etc/sysconfig/network 選項-r向歸檔檔案中新增檔案
3、-C解到指定目錄
# rm -rf /etc1;mkdir /etc1
# tar -xf etc.tar -C /etc1
# ls /etc1
etc
4、用-A拼接兩個壓縮檔案
# tar -cPf a1.tar /etc/inittab
# tar -cPf a2.tar /etc/hosts
# tar -Avf a1.tar a2.tar
# tar -tvf a1.tar
-rw-r--r-- root/root 1869 2014-07-11 14:07:39 /etc/inittab
-rw-r--r-- root/root 322 2011-06-03 23:22:26 /etc/hosts
5、-v, --verbose:詳細地列出處理的檔案
# tar -cPf b.tar /etc/inittab /etc/hosts
# tar tf b.tar
/etc/inittab
/etc/hosts
# tar tvf b.tar
-rw-r--r-- root/root 1869 2014-07-11 14:07:39 /etc/inittab
-rw-r--r-- root/root 322 2011-06-03 23:22:26 /etc/hosts
6、linux磁帶操作
# tar -tf /dev/st0 檢視磁帶檔案清單
# tar -cf /dev/st0 /var/log 備份指定內容到磁帶中
# tar -r /etc/inittab -f /dev/st0 將檔案附加到磁帶後面
# tar -xf /dev/st0 /etc/ 解壓指定的檔案
九、補充:tar --help幫助翻譯(摘要)
1、主操作模式:
-A, --catenate,--concatenate 追加 tar 檔案至歸檔
-c, --create 建立一個新歸檔
-d, --diff, --compare 找出歸檔和檔案系統的差異
--delete 從歸檔(非磁帶!)中刪除
-r, --append 追加檔案至歸檔結尾
-t, --list 列出歸檔內容
-u, --update 僅追加比歸檔中副本更新的檔案
-x, --extract, --get 從歸檔中解出檔案
2、操作修飾符:
-g, --listed-incremental=FILE 處理新式的 GNU 格式的增量備份
-G, --incremental 處理老式的 GNU 格式的增量備份
3、重寫控制:
-k, --keep-old-files 解壓時不要替換存在的檔案
--keep-newer-files 不要替換比歸檔中副本更新的已存在的檔案
-W, --verify 在寫入以後嘗試校驗歸檔
4、操作檔案屬性:
-p, --preserve-permissions, --same-permissions 用原來的檔案許可權還原檔案(預設只為root戶服務)
5、壓縮選項:
-a, --auto-compress 使用歸檔字尾名來決定壓縮程式
-j, --bzip2 使用 bzip2 處理歸檔
-z, --gzip, --gunzip 使用 gzip 處理歸檔
-Z, --compress, --uncompress 使用 compress 處理歸檔
6、本地檔案選擇:
-C, --directory=DIR 改變至目錄 DIR
-T, --files-from=FILE 從 FILE中獲取檔名來解壓或建立檔案
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
7、提示性輸出:
-v, --verbose 詳細地列出處理的檔案
-w, --interactive, --confirmation 每次操作都要求確認
zcs0237
2014.07.16
More cleaner and more efficient!
一、-T:從檔名清單建立tar歸檔
1、名單檔案
# find / -name "*.txt" -o -name "*.log" > txtlog.lst
2、從檔名清單建立tar歸檔
# tar -czPf log.tgz -T txtlog.lst
3、補充:檔名匹配選項(同時影響排除和包括模式串):
--ignore-case 忽略大小寫
--no-ignore-case 匹配大小寫(預設)
--no-wildcards 逐字匹配字串
--no-wildcards-match-slash 萬用字元不匹配‘/’
--wildcards use wildcards (default)
二、-P, --absolute-names:不要從檔名中清除引導符‘/’
1、有-P——預設還原到原絕對目錄下
# rm -rf /a1;rm -rf /tmp/*;mkdir -p /a1/a2/a3
# tar -cvPWf a1.tar /a1 補充:-W, --verify在寫入以後嘗試校驗歸檔
/a1/
/a1/a2/
/a1/a2/a3/
Verify /a1/
Verify /a1/a2/
Verify /a1/a2/a3/
# rm -rf /a1
# tar -xvPf a1.tar
/a1/
/a1/a2/
/a1/a2/a3/
# tree /a1
/a1
`-- a2
`-- a3
2、無-P——預設還原到當前目錄下
# rm -rf /a1
# rm -rf /tmp/*
# mkdir -p /a1/a2/a3
# tar -cvf a1.tar /a1
tar: Removing leading `/' from member names
/a1/
/a1/a2/
/a1/a2/a3/
# rm -rf /a1
# tar -xvPf a1.tar
a1/
a1/a2/
a1/a2/a3/
# tree /a1
/a1 [error opening dir]
# tree ./a1
./a1
`-- a2
`-- a3
三、-N,--newer=DATE:只打包更新過的檔案
# date
Tue Jul 15 16:23:54 CST 2014
# tar -N "2014/07/14" -cf 15.tar /u01/crs_1/racg 打包壓縮比2014/07/14新的檔案
# tar -tvf 15.tar |grep -v ^d|awk '{print $4,$NF}'
2014-07-15 u01/crs_1/racg/tmp/ora.rac1.ons.tmp
2014-07-15 u01/crs_1/racg/tmp/ora.RACDB.RACDB1.inst.mode
四、--exclude:打包目錄時排除子目錄或排除目錄中的檔案
# mkdir -p /dir1/dir2
# touch /dir1/{a2.txt,a2.log,f2,jpg}
# ls /dir1
a2.log a2.txt dir2 f2 jpg
# touch /dir1/dir2/{f3.txt,f3.log,f3.jpg}
# ls /dir1/dir2
f3.jpg f3.log f3.txt
# tar -cvf dir1.tar /dir1 --exclude dir2 --exclude a2.txt --exclude *.log (排除子目錄dir2時不要加/)
tar: Removing leading `/' from member names
/dir1/
/dir1/f2
/dir1/jpg
五、打包壓縮並分割成多個檔案
1、打包並分割
# tar cf - /boot |split -b 5m - boot.tar
# ls
boot.taraa boot.tarab boot.tarac boot.tarad
2、作為整體解包
# cat boot.tara* | tar x
# du -sh boot
18M boot
# du -sh /boot
18M /boot
六、老式的tar增量備份不支援壓縮:-u, --update
1、第一次增量
# rm -rf test;mkdir test;touch test/a #建立測試路徑與檔案
# tar cvf backup.tar test #備份資料
test/
test/a
2、第二次增量
# touch test/b;echo 123 > test/a #新增一個檔案, 並改動一個檔案內容
# tar uvf test.tar test #更新 (-u 只能處理未壓縮的 tarball)
test/
test/a
test/b
3、還原
# rm -rf test #清除測試資料
# tar xf test.tar #解包 tarball
# tree test #檢視測試資料
test
|-- a
`-- b
七、GNU 格式的tar增量備份支援壓縮:-g
1、完整備份
# rm -rf test;mkdir test;touch test/a #建立測試環境
# tar -g snapshot -zvcf test_full.tgz test #執行完整備份
test/
test/a
2、第一次增量備份
# touch test/b #新增
# tar -g snapshot -zvcf test_incremental_1.tgz test #執行第一次的差量備份
test/
test/b
3、第二次增量備份
# touch test/c;echo 123 > test/a #新增+改變
# tar -g snapshot -zcf test_incremental_2.tgz test #執行第二次的差量備份 (注意 tarball 名)
# tar ztf test_incremental_2.tgz #檢視 tarball 內容
test/
test/a
test/c
4、還原
# rm -rf test #清空測試資料
# tar zxf test_full.tgz #開始進行資料還原
# tar zxf test_incremental_1.tgz
# tar zxf test_incremental_2.tgz
5、驗證
# ls test
a b c
八、其它技巧
1、解壓其中的兩個檔案
# tar -cf etc.tar /etc
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
# tar -xvf etc.tar etc/sysconfig/network etc/inittab
etc/inittab
etc/sysconfig/network
# tree etc
etc
|-- inittab
`-- sysconfig
`-- network
1 directory, 2 files
2、-r, --append:追加檔案至歸檔結尾
# tar -tvf etc.tar etc/sysconfig/network
-rw-r--r-- root/root 48 2011-06-03 23:22:26 etc/sysconfig/network
# tar -vf etc.tar --delete etc/sysconfig/network
# tar -tvf etc.tar etc/sysconfig/network
tar: etc/sysconfig/network: Not found in archive
tar: Error exit delayed from previous errors
# tar -rvf etc.tar /etc/sysconfig/network
tar: Removing leading `/' from member names
/etc/sysconfig/network
# tar -tvf etc.tar etc/sysconfig/network
-rw-r--r-- root/root 48 2011-06-03 23:22:26 etc/sysconfig/network 選項-r向歸檔檔案中新增檔案
3、-C解到指定目錄
# rm -rf /etc1;mkdir /etc1
# tar -xf etc.tar -C /etc1
# ls /etc1
etc
4、用-A拼接兩個壓縮檔案
# tar -cPf a1.tar /etc/inittab
# tar -cPf a2.tar /etc/hosts
# tar -Avf a1.tar a2.tar
# tar -tvf a1.tar
-rw-r--r-- root/root 1869 2014-07-11 14:07:39 /etc/inittab
-rw-r--r-- root/root 322 2011-06-03 23:22:26 /etc/hosts
5、-v, --verbose:詳細地列出處理的檔案
# tar -cPf b.tar /etc/inittab /etc/hosts
# tar tf b.tar
/etc/inittab
/etc/hosts
# tar tvf b.tar
-rw-r--r-- root/root 1869 2014-07-11 14:07:39 /etc/inittab
-rw-r--r-- root/root 322 2011-06-03 23:22:26 /etc/hosts
6、linux磁帶操作
# tar -tf /dev/st0 檢視磁帶檔案清單
# tar -cf /dev/st0 /var/log 備份指定內容到磁帶中
# tar -r /etc/inittab -f /dev/st0 將檔案附加到磁帶後面
# tar -xf /dev/st0 /etc/ 解壓指定的檔案
九、補充:tar --help幫助翻譯(摘要)
1、主操作模式:
-A, --catenate,--concatenate 追加 tar 檔案至歸檔
-c, --create 建立一個新歸檔
-d, --diff, --compare 找出歸檔和檔案系統的差異
--delete 從歸檔(非磁帶!)中刪除
-r, --append 追加檔案至歸檔結尾
-t, --list 列出歸檔內容
-u, --update 僅追加比歸檔中副本更新的檔案
-x, --extract, --get 從歸檔中解出檔案
2、操作修飾符:
-g, --listed-incremental=FILE 處理新式的 GNU 格式的增量備份
-G, --incremental 處理老式的 GNU 格式的增量備份
3、重寫控制:
-k, --keep-old-files 解壓時不要替換存在的檔案
--keep-newer-files 不要替換比歸檔中副本更新的已存在的檔案
-W, --verify 在寫入以後嘗試校驗歸檔
4、操作檔案屬性:
-p, --preserve-permissions, --same-permissions 用原來的檔案許可權還原檔案(預設只為root戶服務)
5、壓縮選項:
-a, --auto-compress 使用歸檔字尾名來決定壓縮程式
-j, --bzip2 使用 bzip2 處理歸檔
-z, --gzip, --gunzip 使用 gzip 處理歸檔
-Z, --compress, --uncompress 使用 compress 處理歸檔
6、本地檔案選擇:
-C, --directory=DIR 改變至目錄 DIR
-T, --files-from=FILE 從 FILE中獲取檔名來解壓或建立檔案
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
7、提示性輸出:
-v, --verbose 詳細地列出處理的檔案
-w, --interactive, --confirmation 每次操作都要求確認
zcs0237
2014.07.16
More cleaner and more efficient!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1226037/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux tar命令小結Linux
- Linux - tar命令Linux
- Android學習: 疑難問題總結Android
- Linux命令篇 - tar 命令Linux
- Linux 核心學習經驗總結Linux
- 學習Linux tar 命令:最簡單也最困難Linux
- 工作經驗總結
- vue經驗總結Vue
- mysql經驗總結MySql
- Java經驗總結Java
- Storm經驗總結ORM
- Resin 經驗總結
- linux tar命令簡介Linux
- Linux隨筆---tar命令Linux
- Linux tar命令詳解Linux
- IT職場管理經驗總結
- Eclipse經驗總結Eclipse
- mysql使用經驗總結MySql
- 考試經驗總結
- 做題經驗總結
- linux命令總結Linux
- Linux 命令總結Linux
- Linux命令總結--mkdir命令Linux
- mac 的tar命令--exclude和linux的tar命令--exclude的區別MacLinux
- TCP協議疑難雜症全景解析TCP協議
- 運維7年,對Linux的經驗總結運維Linux
- 每天一個 Linux 命令(28):tar 命令Linux
- 每天一個linux命令(28):tar命令Linux
- mysql索引使用經驗總結MySql索引
- Flutter 介紹 & 經驗總結Flutter
- Git Flow 使用經驗總結Git
- iOS開發經驗總結iOS
- Elasticsearch 實戰經驗總結Elasticsearch
- 日常專案經驗總結
- win10經驗總結Win10
- PHP開發經驗總結PHP
- JVM 優化經驗總結JVM優化
- BPR專案經驗總結