Linux包管理基礎命令:apt、yum、dnf和pkg

大多數現代的類 Unix 操作系統都提供了一種中心化的機制用來搜索和安裝軟件。軟件通常都是存放在存儲庫中,並通過包的形式進行分發。處理包的工作被稱爲包管理。包管理系統除了安裝軟件外,它還提供了工具來更新已經安裝的包。不同的Linux發行版使用不同的包管理工具,目前主流Linux發行版中主要是pt、yum、dnf 和 pkg 包管理命令爲主。

本文旨在快速地介紹下在多種 Linux 發行版中查找、安裝和升級軟件包的基礎知識,並幫助您將這些內容在多箇系統之間進行交叉對比。

一、簡單介紹

大多數包系統都是圍繞包文件的集合構建的。包文件通常是一箇存檔文件,它包含已編譯的二進制文件和軟件的其他資源,以及安裝腳本。包文件同時也包含有價值的元數據,包括它們的依賴項,以及安裝和運行它們所需的其他包的列表。

雖然這些擔保理系統的功能和優點大致相同,但打包格式和工具卻因平臺而異:

操作系統 格式 工具 Debin deb ptpt-cchept-getdpkg Ubuntu deb ptpt-cchept-getdpkg CentOS pm yum Fedo pm dnf FeeBSD Pots, txz mkepkg

Debin 及其衍生版,如 Ubuntu、Linux Mint 和 Rspbin,它們的包格式是 。deb。APT 這款先進的擔保理工具提供了大多數常見的操作命令:搜索存儲庫、安裝軟件包及其依賴項,並管理升級。在本地系統中,我們還可以使用 dpkg 程序來安裝單個的 deb 文件,APT 命令作爲底層 dpkg 的前端,有時也會直接調用它。

最近發佈的 debin 衍生版大多數都包括了 pt 命令,它提供了一箇簡潔統一的接口,可用於通常由 pt-get 和 pt-cche 命令處理的常見操作。這個命令是可選的,但使用它可以簡化一些任務。

CentOS、Fedo 和其它 Red Ht 家族成員使用 RPM 文件。在 CentOS 中,通過 yum 來與零丁的包文件和存儲庫進行交互。

在最近的 Fedo 版本中,yum 已經被 dnf 取代,dnf 是它的一箇現代化的分支,它保存了大部分 yum 的接口。

FeeBSD 的二進制包系統由 pkg 命令管理。 FeeBSD 還提供了 Pots 集合,這是一箇存在於當地的目錄結構和工具,它允許用戶獲取源碼後使用 Mkefile 直接從源碼編譯和安裝包。

二、更新包列表

大多數系統在當地都會有一箇和遠程存儲庫對應的包數據庫,在安裝或升級包之前最好更新一下這個數據庫。另外,yum 和 dnf 在執行一些操作之前也會自動檢查更新。當然你可以在任何時候對系統進行更新。

系統 敕令 Debin / Ubuntu sudo pt-get updte sudo pt updte CentOS yum check-updte Fedo dnf check-updte FeeBSD Pckges sudo pkg updte FeeBSD Pots sudo potsnp fetch updte

三、更新已安裝的包

在沒有包系統的情況下,想確保機器上所有已安裝的軟件都保持在最新的狀態是一箇很艱鉅的任務。你將不得不跟蹤數百個不同包的上游更改和平安警報。雖然包管理器並不能解決升級軟件時遇到的所有問題,但它確實使你能夠使用一些命令來維護大多數系統組件。

在 FeeBSD 上,升級已安裝的 pots 可能會引入破壞性的改變,有些步驟還必要進行手動配置,所以在通過 potmste 更新之前最好閱讀下 /us/pots/UPDATING 的內容。

系統 命令 闡明 Debin / Ubuntu sudo pt-get upgde 只更新已安裝的包 sudo pt-get dist-upgde 可能會增加或刪除包以滿足新的依賴項 sudo pt upgde 和 pt-get upgde 類似 sudo pt full-upgde 和 pt-get dist-upgde 類似 CentOS sudo yum updte Fedo sudo dnf upgde FeeBSD Pckges sudo pkg upgde FeeBSD Pots less /us/pots/UPDATING 使用 less 來查看 pots 的更新提示(使用上下光標鍵滾動,按 q 退出)。 cd /us/pots/pots-mgmt/potmste ∓∓ sudo mke instll ∓∓ sudo potmste - 安裝 potmste 然後使用它更新已安裝的 pots

四、搜索某個包

大多數發行版都提供針對包集合的圖形化或菜單驅動的工具,我們可以分類瀏覽軟件,這也是一箇發現新軟件的好辦法。然而,查找包最快和最有效的辦法是使用命令行工具進行搜索。

系統 命令 說明 Debin / Ubuntu pt-cche sech sech_sting pt sech sech_sting CentOS yum sech sech_sting yum sech ll sech_sting 搜索所有的字段,包含描述 Fedo dnf sech sech_sting dnf sech ll sech_sting 搜索所有的字段,包含描述 FeeBSD Pckges pkg sech sech_sting 通過名字進行搜索 pkg sech -f sech_sting 通過名字進行搜索並返回完整的描述 pkg sech -D sech_sting 搜索描述 FeeBSD Pots cd /us/pots ∓∓ mke sech nme=pckge 通過名字進行搜索 cd /us/pots ∓∓ mke sech key=sech_sting 搜索評論、描述和依賴

五、查看某個軟件包的信息

在安裝軟件包之前,我們可以通過仔細閱讀包的描述來獲得很多有用的信息。除了人類可讀的文本之外,這些內容通常包含像版本號這樣的元數據和包的依賴項列表。

系統 命令 說明 Debin / Ubuntu pt-cche show pckge 顯示有關包的當地緩存信息 pt show pckge dpkg -s pckge 顯示包的當前安裝狀態 CentOS yum info pckge yum deplist pckge 列出包的依賴 Fedo dnf info pckge dnf epoquey --equies pckge 列出包的依賴 FeeBSD Pckges pkg info pckge 顯示已安裝的包的信息 FeeBSD Pots cd /us/pots/ctegoy/pot ∓∓ ct pkg-desc

六、從存儲庫安裝包

知道包名後,通常可以用一箇敕令來安裝它及其依賴。你也可以一次性安裝多箇包,只需將它們全部列出來即可。

系統 命令 闡明 Debin / Ubuntu sudo pt-get instll pckge sudo pt-get instll pckge pckge2 ... 安裝所有列出來的包 sudo pt-get instll -y pckge 在 pt 提示是否繼續的地方直接默認 yes sudo pt instll pckge 顯示一箇彩色的進度條 CentOS sudo yum instll pckge `sudo yum instll pckge pckge2… 安裝所有列出來的包 sudo yum instll -y pckge 在 yum 提示是否繼續的地方直接默認 yes Fedo sudo dnf instll pckge `sudo dnf instll pckge pckge2… 安裝所有列出來的包 sudo dnf instll -y pckge 在 dnf 提示是否繼續的地方直接默認 yes FeeBSD Pckges sudo pkg instll pckge sudo pkg instll pckge pckge2 ... 安裝所有列出來的包 FeeBSD Pots cd /us/pots/ctegoy/pot ∓∓ sudo mke instll 從源碼構建安裝一箇 pot

七、從當地文件系統安裝一箇包

對於一箇給定的操作系統,有時有些軟件官方並沒有提供相應的包,那麼開發人員或供應商將需要提供包文件的下載。你通常可以通過 web 瀏覽器檢索這些包,或者通過命令行 cul 來檢索這些信息。將包下載到目標系統後,我們通常可以通過單個命令來安裝它。

在 Debin 派生的系統上,dpkg 用來處置單個的包文件。如果一箇包有未滿足的依賴項,那麼我們可以使用 gdebi從官方存儲庫中檢索它們。

在 CentOS 和 Fedo 系統上,yum 和 dnf 用於安裝單個的文件,並且會處理必要的依賴。

系統 命令 闡明 Debin / Ubuntu sudo dpkg -i pckge.deb sudo pt-get instll -y gdebi ∓∓ sudo gdebi pckge。deb 安裝 gdebi,然後使用 gdebi 安裝 pckge.deb 並處理缺失的依賴 CentOS sudo yum instll pckge.pm Fedo sudo dnf instll pckge.pm FeeBSD Pckges sudo pkg dd pckge.txz sudo pkg dd -f pckge.txz 即使已經安裝的包也會重新安裝

八、刪除一箇或多箇已安裝的包

由於擔保理器知道給定的軟件包提供了哪些文件,因此如果某個軟件不再需要了,它通常可以乾淨利落地從系統中清除這些文件。

系統 命令 說明 Debin / Ubuntu sudo pt-get emoe pckge sudo pt emoe pckge sudo pt-get utoemoe 刪除不必要的包 CentOS sudo yum emoe pckge Fedo sudo dnf ese pckge FeeBSD Pckges sudo pkg delete pckge sudo pkg utoemoe 刪除不必要的包 FeeBSD Pots sudo pkg delete pckge cd /us/pots/pth_to_pot ∓∓ mke deinstll 卸載 pot

pt 命令

Debin 家族刊行版的管理員通常熟悉 pt-get 和 pt-cche。較少爲人所知的是簡化的 pt 接口,它是專爲交互式使用而設計的。

傳統命令 等價的 pt 命令 pt-get updte pt updte pt-get dist-upgde pt full-upgde pt-cche sech sting pt sech sting pt-get instll pckge pt instll pckge pt-get emoe pckge pt emoe pckge pt-get puge pckge pt puge pckge

雖然 pt 通常是一箇特定操作的快捷方式,但它並不能完全替代傳統的工具,它的接口可能會隨着版本的不同而發生變化,以提高可用性。如果你在腳本或 shell 管道中使用擔保理命令,那麼最好還是堅持使用 pt-get 和 pt-cche

九、獲取幫助

除了基於 web 的文檔,請記住我們可以通過 shell 從 Unix 手冊頁(通常稱爲 mn 頁面)中獲得大多數的命令。比如要閱讀某頁,可以使用 mn

mn pge

在 mn 中,你可以用箭頭鍵導航。按 / 搜刮頁面內的文本,使用 q 退出。

系統 命令 說明 Debin / Ubuntu mn pt-get 更新當地包數據庫以及與包一起工作 mn pt-cche 在當地的包數據庫中搜索 mn dpkg 和單獨的包文件一起工作以及能查詢已安裝的包 mn pt 通過更簡潔,用戶友好的接口進行最基本的操作 CentOS mn yum Fedo mn dnf FeeBSD Pckges mn pkg 和預先編譯的二進制包一起工作 FeeBSD Pots mn pots 和 Pots 集合一起工作