Linux 檔案歸檔工具 tar 詳解與應用

tar (Tape Archive) 是 Linux 和類 Unix 系統中最經典的工具之一。雖然名字源自於磁帶歸檔,但現在它主要用於將多個檔案或目錄打包成一個單一的檔案,以便進行備份或傳輸。

值得注意的是,tar 本身並不具備壓縮功能,它只是單純的「打包」。透過組合不同的參數,它可以與 gzipbzip2xz 等壓縮工具聯動,成為 Linux 環境下最靈活的檔案處理利器。

以下整理 tar 指令的核心用法與實用場景。

核心操作參數

tar 的參數非常多,但只要記住這幾個最常用的組合,就能處理 90% 以上的需求。

  • c (create):建立一個新的歸檔檔案。
  • x (extract):解開歸檔檔案。
  • t (list):列出歸檔檔案內容,而不解開它。
  • v (verbose):顯示詳細執行過程(可以看到正在處理哪些檔案)。
  • f (file):指定歸檔檔案名稱。必須放在參數列表的最後面,緊接著檔名。
  • z:使用 gzip 進行壓縮/解壓縮(副檔名通常為 .tar.gz)。
  • j:使用 bzip2 進行壓縮/解壓縮(副檔名通常為 .tar.bz2)。
  • J:使用 xz 進行壓縮/解壓縮(副檔名通常為 .tar.xz)。

常用指令組合

打包(不壓縮)

將多個檔案或整個目錄打包成一個檔案。

1
tar cvf backup.tar /path/to/folder

解包

.tar 檔案解開到目前目錄。

1
tar xvf backup.tar

打包並使用 gzip 壓縮

這是最常用的格式,兼顧壓縮比與處理速度。

1
tar zcvf backup.tar.gz /path/to/folder

解壓縮 .tar.gz 檔案

1
tar zxvf backup.tar.gz

進階應用場景

檢視歸檔內容(不解壓)

當你不確定壓縮檔內容,或者想確認檔案結構時非常有用。

1
tar tvf backup.tar.gz

解壓到指定目錄

預設解包會釋放到目前目錄,使用 -C 可以指定目標路徑。

1
tar xvf backup.tar.gz -C /home/user/destination/

排除特定目錄或檔案

在打包備份時,排除掉不需要的臨時檔案(如 .log.tmp)。

1
tar cvf backup.tar --exclude="*.log" --exclude="temp_folder" folder

注意 --exclude 要放在來源目錄之前,否則在部分版本可能不會正確生效。

從歸檔中提取特定檔案

不需要解開整個檔案,只提取需要的單一項目。

1
tar zxvf backup.tar.gz path/to/specific/file.txt

更新歸檔中的檔案

如果你修改了某個檔案,想更新到已存在的 .tar 歸檔中(注意:這只適用於未壓縮的 .tar 檔案)。

1
2
tar uvf backup.tar new_file.txt
# u: update 更新

注意事項與權限維護

tar 最強大的地方在於它會完整保留檔案的權限 (Permissions)、所有者 (Owner) 與時間戳 (Timestamp)

  • 保留權限備份:通常建議使用 root 權限進行 tar 打包,以確保所有系統檔案的權限正確備份。
  • 防止絕對路徑問題:在打包時,若使用絕對路徑(如 /etc/),解包時會直接覆蓋原檔案系統。通常建議先切換到目標目錄再進行相對路徑打包:
    1
    cd /etc/ && tar cvf etc_backup.tar .

快速速查表

操作指令
建立 tar 歸檔tar cvf file.tar folder
解開 tar 歸檔tar xvf file.tar
建立 tar.gz 壓縮檔tar zcvf file.tar.gz folder
解開 tar.gz 壓縮檔tar zxvf file.tar.gz
檢視內容tar tvf file.tar
解壓至目錄tar xvf file.tar -C /path/

參考資料

  • GNU tar 官方手冊: https://www.gnu.org/software/tar/manual/
  • Linux man page: man tar

也許你也會想看看