在 Linux(GNU/Linux)操作系統中,RPM 和 DPKG 為最常見的兩類軟件包管理工具,他們分別應用于基于 RPM 軟件包的 Linux 發行版本和 DEB 軟件包的 Linux 發行版本。程序包管理器的只要功能是將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作。
RPM軟件包分為二進制包(Binary)、源代碼包(Source)。二進制包(由二進制文件、庫文件、配置文件、幫助文件組成)可以直接安裝在計算機中,而源代碼包將會由軟件包管理器自動編譯、安裝。
RPM包管理
RPM 全稱為 Redhat Package Manager,最早由 Red Hat 公司制定實施,隨后被 GNU 開源操作系統接受并成為很多 Linux 系統的既定軟件標準,軟件包是rpm文件。
RPM包特點
RPM是將你要安裝的軟件預先編譯,打包成為RPM軟件包,并把這個軟件要安裝的時候相關參數信息和依賴關系等記錄在軟件包里默認的數據庫中。當安裝時,RPM首先會檢查軟件安裝環境,避免錯誤安裝。然后按照軟件包軟件包里面的數據查詢依賴關系是否滿足,滿足則安裝否則不安裝。而且安裝的時候就將該軟件的信息整個寫入系統RPM的數據庫中,以便未來的查詢、驗證與卸載。
RPM包命名格式
rpm包的命名格式:Name-Version-Relase.Arch.rpm (bash-4.2.3-3.centos5.x86_64.rpm)
Name:軟件的名稱
Version: 源代碼版本
Release:發行版本號,通常是編譯的次數。與程序源碼的發行號無關,僅用于標識對rpm包不同制作的修訂;同時,release還包含此包適用的OS
Arch硬件平臺:
x86: i386, i486, i586, i686等32位CPU等;
x86_64: 64位的CPU
powerpc: IBM的PPC
noarch:通用的, 沒有任何硬件等級上的限制。
RPM包獲取途徑
1、發行的光盤或站點服務器
2、項目的官網
3、通過搜索引擎搜索很多第三方機構或個人制作并公開發布的許多rpm包(要注意rpm的合法性和安全性)
RPM搜索引擎 :http://pkgs.org、http://rpmfind.net、http://rpm.pbone.net、https://sourceforge.net/
4、可靠的途徑:EPEL
rpm命令使用方法
RPM軟件包的安裝、刪除、升級、查看和驗證等所有的操作都由rpm這一命令來進行的。
rpm[模式][選項][參數]
模式
安裝模式:rpm {-i |--install} [install-options] PACKAGE_File …
升級模式:rpm {-U|--upgrade} [install-options] PACKAGE_File …
卸載模式:rpm {-e|--erase} [erase-options]PACKAGE_Name …
查詢模式:rpm {-q |--query } [select-options] [query-options]
驗證模式:rpm {-V |--verify} [select-options] [verify-options]
選項
一般選項
選項 | 含義 |
---|---|
-a | 查詢所有軟件包; |
-h或--hash | 顯示進度條; |
-i | 顯示軟件包的相關信息; |
-l | 顯示軟件包的文件列表; |
-p (RPM包) | 查詢指定的RPM軟件包; |
-q | 使用詢問模式,當遇到任何問題時,rpm指令會先詢問用戶; |
-s | 顯示文件狀態,本參數需配合"-l"參數使用; |
-v | 顯示指令執行過程; |
-vv | 詳細顯示指令執行過程,便于排錯。 |
選擇選項
select-options,用于查詢和驗證模式
選項 | 含義 |
---|---|
-a | 查詢所有安裝的軟件包。 |
-f,--file FILE | 查詢擁有<文件>的軟件包,即是哪一個軟件包安裝的<解文件>。 |
查詢選項
query-options,可用于查詢和驗證模式
選項 | 含義 |
---|---|
-i,--info | 顯示軟件包的信息,包括名稱、版本、描述信息。 |
-l,--list | 列出這個軟件包內所包含的文件。 |
--provides | 顯示這個軟件包所提供的功能。 |
-R,--requires | 查詢安裝該軟件包所需要的其他軟件包。 |
-s,--state | 列出軟件包中所有文件的狀態。 |
驗證選項
verify-options,只能用于驗證模式
選項 | 含義 |
---|---|
--nodeps | 不驗證依賴的軟件包。 |
--nofiles | 不驗證軟件包文件的屬性。 |
安裝選項
install-options,用于安裝模式和升級模式
選項 | 含義 |
---|---|
--replacepkgs | 替換安裝整個軟件包 |
--replacefiles | 不同包有相同的文件且在同一個路徑下后面安裝的包則替換安裝相同文件 |
--force | 強制覆蓋安裝 |
--nodeps | 忽略軟件包所依賴的其他軟件強制安裝 |
--test | 模擬安裝,軟件包并不會實際安裝到系統中,只是檢查并顯示可能存在的沖突。 |
刪除選項
erase-options,只能用于刪除模式。
選項 | 含義 |
---|---|
--nodeps | 忽略其他依賴該軟件包的軟件,強制刪除該軟件包。 |
--test | 模擬刪除 |
數據庫管理
通過rpm 命令查詢一個rpm 包是否安裝了,也是通過rpm 數據庫來完成的;有時rpm 系統出了問題,不能安裝和查詢,可能會是數據庫出現問題,可以使用下面命令重建;
RPM包數據庫目錄:/var/lib/rpm
rpm --initdb:初始化數據庫(如果事先沒有庫,會新建一個;如果有,則不新建;)
rpm --rebuilddb: 重建數據庫(直接重建,覆蓋原有的數據庫)
YUM
YUM 基于 RPM 包管理工具,能夠從指定的源空間(服務器,本地目錄等)自動下載目標 RPM 包并且安裝,可以自動處理依賴性關系并進行下載、安裝,無須繁瑣地手動下載、安裝每一個需要的依賴包。此外,YUM 的另一個功能是進行系統中所有軟件的升級。
YUM服務器存儲了眾多rpm 包,以及包的相關的元數據文件(放置于特定目錄repodata 下)
YUM服務器常用文件傳輸協議:http://、https://、ftp://、file://
YUM命令使用方法
yum命令:yum [options] [command] [package ...]
[command]為所要進行的操作
[package ...]是操作的對象
選項 | 含義 |
---|---|
-h | 顯示幫助信息; |
-y | 對所有的提問都回答“yes”; |
-c | 指定配置文件; |
-q | 安靜模式; |
-v | 詳細模式; |
-d | 設置調試等級(0-10); |
-e | 設置錯誤等級(0-10); |
-R | 設置yum處理一個命令的最大等待時間; |
-C | 完全從緩存中運行,而不去下載或者更新任何頭文件。 |
參數選項
參數 | 含義 |
---|---|
install | 安裝rpm軟件包; |
update | 更新rpm軟件包; |
check-update | 檢查是否有可用的更新rpm軟件包; |
remove | 刪除指定的rpm軟件包; |
list | 顯示軟件包的信息; |
search | 檢查軟件包的信息; |
info | 顯示指定的rpm軟件包的描述信息和概要信息; |
clean | 清理yum過期的緩存; |
shell | 進入yum的shell提示符; |
resolvedep | 顯示rpm軟件包的依賴關系; |
localinstall | 安裝本地的rpm軟件包; |
localupdate | 顯示本地rpm軟件包進行更新; |
deplist | 顯示rpm軟件包的所有依賴關系。 |
示例:
安裝
yum install #全部安裝
yum install package1 #安裝指定的安裝包package1
yum groupinsall group1 #安裝程序組group1
更新和升級
yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #檢查可更新的程序
yum upgrade package1 #升級指定程序包package1
yum groupupdate group1 #升級程序組group1
查找和顯示
yum info package1 #顯示安裝包信息package1
yum list #顯示所有已經安裝和可以安裝的程序包
yum list package1 #顯示指定程序包安裝情況package1
yum groupinfo group1 #顯示程序組group1信息yum search string 根據關鍵字string查找安裝包
刪除程序
yum remove | erase package1 #刪除程序包package1
yum groupremove group1 #刪除程序組group1
yum deplist package1 #查看程序package1依賴情況
清除緩存
yum clean packages #清除緩存目錄下的軟件包
yum clean headers #清除緩存目錄下的 headers
yum clean oldheaders #清除緩存目錄下舊的 headers
包組管理的相關命令:
yum groupinstall group1 [group2] [...](安裝包組)
yum groupupdate group1 [group2] [...](升級包組)
yum grouplist [hidden] [groupwildcard] [...](列出包組)
yum groupremove group1 [group2] [...](卸載包組)
yum groupinfo group1 [...](查看包組信息)
DPKG包管理
DPKG,全稱為 Debian Package,最早是由Debian Linux社區所開發的,通過dpkg的機制,debian提供的軟件就能簡單的安裝起來了,同時還能提供安裝后的軟件升級維護等,主要應用在debian和基于debian的發行版上。軟件包是deb文件。
一個 DEB 包包含了已壓縮的軟件文件集以及該軟件的內容信息(在頭文件中保存),通常表現為以 .deb 擴展名結尾的文件,例如 package.deb 。對其操作,需要使用 dpkg 命令。
DPKG 命令常用參數
DPKG 的常規使用方法為 dpkg [options] Package
選項 | 含義 |
---|---|
-i | 安裝軟件包; |
-r | 刪除軟件包; |
-P | 刪除軟件包的同時刪除其配置文件; |
-L | 顯示于軟件包關聯的文件; |
-l | 顯示已安裝軟件包列表; |
--unpack | 解開軟件包; |
-c | 顯示軟件包內文件列表; |
--confiugre | 配置軟件包。 |
示例:
dpkg -i package.deb 安裝包
dpkg -r package刪除包
dpkg -P package 刪除包(包括配置文件)
dpkg -L package 列出與該包關聯的文件
dpkg -l package 顯示該包的版本
dpkg --unpack package.deb 解開deb包的內容
dpkg -S keyword #搜索所屬的包內容
dpkg -l #列出當前已安裝的包
dpkg -c package.deb #列出deb包的內容
dpkg --configure package 配置包
APT
APT 的全稱為 Advanced Packaging Tools 。與 YUM 對應,它最早被設計成 DPKG 的前端軟件,現在通過 apt-rpm 也支持 rpm 管理。而本節本節將介紹 APT 作為 DPKG 前端的使用。 APT 的主要包管理工具為 APT-GET,通過此工具可滿足和上述 YUM 相似的功能要求。
APT 常用命令
apt-get update(更新源索引)
apt-get install package-name(安裝指定軟件)
apt-get source package-name(下載指定軟件的源文件)
apt-get upgrade(將系統中所有軟件升級到最新版本)
apt-get dist-upgrade(將操作系統連同所有軟件升級到最新版本)
apt-get remove package-name(卸載指定軟件)
軟件包依賴關系
由于開源的多態性,Linux 操作系統中的軟件之間的依賴性關系處理一直很頭疼。如果 package_a 依賴于 package_b,那么在一個沒有安裝 package_b 的系統中,package_a 是不被系統推薦安裝的,強制安裝很可能會導致軟件無法正常工作。而且實際應用中往往最頭疼的是 package_a 依賴于 package_b/c/d/e/f 等多個包 , 而 package_b/c/d/e/f 等包又依賴與package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 , 為保證軟件的正常使用,必須找到所有依賴包以及子依賴包并且安裝。過多的依賴關系大大降低了 Linux 軟件安裝的用戶友好性。所以我們應該使用了更高級的包管理策略YUM/APT去解決
RPM?DEB
Alien 工具可以將 RPM 軟件包轉換成 DEB 軟件包,或把 DEB 軟件包轉換成 RPM 軟件包,以此適應兼容性的需要。注意首先請在系統中安裝 alien 。
在 UBUNTU 中使用 alien 將 rpm 轉換為 deb 并安裝 :
alien -d package.rpm ;dpkg -i package.deb
在 RHEL 中使用 alien 將 deb 轉換為 rpm 并安裝 :
alien -r package.deb ;rpm -ivh package.rpm