開源世界腳下那層:GNU tar 的三個字母
版本 1.35.90
摘要
GNU tar 只把檔案與目錄併成一個封存檔,沿途保住階層、權限與時間戳,壓縮交給 gzip、xz、zstd,釋出與備份都靠它。
推薦- 軟體名稱
- GNU tar
- 版本
- 1.35.90
- 收費
- 免費
- 開源
- 開源
- 作業系統
- LinuxmacOSWindows
- 更新時間
- 2026-10-05 13:53
類 Unix 系統裡流傳著一句老話:「一切皆檔案」,而要讓這些檔案被打包成一個可以搬動的東西,標準做法就是 tar。GNU tar 出自 GNU 計畫,名字來自 Tape Archive:在那個資料還住在磁帶上的年代,它就是拿來把一堆檔案依序寫進一捲磁帶的工具。磁帶早就退到小眾的位置,但它留下的格式,至今仍是原始碼釋出、軟體打包與系統備份的通行做法。
它只負責打包
很多人以為 .tar.gz 是 tar 壓出來的,其實不是。tar 只把檔案與目錄併成一個封存檔,並在過程中保住中介資料:目錄結構、權限位元、擁有者、時間戳。這些細節正是封存檔能在別台機器上解開、行為卻與在家裡一樣的原因,也是改用人工搬檔案時最容易丟掉的部分。把體積變小是別人的工作,交給 gzip、xz、zstd 這類專門的壓縮工具,透過管線接在輸出後面。於是有了那些熟悉的成對副檔名,.tar.gz、.tar.xz、.tar.zst,前半是容器,後半是壓縮器。兩邊分開,各自可以照自己的步調演進;也因為分開,解開一個封存檔只要一行指令,不必管裡面長什麼樣子。換一個壓縮器,其他什麼都不必改;這也是幾年前寫下的封存檔,今天在剛裝好的機器上照樣打得開的原因,容器與編碼器是兩個決定,不是一個。
三個字母走天下
日常操作可以濃縮成三個字母:c 建立封存、t 列出內容、x 解開,再用 f 指定檔名,加上 v 就能看見處理過程。這套語法小到學過一次幾乎不會忘,對一個這麼老的工具來說並不尋常。而在這三個字母周圍,才是真正讓工作能做的能力:只帶走上次快照之後變更部分的增量封存、把某個目錄排除在結果之外的設定,以及在媒體容量有限時拆成好幾卷。把它們包進腳本裡,同一套語法就變成不用人看著也會跑完的備份流程。它沿途不藏東西:沒有專案檔,沒有索引,兩次執行之間也不留狀態,只有一個封存檔和讀它的指令。
釋出與備份底下的那層
GNU tar 以 GPLv3 或更新版本釋出,屬於自由軟體,每一個 Linux 發行版都內建它。macOS 上可以在系統自帶的版本之外再放一份 GNU 版本,Windows 也有移植版本。開源專案的原始碼包幾乎無一例外以 tarball 形式散布,而管理員每天跑的全量與增量備份,靠的也是同一件工具。簡短地說,只要碰到類 Unix 系統,就會遇到它,不管有沒有刻意去找,而且往往在還沒搞懂它在做什麼之前就先遇到。同一件工具因此站在一個釋出的兩端:打包的維護者與解開的管理員,用的是同一個指令,這種對稱並不常見。
仍在維護,也仍在往前走
截至 2026-09,最新的穩定版本是 1.35,而開發線正在引入可重現打包:同一份原始碼在任何機器上打包,應該產出逐位元組一致的 tarball。這件事比聽起來重要,因為一個能重建、能比對的釋出,才是供應鏈真的可以被檢查的釋出;只要差了一個位元組,那就是值得追下去的訊號。工具本身可免費使用,原始碼與使用說明都公開。對整天待在命令列裡的人來說,它該放在工具箱的中間,而不是邊角。老不是這裡的理由;理由是這個格式還在改進,卻不破壞已經存在的東西。