1. 程式人生 > 其它 >【linux命令】tar命令

【linux命令】tar命令

技術標籤:linuxtar

文章目錄

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



參考:《Linux tar 命令》
《tar命令的詳細解釋》