【linux命令】tar命令
文章目錄
1. 概述
Linux tar(英文全拼:tape archive )命令用於備份檔案。
tar 是用來建立,還原備份檔案的工具程式,它可以加入,解開備份檔案內的檔案。
語法:
tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <區塊數目>][-C <目的目錄>][-f <備份檔案>][-F <Script檔案>][-K <檔案>][-L <媒體容量>][-N <日期時間>][-T <範本檔案>][-V <卷冊名稱>][-X <範本檔案>][-<裝置編號><儲存密度>][–after-date=<日期時間>][–atime-preserve][–backuup=<備份方式>][–checkpoint][–concatenate][–confirmation][–delete][–exclude=<範本樣式>][–force-local][–group=<群組名稱>][–help][–ignore-failed-read][–new-volume-script=<Script檔案>][–newer-mtime][–no-recursion][–null][–numeric-owner][–owner=<使用者名稱稱>][–posix][–erve][–preserve-order][–preserve-permissions][–record-size=<區塊數目>][–recursive-unlink][–remove-files][–rsh-command=<執行指令>][–same-owner][–suffix=<備份字尾字串>][–totals][–use-compress-program=<執行指令>][–version][–volno-file=<編號檔案>][檔案或目錄…]
引數:
-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。
-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=<編號檔案> 使用指定檔案內的編號取代預設的卷冊編號。
2. 例子
2.1:打包成tar
當有多個引數時,-f命令引數必須在最後一個,否則會報錯
#建立檔案a.c
[root@localhost test]# touch a.c
#檢視建立的a.c檔案
[root@localhost test]# ls
a.c
#打包a.c
[root@localhost test]# tar -cvf test.tar a.c
a.c
#檢視壓縮後的結果
[root@localhost test]# ls
a.c test.tar
- -c是表示打包,create 縮寫
- -v表示顯示打包的過程,verbose 縮寫
- -f指定打包後的檔名,file縮寫
特別注意,在引數 f 之後的檔案檔名是自己取的,可以是任意值,我們習慣上都用 .tar
來作為辨識。
2.2:打包並壓縮 tar.gz
與2.1:打包相比,通過加入-z,可以直接把tar包壓縮成gz
-
-z:gzip指令
壓縮命令表示gzip,命令裡帶-c
解壓縮表示ungzip,命令裡帶-x -
-j :bzip2指令
是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
-z gzip壓縮例子:
#建立檔案a.c
[root@localhost test]# touch a.c
#檢視建立的a.c檔案
[root@localhost test]# ls
a.c
#打包並壓縮a.c
[root@localhost test]# tar -czvf test.tar.gz a.c
a.c
#檢視壓縮後的結果
[root@localhost test]# ls
a.c test.tar.gz
加壓發現有2層目錄:
注意:如果不帶-z引數,即使檔案命令為類似.tar.gz結尾,仍然只有一層
如果加 -z 引數,則以 .tar.gz 或 .tgz 結尾來代表 gzip 壓縮過的 tar file
如果加 -j 引數,則以 .tar.bz2 結尾,表示採用bzip2壓縮
注意不能混用,用bzip2壓縮,必須用bzip2解壓縮,用gzip壓縮,必須用gzip解壓縮
-j bzip2壓縮例子:
#原始檔案a.c
[root@localhost test]# ls
a.c
#打包後採用bzip2壓縮
[root@localhost test]# tar -jcvf test2.tar.bz2 a.c
a.c
#檢視
[root@localhost test]# ls
a.c test2.tar.bz2
#故意用gzip命令嘗試加壓,提示不是gzip格式
[root@localhost test]# tar -zxvf test2.tar.bz2
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
#採用bzip2解壓
[root@localhost test]# tar -jxvf test2.tar.bz2
a.c
[root@localhost test]# ls
a.c test2.tar.bz2
2.3 解壓檔案tar
[root@localhost test]# ls
test.tar
#解壓tar
[root@localhost test]# tar -xvf test.tar
a.c
[root@localhost test]# ls
a.c test.tar
- -x是表示還原
一般和-c命令必須同時存在一個
- -v表示顯示打包的過程,verbose 縮寫
- -f指定打包後的檔名,file縮寫
2.4 解壓並解包檔案tar.gz
順序是反著來的,先解壓,再解包
就是在解包之前,增加一個解壓縮命令-z或-j,根據實際的壓縮命令
-z解壓縮例子:
[root@localhost test]# ls
test.tar.gz
[root@localhost test]# tar -zxvf test.tar.gz
a.c
[root@localhost test]# ls
a.c test.tar.gz
-j解壓縮例子:
[root@localhost test]# ls
test2.tar.bz2
[root@localhost test]# tar -jxvf test2.tar.bz2
a.c
[root@localhost test]# ls
a.c test2.tar.bz2
在解壓時,可以不帶-z或-j,linux會自動判斷採用了哪種壓縮格式,會自動在命令中帶入 相應的引數:
[root@localhost test]# ls
test2.tar.bz2
#解壓命令中沒有帶-j,仍能解壓
[root@localhost test]# tar -xvf test2.tar.bz2
a.c
[root@localhost test]# ls
a.c test2.tar.bz2
[root@localhost test]#
2.5 -C(大寫的c)命令
作用是解壓時重定向至指定的目錄
[root@localhost test]# ls
childDir test2.tar.bz2
#解壓時,設定解壓目錄為childDir
[root@localhost test]# tar -xvf test2.tar.bz2 -C childDir
a.c
#進入子資料夾檢視
[root@localhost test]# cd childDir/
[root@localhost childDir]# ls
a.c