一項區分 Linux 發行版的重要因素是其套件管理系統。在本文中,你將了解 Linux 中的打包和套件管理器。我們將為你介紹「套件」和「套件管理器」的概念,以及它們如何運作,以及一些常見的套件管理器。
什麼是套件管理器?
簡單來說,「 套件管理器(package manager)」(或「軟體套件管理器」)是一種工具,它允許使用者在作業系統上安裝、刪除、升級、配置和管理軟體包。軟體套件管理器可以是像「軟體中心」這樣的圖形化應用,也可以是像 apt-get 或 pacman 這樣的命令列工具。
你會發現我經常在教學和文章中使用「包」這個詞。要了解套件管理器,你必須了解什麼是套件。
什麼是套件?
#一個「 套件(package)」(或「軟體包」)通常指的是一個應用程序,它可以是一個 GUI 應用程式、命令列工具或(其他軟體程式需要的)軟體庫。套件本質上是一個存檔文件,包含二進位執行檔、設定文件,有時還包含依賴關係的資訊。
在舊時代, 軟體曾經是從它的原始碼安裝的 。你會參考一個檔案(通常命名為 README),看看它需要什麼軟體元件、二進位檔案的位置。它通常包括一個配置腳本或 Makefile。你必須自己編譯軟體或自己處理所有的依賴關係(有些軟體需要安裝其他軟體)。
為了擺脫這種複雜性,Linux 發行版創建了自己的打包格式,為終端用戶提供隨時可用的二進位檔案(預編譯軟體),以便安裝軟體,同時提供一些元資料(版本號、描述)和依賴關係。
這就像烤蛋糕跟買蛋糕一樣。
大約在 1990 年代中期,Debian 創建了 DEB 打包格式(.deb),Red Hat Linux 創建了 RPM(Red Hat Package Manager 的縮寫)打包系統(.rpm)。編譯原始碼的方式仍然存在,但現在是可選的。
要與打包系統互動或使用打包系統,你需要一個套件管理器。
套件管理器是如何運作的?
請記住,套件管理器是一個通用的概念,它並不是 Linux 獨有的。你會經常發現各種軟體或程式語言的套件管理器。有 只是 Python 套件的 PIP 套件管理器 。甚至 Atom 編輯器也有自己的套件管理器 。
由於本文的重點是 Linux,所以我會從 Linux 的角度出發。不過,這裡的大部分解釋也可以應用於一般的套件管理器。
我創建了這個圖(基於 SUSE Wiki),這樣你就可以很容易理解套件管理器是如何運作的。
幾乎所有的 Linux 發行版都有“ 軟體倉庫(software repository)”,它基本上是軟體包的集合。是的,可以有不只一個軟體庫。軟體庫包含不同種類的軟體包。
軟體倉庫也有元資料文件,其中包含了軟體包的信息,如軟體包的名稱、版本號、軟體包的描述和軟體倉庫名稱等。這就是你在 Ubuntu/Debian 中使用 apt show 指令 所看到的。
你的系統上的套件管理器會先與元資料互動。套件管理器在你的系統上創建了一個元資料的本機快取。當你執行套件管理器的更新選項(例如 apt update)時,它會透過引用倉庫中的元資料來更新本地元資料快取。
當你執行軟體套件管理器的安裝指令(例如 apt install package_name)時,軟體套件管理器會引用這個快取。如果它在快取中找到了包的信息,它就會使用互聯網連接到相應的倉庫,並在你的系統上安裝之前先下載包。
一個套件可能有依賴關係。意思是說,它可能需要安裝其他軟體包。軟體包管理器通常會處理這些依賴關係,並將其與你正在安裝的軟體包一起自動安裝。
*Linux 中套件管理器會處理依賴關係*
同樣,當你使用套件管理器刪除一個套件時,它要么自動刪除,要么通知你係統有未使用的套件可以清理。
除了安裝、刪除這些顯而易見的任務外,你還可以使用套件管理器對套件進行配置,並根據自己的需求進行管理。例如,你可以在常規的系統更新中 防止升級某個套件的版本 。你的套件管理器可能還能做很多事情。
不同種類的套件管理器
套件管理器因打包系統而異,但同一打包系統可能有多個套件管理器。
例如,RPM 有 Yum 和 DNF 套件管理器。對於 DEB,你有 apt-get、 aptitude 等基於命令列的套件管理器。
Synaptic 套件管理器
#軟體套件管理器不一定是基於命令列的,也有圖形化的軟體包管理工具,例如 Synaptic 。你的發行版的「軟體中心」也是一個軟體包管理器,即使它在底層運行的是 apt-get 或 DNF。
結論
我不想進一步詳細介紹這個主題,雖然我可以繼續說下去,但這將偏離本主題的目標 —— 即讓你對 Linux 中的套件管理器有一個基本的了解。
我暫時忽略了新的通用打包格式,像是 Snap 和 Flatpak。
以上是詳解Linux套件管理器的詳細內容。更多資訊請關注PHP中文網其他相關文章!