只打包、不壓縮的老工具:GNU tar 入門筆記

摘要

GNU tar 只把檔案與目錄串成單一容器,體積交給 gzip、xz、zstd 處理;建立、解開、檢視與取出單一檔案都能一行指令完成,配上快照檔還能做增量備份。

推薦
軟體名稱
GNU tar
版本
1.35
收費
免費
開源
開源
作業系統
LinuxmacOS
更新時間
2026-10-05 17:23

GNU tar 是類 Unix 系統幾乎都會預裝的打包工具,也是多數人在「一堆檔案要變成一個檔案」時第一個想到的東西。初學者常感到意外的是,tar 本身完全不壓縮。它只負責把檔案與目錄串成一個 .tar 串流,真正把體積變小的是後面的壓縮演算法,例如 gzip、xz 或 zstd。也因為這樣,常見的副檔名總是成對出現:.tar.gz、.tar.xz、.tar.zst,前半段是容器,後半段是把它擠小的那一個。

兩件事,分開做

理解 tar 最有用的一個念頭,是不要把「打包」和「壓縮」當成同一個動作。打包是把許多檔案依序寫進一條連續的串流,沿途保留目錄階層與權限位元;壓縮是把這條串流再變小。tar 做前者,後者交給被指定的工具,中間用管線接起來。一個短參數就決定交給誰:-z 交給 gzip、-j 交給 bzip2、-J 交給 xz。因為兩半是分開的,打包層不必在意今年流行哪一種演算法;一個幾十年前定下的格式,照樣能配上它誕生時還不存在的編碼器。

日常真正會用到的指令

每天的工作幾乎都落在少數幾個呼叫上。要建立一個不動體積的封存檔:tar -cf 備份.tar 目錄/。要一邊打包一邊壓縮:tar -czf 備份.tar.gz 目錄/。要解開:tar -xf 備份.tar.gz,tar 會自己判斷壓縮類型,不必記參數。只想看內容而不解開:tar -tf 備份.tar.gz。想看著檔名一路刷過就加 -v,要略過某些檔案用 --exclude,要從標準輸入讀取就用一個減號。從一個大封存檔裡取出單一檔案,也不必整包解開:在解壓指令後面補上路徑即可,tar -xf 備份.tar.gz 路徑/檔案,就只有那一個檔案出來。這些在 Linux 終端機與 macOS 的終端機裡完全一樣,因此被視為顧機器的人的基本功。

比基本再多一點

增量封存是最容易被忽略的一項。把快照檔交給 -g,tar 會記住已經存過什麼,只打包那次快照之後有變動的部分,這正好是定期差異備份需要的形狀。tar 對超長檔名與符號連結的處理也很穩,不會把它們弄壞;它緊跟 POSIX 標準,所以在別的系統上解開時,目錄結構不會走樣。接上 ssh,封存檔可以直接送到遠端機器,本地磁碟那一步就省下來了。

為什麼它一直是基石

軟體釋出、原始碼散布、系統備份,最後幾乎都會經過 tar 一次。它的格式開放、到處能跑、幾乎每個 Linux 發行版都預先裝好,而且相容性長期穩定。後來當然出現過更新的封存格式,某些在特定場合也更合適,但 tar 靠著整個生態的慣性站得住:周邊工具、使用者的習慣,以及大量預設它一定存在的腳本。

值得知道的小技巧

想在完全不落地的前提下讀出封存檔裡的某個檔案,在前面接一個解壓工具就行。像 zcat 備份.tar.gz | tar -xOf - 路徑/檔案 這樣,會把單一檔案的內容印到標準輸出,想快速看一眼埋在釋出包裡的設定檔時特別好用。把快照參數和系統排程結合,備份鏈會自己長出來:長時間間隔做一次完整封存,中間夾著增量,既省空間,又能回滾到鏈條覆蓋的任一個時間點。

授權與定位

GNU tar 以 GPLv3 釋出,屬於自由軟體,任何人都可以自由使用、修改與再轉散布。這個授權是格式沒有變成誰家私產的重要原因,也讓幾十年前寫下的封存檔,今天在剛做好的機器上照樣打得開。一個只做一件窄事的工具,能活這麼久,本身就是最有力的推薦。

GNU tar下載地址
支援的作業系統: Linux macOS