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