在 Linux 的早期,程式僅作為源代碼以及所需的手冊頁、必要的配置文件等分發。如今,大多數 Linux 發行商預設使用預先構建的程式或稱為軟體包的程式集,將其提供給準備在該發行版上安裝的用戶。然而,Linux 的奇跡之一仍然是可以獲得要研究、改進和編譯的程式的源代碼。 ...
原文鏈接:https://www.tecmint.com/linux-package-management/
去年 8 月(原文時間:2018-09-19),Linux 基金會宣佈了 LFCS 認證(Linux 基金會認證系統管理員),這對世界各地的系統管理員來說是一個絕佳的機會,可以通過基於性能的考試來證明他們有能力在 Linux 系統的整體操作支持方面取得成功。經過 Linux 基金會認證的系統管理員擁有專業知識,可確保有效的系統支持、一級故障排除和監控,包括最終在需要時將問題升級給工程支持團隊。
本文是 10 個教程長系列的第 9 部分,今天在本文中我們將指導大家瞭解 LFCS 認證考試所需的 Linux 包管理。
Package Management(包管理)
簡而言之,包管理是一種在系統上安裝和維護(包括更新和可能刪除)軟體的方法。
在 Linux 的早期,程式僅作為源代碼以及所需的手冊頁、必要的配置文件等分發。如今,大多數 Linux 發行商預設使用預先構建的程式或稱為軟體包的程式集,將其提供給準備在該發行版上安裝的用戶。然而,Linux 的奇跡之一仍然是可以獲得要研究、改進和編譯的程式的源代碼。
How package management systems work(包管理系統如何工作)
如果某個包需要某個資源(例如共用庫)或另一個包,則稱其具有依賴性。所有現代包管理系統都提供某種依賴性解析方法,以確保全裝包時,也會安裝其所有依賴項。
Packaging Systems(包管理系統)
現代 Linux 系統上安裝的幾乎所有軟體都可以在 Internet 上找到。它可以由發行版供應商通過中央存儲庫提供(其中可以包含數千個包,每個包都是專門為發行版構建、測試和維護的),也可以以源代碼形式提供,可以手動下載和安裝。
由於不同的發行版系列使用不同的軟體包系統(Debian:.deb / CentOS:.rpm / openSUSE:專為 openSUSE 構建的 .rpm),因此用於一種發行版的軟體包將與另一種發行版不相容。然而,大多數發行版可能屬於 LFCS 認證涵蓋的三個發行版系列之一。
High and low-level package tools(高級和低級包工具)
為了有效地執行包管理任務,需要知道將有兩種類型的可用實用程式:低級工具(在後端處理包文件的實際安裝、升級和刪除)和高級工具(負責確保執行依賴性解析和元數據搜索(“關於數據的數據”)任務)。
發行版 | 低級工具 | 高級工具 |
---|---|---|
Debian 及其衍生品 | dpkg | apt-get/aptitude |
CentOS | rpm | yum |
openSUSE | rpm | zypper |
dpkg 是基於 Debian 系統的低級包管理器。它可以安裝、刪除、提供有關和構建 *.deb 包的信息,但無法自動下載和安裝其相應的依賴項。
apt-get 是 Debian 及其衍生版本的高級包管理器,提供了一種使用命令行從多個源檢索和安裝包(包括依賴項解析)的簡單方法。與 dpkg 不同,apt-get 不直接使用 *.deb 文件,而是使用包的正確名稱。
aptitude 是基於 Debian 系統的另一個高級包管理器,可用於以快速、簡單的方式執行管理任務(安裝、升級和刪除包,還自動處理依賴項解析)。它提供了與 apt-get 相同的功能以及其他功能,例如提供對包的多個版本的訪問。
rpm 是符合 Linux Standard Base (LSB) 的發行版使用的包管理系統,用於低級別的包處理。就像 dpkg 一樣,它可以查詢、安裝、驗證、升級和刪除軟體包,並且更常被基於 Fedora 的發行版使用,例如 RHEL 和 CentOS。
yum 向基於 RPM 的系統添加了自動更新和包管理以及依賴項管理的功能。作為一個高級工具,如 apt-get 或 aptitude,yum 與存儲庫一起使用。
Common Usage of Low-Level Tools(低級工具的常見用法)
使用低級工具執行的最常見任務如下:
- 從編譯的(*.deb 或 *.rpm)文件安裝軟體包
這種安裝方法的缺點是不提供依賴關係解析。當發行版存儲庫中沒有此類軟體包,因此無法通過高級工具下載和安裝時,我們很可能會選擇從已編譯的文件安裝此類軟體包。由於低級工具不執行依賴關係解析,因此如果我們嘗試安裝具有未滿足依賴關係的包,它們將退出並出現錯誤。
# dpkg -i file.deb [Debian and derivative]
# rpm -i file.rpm [CentOS / openSUSE]
註意:請勿嘗試在 CentOS 上安裝為 openSUSE 構建的 *.rpm 文件,反之亦然!
- 從編譯文件升級包
同樣,只有當中央存儲庫中沒有已安裝的軟體包時,我們才會手動升級該軟體包。
# dpkg -i file.deb [Debian and derivative]
# rpm -U file.rpm [CentOS / openSUSE]
- 列出已安裝的軟體包
當我們第一次接觸已經運行的系統時,很可能想知道安裝了哪些軟體包。
# dpkg -l [Debian and derivative]
# rpm -qa [CentOS / openSUSE]
如果想知道是否安裝了特定的軟體包,可以將上述命令的輸出通過管道傳輸到 grep,如在 Linux 中操作文件 - 本系列的第 1 部分中所述。假設我們需要驗證 Ubuntu 系統上是否安裝了 mysql-common 軟體包。
# dpkg -l | grep mysql-common
另一種確定軟體包是否已安裝的方法。
# dpkg --status package_name [Debian and derivative]
# rpm -q package_name [CentOS / openSUSE]
例如,讓我們看看我們的系統上是否安裝了 sysdig 軟體包。
# rpm -qa | grep sysdig
- 找出哪個包安裝了某個文件
# dpkg --search file_name
# rpm -qf file_name
例如,哪個軟體包安裝了pw_dict.hwm?
# rpm -qf /usr/share/cracklib/pw_dict.hwm
Common Usage of High-Level Tools(高級工具的常見用法)
使用高級工具執行的最常見任務如下。
- 搜索包
aptitude update 將更新可用包的列表,並且 aptitude search 將執行對 package_name 的實際搜索。
# aptitude update && aptitude search package_name
在 search all 選項中,yum 不僅會在包名稱中搜索 package_name,還會在包描述中搜索 package_name。
# yum search package_name
# yum search all package_name
# yum whatprovides "*/package_name"
假設我們需要一個名為 sysdig 的文件。要知道我們必須安裝的包,讓我們運行一下。
# yum whatprovides "*/sysdig"
whatprovides 告訴 yum 搜索將提供與上述正則表達式匹配的文件的包。
# zypper refresh && zypper search package_name [On openSUSE]
- 從存儲庫安裝包
安裝軟體包時,在軟體包管理器解決所有依賴關係後,系統可能會提示確認安裝。請註意,運行更新或刷新(根據所使用的包管理器)並不是絕對必要的,但出於安全和依賴性原因,使已安裝的包保持最新是一個很好的系統管理實踐。
# aptitude update && aptitude install package_name [Debian and derivatives]
# yum update && yum install package_name [CentOS]
# zypper refresh && zypper install package_name [openSUSE]
- 刪除包
選項“刪除”將卸載軟體包,但保留配置文件完整,而“清除”將從系統中刪除該程式的所有痕跡。
# aptitude remove / purge package_name
# yum erase package_name
---Notice the minus sign in front of the package that will be uninstalled, openSUSE ---
# zypper remove -package_name
預設情況下,大多數(如果不是全部)包管理器都會提示您是否確定要在實際執行卸載之前繼續卸載。請仔細閱讀屏幕上的信息,以免遇到不必要的麻煩!
- 顯示包的信息
以下命令將顯示有關birthday package的信息。
# aptitude show birthday
# yum info birthday
# zypper info birthday
Summary(概括)
作為系統管理員,包管理是你無法忽視的事情。您應該準備好隨時使用本文中描述的工具。希望您發現它對您準備 LFCS 考試和日常任務很有幫助。