
介紹
大多數(shù)現(xiàn)代的類(lèi) Unix 操作系統(tǒng)都提供了一種中心化的機(jī)制用來(lái)搜索和安裝軟件。軟件通常都是存放在存儲(chǔ)庫(kù)中,并通過(guò)包的形式進(jìn)行分發(fā)。處理包的工作被稱(chēng)為包管理。包提供了操作系統(tǒng)的基本組件,以及共享的庫(kù)、應(yīng)用程序、服務(wù)和文檔。
包管理系統(tǒng)除了安裝軟件外,它還提供了工具來(lái)更新已經(jīng)安裝的包。包存儲(chǔ)庫(kù)有助于確保你的系統(tǒng)中使用的代碼是經(jīng)過(guò)審查的,并且軟件的安裝版本已經(jīng)得到了開(kāi)發(fā)人員和包維護(hù)人員的認(rèn)可。
在配置服務(wù)器或開(kāi)發(fā)環(huán)境時(shí),我們最好了解下包在官方存儲(chǔ)庫(kù)之外的情況。某個(gè)發(fā)行版的穩(wěn)定版本中的包有可能已經(jīng)過(guò)時(shí)了,尤其是那些新的或者快速迭代的軟件。然而,包管理無(wú)論對(duì)于系統(tǒng)管理員還是開(kāi)發(fā)人員來(lái)說(shuō)都是至關(guān)重要的技能,而已打包的軟件對(duì)于主流 Linux 發(fā)行版來(lái)說(shuō)也是一筆巨大的財(cái)富。
本指南旨在快速地介紹下在多種 Linux 發(fā)行版中查找、安裝和升級(jí)軟件包的基礎(chǔ)知識(shí),并幫助您將這些內(nèi)容在多個(gè)系統(tǒng)之間進(jìn)行交叉對(duì)比。
包管理系統(tǒng):簡(jiǎn)要概述
大多數(shù)包系統(tǒng)都是圍繞包文件的集合構(gòu)建的。包文件通常是一個(gè)存檔文件,它包含已編譯的二進(jìn)制文件和軟件的其他資源,以及安裝腳本。包文件同時(shí)也包含有價(jià)值的元數(shù)據(jù),包括它們的依賴(lài)項(xiàng),以及安裝和運(yùn)行它們所需的其他包的列表。
雖然這些包管理系統(tǒng)的功能和優(yōu)點(diǎn)大致相同,但打包格式和工具卻因平臺(tái)而異:
| 操作系統(tǒng) | 格式 | 工具 |
|---|---|---|
| Debian | .deb |
apt, apt-cache, apt-get, dpkg
|
| Ubuntu | .deb |
apt, apt-cache, apt-get, dpkg
|
| CentOS | .rpm |
yum |
| Fedora | .rpm |
dnf |
| FreeBSD | Ports, .txz
|
make, pkg
|
Debian 及其衍生版,如 Ubuntu、Linux Mint 和 Raspbian,它們的包格式是 .deb。APT 這款先進(jìn)的包管理工具提供了大多數(shù)常見(jiàn)的操作命令:搜索存儲(chǔ)庫(kù)、安裝軟件包及其依賴(lài)項(xiàng),并管理升級(jí)。在本地系統(tǒng)中,我們還可以使用 dpkg 程序來(lái)安裝單個(gè)的 deb 文件,APT 命令作為底層 dpkg 的前端,有時(shí)也會(huì)直接調(diào)用它。
最近發(fā)布的 debian 衍生版大多數(shù)都包含了 apt 命令,它提供了一個(gè)簡(jiǎn)潔統(tǒng)一的接口,可用于通常由 apt-get 和 apt-cache 命令處理的常見(jiàn)操作。這個(gè)命令是可選的,但使用它可以簡(jiǎn)化一些任務(wù)。
CentOS、Fedora 和其它 Red Hat 家族成員使用 RPM 文件。在 CentOS 中,通過(guò) yum 來(lái)與單獨(dú)的包文件和存儲(chǔ)庫(kù)進(jìn)行交互。
在最近的 Fedora 版本中,yum 已經(jīng)被 dnf 取代,dnf 是它的一個(gè)現(xiàn)代化的分支,它保留了大部分 yum 的接口。
FreeBSD 的二進(jìn)制包系統(tǒng)由 pkg 命令管理。FreeBSD 還提供了 Ports 集合,這是一個(gè)存在于本地的目錄結(jié)構(gòu)和工具,它允許用戶(hù)獲取源碼后使用 Makefile 直接從源碼編譯和安裝包。
更新包列表
大多數(shù)系統(tǒng)在本地都會(huì)有一個(gè)和遠(yuǎn)程存儲(chǔ)庫(kù)對(duì)應(yīng)的包數(shù)據(jù)庫(kù),在安裝或升級(jí)包之前最好更新一下這個(gè)數(shù)據(jù)庫(kù)。另外,yum 和 dnf 在執(zhí)行一些操作之前也會(huì)自動(dòng)檢查更新。當(dāng)然你可以在任何時(shí)候?qū)ο到y(tǒng)進(jìn)行更新。
| 系統(tǒng) | 命令 |
|---|---|
| Debian / Ubuntu | sudo apt-get update |
sudo apt update |
|
| CentOS | yum check-update |
| Fedora | dnf check-update |
| FreeBSD Packages | sudo pkg update |
| FreeBSD Ports | sudo portsnap fetch update |
更新已安裝的包
在沒(méi)有包系統(tǒng)的情況下,想確保機(jī)器上所有已安裝的軟件都保持在最新的狀態(tài)是一個(gè)很艱巨的任務(wù)。你將不得不跟蹤數(shù)百個(gè)不同包的上游更改和安全警報(bào)。雖然包管理器并不能解決升級(jí)軟件時(shí)遇到的所有問(wèn)題,但它確實(shí)使你能夠使用一些命令來(lái)維護(hù)大多數(shù)系統(tǒng)組件。
在 FreeBSD 上,升級(jí)已安裝的 ports 可能會(huì)引入破壞性的改變,有些步驟還需要進(jìn)行手動(dòng)配置,所以在通過(guò) portmaster 更新之前最好閱讀下 /usr/ports/UPDATING 的內(nèi)容。
| 系統(tǒng) | 命令 | 說(shuō)明 |
|---|---|---|
| Debian / Ubuntu | sudo apt-get upgrade |
只更新已安裝的包 |
sudo apt-get dist-upgrade |
可能會(huì)增加或刪除包以滿(mǎn)足新的依賴(lài)項(xiàng) | |
sudo apt upgrade |
和 apt-get upgrade 類(lèi)似 |
|
sudo apt full-upgrade |
和 apt-get dist-upgrade 類(lèi)似 |
|
| CentOS | sudo yum update |
|
| Fedora | sudo dnf upgrade |
|
| FreeBSD Packages | sudo pkg upgrade |
|
| FreeBSD Ports | less /usr/ports/UPDATING |
使用 less 來(lái)查看 ports 的更新提示(使用上下光標(biāo)鍵滾動(dòng),按 q 退出)。 |
cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a |
安裝 portmaster 然后使用它更新已安裝的 ports |
搜索某個(gè)包
大多數(shù)發(fā)行版都提供針對(duì)包集合的圖形化或菜單驅(qū)動(dòng)的工具,我們可以分類(lèi)瀏覽軟件,這也是一個(gè)發(fā)現(xiàn)新軟件的好方法。然而,查找包最快和最有效的方法是使用命令行工具進(jìn)行搜索。
| 系統(tǒng) | 命令 | 說(shuō)明 |
|---|---|---|
| Debian / Ubuntu | apt-cache search search_string |
|
apt search search_string |
||
| CentOS | yum search search_string |
|
yum search all search_string |
搜索所有的字段,包括描述 | |
| Fedora | dnf search search_string |
|
dnf search all search_string |
搜索所有的字段,包括描述 | |
| FreeBSD Packages | pkg search search_string |
通過(guò)名字進(jìn)行搜索 |
pkg search -f search_string |
通過(guò)名字進(jìn)行搜索并返回完整的描述 | |
pkg search -D search_string |
搜索描述 | |
| FreeBSD Ports | cd /usr/ports && make search name=package |
通過(guò)名字進(jìn)行搜索 |
cd /usr/ports && make search key=search_string |
搜索評(píng)論、描述和依賴(lài) |
查看某個(gè)軟件包的信息
在安裝軟件包之前,我們可以通過(guò)仔細(xì)閱讀包的描述來(lái)獲得很多有用的信息。除了人類(lèi)可讀的文本之外,這些內(nèi)容通常包括像版本號(hào)這樣的元數(shù)據(jù)和包的依賴(lài)項(xiàng)列表。
| 系統(tǒng) | 命令 | 說(shuō)明 |
|---|---|---|
| Debian / Ubuntu | apt-cache show package |
顯示有關(guān)包的本地緩存信息 |
apt show package |
||
dpkg -s package |
顯示包的當(dāng)前安裝狀態(tài) | |
| CentOS | yum info package |
|
yum deplist package |
列出包的依賴(lài) | |
| Fedora | dnf info package |
|
dnf repoquery --requires package |
列出包的依賴(lài) | |
| FreeBSD Packages | pkg info package |
顯示已安裝的包的信息 |
| FreeBSD Ports | cd /usr/ports/category/port && cat pkg-descr |
從存儲(chǔ)庫(kù)安裝包
知道包名后,通??梢杂靡粋€(gè)命令來(lái)安裝它及其依賴(lài)。你也可以一次性安裝多個(gè)包,只需將它們?nèi)苛谐鰜?lái)即可。
| 系統(tǒng) | 命令 | 說(shuō)明 |
|---|---|---|
| Debian / Ubuntu | sudo apt-get install package |
|
sudo apt-get install package1 package2 ... |
安裝所有列出來(lái)的包 | |
sudo apt-get install -y package |
在 apt 提示是否繼續(xù)的地方直接默認(rèn) yes
|
|
sudo apt install package |
顯示一個(gè)彩色的進(jìn)度條 | |
| CentOS | sudo yum install package |
|
sudo yum install package1 package2 ... |
安裝所有列出來(lái)的包 | |
sudo yum install -y package |
在 yum 提示是否繼續(xù)的地方直接默認(rèn) yes
|
|
| Fedora | sudo dnf install package |
|
sudo dnf install package1 package2 ... |
安裝所有列出來(lái)的包 | |
sudo dnf install -y package |
在 dnf 提示是否繼續(xù)的地方直接默認(rèn) yes
|
|
| FreeBSD Packages | sudo pkg install package |
|
sudo pkg install package1 package2 ... |
安裝所有列出來(lái)的包 | |
| FreeBSD Ports | cd /usr/ports/category/port && sudo make install |
從源碼構(gòu)建安裝一個(gè) port |
從本地文件系統(tǒng)安裝一個(gè)包
對(duì)于一個(gè)給定的操作系統(tǒng),有時(shí)有些軟件官方并沒(méi)有提供相應(yīng)的包,那么開(kāi)發(fā)人員或供應(yīng)商將需要提供包文件的下載。你通常可以通過(guò) web 瀏覽器檢索這些包,或者通過(guò)命令行 curl 來(lái)檢索這些信息。將包下載到目標(biāo)系統(tǒng)后,我們通??梢酝ㄟ^(guò)單個(gè)命令來(lái)安裝它。
在 Debian 派生的系統(tǒng)上,dpkg 用來(lái)處理單個(gè)的包文件。如果一個(gè)包有未滿(mǎn)足的依賴(lài)項(xiàng),那么我們可以使用 gdebi 從官方存儲(chǔ)庫(kù)中檢索它們。
在 CentOS 和 Fedora 系統(tǒng)上,yum 和 dnf 用于安裝單個(gè)的文件,并且會(huì)處理需要的依賴(lài)。
| 系統(tǒng) | 命令 | 說(shuō)明 |
|---|---|---|
| Debian / Ubuntu | sudo dpkg -i package.deb |
|
sudo apt-get install -y gdebi && sudo gdebi package.deb |
安裝 gdebi,然后使用 gdebi 安裝 package.deb 并處理缺失的依賴(lài) |
|
| CentOS | sudo yum install package.rpm |
|
| Fedora | sudo dnf install package.rpm |
|
| FreeBSD Packages | sudo pkg add package.txz |
|
sudo pkg add -f package.txz |
即使已經(jīng)安裝的包也會(huì)重新安裝 |
刪除一個(gè)或多個(gè)已安裝的包
由于包管理器知道給定的軟件包提供了哪些文件,因此如果某個(gè)軟件不再需要了,它通??梢愿蓛衾涞貜南到y(tǒng)中清除這些文件。
| 系統(tǒng) | 命令 | 說(shuō)明 |
|---|---|---|
| Debian / Ubuntu | sudo apt-get remove package |
|
sudo apt remove package |
||
sudo apt-get autoremove |
刪除不需要的包 | |
| CentOS | sudo yum remove package |
|
| Fedora | sudo dnf erase package |
|
| FreeBSD Packages | sudo pkg delete package |
|
sudo pkg autoremove |
刪除不需要的包 | |
| FreeBSD Ports | sudo pkg delete package |
|
cd /usr/ports/path_to_port && make deinstall |
卸載 port |
apt 命令
Debian 家族發(fā)行版的管理員通常熟悉 apt-get 和 apt-cache。較少為人所知的是簡(jiǎn)化的 apt 接口,它是專(zhuān)為交互式使用而設(shè)計(jì)的。
| 傳統(tǒng)命令 | 等價(jià)的 apt 命令 |
|---|---|
apt-get update |
apt update |
apt-get dist-upgrade |
apt full-upgrade |
apt-cache search string |
apt search string |
apt-get install package |
apt install package |
apt-get remove package |
apt remove package |
apt-get purge package |
apt purge package |
雖然 apt 通常是一個(gè)特定操作的快捷方式,但它并不能完全替代傳統(tǒng)的工具,它的接口可能會(huì)隨著版本的不同而發(fā)生變化,以提高可用性。如果你在腳本或 shell 管道中使用包管理命令,那么最好還是堅(jiān)持使用 apt-get 和 apt-cache。
獲取幫助
除了基于 web 的文檔,請(qǐng)記住我們可以通過(guò) shell 從 Unix 手冊(cè)頁(yè)(通常稱(chēng)為 man 頁(yè)面)中獲得大多數(shù)的命令。比如要閱讀某頁(yè),可以使用 man:
man page
在 man 中,你可以用箭頭鍵導(dǎo)航。按 / 搜索頁(yè)面內(nèi)的文本,使用 q 退出。
| 系統(tǒng) | 命令 | 說(shuō)明 |
|---|---|---|
| Debian / Ubuntu | man apt-get |
更新本地包數(shù)據(jù)庫(kù)以及與包一起工作 |
man apt-cache |
在本地的包數(shù)據(jù)庫(kù)中搜索 | |
man dpkg |
和單獨(dú)的包文件一起工作以及能查詢(xún)已安裝的包 | |
man apt |
通過(guò)更簡(jiǎn)潔,用戶(hù)友好的接口進(jìn)行最基本的操作 | |
| CentOS | man yum |
|
| Fedora | man dnf |
|
| FreeBSD Packages | man pkg |
和預(yù)先編譯的二進(jìn)制包一起工作 |
| FreeBSD Ports | man ports |
和 Ports 集合一起工作 |
結(jié)論和進(jìn)一步的閱讀
本指南通過(guò)對(duì)多個(gè)系統(tǒng)間進(jìn)行交叉對(duì)比概述了一下包管理系統(tǒng)的基本操作,但只涉及了這個(gè)復(fù)雜主題的表面。對(duì)于特定系統(tǒng)更詳細(xì)的信息,可以參考以下資源:
- 這份指南 詳細(xì)介紹了 Ubuntu 和 Debian 的軟件包管理。
- 這里有一份 CentOS 官方的指南 使用 yum 管理軟件
- 這里有一個(gè)有關(guān) Fedora 的
dnf的 wifi 頁(yè)面 以及一份有關(guān)dnf官方的手冊(cè) -
這份指南 講述了如何使用
pkg在 FreeBSD 上進(jìn)行包管理 - 這本 FreeBSD Handbook 有一節(jié)講述了如何使用 Ports 集合
via: https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg

作者:Brennen Bearnes
譯者:Snapcrafter
校對(duì):wxy
本文由 LCTT 原創(chuàng)編譯,Linux中國(guó) 榮譽(yù)推出