目錄

什麼是存檔文件?

tar 命令基礎操作

必需的操作選項

常用選項

創建存檔文件

基本創建命令

權限要求

查看存檔內容

提取存檔內容

基本提取命令

權限處理

壓縮存檔

支持的壓縮算法

創建壓縮存檔示例

驗證壓縮存檔內容

提取壓縮存檔

獨立壓縮工具

查看壓縮文件信息

常用命令總結

注意事項


什麼是存檔文件?

存檔文件是包含多個文件的單個常規文件或設備文件,可用於創建可管理的個人備份,或者在其他方法(如 rsync)不可用時簡化通過網絡傳輸文件的任務。在 Linux 系統中,tar 實用程序是用於創建、管理和提取存檔的常用命令。

存檔文件可以使用或不使用壓縮:

  • 不使用壓縮:僅將多個文件打包成一個文件,大小基本不變
  • 使用壓縮:通過壓縮算法減小存檔文件體積

tar 命令基礎操作

必需的操作選項

執行 tar 操作需要以下命令操作之一:

  • -c 或 --create:創建存檔文件
  • -t 或 --list:列出存檔的內容
  • -x 或 --extract:提取存檔

常用選項

  • -v 或 --verbose:顯示在 tar 操作期間存檔或提取的文件
  • -f 或 --file:指定要創建或打開的存檔文件名
  • -p 或 --preserve-permissions:提取時保留原始文件權限
  • --xattrs:啓用擴展屬性支持,存儲擴展的文件屬性
  • --selinux:啓用 SELinux 上下文支持,存儲 SELinux 文件上下文

創建存檔文件

基本創建命令

要使用 tar 命令創建存檔,使用 create 和 file 選項,並將存檔文件名作為第一個參數,後跟要納入存檔的文件和目錄列表。

tar -cf mybackup.tar myapp1.log myapp2.log myapp3.log

重要特性

  • tar 命令可識別絕對和相對文件名語法
  • 默認情況下,tar 從絕對文件名中刪除前導正斜槓 (/) 字符,使用相對路徑名在內部存儲文件
  • 這種技術更為安全,因為使用相對路徑名存檔文件時,可以將文件提取到新目錄而不會覆蓋現有文件

權限要求

用户必須具有被歸檔的目標文件的讀取權限。例如,在 /etc 目錄中創建歸檔需要 root 特權,因為只有特權用户才能讀取所有 /etc 文件。


查看存檔內容

使用 tar 命令的 t 選項可列出通過 f 選項指定的存檔中的文件名:

tar -tf /root/etc.tar

文件是使用相對名稱語法列出的,因為在存檔創建期間刪除了前導的正斜槓。


提取存檔內容

基本提取命令

tar -xf /root/etc.tar

最佳實踐:將 tar 存檔提取到空白目錄中,以免覆蓋現有的文件。

權限處理

  • 當 root 用户提取存檔時,提取的文件會保留原始的用户和組所有權
  • 如果是常規用户提取文件,則該用户將成為所提取文件的所有者
  • 從存檔中提取文件時,當前的 umask 用於修改提取的每個文件的權限
  • 使用 tar 命令的 p 選項可保留提取的文件的原始存檔權限
tar -xpf /home/user/myscripts.tar

壓縮存檔

支持的壓縮算法

tar 命令支持多種壓縮方式:

  1. gzip 壓縮(選項:-z
  • 最快的舊方法,跨平台廣泛使用
  • 生成 .tar.gz 或 .tgz 後綴
  1. bzip2 壓縮(選項:-j
  • 可創建較小的存檔,但使用不如 gzip 廣泛
  • 生成 .tar.bz2 後綴
  1. xz 壓縮(選項:-J
  • 更新的技術,提供的壓縮率在可用方法中最好
  • 生成 .tar.xz 後綴

創建壓縮存檔示例

# 使用 gzip 壓縮
tar -czf /root/etcbackup.tar.gz /etc
# 使用 bzip2 壓縮
tar -cjf /root/logbackup.tar.bz2 /var/log
# 使用 xz 壓縮
tar -cJf /root/sshconfig.tar.xz /etc/ssh

驗證壓縮存檔內容

創建存檔後,使用 tar 命令的 tf 選項來驗證其內容。列出壓縮存檔文件時,不需要指定壓縮選項,因為壓縮類型是從存檔標頭中讀取的:

tar -tf /root/etcbackup.tar.gz

提取壓縮存檔

tar 命令可以自動確定使用的壓縮方式,因此不需要指定壓縮選項:

tar -xf /root/etcbackup.tar.gz

注意:如果包含了不正確的壓縮類型,tar 將報告指定的壓縮類型與文件的類型不匹配。


獨立壓縮工具

gzipbzip2 和 xz 算法也作為獨立命令實施,用於在不創建歸檔的前提下壓縮單個文件。但這些命令不允許在創建的單個壓縮文件中包含多個文件。

查看壓縮文件信息

gzip 和 xz 命令提供了 -l 選項,可用於查看壓縮的單個文件或歸檔文件的未壓縮大小:

gzip -l file.tar.gz
xz -l file.xz

在解壓縮或提取文件之前,使用此選項來驗證是否有足夠的可用空間。


常用命令總結

操作類型

命令示例

説明

僅歸檔

tar -cvf glab.tar ./*

創建不壓縮的歸檔文件

查看歸檔

tar -tf glab.tar

查看歸檔內容(必須加f)

提取歸檔

tar -xf glab.tar

提取歸檔文件

gzip壓縮歸檔

tar -zcvf rhce.tar.gz *

使用gzip壓縮並創建歸檔

bzip2壓縮歸檔

tar -jcvf file.tar.bz2 *

使用bzip2壓縮並創建歸檔

xz壓縮歸檔

tar -Jcvf file.tar.xz *

使用xz壓縮並創建歸檔

解壓gzip歸檔

tar -zxf file.tar.gz

解壓gzip壓縮的歸檔

解壓bzip2歸檔

tar -jxf file.tar.bz2

解壓bzip2壓縮的歸檔

解壓xz歸檔

tar -Jxf file.tar.xz

解壓xz壓縮的歸檔


注意事項

  1. 壓縮效果:任何壓縮算法的效用都取決於被壓縮數據的類型。之前已壓縮的數據文件(如圖片格式或 RPM 文件)通常不會進一步大幅壓縮。
  2. 文件覆蓋:如果目標目錄中存在與所請求存檔同名的文件,則 tar 命令會覆蓋這個文件。
  3. 權限保留:對於超級用户,--preserve-permissions 選項默認為啓用。
  4. 傳統語法tar 命令依舊支持不使用短劃線 (-) 字符的傳統選項樣式,但為保持命令一致性,建議改用短選項或長選項樣式。