1. 程式人生 > >Linux學習之RPM包管理-rpm命令管理(十六)

Linux學習之RPM包管理-rpm命令管理(十六)

gho 程序包 命令管理 屬組 有一個 ali i386 bili 所有

Linux學習之RPM包管理-rpm命令管理

目錄

簡介

RPM包依賴性

包全名與包名

rpm軟件包安裝

rpm軟件包卸載

升級降級rpm軟件包

rpm軟件包的查詢

rpm軟件包校驗

簡介

RPM是RPM Package Manager(RPM軟件包管理器)的縮寫,這一文件格式名稱雖然打上了RedHat的標誌,但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo
Linux等Linux的分發版本都有采用,可以算是公認的行業標準了。

  

RPM軟件包名例子:
sudo-1.7.2p1-5.e15.i386.rpm
其中
軟件名(sudo)
版本號 (1.7.2pl)
軟件發布的次數(5)
適合的Linux平臺 (el5)
適合的硬件平臺(i386)
rpm包擴展名(rpm)

  

RPM包依賴性

RPM包在應用的時候,最大的問題就是依賴性,安裝一個軟件包需要安裝多個依賴包。
樹形依賴:a->b->c
安裝a,需要先安裝b,安裝b需要先安裝c
安裝:我們要先安裝c,再安裝b,再安裝a。
卸載:先卸載a,再卸載b,然後卸載c。

環形依賴:a->b->c->a
安裝:一條命令安裝a,b,c。


模塊依賴:模塊依賴查詢網站:www.rpmfind.net
模塊依賴又稱為庫依賴,指依賴的是某個包裏面的某個軟件,當然只需要安裝那個包就行,那麽我們怎麽知道這個軟件屬於哪個包,上面這個網站可以查詢。

  

包全名與包名

包全名:操作的包是沒有安裝的軟件包時,使用包全名。而且要註意路徑。
全名:操作已經安裝的軟件包時,使用包名。是搜索/var/lib/rpm中的數據庫。

  

在下面所有操作前我們先把光盤掛載上去

掛載光盤:
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

  

rpm軟件包安裝

rpm -ivh 包全名
安裝的rpm軟件包主要參數
-i 或--install 安裝軟件包
-v 顯示安裝過程的信息
-vv 顯示安裝過程中的詳細信息
-h 以#號來表示程序包的執行進度

安裝升級卸載中會用到的一些參數


--test:測試安裝,只顯示過程,並不執行安裝

--excludedocs:不安裝軟件包中的文檔文件。

--prefix PATH:將軟件包安裝到由PATH指定的路徑下。 -- nodeps:忽略依賴關系,在安裝程序的時,有些時候會因為軟件包的依賴關系無法安裝,這時就可以用nodeps來解決。 -- replacepkgs:覆蓋安裝軟件 -- replacefiles:只覆蓋軟件的文件 -- nosignature: 不檢查軟件包來源合法性 -- nodigest:不檢查軟件包的完整性 -- noscripts:不執行程序包腳本,在軟件包中通常都有一些腳本,來定義一些像安裝的路徑之類的。 -- nopre:不執行安裝前腳本 -- nopost:不執行安裝後腳本 -- nopreun:不執行卸載前腳本 -- nopostun:不執行卸載後腳本 -- force: 強制安裝

  

例子

rpm -ivh sudo-1.7.2p1-5.el5.i386.rpm

  

安裝時的特殊情況

覆蓋安裝
軟件包已經被安裝,如果覆蓋該1安裝軟件包,可以在命令行上使用--replacepkgs選項
rpm -ivh --replacepkgs sudo-1.7.2p1-5.el5.i386.rpm


文件沖突
如果要安裝軟件包中有一個文件已在安裝其它軟件包時安裝,會出現以下錯誤信息
要想讓rmp忽略該錯誤信息,請使用--replacefiles命令行選項
rpm -ivh --replacefiles sudo-1.7.2p1-5.el5.i386.rpm


未解決依賴關系
RPM軟件包可能依賴於其它軟件包,在安裝了特定包之後才能安裝該軟件包
rpm -ivh sudo-1.7.2pl-5el5.i386.rpm
failed dependencies
sudo is needed by bark-3.2-11
必須安裝完所依賴的軟件包。才能解決這個問題,強制安裝使用--nodeps選項

  

rpm軟件包卸載

-e或者--erase來卸載
rpm -e sudo-1.7.2p1-5.el5.i386.rpm
註意:如果其它軟件包有依賴關系,卸載時會產生提示信息,可使用--nodeps強行卸載。

  

升級降級rpm軟件包

-U 或 --upgrade 安裝有舊版程序包,則升級如果不存在舊版程序包,則安裝
-F 或 --freshen安裝的有舊版程序包則升級,如果不存在舊版程序包,則不執行升級操作

-- oldpackage:安裝舊版本的軟件包,把軟件降級

註:如果舊程序的配置文件安裝後曾被修改,升級時新版本的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把新版本的文件重命名“filename.rpmnew”後保留。

  

rpm軟件包的查詢

查詢:
rpm -q 包名
例子:rpm -q sudo
例子:rpm -qa | grep samba

q選項可以查詢rpm軟件包的信息


下面是q選項的一些參數


-a: 所有包,可以用來查詢軟件來自那個rpm包

-f: 查看指定的文件由哪個程序包安裝生成

-p:針對尚未安裝的程序包文件做查詢操作

-- whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供

-- whatrequires CAPABILITY:查詢指定的CAPABILITY被
哪個包所依賴

--changelog:查詢rpm包的更新信息

-c: 查詢程序的配置文件

-d: 查詢程序的文檔

-i: information
-l: 查看指定的程序包安裝後生成的所有文件

--scripts:程序包自帶的腳本

--provides: 列出指定程序包所提供的CAPABILITY

-R: 查詢指定的程序包所依賴的CAPABILITY

  

rpm軟件包校驗

rpm -V或--verify 可以驗證軟件包文件有沒有被修改過

S 文件大小不同
M 權限和文件類型和原文件不一致
5 MD5不一致
D 設備主/次編號不匹配
L 路徑不匹配
U 屬主不同
G 所屬組不一致
T 修改時間不同
P 功能不同
rpm - K或checksig 檢查包的完整性和簽名
上面的問題不是軟件包有問題,而是系統默認沒有導入密鑰,所以檢查結果是not ok。下面我們導入密鑰,在系統安裝是安裝程序會把密鑰放在/etc/pkirpm-gpg/目錄下,密鑰的文件名是RPM-GPG-KEY-CentOS-7。



文件類型:
c 配置文件(config file)
d 普通文件 (documenttation)
g "鬼文件"(ghost file),很少見,就是該文件不應該被這個RPM包包含
l 授權文件(license file)
r 描述文件 (read me)

  

Linux學習之RPM包管理-rpm命令管理(十六)