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.178linux.com/37750

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

相关推荐

  • linux中数组的定义与使用

            我们常说,程序=指令+数据,往细一点的方向说,指令具体指的有哪些?数据又有哪些? 总结一下: 指令大概包括,编程语言中的语法关键字(如bash编程中的关键字有for,while,case,if,until,continue,break),还包括系统中的命令,和一些自己编写的函数,这些…

    2017-05-23
  • Nginx 负载均衡多个nmmp主机

    设计拓扑图 一、Memcache简介 cache(缓存系统) 高性能分布式缓存服务器,缓存所有的“可流式化”数据:livejournal旗下Danga Interacive公司 程序=指令+数据 指令:程序 数据:IO操作 文件系统: 特征:协议简单  基于libevent的事件处理  内置内存存储方式  memcached 不…

    2014-09-17
  • Linux文件系统权限详解

    一、综述 在用户和组的管理中介绍了Linux系统是用户多任务的分时操作系统,这意味着同时可以有多人在同一台pc上进行不同的操作。为了能够保护每个用户的数据安全,针对不同的用户设置相应的权限是非常重要的。 Linux文件系统权限主要针对三类用户: 文件的所有者: owner,用u标识 文件的所有组:group,用g标识 其他人: other,用o标识。不包含在…

    Linux干货 2016-08-04
  • N21 第二周练习

    ####1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。复制:cp   移动:mv    删除:rm   cp:copy,复制文件或目录</br>  cp [OPTION]… SOURCE… DIRECTORY…

    Linux干货 2016-07-22
  • vim的使用

    vim 编辑器  vim的模式:      编辑模式      输入模式      扩展编辑模式:在编辑模式中输入:  ====================================   编辑模式转换成输入模式 &nbs…

    Linux干货 2016-08-11
  • Linux进程管理

    Linux进程及作业管理      内核的功用:          进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能          Process: 运行中的程序的一个副本;      …

    Linux干货 2017-01-05