TAR 封存檔 (.tar)
POSIX.1-1988 標準Tape Archive (TAR) 是一種廣泛使用的 Unix 與 Linux 打包格式,可將檔案、目錄與所選的檔案系統中繼資料結合成未壓縮的串流。
將 ZIP 轉換為 TAR
免費的瀏覽器端 ZIP 轉 TAR 轉換器。在您的裝置上即時轉換檔案。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 TAR 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 TAR 檔案:
十六進位簽章(偏移量 257):
75 73 74 61 72ASCII 表示法: ustar
標準化: POSIX.1-1988 (ustar) / POSIX.1-2001 (pax)
技術規格
| 容器架構 | 512 位元組區塊序列:每個區塊包含 512 位元組的檔案標頭,後接向上補齊至 512 位元組的檔案資料,最後以兩個零區塊結束 |
| 壓縮 | 未壓縮的封存檔容器(設計用於透過管線傳輸至 gzip、bzip2、xz 或 zstd) |
| 位元組序 | 八進位 ASCII 字串欄位;大端序數字擴充 |
| 色彩空間 | 不適用(封存檔容器) |
| 色版與結構 | Unix 檔案目錄樹、符號連結、硬式連結、字元/區塊裝置以及 FIFO 管線 |
| 最大尺寸 | 傳統 ustar 格式有 8 GB 限制;現代 PAX 格式則實際上無限制 |
| 透明度 | 儲存所選的檔案系統中繼資料(例如權限與擁有者 ID);保留的屬性取決於封存檔格式與實作方式 |
| 串流與漸進式 | 循序串流導向設計:可直接寫入實體磁帶機 |
技術比較矩陣:TAR 對比競爭格式
| 技術屬性 | TAR (目前) | ZIP | 7Z | CPIO |
|---|---|---|---|---|
| 原生壓縮 | 無(純打包容器) | 內建 Deflate 壓縮 | 內建 LZMA/LZMA2 壓縮 | 無(純打包容器) |
| Unix 權限保留 | 所選的 POSIX 屬性、符號連結、UID/GID | 有限的 Unix 權限支援 | 保留基本權限 | 所選的 POSIX 屬性 |
| 串流解壓縮 | 完整的管線串流解壓縮 | 需要讀取檔案結尾(EOF)處的中央目錄 | 需要讀取結尾標頭 | 完整的串流解壓縮 |
| 檔案隨機存取 | 緩慢(線性循序掃描) | 即時(中央目錄查詢) | 中等(索引查詢) | 緩慢(線性循序掃描) |
常見損壞模式與十六進位修復指南
解壓縮錯誤:「tar: Skipping to next header」(跳至下一個標頭)或「A lone zero block at X」(X 處有單獨的零區塊)。
根本原因: 受損的 512 位元組區塊對齊或串流過早終止。
修復: 使用「tar -i」進行解壓縮以忽略受損區塊,或使用 File2File.app Tar 工具進行修復。
安全性分析與解析器攻擊向量
TAR 解壓縮程式必須清理檔案路徑,以防範透過目錄穿越攻擊來覆寫任意檔案。
已知攻擊向量
- 「Slip」目錄穿越(例如「../etc/passwd」),在解壓縮過程中覆寫關鍵系統檔案。
- 符號連結競態條件,建立指向系統目錄的符號連結,接著進行檔案寫入。
- 透過循環硬式連結迴圈造成阻斷服務。
防禦最佳實務: 嚴格清理封存檔檔案路徑,並拒絕任何包含父目錄參考(「..」)的項目。
歷史起源與里程碑
2001IEEE POSIX.1-2001 引入了 PAX (Portable Archive Interchange) 標準,打破了舊有的 8 GB 大小上限。
1988IEEE POSIX 將「ustar」(Unix Standard Tar)標頭格式標準化。
1979由貝爾實驗室在 Unix 第 7 版(V7)中引入,用於將檔案樹寫入磁帶機。
主要優勢與優點
- TAR 可以記錄 Unix 權限、符號連結與擁有者 ID。請檢查解壓縮程式是否會還原這些欄位,特別是在 Windows 或其他具有不同權限規則的系統上解壓縮時。
- 可串流的磁帶導向設計:可直接從網路管線解壓縮,而無需定位到檔案結尾。
- Linux 套件管理程式與容器工具經常以 TAR 封存檔發布檔案,通常會壓縮為 .tar.gz 或 .tar.zst。
技術限制與缺點
- 沒有原生壓縮功能:未壓縮的 .tar 檔案大小大約等於原始檔案的總和。
- 隨機存取速度緩慢:從大型 tarball 的中間解壓縮單一檔案,需要從頭開始掃描。
- 舊版 ustar 標頭會截斷超過 100 個字元的檔名(已在現代的 PAX/GNU tar 中解決)。
有趣的技術冷知識
- 「ustar」檔案簽章(magic bytes)位於每個 512 位元組標頭區塊內部的第 257 個位元組位移處。
- TAR 最初是為了實體控制 9 軌磁帶機而編寫的。
- Docker 與 OCI 容器映像檔實際上是標準 .tar 封存檔的堆疊集合,其中包含了根檔案系統差異。
常見技術問題
為什麼我的 .tar 檔案沒有被壓縮?
TAR 僅是一個封存工具(它將多個檔案綑綁成一個檔案),本身並不會進行壓縮。若要進行壓縮,請將其與 gzip 搭配使用以建立 .tar.gz 檔案。
ustar 與 GNU tar 有什麼區別?
Ustar 是 1988 年的 POSIX 標準,檔名限制為 100 個字元;GNU tar 則是支援不限長度路徑與稀疏檔案的擴充格式。
如何在 Windows 上開啟 .tar 檔案?
Windows 10 與 11 透過命令列原生支援 tar(「tar -xf file.tar」),您也可以直接在網頁瀏覽器中使用 File2File.app,以圖形介面解壓縮。