RPM軟件包管理器及前端工具yum

目前在linux系統之上軟件安裝方式最常見的有兩種,分別是:

dpkg:這個機制最早是由Debian Linux社區所開發出來的,透過dpkg的機制,Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件資訊,實在非常不錯。只要是衍生于Debian的其他linux發行版,大多使用dpkg這個機制來管理軟件的,包括B2D、Ubuntu等等。

RPM:這個機制最早是由RedHat這家公司開發出來的,后來實在很好用,因此很多發行版就使用這個機制來作為軟件安裝的管理方式。包括Fedora、CentOS、SuSE等等知名的發行廠商。

今天要記錄的是RPM軟件管理器與RPM的前端工具YUM。

一、RPM軟件包管理器

1、RPM包命名方式

源代碼:name-VERSION.tar.gz|bz2|xz

例:bash-4.2.46-19.el7.x86_64.rpm

bash:包名

4:主版本

2:次版本

46:發行版本號

19:編譯的次數

e17:RedHat Linux的版本號

x86_64:64位系統架構

2、包的依賴關系命名

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm開發子包

Application-utils-VERSION-ARHC.rpm其它子包

Application-libs-VERSION-ARHC.rpm其它子包

注意:包之間:可能存在依賴關系,甚至循環依賴

解決依賴包管理工具:

yum rpm包管理器的前端工具
apt-get deb包管理器前端工具
zypper suse上的rpm前端管理工具
dnf Fedora 18+ rpm包管理器前端管理工具

3、二進制的庫文件

查看二進制程序所依賴的庫文件:ldd/PATH/TO/BINARY_FILE

管理及查看本機裝載的庫文件:ldconfig;/sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

緩存文件:/etc/ld.so.cache

4、RPM包的管理器

程序包管理器

(1)功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

(2)組成(每個包獨有):RPM包內的文件和RPM的元數據,如名稱,版本,依賴性,描述以及安裝或卸載時運行的腳本

(3)包的公共數據:程序包名稱及版本;依賴關系;功能說明;包安裝后生成的各文件路徑及校驗碼信息

5、程序包的來源與管理工具

(1)管理程序包的方式:使用包管理器rpm命令;使用前端工具yum和dnf命令

(2)獲取程序包的途徑:

(1)系統發版的光盤或官方的服務器 (2)項目官方站點 (3)第三方組織 (4)自己制作RPM包
https://www.centos.org/download/ http://nginx.org/en/download.html(nginx) Fedora-EPEL源 檢查其合法性
http://mirrors.aliyun.com http://httpd.apache.org/download.cgi(httpd) 檢查其來源性
http://mirrors.sohu.com http://tomcat.apache.org/download-90.cgi(tom) 程序包的完整性
http://mirrors.163.com

6、RPM包的管理

CentOS系統上使用rpm命令管理程序包:安裝、卸載、升級、查詢、校驗、數據庫維護

(1)初步安裝

格式:
rpm {-i|--install} PACKAGE_FILE…
選項:
-v: 顯示指令執行過程
-vv:詳細顯示指令執行過程,便于排錯
-h:以#顯示程序包管理執行進度
示例1:
[root@localhost ~]# ls
anaconda-ks.cfg  bin  tree-1.6.0-10.el7.x86_64.rpm
[root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:tree-1.6.0-10.el7                ################################# [100%]
[root@localhost ~]#

7、安裝與管理

格式:
rpm [install-options] PACKAGE_FILE…
選項:
--test: 測試安裝,但不真正執行安裝;dry run模式
--nodeps:忽略依賴關系
--replacepkgs| replacefiles
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscipts:不執行程序包腳本片斷
    %pre: 安裝前腳本;--nopre
    %post: 安裝后腳本;--nopost
    %preun: 卸載前腳本;--nopreun
    %postun: 卸載后腳本;--nopostun

8、升級

格式:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
選項:
upgrade:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”
freshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作
--oldpackage:降級
--force: 強行升級
示例:
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...

升級注意事項:
  (1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,可直接安裝新版本內核
  (2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

9、包查詢

格式:
rpm [select-options]
選項:
-a: 所有包
-f: 查看指定的文件由哪個程序包安裝生成
-p rpmfile:針對尚未安裝的程序包文件做查詢操作
--whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供
--whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
示例:
rpm2cpio 包文件|cpio–itv預覽包內文件
rpm2cpio 包文件|cpio–id “*.conf”釋放包內文件
實例:
假設將不小心將RPM命令刪除了,而虛擬機又無法上外網,可以操作如下:
[root@centos6 ~]# which rpm
[root@centos6 ~]# rm -rf /bin/rpm
[root@centos6 ~]# mount /dev/cdrom /mnt
[root@centos6 ~]# cp -af /mnt/Packages/rpm-4.8.0-55.el6.x86_64.rpm /root/
[root@centos6 ~]# rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm |cpio -tv| grep "/bin/rpm"
[root@centos6 ~]# rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm |cpio -id "./bin/rpm" 
[root@centos6 ~]# mv /root/bin/rpm /bin/    
[root@centos6 ~]# source /etc/profile

10、包文件查詢

格式:
rpm [query-options]
選項:
--changelog:查詢rpm包的changelog
-c: 查詢程序的配置文件
-d: 查詢程序的文檔
-i: information
-l: 查看指定的程序包安裝后生成的所有文件
--scripts:程序包自帶的腳本片斷
-R: 查詢指定的程序包所依賴的CAPABILITY
--provides: 列出指定程序包所提供的CAPABILITY
示例:
rpm -qi PACKAGE    #查看某個包的信息
rpm -qf FILE       #查詢某個文件是由那個包安裝生成的
rpm -qc PACKAGE    #查詢某個包的配置文件
rpm -ql PACKAGE    #查詢某個包的所有文件
rpm -qd PACKAGE    #查詢某個包的文檔
rpm -qpi PACKAGE_FILE   #
rpm -qpl PACKAGE_FILE   #
rpm -qa   #查詢該系統中裝了哪些包

11、卸載

格式:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
示例:
rpm -e|--erase PACKAGE
實例:
[root@centos6 ~]# rpm -q tree
tree-1.5.3-3.el6.x86_64
[root@centos6 ~]# rpm -e tree
[root@centos6 ~]# rpm -q tree
package tree is not installed
[root@centos6 ~]#

12、包校驗

格式:
rpm {-V|--verify} [select-options] [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
(1)包來源合法性驗正及完整性驗正:
         完整性驗正:SHA256
         來源合法性驗正:RSA
(2)公鑰加密:
         對稱加密:加密、解密使用同一密鑰
         非對稱加密:密鑰是成對兒的(public key: 公鑰,公開所有人;secret key: 私鑰, 不能公開)
(3)導入所需要公鑰:
         rpm -K|checksig rpmfile檢查包的完整性和簽名
         rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
         CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
         rpm -qa gpg-pubkey*

13、RPM數據庫

數據庫路徑:/var/lib/rpm
格式:
rpm {--initdb|--rebuilddb}
   initdb: 初始化
   如果事先不存在數據庫,則新建之
   否則,不執行任何操作
   rebuilddb:重建
   無論當前存在與否,直接重新創建數據庫

二、PRM的前端工具YUM

1、簡介

YUM(YellowdogUpdate Modifier),rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具。

yum repo(yum repository),存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)

2、yum客戶端配置文件

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

/etc/yum.repos.d/*.repo:為倉庫的指向提供配置

/var/log/yum.log:yum的日志

yum配置文件詳解(/etc/yum.conf)
[main]   #倉庫名稱
cachedir=/var/cache/yum/$basearch/$releasever   #yum緩存的目錄,yum在此存儲下載的rpm包和數據庫,一般是/var/cache/yum
keepcache=0   #是否保留本地緩存,0為不保存
debuglevel=2   #調試級別
logfile=/var/log/yum.log   #日志文件的路徑
exactarch=1   #精確匹配系統版本arch的PACKAGE
obsoletes=1      
gpgcheck=1   #檢驗包的來源和完整性
plugins=1    #yum支不支持插件機制
installonly_limit=5   #支持同時安裝多少個包
bugtracker_url=   #追蹤bug的url
distroverpkg=centos-release   #發行版版本號為centos-release

Tips:可以用[root@centos6 ~]# man yum.conf查看詳解
yum倉庫配置文件(/etc/yum.repos.d/CentOS-Base.repo)
[base]   
name=CentOS-$releasever - Base   #對repository的描述
mirrorlist=   #指向以鏡像服務器的地址
#baseurl=   #指向yum倉庫的地址 
gpgcheck=1   #檢驗包的來源和完整性
gpgkey=   #gpg的密鑰文件路徑
enabled=1   #是否啟用此倉庫,1為啟用(默認啟用)
repo_gpgcheck=1   #檢驗包的元數據信息是否安全,1為啟用
yum倉庫文件自定義
[base]
name=Centos 6.8   #定義倉庫名稱
baseurl=   #定義yum中的網址路徑 
gpgcheck=1   #檢驗包的來源和完整性
gpgkey=   #gpg的密鑰文件路徑(第一次yum安裝會導入密鑰)
enabled=1   #啟用此倉庫

3、yum-config-manager命令

格式:
yum-config-manager --add-repo=
yum-config-manager --disable “倉庫名" 禁用倉庫
yum-config-manager --enable “倉庫名” 啟用倉庫
實例1:
用鏡像快速創建yum倉庫
[root@centos6 ~]# mount /dev/cdrom /mnt
[root@centos6 ~]# yum-config-manager --add-repo=///mnt/Packages/
Loaded plugins: fastestmirror, refresh-packagekit
adding repo from: ///mnt/Packages/

[_mnt_Packages_]
name=added from: ///mnt/Packages/
baseurl=///mnt/Packages/
enabled=1


[root@centos6 ~]#

4、yum庫中的查詢、安裝、升級、檢查、卸載

顯示倉庫列表:

格式:
yum repolist [all|enabled|disabled]

顯示程序包:

格式
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1]

安裝程序包:

格式:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安裝)

升級程序包:

格式:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降級)

檢查可用升級:

格式:
yum check-update

卸載程序包:

格式:
yum remove | erase package1 [package2] [...]

5、yum中查看、緩存、搜索、事務歷史

查看程序包information:

格式:
yum info [...]

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

格式:
yum provides | whatprovidesfeature1 [feature2] [...]

清理本地緩存:

格式:
yum clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]

構建緩存:

格式:
yum makecache

搜索:

格式:
yum search string1 [string2] [...]   #以指定的關鍵字搜索程序包名及summary信息

查看指定包所依賴的capabilities:

格式:
yum deplistpackage1 [package2] [...]

查看yum事務歷史:

格式:
yum history [ info | list| packages-list | packages-info | summary| addon-info | redo| undo | rollback | new | sync | stats ]
yum history
yum history info 6
yum history undo 6

6、yum中的升級與包組管理

安裝及升級本地程序包:

格式:
yum localinstallrpmfile1 [rpmfile2] [...]   #可以用install替代
yum localupdaterpmfile1 [rpmfile2] [...]   #可以用update替代

包組管理的相關命令:

格式:
yum groupinstallgroup1 [group2] [...]
yum groupupdategroup1 [group2] [...]
yum grouplist[hidden] [groupwildcard] [...]
yum groupremovegroup1 [group2] [...]
yum groupinfogroup1 [...]

7、yum命令中的其他選項

選項:
--nogpgcheck:禁止進行gpgcheck
-y: 自動回答為“yes”
-q:靜默模式
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啟用此處指定的repo
--noplugins:禁用所有插件

8、yum中的repo配置文件詳解

repo配置文件中可用的變量:

$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386
$YUM0-$YUM9:自定義變量
示例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384

9、yum自建倉庫命令

格式:
yum createrepo[options] <directory>

原創文章,作者:Aleen,如若轉載,請注明出處:http://www.www58058.com/37750

(0)
AleenAleen
上一篇 2016-08-19
下一篇 2016-08-20

相關推薦

  • linux 3.26 第一課

    setup app

    2018-03-26
  • 安裝RPM包 rpm與yum工具的使用

    1.認識yum與rpm工具.                 在windows下安裝一個軟件很輕松,只要雙擊.exe的文件,安裝提示連續 “下一步” 即可,然而linux系統下安裝一個軟件似乎并不那么輕松了,因為我們不是在圖形界面下。所以你要學會如何在linux下安裝一…

    Linux干貨 2016-08-26
  • 設計模式(八)裝飾器模式Decorator(結構型)

    1. 概述        若你從事過面向對象開發,實現給一個類或對象增加行為,使用繼承機制,這是所有面向對象語言的一個基本特性。如果已經存在的一個類缺少某些方法,或者須要給方法添加更多的功能(魅力),你也許會僅僅繼承這個類來產生一個新類—這建立在額外的代碼上。       通過繼…

    Linux干貨 2015-07-03
  • bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示

    1)bash的工作特性之命令執行狀態返回值; 在 Linux 下,任意一個命令執行結束之后,bash都會返回0-255之間的數值以表示命令執行成功與否;其返回值保存于bash的特殊變量$?中; 其中0表示:執行成功;1-255表示執行錯誤; 例如: [root@localhost ~]# ls anaconda-ks.cfg initial-setup-ks…

    Linux干貨 2016-11-06
  • 2. 初識shell

        在Linux早期, 可以用來工作的只有shell. 那時, 系統管理員, 程序員和系統用戶都坐在Linux命令行終端前, 輸入文本命令, 查看文本輸出. 而現在, 因為有了絢麗的圖形化桌面環境, 在系統上找到shell提示符都變得困難起來. 接下來將會討論提供命令行環境需要什么, 然后帶你逐步了解可能會在各種L…

    Linux干貨 2016-11-06
欧美性久久久久