《LINUX入門:Linux 包管理基礎(chǔ):apt、yum、dnf 和 pkg》要點(diǎn):
本文介紹了LINUX入門:Linux 包管理基礎(chǔ):apt、yum、dnf 和 pkg,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
大多數(shù)現(xiàn)代的類 Unix 操作系統(tǒng)都提供了一種中心化的機(jī)制用來(lái)搜索和安裝軟件.軟件通常都是存放在存儲(chǔ)庫(kù)中,并通過包的形式進(jìn)行分發(fā).處理包的工作被稱為擔(dān)保理.包提供了操作系統(tǒng)的基本組件,以及共享的庫(kù)、應(yīng)用程序、服務(wù)和文檔.
擔(dān)保理系統(tǒng)除了安裝軟件外,它還提供了工具來(lái)更新已經(jīng)安裝的包.包存儲(chǔ)庫(kù)有助于確保你的系統(tǒng)中使用的代碼是經(jīng)過審查的,并且軟件的安裝版本已經(jīng)得到了開發(fā)人員和包維護(hù)人員的認(rèn)可.
在配置服務(wù)器或開發(fā)環(huán)境時(shí),我們最好了解下包在官方存儲(chǔ)庫(kù)之外的情況.某個(gè)發(fā)行版的穩(wěn)定版本中的包有可能已經(jīng)過時(shí)了,尤其是那些新的或者快速迭代的軟件.然而,包管理無(wú)論對(duì)于系統(tǒng)管理員還是開發(fā)人員來(lái)說都是至關(guān)重要的技能,罷了打包的軟件對(duì)于主流 Linux 發(fā)行版來(lái)說也是一筆巨大的財(cái)富.
本指南旨在快速地介紹下在多種 Linux 發(fā)行版中查找、安裝和升級(jí)軟件包的基礎(chǔ)知識(shí),并贊助您將這些內(nèi)容在多個(gè)系統(tǒng)之間進(jìn)行交叉對(duì)比.
?
大多數(shù)包系統(tǒng)都是圍繞包文件的集合構(gòu)建的.包文件通常是一個(gè)存檔文件,它包含已編譯的二進(jìn)制文件和軟件的其他資源,以及安裝腳本.包文件同時(shí)也包含有價(jià)值的元數(shù)據(jù),包括它們的依賴項(xiàng),以及安裝和運(yùn)行它們所需的其他包的列表.
雖然這些擔(dā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)的擔(dān)保理工具提供了大多數(shù)常見的操作命令:搜索存儲(chǔ)庫(kù)、安裝軟件包及其依賴項(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
命令處理的常見操作.這個(gè)命令是可選的,但使用它可以簡(jiǎn)化一些任務(wù).
CentOS、Fedora 和其它 Red Hat 家族成員使用 RPM 文件.在 CentOS 中,通過 yum
來(lái)與零丁的包文件和存儲(chǔ)庫(kù)進(jìn)行交互.
在最近的 Fedora 版本中,yum
已經(jīng)被 dnf
取代,dnf
是它的一個(gè)現(xiàn)代化的分支,它保存了大部分 yum
的接口.
FreeBSD 的二進(jìn)制包系統(tǒng)由 pkg
命令管理.FreeBSD 還提供了 Ports
集合,這是一個(gè)存在于當(dāng)?shù)氐哪夸浗Y(jié)構(gòu)和工具,它允許用戶獲取源碼后使用 Makefile 直接從源碼編譯和安裝包.
?
大多數(shù)系統(tǒng)在當(dāng)?shù)囟紩?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 |
?
在沒有包系統(tǒng)的情況下,想確保機(jī)器上所有已安裝的軟件都保持在最新的狀態(tài)是一個(gè)很艱巨的任務(wù).你將不得不跟蹤數(shù)百個(gè)不同包的上游更改和平安警報(bào).雖然包管理器并不能解決升級(jí)軟件時(shí)遇到的所有問題,但它確實(shí)使你能夠使用一些命令來(lái)維護(hù)大多數(shù)系統(tǒng)組件.
在 FreeBSD 上,升級(jí)已安裝的 ports 可能會(huì)引入破壞性的改變,有些步驟還必要進(jìn)行手動(dòng)配置,所以在通過 portmaster
更新之前最好閱讀下 /usr/ports/UPDATING
的內(nèi)容.
系統(tǒng) | 命令 | 闡明 |
---|---|---|
Debian / Ubuntu | sudo apt-get upgrade |
只更新已安裝的包 |
? | sudo apt-get dist-upgrade |
可能會(huì)增加或刪除包以滿足新的依賴項(xiàng) |
? | sudo apt upgrade |
和 apt-get upgrade 類似 |
? | sudo apt full-upgrade |
和 apt-get dist-upgrade 類似 |
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 |
?
大多數(shù)發(fā)行版都提供針對(duì)包集合的圖形化或菜單驅(qū)動(dòng)的工具,我們可以分類瀏覽軟件,這也是一個(gè)發(fā)現(xiàn)新軟件的好辦法.然而,查找包最快和最有效的辦法是使用命令行工具進(jìn)行搜索.
系統(tǒng) | 命令 | 說明 |
---|---|---|
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 |
通過名字進(jìn)行搜索 |
? | pkg search -f?search_string |
通過名字進(jìn)行搜索并返回完整的描述 |
? | pkg search -D?search_string |
搜索描述 |
FreeBSD Ports | cd /usr/ports && make search name=package |
通過名字進(jìn)行搜索 |
? | cd /usr/ports && make search key=search_string |
搜索評(píng)論、描述和依賴 |
?
在安裝軟件包之前,我們可以通過仔細(xì)閱讀包的描述來(lái)獲得很多有用的信息.除了人類可讀的文本之外,這些內(nèi)容通常包含像版本號(hào)這樣的元數(shù)據(jù)和包的依賴項(xiàng)列表.
系統(tǒng) | 命令 | 說明 |
---|---|---|
Debian / Ubuntu | apt-cache show?package |
顯示有關(guān)包的當(dāng)?shù)鼐彺嫘畔?/td> |
? | apt show?package |
? |
? | dpkg -s?package |
顯示包的當(dāng)前安裝狀態(tài) |
CentOS | yum info?package |
? |
? | yum deplist?package |
列出包的依賴 |
Fedora | dnf info?package |
? |
? | dnf repoquery --requires?package |
列出包的依賴 |
FreeBSD Packages | pkg info?package |
顯示已安裝的包的信息 |
FreeBSD Ports | cd /usr/ports/category/port?&& cat pkg-descr |
? |
?
知道包名后,通常可以用一個(gè)敕令來(lái)安裝它及其依賴.你也可以一次性安裝多個(gè)包,只需將它們?nèi)苛谐鰜?lái)即可.
系統(tǒng) | 命令 | 闡明 |
---|---|---|
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 |
?
對(duì)于一個(gè)給定的操作系統(tǒng),有時(shí)有些軟件官方并沒有提供相應(yīng)的包,那么開發(fā)人員或供應(yīng)商將需要提供包文件的下載.你通常可以通過 web 瀏覽器檢索這些包,或者通過命令行 curl
來(lái)檢索這些信息.將包下載到目標(biāo)系統(tǒng)后,我們通常可以通過單個(gè)命令來(lái)安裝它.
在 Debian 派生的系統(tǒng)上,dpkg
用來(lái)處置單個(gè)的包文件.如果一個(gè)包有未滿足的依賴項(xiàng),那么我們可以使用 gdebi
從官方存儲(chǔ)庫(kù)中檢索它們.
在 CentOS 和 Fedora 系統(tǒng)上,yum
和 dnf
用于安裝單個(gè)的文件,并且會(huì)處理必要的依賴.
系統(tǒng) | 命令 | 闡明 |
---|---|---|
Debian / Ubuntu | sudo dpkg -i?package.deb |
? |
? | sudo apt-get install -y?gdebi && sudo gdebi?package.deb |
安裝 gdebi ,然后使用 gdebi 安裝 package.deb 并處理缺失的依賴 |
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ì)重新安裝 |
?
由于擔(dān)保理器知道給定的軟件包提供了哪些文件,因此如果某個(gè)軟件不再需要了,它通常可以干凈利落地從系統(tǒng)中清除這些文件.
系統(tǒng) | 命令 | 說明 |
---|---|---|
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 家族刊行版的管理員通常熟悉 apt-get
和 apt-cache
.較少為人所知的是簡(jiǎn)化的 apt
接口,它是專為交互式使用而設(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 管道中使用擔(dān)保理命令,那么最好還是堅(jiān)持使用 apt-get
?和?apt-cache
.
?
除了基于 web 的文檔,請(qǐng)記住我們可以通過 shell 從 Unix 手冊(cè)頁(yè)(通常稱為 man 頁(yè)面)中獲得大多數(shù)的命令.比如要閱讀某頁(yè),可以使用 man
:
man page
在 man
中,你可以用箭頭鍵導(dǎo)航.按 /
搜刮頁(yè)面內(nèi)的文本,使用 q
退出.
系統(tǒng) | 命令 | 說明 |
---|---|---|
Debian / Ubuntu | man apt-get |
更新當(dāng)?shù)匕鼣?shù)據(jù)庫(kù)以及與包一起工作 |
? | man apt-cache |
在當(dāng)?shù)氐陌鼣?shù)據(jù)庫(kù)中搜索 |
? | man dpkg |
和單獨(dú)的包文件一起工作以及能查詢已安裝的包 |
? | man apt |
通過更簡(jiǎn)潔,用戶友好的接口進(jìn)行最基本的操作 |
CentOS | man yum |
? |
Fedora | man dnf |
? |
FreeBSD Packages | man pkg |
和預(yù)先編譯的二進(jìn)制包一起工作 |
FreeBSD Ports | man ports |
和 Ports 集合一起工作 |
?
本指南通過對(duì)多個(gè)系統(tǒng)間進(jìn)行交叉對(duì)比概述了一下?lián)@硐到y(tǒng)的基本操作,但只涉及了這個(gè)復(fù)雜主題的表面.對(duì)于特定系統(tǒng)更詳細(xì)的信息,可以參考以下資源:
dnf
的 wifi 頁(yè)面 以及一份有關(guān) dnf
官方的手冊(cè)
pkg
在 FreeBSD 上進(jìn)行擔(dān)保理via: https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg
譯者跋文:
從經(jīng)典的 configure
&& make
&& make install
三部曲到 dpkg
,從必要手處理依賴關(guān)系的 dpkg
到全自動(dòng)化的 apt-get
,恩~,你有沒有想過接下來(lái)會(huì)是什么?譯者只能說可能會(huì)是 Snaps
,如果你還沒有聽過這個(gè)東東,你也許必要關(guān)注下這個(gè)公眾號(hào)了:Snapcraft
作者:Brennen Bearnes 譯者:Snapcrafter 校對(duì):wxy
本文由 LCTT 原創(chuàng)編譯,Linux中國(guó) 榮譽(yù)推出
本文永遠(yuǎn)更新鏈接地址:
歡迎參與《LINUX入門:Linux 包管理基礎(chǔ):apt、yum、dnf 和 pkg》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/9038.html