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