1. 程式人生 > 實用技巧 >Linux 黑話解釋:什麼是包管理器?它是如何工作的? | Linux 中國

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

導讀:Linux 發行版之間有什麼不同的要點之一是包管理。                               

本文字數:2364,閱讀時長大約:3分鐘

https://linux.cn/article-12713-1.html
作者:Abhishek Prakash
譯者:Xingyu.Wang

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

什麼是包管理器?

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

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

什麼是包?

一個“(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 有Yum和DNF包管理器。對於 DEB,你有apt-get、aptitude等基於命令列的包管理器。

Synaptic 包管理器

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

結論

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

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

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


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

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

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