Linux軟體安裝和包管理工具

語言: CN / TW / HK

0 前言

一般來說,在Linux系統中,有三種安裝軟體的方式:原始碼編譯安裝,可執行檔案(軟體包)安裝 還有 前端工具依賴安裝。

0.1 原始碼編譯安裝

絕大多數開源軟體都是直接以原始碼形式釋出的,原始碼一般會被打成.tar.gz的歸檔壓縮檔案。對壓縮檔案進行解壓後,獲取到的原始碼需要 編譯 成二進位制形式之後才能夠執行使用。原始碼編譯基本流程:

  • .configure 檢查編譯環境;
  • make對原始碼進行編譯;
  • make insall 將生成的可執行檔案安裝到當前計算機中

原始碼安裝操作複雜,編譯時間長,極易出現問題,依賴關係複雜且需手動安裝依賴。

0.2 軟體包安裝

由於原始碼安裝的不便利,軟體包平臺會將程式碼基於特定平臺系統編譯為可執行檔案,並儲存依賴關係,來簡化開源軟體的安裝管理。針對不同的系統設定不同的包,例如dpkg針對Debian和Ubuntu,RPM針對Red Hat和CentOS等。

軟體包安裝雖然可以直接對軟體包執行命令,但仍然需要下載軟體包到本地,且需要手動處理依賴關係,比較不便。

0.3 前端工具安裝

為了解決軟體包安裝的安裝包和依賴問題,設計了前端工具,例如 yum 是 rpm的前端工具,apt-get 是 dpkg 的前端工具。前端工具引入了倉庫(可以是本地的,也可以是遠端的)概念,對軟體包進行管理,同時在軟體安裝過程中自動解決依賴問題。

 

1 軟體包管理 Package Management

軟體包管理系統是在電腦中自動安裝、配製、解除安裝和升級軟體包的工具組合,在各種系統軟體和應用軟體的安裝管理中均有廣泛應用。

在Linux發行版中,幾乎每一個發行版都有自己的軟體包管理系統。常見的有:

  • dpkg: 全稱Debian Package,原先被Debian使用,現在也被Ubuntu使用(注:Ubuntu源於Debian,最早於2004年是作為Debian的一個分支出現)。用來管理 .deb 格式軟體包,是第一個擁有廣泛知曉的依賴解決方案工具APT的軟體包管理工具。aptitude,基於 ncurses 供APT使用的前端,也同樣是一個為Debian類系統的軟體包管理器。
  • RPM: 全稱 Redhat Package Manager,由Red Hat 建立。RPM 是 Linux標準的基礎打包格式,並且是一系列其他工具的基礎,包括 apt4rpm, 紅帽的 up2date, Mageia的urpmi, openSUSE的 ZYpp(zypper), PLD Linux的 poldek, Fedora的DNF 和 YUM (被 Red Hat 企業版Linux 和 Yellow Dog Linux使用)。也就是說,這些都是它的前端。
  • 其他軟體包管理系統有ArchLinux中使用的Pacman,Gentoo使用的基於原始碼的Portage,FreeBSD下的pkg,Mac系統下的Homebrew等。

使用軟體包管理系統將大大簡化在Linux發行版中安裝軟體的過程。

 

2 dpkg

2.1 dpkg (Debian Package)

dpkg本身是一個底層的工具,可以安裝,移動和構建軟體包,但是不像其他的軟體包管理系統,它只能用來安裝本地的.deb檔案,不能自動地從遠端包倉庫下載包以及處理包的依賴的關係,且不會關心ubuntu的軟體倉庫內的軟體。以下是使用dpkg來管理本地安裝的軟體包:

  • 列出在系統軟體包資料庫中的所有軟體,包括所有的軟體包,安裝的、未安裝的,也可用 grep 來指定列出某些包:

​dpkg -l | grep packageName
  • 列出被軟體安裝的檔案
dpkg -L keyword
  • 如果你不確定某個檔案是被哪個軟體包所安裝,dpkg -S 會告訴你:

    dpkg -S /etc/host.conf 
    base-files: /etc/host.conf
    

    上面的例子說明 /etc/host.conf 屬於 base-files 軟體包。

    注意

    很多檔案是在軟體包安裝過程中自動產生的,儘管它們存在檔案系統中,但 dpkg -S 也可能不知道這些檔案屬於哪個軟體包。

  • 安裝本地 .deb 檔案示例:
sudo dpkg -i zip_3.0-4_amd64.deb
  • 解除安裝軟體包示例:
sudo dpkg -r zip

警告:

使用dpkg去解除安裝軟體包,在大多數情況下,是不推薦使用的。更好的方法,是使用一個軟體包管理器去處理依賴問題,確保系統處在一個持續可用的狀態。例如,使用 dpkg -r zip 將解除安裝 zip 軟體包,但是其他已安裝的依賴於這個軟體包的軟體就可能用不了了。

使用 man dpkg命令檢視更多。

 

2.2 apt (Advanced Packaging Tool)

apt命令是一個強大的命令列工具,執行 安裝新的軟體包,更新已有的軟體包,更新軟體包列表索引 甚至 更新整個Ubuntu系統等操作。apt-get會解決和安裝模組的依賴問題,並會查詢軟體倉庫,但不會安裝本地的deb檔案。apt是建立在dpkg之上的軟體管理工具。以下是一些常用方法

2.2.1 apt-get命令

# 更新
sudo apt-get update     更新源
sudo apt-get dist-upgrade  升級系統到相應的發行版(根據 source.list 的配置)
sudo apt-get upgrade    更新已安裝的包

# 安裝
sudo apt-get install packageName1 [packageName2]   安裝包
sudo apt-get install packageName --reinstall   重新安裝包
sudo apt-get -f install packageName    修復安裝
sudo apt-get build-dep packageName     安裝相關的編譯環境

# 刪除
sudo apt-get remove packageName   刪除包
sudo apt-get --purge  remove packageName   刪除包,包括配置檔案等

# 其他
apt-get check  檢查是否有損壞的依賴
sudo apt-get source packageName  下載該包的原始碼 
apt-get autoclean  刪除你已經刪掉的軟體的 deb 包
apt-get clean  刪除所有的 deb 包,包括已經安裝的軟體包

2.2.2 apt-cache命令

sudo apt-cache search packageName     搜尋軟體包
sudo apt-cache show packageName       獲取包的相關資訊,如說明、大小、版本等。
sudo apt-cache showpkg packageName    顯示軟體包的大致資訊
sudo apt-cache depends packageName    瞭解該包依賴哪些包
sudo apt-cache rdepends packageName   檢視該包被哪些包依賴

2.2.3 apt檔案

/var/lib/dpkg/available  軟體包的描述資訊, 其中包括當前系統中已安裝的和未安裝的軟體包.
/etc/apt/sources.list    記錄軟體源的地址,修改此檔案可配置軟體源
/var/cache/apt/archives  已經下載到的軟體包都放在這裡( apt-get install 安裝軟體時,軟體包臨時存放路徑)
/var/lib/apt/lists       使用 apt-get update 命令會從/etc/apt/sources.list中下載軟體列表,並儲存到該目錄
/var/log/dpkg.log        所有apt操作的日誌將儲存至該檔案

2.2.4 apt-get update 執行過程

  • 執行 apt-get update
  • 程式分析 /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • 自動連網尋找 list 中對應的 Packages/Sources/Release 列表檔案,如果有更新則下載之,存入 /var/lib/apt/lists/ 目錄
  • apt-get install 相應的包 ,下載並安裝。

2.2.5 apt-get intsall 執行過程

  • 掃描本地的軟體更新列表,也就是 apt-get update 過程時儲存的 /var/lib/apt/lists 檔案
  • 軟體包依賴檢查,找到需要安裝的軟體包所依賴的所有包
  • 從軟體源中的映象站中下載 deb 包
  • 解壓軟體包,並自動完成軟體的安裝和配置

2.2.6 修改軟體源 /etc/apt/sources.list

  • 備份原先的 source.list 檔案,方便回滾
  • 修改 sources.list 檔案
  • sudo apt-get update 更新源

2.2.7 apt-get update 和 apt-get upgrade 的區別

應該先執行 apt-get update 再執行 apt-get upgrade。它們中的任何一個都不會自動地執行另一個。

  • apt-get update 更新可用的軟體包列表,以及版本。但不對軟體包進行安裝或升級。
  • apt-get upgrade 將實際地安裝你所擁有的軟體包的更新版本。當你更新完軟體清單後,軟體包管理器就知道你已安裝的軟體中哪些有可用的更新,這就是為什麼一開始要執行update的原因。
  • 可以聯合執行 apt-get update && apt-get upgrade 

 

2.3 aptitude

2.3.1 選單結構

不用命令列選項啟動 Aptitude 將會展示一個選單結構,基於文字的前端 APT系統。很多共同的軟體包管理方法,例如安裝,解除安裝和升級,都可以以 Aptitude 加一個一般是小寫字母的單詞命令進行執行。

與 apt-get 不同的是,aptitude在處理依賴問題上更佳一些。舉例來說,aptitude在刪除一個包時,會同時刪除本身所依賴的包。這樣,系統中不會殘留無用的包,整個系統更為乾淨。

Aptitude 最適合於在非影象介面終端環境中使用,可在終端中輸入:

sudo aptitude

當 Aptitude 啟動時,你將在螢幕頂部看到一個選單欄,下面有兩個視窗。上面的視窗包括軟體包目錄,例如 新的軟體包 和 未安裝的軟體包。底下的視窗包含軟體包和軟體包路面的相關資訊。

使用 Aptitude使用者介面 來做軟體包管理非常簡單:

  • 安裝軟體: 使用 鍵盤方向鍵 + ENTER 按鍵,在 未安裝軟體包 目錄中定位到你想要安裝的軟體。當軟體包高亮時,按 + 鍵。此時,軟體包將變成 綠色 ,意味著它已被標記成要安裝了。此時按下 g鍵,將展示一段軟體包動作的小結。再按 g鍵,此時將開始軟體包的下載和安裝。當完成後,按 ENTER鍵 返回選單。

  • 解除安裝軟體: 使用 鍵盤方向鍵 + ENTER 按鍵,在 已安裝軟體包 目錄中定位到你想要解除安裝的軟體。當軟體包高亮時,按 - 鍵。此時,軟體包將變成 粉紅色 ,意味著它已被標記成要被解除安裝了。此時按下 g鍵,將展示一段軟體包動作的小結。再按 g鍵,此時將開始軟體包的解除安裝。當完成後,按 ENTER鍵 返回選單。

  • 更新軟體包索引: 按 u鍵 即可。

  • 更新軟體包: 先執行以上更新軟體包索引的操作,再按 U鍵 去標記所有你想更新的軟體包。此時按下 g鍵,將展示一段軟體包動作的小結。再按 g鍵,此時將開始軟體包的下載和安裝。當完成後,按 ENTER鍵 返回選單。

展示在頂部視窗的軟體包資訊的第一列,當在檢視當前軟體包狀態時,可使用以下快捷鍵:

i: 已安裝軟體
c: 軟體包未安裝,但包配置檔案仍存在系統中
p: 已從系統中清除
v: 虛擬軟體包
B: 已破損軟體包
u: 解壓出來的檔案,但安裝包仍未配置
C: 半配置的:配置失敗需要解決
H: 半安裝的:解除安裝失敗需要解決

 

為了退出 Aptitude,按 q鍵 並確認即可。按 F10鍵 檢視 Aptitude 選單的詳情。

2.3.2 命令列

你也可以 Aptitude 作為命令列工具,和 apt類似。

安裝

sudo aptitude install packageName

解除安裝

sudo aptitude remove packageName

 

2.4 dpkg 和 apt 的關係

  • 兩者都是對.deb檔案進行安裝、解除安裝等操作。
  • dpkg需手動下載.deb檔案到本地進行操作,而apt作為前端工具,會直接從遠端倉庫中獲取下載。
  • dpkg不能處理依賴問題,需要手動一個個安裝好,而apt會自動處理,並一次性安裝好。

 

3 RPM (Red Hat Package Manager)

Linux發行版經常使用不通的軟體包管理工具,而 基於 Red Hat的發行版使用  RPM (Red Hat Package Manager) 和YUM/DNF (Yellow Dog Updater, Modified/Dandified YUM).

3.1 RMP (Red Hat Package Manager)

RPM 是在 Red Hat企業版Linux基礎的發行版中的一個流行的軟體包管理工具。使用 RPM你可以安裝、解除安裝並查詢單獨的軟體安裝包。雖然RPM 不能像 YUM一樣進行軟體包依賴管理,但仍會提示安裝所需要的軟體包清單。 一個 RPM 軟體包由 檔案和元資料存檔組成,其中元資料包括幫助指令碼,檔案屬性 和 軟體包資訊。

RPM 維護了一個已安裝軟體包的資料庫,這提供了強大而快速的查詢。RPM 資料庫在 /var/lib目錄裡,檔案以 __db*命名。

RPM 有很多基本模式:查詢、驗證、安裝、升級、清除、展示查詢標籤、展示配置等,要執行軟體包管理任務,必須選擇其中之一。每個模式都有自己的一套選項。可通過命令 man rpm進行檢視。以下是一些常用的模式

模式 描述
-i 安裝軟體包
-U 升級軟體包
-e 清除軟體包
-V 驗證軟體包
-q 查詢軟體包

這是一些常用選項:

選項 目的
-? | --help 輸出幫助資訊
--version 輸出版本資訊
-v 輸出冗餘資訊

命令示例

# 安裝
rpm -i package-file
# 升級
rpm -U package-file
# 安裝,輸出冗餘資訊,並用#符號(hash)展示進度,見圖一
rpm -ivh package-file
# 查詢,選項a表示查詢所有的(all)已安裝軟體包,見圖二
rpm -qa vim-enhanced
# 移除,見圖三
rpm -evh vim-enhanced

                                              圖一                                                                              圖二                                                                          圖三

 

3.2 Yellow Dog Updater, Modified (YUM)

[ 編者注: DNF 或 Dandified YUM 是Red Hat 企業版Linux 8, CentOS 8, Fedora 22(以及它們為基礎的發行版)更新後預設的軟體包管理器。 一般來說,命令選項時一樣的。 ]

YUM 是在Red Hat 企業版Linux中 首要的 軟體包管理工具,用來對軟體包進行安裝、更新、解除安裝和管理。 YUM 會在安裝、更新、解除安裝軟體包時處理軟體依賴問題。YUM 可以從系統中已安裝的倉庫 以及 .rpm 軟體包中安裝。YUM 的主要配置檔案在 /etc/yum.conf檔案中,所有的倉庫在 /etc/yum.repos.d目錄中。

可以從此處學習如何在系統中增加倉庫。

命令格式

yum -選項     命令
yum -option command

以下是常用的命令:

命令 功能
yum install 安裝指明的軟體包
remove 移除指明的軟體包
search 用關鍵詞搜尋軟體包元資料
info 列舉描述資訊
update 更新每個軟體包到最新版本
repolist 列出倉庫列表
history 展示過去的操作,會提供這些操作在哪天執行了哪些命令

以下是常用的選項:

選項 功能
-C 從系統快取中執行
--security 包括給安全問題提供瞭解決方案的軟體包
-y 對所有Yes/No問題回答Yes
--skip-broken 跳過軟體包引起的問題
-v 展示冗餘資訊

你可以通過使用 history 命令來取消、回滾某些操作。格式如下:

yum history undo <id>

YUM 提供了很多軟體包管理選項,可以通過man yum and yum –help來檢視。另外可參考文件

 

3.3 RPM 和 YUM的關係

  • RPM 和 YUM 都可以對軟體包進行管理。
  • RPM需要將.rpm安裝包下載到本地之後才可以進行安裝,而YUM只需要指名要安裝的軟體名稱,就會自動地能夠從指定的伺服器自動下載RPM包並進行安裝。
  • 當遇到依賴問題時,RPM需要自己手動地一個個下載安裝,而YUM可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
分享到: