Linux 學習 第十章 取得與管理軟體

📢 本文由 gemini-3-flash-preview 翻譯

第十章 取得與管理軟體

10.1 在桌面管理軟體

透過軟體與 GUI 管理

10.2 超越 Software 視窗

Software 中能搜尋到的軟體有限

10.3 了解 Linux RPM 與 DEB 軟體套件

軟體套件稱為 tarball (壓縮檔),包含執行檔 (指令)、文件、設定檔以及函式庫

  • DEB (.deb) 套件

Debian GNU/Linux 專案建立了 .deb 套件,這種套件被 Debian 以及其他基於 Debian 的發行版本 (Ubuntu、Linux Mint、KNOPPIX 等) 所使用。透過 aptdpkg 指令以安裝、管理、更新和刪除軟體

  • RPM (.rpm) 套件

最初為 Red Hat Package Manager,後被命名為 RPM Package Manager。RPM 是 SUSE、Red Hat 發行版本 (RHEL、Fedora) 以及其他發行版本 (需基於 Red Hat 發行版本,如 CentOS、Oracle Linux 等) 的首選軟體套件格式。透過原先的 rpm 或增強的 yum 以及現在的 dnf 指令管理軟體

yum 終將被 dnf 指令所取代

10.3.1 理解 DEB 套件

Debian 軟體套件以封存檔案格式儲存了許多檔案以及與一些軟體相關的中繼資料。這些檔案可以是執行檔 (指令)、設定檔以及其他軟體項目。而中繼資料包括相依性、授權、套件大小、描述以及其他資訊

透過 apt* 指令以取得 (apt-get)、搜尋 (apt-cache search)、查看詳情 (apt-cache show)、安裝 (apt-get install)、升級 (apt-get upgrade)、列出已安裝軟體 (apt-cache pkgnames) 等

透過 aptitude 指令以在 shell 中使用面向螢幕的選單從而安裝軟體

10.3.2 理解 RPM 套件

RPM 套件是不同檔案的合併,而每個檔案提供了一項功能。RPM 內部可以是構成軟體功能的指令、設定檔以及文件或者中繼資料 (關於軟體套件的內容、軟體套件的來源、執行所需的條件以及其他資訊)

使用 rpm -q -i packageName 指令查看某軟體資訊

10.4 使用 yum 管理 RPM 軟體套件

10.4.1 從 yum 到 dnf 的轉換

DNF 自稱為 Dandified yum https://github.com/rpm-software-management/dnf/

雖然 dnf 與 yum 保持了基本的命令列相容性,但主要區別之一是它遵循嚴格的 API,並鼓勵開發 dnf 的擴充和外掛程式

以下 yum 指令均可作為 dnf 指令使用

有關 dnf 更多資訊,可參考 https://dnf.readthedocs.io/

10.4.2 了解 yum 的運作原理

基本語法 yum [options] command

例如安裝 Firefox:yum install firefox

  1. 檢查 /etc/yum.conf

檔案中

gpgcheck 表明是否對軟體套件驗證

installonly_limit=3 表明允許在系統中保存同一套件的最多三個版本 (請不要將其設置為小於 2,以確保始終擁有至少兩個核心套件)

clean_requirements_on_remove=True 表示在解安裝某軟體將一起解安裝相依項 (如果該相依項不被其他軟體使用)

best=True 表示升級軟體時優先嘗試最新版本

cachedir 表示快取位置

keepcache 是否保留快取

debuglevel 寫入日誌的詳細層級,越高越詳細

metadata_expire 中繼資料逾時時間

詳細了解,使用 man yum.conf 指令

  1. 檢查 /etc/yum.repos.d/*.repo 檔案

若想啟用某軟體庫,將 .repo 檔案放到此目錄。檔案內容大致如下

1
2
3
4
5
6
7
[myrepo]    # 開頭,`[]` 內為軟體庫名稱
name=My repo    # 詳細描述
baseurl=https://rpmrepo.yexca.net/    # 虛擬網址,不存在
# 包含 RPM 檔案的 url 可以是 http://, ftp://, file://
enabled=1    # 是否啟用該軟體庫,若沒有預設啟用
gpgcheck=1    # 是否檢查軟體套件簽章
gpgkey=file:///etc/MYKEY    # 用於檢查軟體套件的密鑰位置

可以啟用任意數量的軟體庫,但每次執行 yum 指令時將檢查每一個軟體庫,將軟體套件相關中繼資料下載到本機系統,所以不要啟用過多的軟體庫

  1. 從 YUM 軟體庫中下載 RPM 軟體套件和中繼資料

在 rpm 目錄有一個 repodata 目錄,為所有啟用軟體庫的 repodata 目錄彙整

中繼資料資訊儲存在 /var/cache/yum,在達到逾時時間後將取得最新中繼資料,yum 預設為 6h,dnf 預設為 48h

  1. 將 RPM 軟體套件安裝到 Linux 檔案系統

相關軟體下載到快取中後,yum 指令透過執行 rpm 指令安裝。如果軟體套件有指令碼,先執行指令碼。然後將軟體套件內容 (指令、設定檔、文件等) 複製到 RPM 中繼資料指定位置。最後執行安裝後執行的指令碼

  1. 將 YUM 軟體庫的中繼資料儲存到本機 RPM 資料庫

包含在每個 RPM 軟體庫中的中繼資料最終被複製到本機的 RPM 資料庫中,而 RPM 資料庫儲存在 /var/lib/rpm 目錄的多個檔案中

10.4.3 藉助第三方軟體庫使用 yum

為了穩定性,建議僅使用官方內建,但自己使用以舒適度優先,可以啟用 RPM Fusion 第三方庫,參考 https://rpmfusion.org/

10.4.4 使用 yum 指令管理軟體

  1. 搜尋軟體套件

yum search keyword

  • 取得某軟體詳細資訊

yum info firefox

  • 若知道指令、設定檔或函式庫名稱,但不知道軟體套件名稱

yum provides keyword

  • 使用 list 子指令以不同方式列出軟體套件名稱

yum list firefox

yum list available

yum list installed

yum list all

  • 查看某軟體套件的相依性、提供者等

yum deplist firefox | less


  1. 安裝和刪除軟體套件
  • install 子指令用於安裝一個或多個軟體套件,以及相應相依套件

yum install firefoxyum -y install firefox 以不需要同意直接安裝

  • reinstall 子指令可以重新安裝某軟體

yum reinstall firefox

  • remove 子指令刪除軟體及其他套件不需要的相依項

yum remove firefox

或者透過歷史紀錄撤銷

使用 yum history 查看安裝歷史紀錄,yum history info 12 查看 id 為 12 的安裝歷史紀錄詳情,yum history undo 12 撤銷 id 為 12 的安裝事務

  1. 更新軟體套件

yum check-update 檢查更新,yum update 更新全部軟體,yum update firefox 更新 Firefox

  1. 更新軟體套件群組

為更方便地管理一套完整的軟體套件,yum 支援軟體套件群組

yum grouplist | less 查看軟體套件群組

yum groupinfo LXDE 查看 LXDE 桌面相關軟體套件群組

yum groupinstall LXDE 安裝 LXDE 軟體套件群組

yum groupremove LXDE 刪除整個 LXDE 群組

  1. 維護 RPM 軟體套件資料庫和快取

yum clean packages 清除軟體安裝套件

yum clean metadata 清除中繼資料

yum clean all

雖然可能不大,但 RPM 資料庫有受損的可能

yum check 檢查快取和資料庫情況

rpm --rebuilddb 重建資料庫

註:一般使用本機 RPM 資料庫的最適合指令為 rpm

  1. 從 YUM 庫下載 RPM

只是下載,但不安裝,下載到目前目錄

yumdownloader firefox

dnf download firefox

10.5 使用 rpm 指令安裝、查詢和驗證軟體

大部分情況下使用 rpm 指令對本機的安裝包檔案使用

10.5.1 使用 rpm 安裝和刪除軟體套件

  • 安裝

rpm -i packageName

需要使用 rpm 套件的完整名稱,即包括基名、版本、核心等

  • 升級

rpm -Uhv packageName

-h 為列印 # 標識 (安裝進度),-v 為更詳細的輸出

  • 更新

若目前目錄有數以千計的 rpm 套件,僅想對以此電腦已經安裝過的升級

rpm -Fhv *.rpm

  • 重新安裝

rpm -Uhv --replacepkgs packageName

  • 降級

rpm -Uhv --oldpackage packageName

  • 刪除

刪除時僅需要基名,如刪除 Firefox

rpm -e firefox

但並不會刪除該軟體的相依性

10.5.2 查詢 rpm 資訊

安裝完軟體後,使用 -q 選項以查詢關於該軟體套件的資訊,如相關描述 -qi、檔案列表 -ql、設定檔 -qc

查詢使用基名即可,如:rpm -qi firefox

還可以查詢相依性 -q --requires、軟體套件所提供的軟體版本 -q --provides、刪除之前和之後執行的指令碼 -q --scripts、變更紀錄 -q --changelog

透過 --queryformat 查詢資訊的不同標記,--querytags 以查看所有可用標記

以上為本機 RPM 資料庫查詢,若添加 -p 選項可查詢目前目錄的軟體套件,此時需要輸入全名,如 rpm -qip zsh-5.7.1-1.fc30.x86_64.rpm

10.5.3 驗證 rpm 軟體套件

註:該選項查閱其他資料並未發現,但本人 Linux 已刪除,無法驗證 (之前用的時候看到這沒複現),但既然看到了,還是記錄一下比較好

透過使用 -V 選項對已安裝的軟體套件檢查,了解自首次安裝以來是否被更改。若執行檔 (/bin 目錄下) 被更改,可能表明系統被破解。設定檔更改很常見

查詢已安裝的 Firefox 的情況 rpm -V firefox

如果輸出以下字元,代表相應地方被修改;沒有輸出表示每個檔案為原始狀態

字元描述
S檔案大小不一致
M模式不一致 (包括權限和檔案類型)
5MD5 校驗不一致
D裝置主要 / 次要編號不匹配
LreadLink (2) 路徑不匹配
U使用者所有權不一致
G群組所有權不一致
TmTime 不一致
PcaPabilities 不一致

這些指示符來自 rpm 手冊的 Verify 部分

可以使用 --replacepkgs 以恢復至原始狀態

如果對安全性要求過高,可以備份 RPM 資料庫,即 /var/lib/rpm 目錄,然後存入唯讀媒介,畢竟如果資料庫也被破解,那校驗將毫無意義

10.6 在企業中管理軟體

如 Kickstart 檔案、PXE 啟動、Satellite 伺服器 (Spacewalk)、容器映像檔

可以自動化大量安裝軟體