Linux中國

Linux 黑話解釋:什麼是包管理器?它是如何工作的?

Linux 發行版之間有什麼不同的要點之一是包管理。在這篇 Linux 黑話解釋中,你將了解 Linux 中的打包和包管理器。你將了解什麼是包,什麼是包管理器,它們是如何工作的,以及有什麼包管理器。

什麼是包管理器?

簡單來說,「 包管理器 package manager 」(或「軟體包管理器」)是一種工具,它允許用戶在操作系統上安裝、刪除、升級、配置和管理軟體包。軟體包管理器可以是像「軟體中心」這樣的圖形化應用,也可以是像 apt-getpacman 這樣的命令行工具。

你會發現我經常在教程和文章中使用「包」這個詞。要了解包管理器,你必須了解什麼是包。

什麼是包?

一個「 package 」(或「軟體包」)通常指的是一個應用程序,它可以是一個 GUI 應用程序、命令行工具或(其他軟體程序需要的)軟體庫。包本質上是一個存檔文件,包含二進位可執行文件、配置文件,有時還包含依賴關係的信息。

在舊時代,軟體曾經是從它的源代碼安裝的。你會參考一個文件(通常命名為 README),看看它需要什麼軟體組件、二進位文件的位置。它通常包括一個配置腳本或 Makefile。你必須自己編譯該軟體或自己處理所有的依賴關係(有些軟體需要安裝其他軟體)。

為了擺脫這種複雜性,Linux 發行版創建了自己的打包格式,為終端用戶提供隨時可用的二進位文件(預編譯軟體),以便安裝軟體,同時提供一些元數據(版本號、描述)和依賴關係。

這就像烤蛋糕與買蛋糕一樣。

大約在上世紀 90 年代中期,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 有 YumDNF 包管理器。對於 DEB,你有 apt-getaptitude 等基於命令行的包管理器。

Synaptic 包管理器

軟體包管理器不一定是基於命令行的,也有圖形化的軟體包管理工具,比如 Synaptic。你的發行版的「軟體中心」也是一個軟體包管理器,即使它在底層運行的是 apt-get 或 DNF。

結論

我不想進一步詳細介紹這個話題,雖然我可以繼續說下去,但這將偏離本主題的目標 —— 即讓你對 Linux 中的包管理器有一個基本的了解。

我暫時忽略了新的通用打包格式,比如 Snap 和 Flatpak。

我希望你對 Linux 中的包管理系統有更好的理解。如果你還有困惑,或者你對這個主題有一些問題,請發表評論。我會盡量回答你的問題,如果需要的話,我會在本文中更新新的內容。

via: https://itsfoss.com/package-manager/

作者:Abhishek Prakash 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國