DEB(Debian 套件)檔案格式是一種廣泛使用的封裝系統,用於在 Debian 和基於 Debian 的 Linux 發行版(例如 Ubuntu)上分發軟體。它提供了一種標準化方法,用於將軟體與其依賴項、設定檔和元資料綑綁在一起,使用戶可以輕鬆安裝、升級和移除軟體套件。
DEB 檔案基本上是一個壓縮的檔案檔,具有特定的結構和命名慣例。它通常具有 `.deb` 檔案副檔名,並使用 `ar` 封存工具建立。該檔案包含三個主要組成部分:`debian-binary` 檔案、`control.tar.gz` 檔案和 `data.tar.gz` 檔案。
`debian-binary` 檔案是一個純文字檔案,指定檔案中使用的 DEB 格式版本。它通常包含一行版本號碼,例如 `2.0`。
`control.tar.gz` 檔案包含套件元資料和控制資訊。它是一個 gzip 壓縮的 tar 檔案,包含多個檔案和目錄。此檔案中最重要的檔案是 `control` 檔案,其中包含有關套件的基本資訊,例如其名稱、版本、架構、依賴項、維護者和說明。
`control.tar.gz` 檔案中的其他檔案可能包括: - `preinst`:在安裝套件之前執行的腳本。 - `postinst`:在安裝套件之後執行的腳本。 - `prerm`:在移除套件之前執行的腳本。 - `postrm`:在移除套件之後執行的腳本。 - `conffiles`:屬於套件的設定檔清單。 - `shlibs`:共用程式庫依賴項清單。 - `triggers`:定義套件觸發器的檔案。
`data.tar.gz` 檔案包含構成軟體套件的實際檔案和目錄。它也是一個 gzip 壓縮的 tar 檔案。安裝套件時,此檔案的內容會解壓縮到檔案系統的根目錄。
DEB 檔案格式使用特定的命名慣例來為產生的套件檔案命名。套件檔名由多個部分組成:`<name>_<version>-<revision>_<architecture>.deb`。`<name>` 代表套件名稱,`<version>` 是軟體的版本號碼,`<revision>` 是封裝版本(在同一個軟體版本多次封裝時使用),`<architecture>` 指定目標架構(例如 amd64、i386、arm64)。
安裝 DEB 套件時,套件管理員(例如 `apt` 或 `dpkg`)會執行多個步驟。它將 `data.tar.gz` 檔案的內容解壓縮到檔案 系統,執行 `control.tar.gz` 檔案中定義的任何預安裝腳本,並更新套件資料庫以記錄安裝。套件管理員還會解析並安裝套件所需的任何依賴項。
DEB 檔案格式的主要優點之一是它處理依賴項的能力。`control.tar.gz` 檔案中的 `control` 檔案指定套件的依賴項,包括所需的套件及其版本約束。安裝 DEB 套件時,套件管理員會自動解析並安裝必要的依賴項,確保軟體具有正常運作所需的所有組成部分。
DEB 檔案格式還支援套件版本控制和升級。每個套件都有在 `control` 檔案中指定的版本號碼。當發布新版本的套件時,可以將其安裝在現有版本之上。套件管理員會處理升級程序,執行任何必要的預移除和後安裝腳本,並相應地更新套件資料庫。
除了主要組成部分外,DEB 套件還可以包含其他檔案和目錄,例如文件、範例和在地化檔案。這些檔案通常放置在 `data.tar.gz` 檔案中的特定目錄中,遵循檔案系統階層標準 (FHS)。
DEB 檔案格式有一個豐富的工具和實用程式生態系統,用於建立、管理和分發套件。`dpkg-deb` 命令列工具通常用於從原始碼或二進位檔案建立 DEB 套件。它自動化了產生必要的控制檔案和將資料壓縮成 DEB 檔案格式的程序。
其他工具,例如 `dh_make` 和 `debhelper`,為建立 DEB 套件提供了更高級別的抽象和自動化。它們通過產生範本檔案、處理常見任務和強制執行封裝最佳實務來簡化封裝程序。
DEB 檔案格式還支援數位簽章和套件驗證。套件可以用私鑰簽署以確保其完整性和真實性。套件管理員在安裝過程中驗證簽章,以防止竄改並確保套件來自受信任的來源。
總之,DEB 檔案格式是一個功能強大且廣泛使用的封裝系統,適用於基於 Debian 的 Linux 發行版。它提供了一種標準化的方法來分發軟體、處理依賴項以 及管理套件安裝和升級。通過了解 DEB 套件的結構和組成部分,開發人員和系統管理員可以有效地封裝和分發他們的軟體給使用者,以可靠且有效率的方式。
檔案壓縮透過減少冗餘,讓相同的資訊佔用更少的位元。可壓縮的上限受資訊理論約束:對於無失真壓縮,上界是信源熵(參見香農的信源編碼定理以及他於 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。這些工具可以从壓縮格式中提取原始檔案。