GNU TAR(磁帶檔案)格式是一種在類 Unix 作業系統上廣泛使用的檔案歸檔和壓縮格式。它最初是設計用於將檔案備份到磁帶,但現在通常用於將許多檔案收集到一個壓縮的歸檔檔案中 ,以利於儲存和傳輸。TAR 格式允許保留檔案屬性、目錄結構,並支援各種壓縮演算法。
TAR 歸檔檔案包含一系列檔案標頭記錄和檔案資料區塊。歸檔中的每個檔案都由一個標頭記錄表示,其中包含有關檔案的元資料,然後是檔案資料本身。標頭記錄大小為 512 位元組,並包含檔案名稱、檔案模式(權限)、擁有者和群組 ID、檔案大小、修改時間和檢查碼等欄位。
標頭記錄中的檔案名稱欄位長度最多可達 100 個字元。如果檔案名稱超過 100 個字元,則使用「前綴」欄位儲存,這是一個額外的 155 個位元組。前綴與檔案名稱串接以建立完整路徑。檔案模式欄位包含 Unix 檔案權限和檔案類型(一般檔案、目錄、符號連結等)。
在標頭記錄之後是檔案資料,它儲存在連續的 512 位元組區塊中。如果檔案大小不是 512 位元組的倍數,則最後一個區塊會以空位元組填滿。每個檔案的資料區塊會在歸檔中依序寫入,檔案之間沒有分隔符號或定界符號。
除了常規檔案和目錄之外,TAR 歸檔還支援多種類型的標頭記錄。符號連結和硬連結使用特殊標頭記錄表示,這些記錄會參照目標檔案。裝置檔案、命名管線和其他特殊檔案類型也受支援。延伸屬性和 ACL 可以使用 pax 交換格式標頭儲存。
TAR 格式的一個關鍵功能是它支援長檔名和路徑。早期版本的 TAR 限制為 100 個字元的檔名,但後來的版本(例如廣泛使用的 USTAR(Unix 標準 TAR)格式)將其延伸為支援更長的檔名。POSIX.1-2001 標準引入了新的可延伸格式,允許更長的檔名和路徑,以及額外的元資料欄位。
壓縮通常與 TAR 歸檔一起使用,以減小檔案大小。最流行的壓縮方法是 gzip(.tar.gz 或 .tgz)、bzip2(.tar.bz2)和 xz(.tar.xz)。這些壓縮的 TAR 歸檔是透過先建立一個常規 TAR 歸 檔,然後使用所選的壓縮演算法對其進行壓縮而建立的。在解壓縮壓縮的 TAR 歸檔時,會先移除壓縮,然後套用常規的 TAR 解壓縮程序。
TAR 格式還包括內建的錯誤偵測和復原機制。每個標頭記錄都包含一個檢查碼欄位,該欄位是在建立歸檔時計算的。從 TAR 歸檔中解壓縮檔案時,會驗證檢查碼以確保資料完整性。如果偵測到檢查碼不符,則會報告錯誤,並且解壓縮可以略過受影響的檔案或嘗試復原盡可能多的資料。
除了基本的 TAR 格式之外,還有多種變體和延伸正在使用中。廣泛用於 Linux 發行版的 GNU 版本的 TAR 包含額外的功能,例如多卷歸檔、稀疏檔案支援和增量備份。其他延伸,例如 star 和 pax,提供了更好的效能、與非 Unix 系統的相容性,以及對延伸元資料的支援。
儘管 TAR 格式已經過時且有其限制,但由於其簡單性、可移植性以及在不同平台和工具上的廣泛支援,它仍然廣泛使用。它作為許多更高級別的備份和歸檔解決方案的基礎,並且經常被用作分發軟體套件和原始碼的容器格式。隨著新技術和儲存媒體的出現,TAR 格式已經適應並演化以滿足不斷變化的需求,確保它在現代運算環境中持續相關。
檔案壓縮透過減少冗餘,讓相同的資訊佔用更少的位元。可壓縮的上限受資訊理論約束:對於無失真壓縮,上界是信源熵(參見香農的信源編碼定理以及他於 1948 年發表的《通信的數學理論》)。對於有失真壓縮,碼率與感知品質之間的權衡由率失真理論描述。
多數壓縮器分兩個階段。首先,模型會預測或揭露資料中的結構。接著,編碼器把這些預測轉成近乎最優的位元型態。經典的建模家族是 Lempel–Ziv:LZ77 (1977)及 LZ78 (1978) 會偵測重複子字串並輸出參照而非原始位元組。編碼面則由霍夫曼編碼(見原始論文1952)為較常出現的符號分配更短的碼字。算術編碼與範圍編碼再進一步逼近熵極限,而現代的非對稱數值系統(ANS)則用查表方式取得相似壓縮率。
DEFLATE(被 gzip、zlib 與 ZIP 採用)把 LZ77 和霍夫曼編碼結合。其規格完全公開:DEFLATERFC 1951、zlib 封裝RFC 1950以及 gzip 檔案格式RFC 1952。Gzip 針對串流設計並明確不提供隨機存取。PNG 影像則把 DEFLATE 規範為唯一的壓縮方式(視窗最多 32 KiB),詳見 PNG 規格「Compression method 0… deflate/inflate… at most 32768 bytes」與W3C/ISO PNG 第二版。
Zstandard (zstd): 針對高壓縮率與極快解壓而設計的通用壓縮器。格式記載於RFC 8878(以及HTML 鏡像)和 GitHub 上的參考規格文件。與 gzip 類似,基本框架並不追求隨機存取。zstd 的絕招是字典:從語料擷取的小樣本能大幅改善許多小型或相似檔案的壓縮(參閱python-zstandard 字典文件與Nigel Tao 的示例)。各實作同時支援「非結構化」與「結構化」字典(討論)。
Brotli: 為網頁內容(如 WOFF2 字體、HTTP)優化,結合靜態字典與類 DEFLATE 的 LZ+熵編碼核心。規格載於RFC 7932,文件同時指出滑動視窗為 2WBITS-16,WBITS 介於 [10, 24](1 KiB-16 B 至 16 MiB-16 B),並且不嘗試隨機存取。Brotli 常在網頁文字上優於 gzip,解碼也相當快速。
ZIP 容器: ZIP 是一種檔案封存格式,可存放使用多種壓縮法(deflate、store、zstd 等)的項目。權威規格是 PKWARE 的 APPNOTE(參見APPNOTE 入口、托管副本以及美國國會圖書館的概覽ZIP File Format (PKWARE)/ZIP 6.3.3)。
檔案壓縮是一個減少檔案或檔案群大小的過程,通常用於節省儲存空間或加速網路傳輸。
檔案壓縮運作原理,透過識別並移除數據中的冗餘資訊。它使用演算法將原始數據編碼在較小的空間裡。
兩種主要的檔案壓縮類型是無失真及有失真壓縮。無失真壓縮可以完美地恢復原始檔 案,然而有失真壓縮在一些資料品質的損失下能得到更大的壓縮程度。
一個常見的檔案壓縮工具範例是WinZip,它支援多種壓縮格式包括ZIP與RAR。
在無失真壓縮中,質量保持不變。然而,在有失真壓縮中,可能會有顯著的質量下降,因為它刪除了一些較不重要的數據以便更大程度地減少檔案大小。
是的,相對於資料的完整性來說,檔案壓縮是安全的,尤其是無失真壓縮。然而,如同所有檔案,被壓縮的檔案也可能受到惡意軟體或病毒的攻擊,所以總是需要有專業的安全軟體以保護。
幾乎所有種類的檔案都可以被壓縮,包括文字檔案、圖像、音訊、視頻和軟體檔案。然而,壓縮程度可以因檔案類型而有顯著的不同。
ZIP檔是一種使用無失真壓縮以減少一個或多個檔案大小的檔案格式。在ZIP檔中的多個檔案被有效地打包為單一的檔案,這也讓分享變得更加容易。
技術上可行,儘管額外的大小減少可能非常小或甚至適得其反。壓縮一個已經壓縮過的檔案有時可能會增加其大小,原因在於壓縮演算法所增加的metadata。
解壓壓縮的檔案,通常需要一個解壓縮或解zip的工具,像是WinZip或7-Zip。這些工具可以从壓縮格式中提取原始檔案。