Linux指令 - tar指令
Linux中 tar 指令可以為linux的檔案和目錄建立檔案。利用tar,可以為某一特定檔案建立檔案(備份檔案),也可以在檔案中改變檔案,或者向檔案中加入新的檔案。tar最初被用來在錄音帶上建立檔案,現在,使用者可以在任何裝置上建立檔案。利用tar指令,可以把一大堆的檔案和目錄全部打包成一個檔案,這對于備份檔案或将幾個檔案組合成為一個檔案以便于網絡傳輸是非常有用的。
首先要弄清兩個概念:打包和壓縮。打包是指将一大堆檔案或目錄變成一個總的檔案;壓縮則是将一個大的檔案通過一些壓縮算法變成一個小檔案。
Linux中很多壓縮程式隻能針對一個檔案進行壓縮,這樣當你想要壓縮一大堆檔案時,你得先将這一大堆檔案先打成一個包(tar指令),然後再用壓縮程式進行壓縮(gzip bzip2指令)。
linux下最常用的打包程式就是tar了,使用tar程式打出來的包我們常稱為tar包,tar封包件的指令通常都是以.tar結尾的。生成tar包後,就可以用其它的程式來進行壓縮。
1.文法:
tar [參數] [檔案]
2.功能:
用來壓縮和解壓檔案。tar本身不具有壓縮功能,他是調用壓縮功能實作的。
3.參數:
-A或--catenate 新增溫暖件到已存在的備份檔案。
-b<區塊數目>或--blocking-factor=<區塊數目> 設定每筆記錄的區塊數目,每個區塊大小為12Bytes。
-B或--read-full-records 讀取資料時重設區塊大小。
-c或--create 建立新的備份檔案。
-C<目的目錄>或--directory=<目的目錄> 切換到指定的目錄。
-d或--diff或--compare 對比備份檔案内和檔案系統上的檔案的差異。
-f<備份檔案>或--file=<備份檔案> 指定備份檔案。
-F<Script檔案>或--info-script=<Script檔案> 每次更換錄音帶時,就執行指定的Script檔案。
-g或--listed-incremental 處理GNU格式的大量備份。
-G或--incremental 處理舊的GNU格式的大量備份。
-h或--dereference 不建立符号連接配接,直接複制該連接配接所指向的原始檔案。
-i或--ignore-zeros 忽略備份檔案中的0 Byte區塊,也就是EOF。
-j 支援bzip2解壓檔案。
-k或--keep-old-files 解開備份檔案時,不覆寫已有的檔案。
-K<檔案>或--starting-file=<檔案> 從指定的檔案開始還原。
-l或--one-file-system 複制的檔案或目錄存放的檔案系統,必須與tar指令執行時所處的檔案系統相同,否則不予複制。
-L<媒體容量>或-tape-length=<媒體容量> 設定存放每體的容量,機關以1024 Bytes計算。
-m或--modification-time 還原檔案時,不變更檔案的更改時間。
-M或--multi-volume 在建立,還原備份檔案或列出其中的内容時,采用多卷冊模式。
-N<日期格式>或--newer=<日期時間> 隻将較指定日期更新的檔案儲存到備份檔案裡。
-o或--old-archive或--portability 将資料寫入備份檔案時使用V7格式。
-O或--stdout 把從備份檔案裡還原的檔案輸出到标準輸出裝置。
-p或--same-permissions 用原來的檔案權限還原檔案。
-P或--absolute-names 檔案名使用絕對名稱,不移除檔案名稱前的"/"号。
-r或--append 新增檔案到已存在的備份檔案的結尾部分。
-R或--block-number 列出每個資訊在備份檔案中的區塊編号。
-s或--same-order 還原檔案的順序和備份檔案内的存放順序相同。
-S或--sparse 倘若一個檔案内含大量的連續0位元組,則将此檔案存成稀疏檔案。
-t或--list 列出備份檔案的内容。
-T<範本檔案>或--files-from=<範本檔案> 指定範本檔案,其内含有一個或多個範本樣式,讓tar解開或建立符合設定條件的檔案。
-u或--update 僅置換較備份檔案内的檔案更新的檔案。
-U或--unlink-first 解開壓縮檔案還原檔案之前,先解除檔案的連接配接。
-v或--verbose 顯示指令執行過程。
-V<卷冊名稱>或--label=<卷冊名稱> 建立使用指定的卷冊名稱的備份檔案。
-w或--interactive 遭遇問題時先詢問使用者。
-W或--verify 寫入備份檔案後,确認檔案正确無誤。
-x或--extract或--get 從備份檔案中還原檔案。
-X<範本檔案>或--exclude-from=<範本檔案> 指定範本檔案,其内含有一個或多個範本樣式,讓ar排除符合設定條件的檔案。
-z或--gzip或--ungzip 通過gzip指令處理備份檔案。
-Z或--compress或--uncompress 通過compress指令處理備份檔案。
-<裝置編号><存儲密度> 設定備份用的外圍裝置編号及存放資料的密度。
--after-date=<日期時間> 此參數的效果和指定"-N"參數相同。
--atime-preserve 不變更檔案的存取時間。
--backup=<備份方式>或--backup 移除檔案前先進行備份。
--checkpoint 讀取備份檔案時列出目錄名稱。
--concatenate 此參數的效果和指定"-A"參數相同。
--confirmation 此參數的效果和指定"-w"參數相同。
--delete 從備份檔案中删除指定的檔案。
--exclude=<範本樣式> 排除符合範本樣式的問家。
--group=<群組名稱> 把加入裝置檔案中的檔案的所屬群組設成指定的群組。
--help 線上幫助。
--ignore-failed-read 忽略資料讀取錯誤,不中斷程式的執行。
--new-volume-script=<Script檔案> 此參數的效果和指定"-F"參數相同。
--newer-mtime 隻儲存更改過的檔案。
--no-recursion 不做遞歸處理,也就是指定目錄下的所有檔案及子目錄不予處理。
--null 從null裝置讀取檔案名稱。
--numeric-owner 以使用者識别碼及群組識别碼取代使用者名稱和群組名稱。
--owner=<使用者名稱> 把加入備份檔案中的檔案的擁有者設成指定的使用者。
--posix 将資料寫入備份檔案時使用POSIX格式。
--preserve 此參數的效果和指定"-ps"參數相同。
--preserve-order 此參數的效果和指定"-A"參數相同。
--preserve-permissions 此參數的效果和指定"-p"參數相同。
--record-size=<區塊數目> 此參數的效果和指定"-b"參數相同。
--recursive-unlink 解開壓縮檔案還原目錄之前,先解除整個目錄下所有檔案的連接配接。
--remove-files 檔案加入備份檔案後,就将其删除。
--rsh-command=<執行指令> 設定要在遠端主機上執行的指令,以取代rsh指令。
--same-owner 嘗試以相同的檔案擁有者還原問家你。
--suffix=<備份字尾字元串> 移除檔案前先行備份。
--totals 備份檔案建立後,列出檔案大小。
--use-compress-program=<執行指令> 通過指定的指令處理備份檔案。
--version 顯示版本資訊。
--volno-file=<編号檔案> 使用指定檔案内的編号取代預設的卷冊編号。
4.常用範例:
例一:将檔案打包成tar包
在參數 f 之後的檔案檔名是自己取的,我們習慣上都用 .tar 來作為辨識。 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar包; 如果加 j 參數,則以 .tar.bz2 來作為tar包名
指令:
tar -cvf log.tar log.txt
僅打包,不壓縮。
[[email protected] test]# ll
總用量 24
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
[[email protected] test]# tar -cvf log.tar log.txt
log.txt
[[email protected] test]# ll
總用量 36
-rw-r--r--. 1 root root 10240 5月 27 14:14 log.tar
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
指令:
tar -zcvf log.tar.gz log.txt
打包後,以 gzip 壓縮。
[[email protected] test]# ll
總用量 36
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
[[email protected] test]# tar -zcvf log.tar.gz log.txt
log.txt
[[email protected] test]# ll
總用量 40
-rw-r--r--. 1 root root 151 5月 27 14:16 log.tar.gz
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
指令:
tar -jcvf log.tar.bz2 log.txt
打包後,以 bzip2 壓縮。
[[email protected] test]# ll
總用量 40
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
[[email protected] test]# tar -jcvf log.tar.bz2 log.txt
log.txt
[[email protected] test]# ll
總用量 44
-rw-r--r--. 1 root root 151 5月 27 14:17 log.tar.bz2
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
例二:查閱 tar包内有哪些檔案
指令:
tar -ztvf log.tar.gz
由于我們使用 gzip 壓縮的log.tar.gz,是以要查閱log.tar.gz包内的檔案時,就得要加上 z 這個參數了。
[[email protected] test]# tar -ztvf log.tar.gz
-rwxr--r-- root/root 52 2021-05-25 10:58 log.txt
例三:将tar 包解壓縮
指令:
tar -zxvf /usr/games/test/log.tar.gz
在預設的情況下,我們可以将壓縮檔在任何地方解開的。
[[email protected] games]# ll
總用量 0
drwxr-xr-x. 2 root root 152 5月 27 14:17 test
[[email protected] games]# tar -zxvf /usr/games/test/log.tar.gz
log.txt
[[email protected] games]# ll
總用量 4
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
drwxr-xr-x. 2 root root 152 5月 27 14:17 test
例四:隻将打包内的部分檔案解壓出來
指令:
tar -zxvf /usr/games/test/logz.tar.gz log.txt log1.txt
可以透過 tar -ztvf 來查閱 tar 包内的檔案名稱,如果單隻要一個檔案,就可以透過 tar -zxvf這個方式來解壓部分檔案。
[[email protected] test]# tar zcvf logz.tar.gz log.txt log1.txt log2.txt log3.txt
log.txt
log1.txt
log2.txt
log3.txt
[[email protected] test]# cd ../
[[email protected] games]# ll
總用量 0
drwxr-xr-x. 2 root root 171 5月 27 14:28 test
[[email protected] games]# tar -zxvf /usr/games/test/logz.tar.gz log.txt log1.txt
log.txt
log1.txt
[[email protected] games]# ll
總用量 8
---xr--r--. 1 root root 13 5月 25 10:58 log1.txt
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
drwxr-xr-x. 2 root root 171 5月 27 14:28 test
例五:檔案備份并且儲存其權限
指令:
tar -zxvpf /usr/games/test/color.tar.gz
-p 的屬性是當你要保留原本檔案的屬性時。
[[email protected] test]# tar -zcvpf color.tar.gz color.sh lncolor
color.sh
lncolor
[[email protected] test]# cd ../
[[email protected] games]# ll
總用量 0
drwxr-xr-x. 2 root root 191 5月 27 14:35 test
[[email protected] games]# tar -zxvpf /usr/games/test/color.tar.gz
color.sh
lncolor
[[email protected] games]# ll
總用量 8
-rw-r--r--. 1 root root 96 5月 25 15:10 color.sh
-rwxr--r--. 1 root root 96 5月 18 10:15 lncolor
drwxr-xr-x. 2 root root 191 5月 27 14:35 test
例六:在檔案夾當中,比某個日期新的檔案才備份
指令:
tar -N "2021-5-28" -zcvf new.tar.gz test
[[email protected] test]# ll
總用量 24
-rw-r--r--. 1 root root 96 5月 25 15:10 color.sh
-rwxr--r--. 1 root root 96 5月 18 10:15 lncolor
---xr--r--. 1 root root 13 5月 25 10:58 log1.txt
-rwxrw-r-x. 1 root root 592 5月 14 17:00 log2.txt
-rwxr-x--x. 1 root root 655 5月 14 17:06 log3.txt
-rwxr--r--. 1 root root 52 5月 25 10:58 log.txt
[[email protected] games]# tar -N "2021-5-28" -zcvf new.tar.gz test
tar: 選項 --after-date: 将日期 ‘2021-5-28’ 當作 2021-05-28 00:00:00
test/
tar: test/color.sh: 檔案未改變;未輸出
tar: test/lncolor: 檔案未改變;未輸出
tar: test/log1.txt: 檔案未改變;未輸出
tar: test/log2.txt: 檔案未改變;未輸出
tar: test/log3.txt: 檔案未改變;未輸出
tar: test/log.txt: 檔案未改變;未輸出
[[email protected] games]# tar -ztvf new.tar.gz
drwxr-xr-x root/root 0 2021-05-27 14:43 test/
例七:備份檔案夾内容是排除部分檔案
指令:
tar --exclude scf/lib/service -zcvf scf.tar.gz scf/*
[[email protected] test]# tree scf/
scf/
├── bin
└── lib
├── deploy
│ ├── info
│ └── prodouct
└── service
6 directories, 0 files
[[email protected] test]# tar --exclude scf/lib/service -zcvf scf.tar.gz scf/*
scf/bin/
scf/lib/
scf/lib/deploy/
scf/lib/deploy/info/
scf/lib/deploy/prodouct/