包管理工具rpm和yum的用法

包管理工具rpm和yum的用法


一、rpm的用法

rpm原本是Rde Hat Linux發行版專門用來管理Linux各項套件的程序,由於它遵循GPL規則且功能強大方便,因而廣受歡迎。逐漸收到其他發行版的採用,RPM套件管理方式的出現,讓Linux易於安裝、升級,間接提升了Linux的適用性。

rpm用法:rpm [OPTION...]

1、rpm安裝軟件包,後面需要跟上程序包文件的絕對路徑或相對路徑

常用選項:

-v:顯示指令的執行過程

-vv:詳細顯示指令執行過程,便於排錯

-h:以#號顯示程序包管理執行進度

-i,--install:安裝程序

wKioL1e6p0zCZMyqAAbcRqS5jJw784.gif

rpm在執行安裝時還可以使用以下選項:

--test:測試安裝,但不真正執行安裝

--nodeps:有時安裝的包具有依賴關係,需要先安裝依賴包,使用該選項後則會忽略依賴關係

--nodigest:不檢查包的完整性

--nosignature:不檢查包的來源合法性

--noscripts:有的程序安裝時會執行相應的腳本,使用該選項將不執行程序自帶的腳本

--force:強制

(1)rpm安裝程序包時,有可能要安裝的包裏有一些文件可能會覆蓋現有文件,此時可能會出現警告或者提示,缺省情況下是無法正確安裝的,這時可以用 rpm --force -i 強制安裝即可。

(2)rpm安裝程序包時,有可能要安裝的包所需要的一些軟件沒有安裝,缺省情況下也是無法正確安裝的,這時可以使用 rpm --nodeps -i 來忽略此信息,如果用 rpm -i --force --nodepe 可以忽略所有依賴關係和文件問題,什麼包都能安裝上,但這種強制安裝的軟件包不能保證完全發揮功能。


2、rpm2cpio工具,該工具可以解壓縮並安裝rpm包內的任意單個文件。如果系統中的某個程序已安裝過,但是隻是某個文件缺失導致程序不能用,這種情況下如果直接運行 rpm -ivh 進行安裝時會提示已安裝,如果跟上--force強制安裝,則會覆蓋該程序的所有文件,這種情況下可以使用rpm2cpio工具進行解壓安裝,用法如下:

第一步:rpm2cpio 包文件|cpio -itv :可以預覽包內的文件列表

第二步:rpm2cpio 包文件|cpio -idv "某一個文件" :只釋放軟件包列表中的某一個文件

第三步:將釋放出來的某個文件拷貝到所需目錄下即可


3、rpm升級軟件包,升級方式有兩種,分別爲:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

和 rpm {-F|--freshen} [install-options] PACKAGE_FILE...

-U|--upgrade:這種方式升級軟件包時,如果安裝有舊版程序包,則“升級”,如果不存在舊版程序包,則“安裝”。

-F|--freshen:這種方式升級軟件包時,如果安裝有舊版程序包,則“升級”,如果不存在舊版程序包,則不執行升級操作。

常用語法爲:

rpm -Uvh PACKAGE_FILE... :安裝或升級程序包

rpm -Fvh PACKAGE_FILE...:只在舊版本的基礎上升級程序包

如果升級過程中有提示或警告而導致不能升級時,也可以結合--force強制升級。

如果升級後軟件不能正常運行需要卸載升級的包時可以使用--oldpackage對程序進行降級。

注意:如果原程序包的配置文件安裝後曾被修改,升級時,新版本提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而是把新版本的文件重命名(FILENAME.rpmnew)後保留。


4、使用rpm查詢軟件包

語法:rpm  {-q|--query} [select-options] [query-options]

如果只跟-q,後面不跟任何選項,則可以獲得已安裝的某個軟件包的文件全名

[root@liang7 Packages]# rpm -q zip
zip-3.0-10.el7.x86_6

【select-options】選項有:

-a:所有包,包含所有已安裝過的程序包,可以結合grep針對某個關鍵字查詢

[root@liang7 Packages]# rpm -qa     
...                  #省略了列出的軟件包
[root@liang7 Packages]# rpm -qa | grep zip
unzip-6.0-15.el7.x86_64
gzip-1.5-8.el7.x86_64
zip-3.0-10.el7.x86_64
bzip2-libs-1.0.6-13.el7.x86_64
bzip2-1.0.6-13.el7.x86_64

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

[root@liang7 Packages]# rpm -qf /bin/zip
zip-3.0-10.el7.x86_64

-p rpmfile:針對尚未安裝的程序包文件做查詢操作,使用該選項時要跟rpm包的文件全名,並且該選項還需要跟其他【query-options】選項同時使用,如rpm -qpl、rpm -qpi等

--whatprovides CAPABILITY:查詢指定的CAPABILITY(功能,能力)由哪個包所提供

[root@fengl Packages]# rpm -q --whatprovides bash    #查詢bash的功能由那個包提供
bash-4.2.46-19.el7.x86_64
[root@fengl Packages]# rpm -q --whatprovides tree    #查詢哪個包提供了tree的功能
tree-1.6.0-10.el7.x86_64

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

[root@fengl Packages]# rpm -q --whatrequires bash   #查詢bash功能被哪些包所依賴,即哪些包依賴於bash功能
dracut-033-359.el7.x86_64
initscripts-9.49.30-1.el7.x86_64
rsyslog-7.4.7-12.el7.x86_64
lvm2-2.02.130-5.el7.x86_64
kpatch-0.1.10-4.el7.noarch
bash-completion-2.1-6.el7.noarch

【query-options】選項有

--changelog:查詢rpm包的版本更新記錄

[root@fengl Packages]# rpm -q --changelog tree 
* Fri Jan 24 2014 Daniel Mach <[email protected]> - 1.6.0-10
- Mass rebuild 2014-01-24

* Fri Dec 27 2013 Daniel Mach <[email protected]> - 1.6.0-9
- Mass rebuild 2013-12-27

* Thu Jul 04 2013 Tim Waugh <[email protected]> - 1.6.0-8
- Handle large UID/GID values (bug #980945).
...        後面部分省略

-l:列出某軟件包中的文件列表,使用該選項只需要指定軟件包名即可,不能跟 .rpm 後綴名,如果查詢的是未安裝的軟件包中包含的文件列表,需要再跟上-p選項,此時需要跟未安裝的軟件包全稱,即帶有.rpm後綴名

[root@liang7 Packages]# rpm -ql zip 
/usr/bin/zip
/usr/bin/zipcloak
...        #後面部分省略
[root@liang7 Packages]# rpm -qpl tree-1.6.0-10.el7.x86_64.rpm 
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

-c:查詢已安裝的某程序的配置文件,跟包名

[root@liang7 Packages]# rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf

-d:查詢某程序的相關文檔,跟包名,也可以再跟上-p查詢未安裝程序的相關文檔

[root@liang7 Packages]# rpm -qd yum
/usr/share/doc/yum-3.4.3/AUTHORS
/usr/share/doc/yum-3.4.3/COPYING
/usr/share/doc/yum-3.4.3/ChangeLog
...        #後面部分省略
[root@liang7 Packages]# rpm -qpd tree-1.6.0-10.el7.x86_64.rpm 
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

-i:information,顯示某軟件包的詳細信息,跟包名,也可以再跟上-p查詢未安裝程序的詳細信息

[root@liang7 Packages]# rpm -qi yum
Name        : yum
Version     : 3.4.3
Release     : 132.el7.centos.0.1
Architecture: noarch
Install Date: Thu 21 Jul 2016 02:45:35 AM CST
...        #後面部分省略
[root@liang7 Packages]# rpm -qpi tree-1.6.0-10.el7.x86_64.rpm 
Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: (not installed)
...            #後面部分省略

-R:顯示指定的程序包所依賴的CAPABILITY(能力),跟包名,也可以再跟上-p查詢未安裝程序包所依賴的功能

[root@liang7 Packages]# rpm -qR zip
libbz2.so.1()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
...        #後面部分省略

--provides:列出指定程序包所提供的CAPABILITY(能力),跟包名,也可以再跟上-p查詢未安裝程序包所提供的功能

[root@fengl Packages]# rpm -q --provides zip   #查看zip提供了哪些功能
zip = 3.0-10.el7
zip(x86-64) = 3.0-10.el7

--scripts:查詢程序包自帶的腳本,跟包名,也可以再跟上-p查詢未安裝程序包自帶的腳本

[root@fengl Packages]# rpm -q --scripts bash
postinstall scriptlet (using <lua>):
nl        = '\n'
sh        = '/bin/sh'..nl
bash      = '/bin/bash'..nl
f = io.open('/etc/shells', 'a+')
...    #後面部分省略


5、使用rpm卸載程序包,卸載時需要使用-e選項,具體用法如下:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

--allmatches:卸載與指定程序相關的所有版本,比如有的程序舊版本和新版本可以同時存在,使用該選項可以將新版本和舊版本都卸載掉,默認一次只卸載一個,卸載時可能會報錯,不知道該卸載哪個版本。

--nodeps:程序卸載時也是有依賴性的,需要先卸載依賴於要卸載的程序,使用該選項將不考慮依賴關係,直接卸載。

--noscripts:有的程序卸載時會執行相應的腳本,使用該選項後卸載時不會執行腳本

--notriggers:觸發器,即當卸載一個程序時可能會觸發另一個操作,使用該選項後將不會執行觸發的操作。

--test:測試卸載,並不真的執行卸載


6、使用rpm校驗程序包,校驗分爲兩種,一種是校驗程序包來源的合法性(簽名)和完整性,另一種是校驗程序安裝後做了哪些更改。

(1)完整性校驗的算法使用的是SHA256,簽名校驗的算法使用的是RSA。如果要校驗包的完整性和簽名需要先導入所需要的公鑰,導入方法爲:rpm --import KEYFILE (Centos安裝光盤中提供的公鑰文件爲RPM-GPG-KEY-CentOS-7)。默認情況下安裝每一個程序包時都會自動檢測包的完整性和簽名,如果沒有導入公鑰,則會提示告警。也可以使用  rpm -K|checksig RPMFILE  命令檢測包的完整性和簽名。

rpm -qa gpg* :可以查尋已導入的公鑰文件

[root@fengl mnt]# rpm --import RPM-GPG-KEY-CentOS-7    #導入公鑰文件
[root@fengl mnt]# rpm -qa gpg*        #查詢已導入的公鑰文件
gpgme-1.3.2-5.el7.x86_64
gpg-pubkey-f4a80eb5-53a7ff4b      #該文件即爲導入後的文件
[root@fengl Packages]# rpm -K tree-1.6.0-10.el7.x86_64.rpm     #校驗tree包文件
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

(2)校驗程序包安裝後各個相關文件的屬性是否被篡改等。

用法:rpm {-V|--verify} [select-option] [verify-options]

校驗結果可能有以下幾種:

S :file Size differs

M:Mode differs (includes permissions and file type)

5 :digest (formerly MD5 sum) differs

D:Device major/minor number mismatch

L:readLink(2) path mismatch

U:User ownership differs

G:Group ownership differs

T:mTime differs

P:capabilities differ


7、rpm數據庫,所有已安裝的程序都會記錄在rpm數據庫中,rpm校驗和查詢及卸載都依賴於rpm數據庫。

rpm數據庫路徑:/var/lib/rpm

rpm --initdb:初始化數據庫,如果事先不存在數據庫,則新建數據庫,否則不執行任何操作。

rpm --rebuilddb:重建已安裝的包頭的數據庫索引目錄,只創建庫目錄下的Packages文件。


二、YUM的用法

YUM全稱爲 Yellowdog Update Modifier,yum是rpm的前端程序,用來解決軟件包相關的依賴關係,可以在多個庫之間定位軟件包,是up2date的替代工具。

yum repository:倉庫,存儲了衆多的rpm包,以及包的相關元數據文件(放置於特定目錄repodata下)


1、yum客戶端配置文件:

/etc/yum.conf:爲所有倉庫提供公共配置。

/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置,倉庫的指向路經支持三種文件服務器路徑的寫法,分別爲 ftp://  和http://  及 file:///


倉庫指向的配置文件都是以“.reop”結尾的,一個配置文件中可以配置多個倉庫,也可以一個倉庫建一個配置文件,但是必須保證每個倉庫的配置都是正確的,否則一個倉庫有問題將會導致yum功能不可用,倉庫的配置文件內容主要包括以下幾項:

[base]        # 倉庫名稱,必寫項
name=CentOS-$releasever - Base   # 描述,可以不寫
baseurl=  # 存放rpm軟件包的倉庫路徑,必寫項
gpgcheck={1|0}    #是否開啓校驗,主配置文件中默認開啓,1表示啓用,0表示不啓用
gpgkey=   # 包校驗的公鑰路徑,如果開啓校驗則該項必寫
enabled={1|0}    #是否啓用該倉庫,主配置文件默認開啓,1表示啓用,0表示不啓用
failovermethod={roundrobin|priority}  #模式選擇,默認是roundrobin

示例1:

[root@fengl yum.repos.d]# cat base.repo 
[base]
name=CentOS7
baseurl=file:///mnt/
gpgcheck=1
gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-7
enable=1


2、yum命令的用法:yum [options] [command] [package ...]

常用命令選項有:

--nogpgcheck:禁止進行gpg check

-y:自動回答“yes”

-q:靜默模式

-c:指定配置文件

-v:詳細模式

-R:設置yum處理一個命令的最大等待時間,以秒爲單位

--noplugins:禁用所有插件

--disablerepo=repoidglob:臨時禁用此處指定的repo

--enablerepo=repoidglob:臨時啓用此處指定的repo

常用的命令有:

yum repolist [all]:顯示所有的倉庫列表

yum repolist enable:只顯示已啓用的倉庫列表

yum repolist disable:只顯示未啓用的倉庫列表

yum list [all]:顯示程序包列表,包括已安裝的和倉庫中的所有列表

yum list available:顯示可獲得的程序列表

yum list installed:顯示已安裝過的程序列表

yum list updates:顯示可升級的程序列表

yum info 包名:相當於rpm -qi ,查看軟件包信息,兩者查看結果又區別

yum provides FEATURE1 ... :查看指定的特性(可以是文件)由哪個程序包所提供

yum clean [ packages|metadata|headers|expire-cache|dbcache|cache|all ] :清理緩存

yum search string1 ...:以指定的關鍵字搜索程序包名及概要信息

yum deplist PACKAGE1 ...:顯示指定rpm軟件包的所有依賴關係

安裝程序包:

yum install PACKAGE1 [PACKAGE2] ...:使用yum安裝程序包

yum -y install PACKAGE1 [PACKAGE2] ...:安裝時會提示是否執行安裝操作,加上-y選項後則不用手動輸入yes,將會直接安裝。

yum reinstall PACKAGE1 [PACKAGE2] ...:重新安裝

yum update [PACKAGE1] [PACKAGE2] ...:升級程序包

downgrade PACKAGE1 [PACKAGE2] ...:降級

yum check-update:檢查可用升級包

yum remove PACKAGE1 [PACKAGE2] ...:卸載指定的程序包

查看yum事務歷史:

yum history :查看歷史

yum history info NUM:查看yum歷史中第NUM次的處理信息

yum history undo NUM:回滾,即撤銷歷史中的第NUM次的軟件包安裝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章