GNU tar(Tape AR chiver的縮寫)命令是 Linux 系統(tǒng)中使用最廣泛的歸檔實(shí)用程序。該命令直接在終端中可用,有助于創(chuàng)建、提取和列出存檔內(nèi)容。tar
該實(shí)用程序很簡(jiǎn)單,并且有許多有用的選項(xiàng)可用于壓縮文件、管理備份或提取原始安裝。
曉林電腦教你通過(guò)示例和可用選項(xiàng)展示如何使用 tar 命令。
先決條件
- 運(yùn)行 Linux 的系統(tǒng)。
- 訪問(wèn)命令行/終端。
- 用于測(cè)試命令的一個(gè)或多個(gè)文件。
Tar 命令語(yǔ)法
命令的tar一般語(yǔ)法是:
- 操作模式指示對(duì)文件執(zhí)行的操作(創(chuàng)建、提取等)。該命令只允許并且只需要一項(xiàng)操作。
- 選項(xiàng)修改操作模式并且不是必需的。選項(xiàng)的數(shù)量沒(méi)有限制。
- 存檔是文件名和擴(kuò)展名。
- 文件名是用于提取或壓縮的空格分隔列表或通配符匹配的名稱。
有三種可能的語(yǔ)法樣式來(lái)使用操作和選項(xiàng):
1.傳統(tǒng)風(fēng)格,集結(jié)在一起,沒(méi)有任何破折號(hào)。
例如:
tarcfv <archive> <file(s) or location(s)>
2. UNIX 短選項(xiàng)樣式,使用單個(gè)破折號(hào)和集群選項(xiàng):
tar-cfv <archive> <file(s) or location(s)>
或者,在每個(gè)選項(xiàng)前添加一個(gè)破折號(hào):
tar-c -f -v <archive> <file(s) or location(s)>
3.帶有雙破折號(hào)和描述性選項(xiàng)名稱的GNU 長(zhǎng)選項(xiàng)樣式:
tar--create --file <archive> --verbose <file(s) or location(s)>
所有三種樣式都可以在一個(gè)tar命令中使用。
焦油命令選項(xiàng)
下表概述了常用的tar操作和選項(xiàng)。
按照下一節(jié)中的示例學(xué)習(xí)如何使用 tar。
Tar 命令示例
以下示例具有以下要求:
1.創(chuàng)建一個(gè)名為tar_examples的目錄并導(dǎo)航到該目錄:
mkdir tar_examples && cd tar_examples
2.在tar_examples中創(chuàng)建另一個(gè)名為files的目錄并進(jìn)入該目錄:
mkdir files && cd files
3.創(chuàng)建文件以填充文件目錄:
touch file{0..100}.txt
要返回父目錄,請(qǐng)使用:
cd ..
下面的所有示例都來(lái)自tar_examples目錄。
1. 創(chuàng)建檔案
創(chuàng)建檔案的語(yǔ)法取決于檔案類型。要制作存檔,請(qǐng)使用tar
or-c
操作--create
。
創(chuàng)建一個(gè) tar 存檔
要制作 tar 存檔(也稱為 tarball),請(qǐng)使用:
tar cf <archive name>.tar <file(s) or location(s)>
例如,歸檔文件目錄:
tar cf files.tar files
輸出列出了添加到存檔中的每個(gè)文件。顯示目錄內(nèi)容以查看創(chuàng)建的file.tar存檔:
tar cf files.tar files
輸出列出了添加到存檔中的每個(gè)文件。顯示目錄內(nèi)容以查看創(chuàng)建的file.tar存檔:
ls -l
創(chuàng)建 tar.gz 壓縮存檔
添加-z
創(chuàng)建壓縮 GNUzip (gzip) 文件的選項(xiàng):
tar czf <archive name>.tar.gz <file(s) or location(s)>
例如:
tar czf files.tar.gz files
文件大小小于常規(guī) tarball 文件和原始目錄。
創(chuàng)建 tar.bz2 壓縮存檔
bzip2 是一個(gè)文件壓縮程序,是 gzip 的替代方案。
要?jiǎng)?chuàng)建tar.bz2文件,請(qǐng)?zhí)砑?code>-j標(biāo)記:
tar cjf <archive name>.tar.bz2 <file(s) or location(s)>
例如:
tar cjf files.tar.bz2 files
bzip2 具有更高的壓縮率,并且比 gzip 需要更長(zhǎng)的時(shí)間。
創(chuàng)建 tar.xz 存檔
使用-J
標(biāo)簽以 tar.xz 格式壓縮檔案:
tar cJf <archive name>.tar.xz <file(s) or location(s)>
例如:
tar cJf files.tar.xz files
與 gzip 和 bz2 相比,xz 壓縮時(shí)間最長(zhǎng)。但是,對(duì)于較大的文件,xz 具有最高的壓縮率。
2.創(chuàng)建后刪除文件
要在歸檔后從磁盤中刪除文件,請(qǐng)使用--remove-files
末尾的選項(xiàng):
tar cf <archive> <file(s) or location(s)> --remove-files
例如,使用files目錄創(chuàng)建一個(gè) tar 存檔,并通過(guò)一個(gè)命令將其從磁盤中刪除:
tar cf files.tar files --remove-files
檢查目錄內(nèi)容以確認(rèn)操作正常。
3. 從檔案中提取
從檔案或壓縮檔案中提取使用-x
or--extract
操作tar
。附加選項(xiàng)取決于文件類型以及 tar 應(yīng)在何處提取組件。
從 tar 存檔中提取
從 tar 存檔中提取的一般語(yǔ)法是:
tar xf <archive name>.tar
默認(rèn)情況下, tar 將所有組件提取到當(dāng)前目錄。要指示提取組件的位置,請(qǐng)?zhí)砑?/span>-C
選項(xiàng)并指定路徑:
tar xfC <archive name>.tar <path>
例如,要?jiǎng)?chuàng)建一個(gè)名為 extract_tar 的目錄并從files.tar中提取文件,請(qǐng)運(yùn)行:
mkdir extracted_tar && tar xfC files.tar extracted_tar
該命令不輸出確認(rèn)消息。檢查目錄內(nèi)容,確認(rèn)組件解壓成功。
從 tar.gz 存檔中提取
使用-z
選項(xiàng)提取tar.gz文件:
tar xzf <archive name>.tar.gz
該命令提取當(dāng)前目錄中的內(nèi)容。添加-C
選項(xiàng)以指定位置:
tar xzfC <archive name>.tar.gz <location>
例如,創(chuàng)建一個(gè)名為 extract_gz 的新目錄并提取files.tar.gz內(nèi)容:
mkdir extracted_gz && tar xzfC files.tar.gz extracted_gz
與其他壓縮格式相比,tar.gz 壓縮檔案的提取時(shí)間最短。
從 tar.bz2 存檔中提取
要將文件從 tar.bz2 壓縮存檔中提取到當(dāng)前目錄,請(qǐng)使用:
tar xjf <archive name>.tar.bz2
使用以下命令將 tar.bz2 歸檔文件提取到特定目錄中:
tar xjfC <archive name>tar.bz2 <location>
例如,創(chuàng)建一個(gè)目錄并從files.tar.bz2中提取內(nèi)容:
mkdir extracted_bz2 && tar xjfC files.tar.bz2 extracted_bz2
從 tar.xz 存檔中提取
添加-J
從 tar.xz 壓縮檔案中提取的選項(xiàng)。在當(dāng)前目錄中提取的語(yǔ)法是:
tar xJf <archive name>.tar.xz
要將內(nèi)容提取到特定目錄,請(qǐng)使用該-C
選項(xiàng)并添加路徑:
tar xJfC <archive name>.tar.xz <location>
例如,創(chuàng)建一個(gè)目錄并提取files.tar.xz內(nèi)容:
mkdir extracted_xz && tar xJfC files.tar.xz extracted_xz
在提取時(shí)間方面,xz 壓縮格式介于 gz 和 bz2 之間。
4.覆蓋控制
Tar 覆蓋控件處理存檔中的文件名與工作目錄中的文件重疊的情況。
三種可能的覆蓋操作是:
1.覆蓋工作目錄中的文件:
tar xf <archive> <Optional file(s) or location(s)> --overwrite
2.不要覆蓋工作目錄中的文件:
tar xf <archive> <Optional file(s) or location(s)> --keep-old-files
如果文件已存在,則 tar 不會(huì)執(zhí)行提取。
3. 僅當(dāng)文件比現(xiàn)有文件更新時(shí)才提取文件:
tar xf <archive> <Optional file(s) or location(s)> --keep-newer-files
如果工作目錄中的文件較新或相同,則 tar 不會(huì)提取文件。
5. 列出存檔內(nèi)容
使用以下命令列出存檔的內(nèi)容:
tar tf <archive>
該選項(xiàng)適用于任何包含 tar 的文件擴(kuò)展名。
例如,列出files.tar存檔中的文件和目錄:
tar tf files.tar.gz
輸出列出了存檔中存儲(chǔ)的所有內(nèi)容。
6. 在存檔中查找文件
使用 tar 定位特定內(nèi)容的方法有兩種:
1.-t
在檔案中列出文件的選項(xiàng)對(duì)于定位特定文件很方便。在命令后添加文件名(或名稱):
tar tf <archive> <file(s)>
例如,要在files.tar.gz存檔中找到file50.txt,請(qǐng)運(yùn)行:
tar tf files.tar.gz file/file50.txt
該選項(xiàng)需要知道文件的可能路徑。
2. 將tar
與grep命令一起使用來(lái)過(guò)濾輸出:
tar tf <archive> | grep <file(s)>
例如:
tar tf files.tar.gz | grep file50.txt
該選項(xiàng)不需要知道文件的可能路徑。
7. 在檔案中查找多個(gè)文件
使用該--wildcards
選項(xiàng)匹配多個(gè)文件實(shí)例。例如:
tar tf files.tar.gz --wildcards file/files5*.txt
當(dāng)文件具有相似名稱或過(guò)濾特定文件類型時(shí)應(yīng)用通配符匹配。
8. 創(chuàng)建存檔時(shí)排除文件
要在創(chuàng)建期間從存檔中排除某些文件,請(qǐng)?zhí)砑右韵逻x項(xiàng):
tar cf <archive> --exclude='<pattern>' <files(s) or location(s)>
例如,從 files 目錄創(chuàng)建存檔并排除所有 .txt 文件:
tar cf files.tar --exclude='*.txt' files
列出存檔內(nèi)容:
tar tf files.tar
輸出顯示沒(méi)有 .txt 文件,僅顯示存檔中的files目錄。
9. 從存檔中提取單個(gè)文件
如果您需要一個(gè)或多個(gè)文件,請(qǐng)避免提取整個(gè)存檔。
要從存檔中獲取單個(gè)文件:
1.列出內(nèi)容并檢查文件是否存在:
tar tf files.tar | grep file100.txt
輸出打印下一步所需文件的路徑。
2. 使用以下命令提取特定文件:
tar xf files.tar files/file100.txt
該命令僅使用指示的文件創(chuàng)建目錄文件。按照相同的步驟通過(guò)添加適當(dāng)?shù)臉?biāo)簽從壓縮檔案中提取單個(gè)文件。例如,使用-z
從 tar.gz 文件中提取的選項(xiàng)。
10.詳細(xì)選項(xiàng)
詳細(xì)選項(xiàng)在運(yùn)行 tar 命令后顯示附加信息。添加-v
或--verbose
到任何操作以查看結(jié)果。
例如,創(chuàng)建一個(gè) tar.gz 文件并添加-v
:
tar czfv files.tar.gz files
輸出顯示每個(gè)文件添加到存檔中。
-v
當(dāng)您添加兩次標(biāo)記時(shí),某些 tar 命令會(huì)顯示附加信息。例如,嘗試使用以下命令將文件添加到存檔-vv
:
tar czfvv files.tar.gz files
輸出打印一個(gè)長(zhǎng)列表格式,看起來(lái)類似于運(yùn)行l(wèi)s -l命令。
11. 從存檔中刪除
要從存檔中刪除,請(qǐng)找到要?jiǎng)h除的文件,例如:
tar tf files.tar | grep file100.txt
--delete
然后,使用標(biāo)簽刪除文件:
tar --delete -f files.tar files/file100.txt
刪除選項(xiàng)不適用于壓縮文件格式。
12. 將文件追加到存檔
-r
使用標(biāo)簽將文件附加到現(xiàn)有存檔。語(yǔ)法是:
tar rf <archive name>.tar <file(s) or location(s)>
例如,將壓縮的files.tar.gz文件附加到files.tar存檔:
tar rf files.tar files.tar.gz
已經(jīng)壓縮的存檔無(wú)法更新,因此該語(yǔ)法僅適用于 tarball 文件。
13. 合并檔案
使用--concatenate
or-A
選項(xiàng)來(lái)組合多個(gè)檔案?;菊Z(yǔ)法是:
tar Af <archive to extend> <archive to extend with>
例如,使用cp命令復(fù)制現(xiàn)有files.tar文件:
cp files.tar files_copy.tar
接下來(lái),連接兩個(gè)檔案:
tar Af files.tar files_copy.tar
要確認(rèn)串聯(lián)是否有效,請(qǐng)檢查文件大小。
14.存檔和文件之間的區(qū)別
要檢查存檔和磁盤上的文件之間的差異,請(qǐng)使用-d
標(biāo)記:
tar df <archive name>
該命令搜索相同的內(nèi)容并將它們與存檔中的內(nèi)容進(jìn)行比較。該選項(xiàng)僅檢查現(xiàn)有文件并忽略任何新添
加的文件。
下面的步驟展示了如何使用-d
, --diff
,或--compare
標(biāo)簽tar
:
1. 創(chuàng)建一個(gè) tar 存檔:
tar cf files.tar files
2. 將存檔與現(xiàn)有目錄進(jìn)行比較:
tar df files.tar
輸出不顯示任何內(nèi)容,這意味著現(xiàn)有文件之間沒(méi)有區(qū)別。
3. 將文本添加到files目錄中的現(xiàn)有文件:
echo 'Hello' >> files/file0.txt
4. 再次將存檔與現(xiàn)有目錄進(jìn)行比較:
tar df files.tar
這一次,輸出顯示了特定文件的修改時(shí)間和大小的差異。通過(guò)比較可以深入了解創(chuàng)建存檔后對(duì)系統(tǒng)所做的任何更改。
15. 更新存檔中的文件
-u
使用以下選項(xiàng)從磁盤更新存檔中的現(xiàn)有文件:
tar uf <archive> <file(s) or location(s)>
例如,使用更改的文本文件更新files.tar存檔:
tar uf files.tar files
檢查更改文件的 tar 內(nèi)容:
tar tfv files.tar | grep files0.txt
該命令使用更改的文件更新存檔而不進(jìn)行任何覆蓋。
16.修改時(shí)間
Tar 提供了各種選項(xiàng)來(lái)修改文件的時(shí)間戳。--mtime
通過(guò)添加選項(xiàng)并提供日期來(lái)在創(chuàng)建存檔時(shí)設(shè)置自定義日期:
tar cf <archive> <file(s) or location(s)> --mtime=YYYY-MM-DD
例如,創(chuàng)建一個(gè)存檔并將日期設(shè)置為 1999 年 1 月 1日:
tar cf files.tar files --mtime=1999-01-01
或者,提取具有當(dāng)前日期和時(shí)間的文件:
tar xf files.tar -m
處理時(shí)間時(shí)的一個(gè)有用功能是過(guò)濾在特定日期之后修改的文件。例如,要提取在某個(gè)日期之后創(chuàng)建
的文件,請(qǐng)使用該--newer-mtime
選項(xiàng)并添加日期:
tar xf <archive> --newer-mtime=YYYY-MM-DD
17. 權(quán)限
提取檔案時(shí),有兩種可能的方法可以使用 tar 控制文件權(quán)限:
1. 保留原有權(quán)限:
tar xf <archive name> --preserve-permissions
權(quán)限在檔案創(chuàng)建之前的文件中說(shuō)明。
2.修改權(quán)限為默認(rèn)umask值:
tar xf <archive name> --no-same-permissions
這些文件采用默認(rèn)的 Linux 權(quán)限。
18. 文件所有權(quán)
Tar 允許文件所有權(quán)配置。例如,要在創(chuàng)建存檔時(shí)設(shè)置文件所有者,請(qǐng)?zhí)砑?code>--owner和--group
選項(xiàng)并
為每個(gè)選項(xiàng)提供值:
tar cf <archive> <file(s) or location(s)> --owner=<value> --group=<value>
所有者值表示UID(用戶 ID),而組值是GID(組 ID)。要為用戶查找這些值,請(qǐng)運(yùn)行:
id <username>
例如,創(chuàng)建一個(gè)存檔并將所有權(quán)設(shè)置為 root:
tar cf files.tar files --owner=0 --group=0
Tar 允許在從存檔中提取時(shí)保留所有權(quán)。為此,請(qǐng)--same-owner
在末尾添加選項(xiàng):
tar xf <archive> --same-owner
19. 寫入外部程序
該--to-command
選項(xiàng)指示 tar 將每個(gè)提取的文件發(fā)送到外部程序的標(biāo)準(zhǔn)輸出。基本語(yǔ)法是:
tar xf <archive> --to-command='<command>'
例如,提取files.tar內(nèi)容并將文件名作為目錄傳遞:
tar xf files.tar --to-command='mkdir $TAR_FILENAME'
該命令創(chuàng)建以每個(gè)提取文件命名的目錄。有關(guān)更多信息和可用的Linux環(huán)境變量,請(qǐng)?jiān)L問(wèn)手冊(cè)頁(yè)。
20. 創(chuàng)建每日備份
要自動(dòng)執(zhí)行每日備份,請(qǐng)創(chuàng)建一個(gè) bash 腳本并添加以下行:
tar czf backup-$(date +%Y%m%d).tar.gz files
find backup* -mtime +1 -delete
tar 命令創(chuàng)建一個(gè)壓縮存檔,而find命令查找一天前的備份文件。+1
將參數(shù)更改+7
為每周或+31
每月備份。
結(jié)論
看完這篇文章,你就知道如何使用 tar 命令了。但是,還有其他各種可用的選項(xiàng)不在本教程中。使
用man命令查找有關(guān) tar 選項(xiàng)的所有詳細(xì)信息。