首页 > 代码库 > 《Linux程序包管理之RPM及YUM》
《Linux程序包管理之RPM及YUM》
一、RPM和YUM简介 |
RPM,全称RPM Package Manager是由Red Hat推出的软件包管理系统,现在在各个发行版普遍使用。 RPM包管理器,将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装、卸载、升级、查询、校验等程序管理;通常用与RHEL,红帽衍生系统,如CenOS等系统,用来实现对Linux程序包进行快捷管理。 |
RPM包命名格式:
Yum,全称Yellow dog Updater, Modified , 由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于 RPM 包管理的字符前端软件包管理器。能够从指定的服务器自动下载 RPM 包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 |
二、程序包安装路径 |
系统相关:
配置文件路径:/etc
二进制文件路径:/bin 、/sbin
库文件路径:/lib、lib64、 /usr/lib、/usr/local/lib
系统提供功能服务相关:
配置文件路径:/etc
二进制文件路径:/usr/bin /usr/sbin
库文件:/usr/lib、lib64、 /usr/lib、/usr/local/lib
第三方软件:
配置文件路径/usr/local/etc、/etc/DIR
二进制文件路径:/usr/local/bin /usr/local/sbin
库文件:/usr/local/lib
软件说明相关文档主要都存放在/usr/share/man和/usr/local/share/man
三、使用详细介绍 |
3.1 RPM软件包使用介绍
3.1.1 RPM安装相关 |
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_NAME
-i :安装
-v:显示安装过程
-h:以#显示安装进度,每个#代表2%进度。
--replacepkgs:替换安装,如果该该包提前安装过,需要再次替换安装使用;
--nodeps:不检查依赖关系
--oldpackage:降级安装;
--force: 忽略冲突,强制执行过程;
--test:测试整个安装过程,测试完毕,并不安装;
例子:### rpm -ivh vsftpd-2.2.2-12.el6_5.1.x86_64.rpm
3.1.2 RPM升级 |
rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...
如果有较旧版本程序包,则升级安装;否则,则执行安装操作;
rpm {-F|--freshen}[install-options] PACKAGE_FILE ...
如果有较旧版本程序包,则升级安装;否则,中止;
# rpm -Uvh PACKAGE_FILE ...
# rpm -Fvh PACKAGE_FILE ...
例子: ### rpm -Uvh vsftpd-2.2.2-12.el6_5.1.x86_64.rpm
### rpm -Fvh vsftpd-2.2.2-12.el6_5.1.x86_64.rpm
3.1.3 RPM卸载 |
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME
rpm -e PACKAGE_NAME ...
--nodeps: 忽略依赖关系
--test:卸载测试
注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会删除,而是被重命名(原文件加.rpmsave后缀)并保留.
例子: ### rpm -e vsftpd
### rpm -e mysql-libs --nodeps
3.1.4 RPM查询 |
rpm{-q|--query} [select-options] [query-options]
[select-options]:
1、查询某包是否安装:
rpm -q PACKAGE_NAME ...
### rpm -q bind
2、查询已安装的所有包:
rpm -qa
### rpm -qa | less
3、查询某文件是由哪个包安装生成:
rpm -qf /path/to/somefile
### rpm -qf /bin/bash
4、查询尚未安装包的相关信息:
rpm -qpl PACKAGE_FILE
rpm -qpi PACKAGE_FILE
### rpm -qpl httpd-2.2.15-39.el6.centos.x86_64.rpm
### rpm -qpi httpd-2.2.15-39.el6.centos.x86_64.rpm
[query-options]
1、查询某包的简要说明信息
rpm -qi PACKAGE_NAME
### rpm -qi bash
2、查询某包安装后生成的所有文件的列表
rpm -ql PACKAGE_NAME
### rpm -ql bash
3、查询某包安装后生成的所有配置文件的列表
rpm -qc PACKAGE_NAME
### rpm -qc bash
4、查询某包安装后生成的所有帮助文件的列表
rpm -qd PACKAGE_NAME
### rpm -qd bash
5、查询某rpm包制作时随版本变化的changelog列表信息
rpm -q --changelog PACKAGE_NAME
### rpm -q --changelog bash
6、查询某包提供的capabilities(能力),列出软件包提供的特性
rpm -q --provides PACKAGE_NAME
### rpm -q --provides passwd
7、查询某包所依赖的capabilities(能力),列出软件包依赖的其他软件包
rpm -q --requires PACKAGE_NAME
### rpm -q --requires passwd
8、查询某包安装卸载时的脚本
rpm -q --scripts
安装卸载脚本有四种:
preinstall:安装前执行的脚本
postinstall:安装后执行的脚本
preuninstall:卸载前执行的脚本
postuninstall:卸载后执行的脚本
### rpm -q --scripts bash
9、显示软件包的修改信息
rpm -q --changelog PACKAGE_NAME
### rpm -q --changelog bash
10、显示转储文件信息
rpm -q --dump PACKAGE_NAME
### rpm -q --dump bash |less
3.1.5 RPM包校验 |
rpm {-V|--verify} [select-options] [verify-options]
检查包安装之后生成的文件是否发生了改变
常用用法:rpm -V PACKAGE_NAME
S file Size differs # 文件大小不一致
M Mode differs (includes permissions and filetype) #模式不一致 (包括许可和文件类型)
5 digest (formerly MD5 sum) differs MD5 # MD5 校验和不一致
D Device major/minor number mismatch # 主从设备号不匹配
L readLink(2) path mismatch # readLink(2) 路径不匹
U User ownership differs #属主不一致
G Group ownership differs # 属组不一致
T mTime differs # 修改时间不一致
P caPabilities differ # 提供的功能有变化
### rpm -V httpd
3.1.6包来源合法性及完整性验正 |
rpm --import PUBKEY ...
rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ...
--nosignature: 不检查来源合法性
--nodigest: 不检查完整性
### rpm -K httpd-2.2.15-39.el6.centos.x86_64.rpm
3.1.7 重建yum数据库公共数据库 |
rpm {--initdb|--rebuilddb}
初始化:--initdb
如果事先不存在数据,则会新之;否则,不执行任何操作
### rpm --initdb
重新构建:--rebuilddb
无论当前是否已经存在数据库,都会直接重建并覆盖现有数据库
### rpm --rebuilddb
3.1.8 扩展讲解
[1] 从yum仓库下载RPM软件包 |
yumdownloader --resolve PACKAGE_FILE …
--destdir DIR
指定下载目标目录。默认为当前目录。
--urls
而不是下载RPM包,列出将要下载的网址。
--resolve
当下载RPM包,解决依赖关系,并下载所需的软件包。
--source
而不是下载的二进制RPM包,下载源RPM包
例子:### yumdownloader --resolve lrzsz ### 下载该软件包,以及依赖包
[2] rpm2cpio使用 |
如果下载一个 RPM,需要检查它的内容而不是安装它,可以使用 rpm2cpio 命令把内容转换为 cpio 存档,然后通过 cpio 命令提取出包中的某些或所有文件。对 bind 包执行转换,然后显示提取出的文件(和目录)。关于 rpm2cpio 和 cpio 命令的更多信息参见它们的手册页。
### yumdownloader bind
### mkdir bind && cd bind
### rpm2cpio ../bind-9.8.2-0.17.rc1.el6.x86_64.rpm| cpio -idv
3.2YUM软件包使用介绍
3.2.1 YUM安装 |
安装一个软件包或多个软件包
# yum install package1 [package2] [...]
安装软件包组
# yum groupinstall groupinstall group1 [group2] [...]
# yum install @group1 [group2] [...]
例子: # yum install bind
# yum groupinstall ‘MySQL Database server‘
# yum install @‘MySQL Database client‘
本地安装一个rpm软件包
# yum localinstall rpmfile1 [rpmfile2] [...]
本地安装
如果要安装指定的版本的程序:
yum install PACKAGE-VERSION
重装指定的程序包
yum reinstall PACKAGE_NAME ...
3.2.2 YUM 升级 |
升级某个包或多个软件包
# yum update [package1] [package2] [...]
升级某个包组
# yum groupupdate group1 [group2] [...]
例子: ### yum update bind
### yum groupupdate ‘MySQL Database server‘
### yum update @‘MySQL Database client‘
本地升级安装某个rpm软件包
# yum localupdate rpmfile1 [rpmfile2] [...]
软件包yum降级:
# yum downgrade PACKAGE_NAME
检查可用升级:
### yum check-update
3.2.3 YUM 卸载 |
卸载某个软件包
# yum remove | erase package1 [package2] [...]
下载某个软件包组
# yum groupremove group1 [group2] [...]
# yum remove @‘ group_name‘
例子:### yum remove bind
### yum groupremove ‘MySQL Database server‘
### yum remove @‘MySQL Database client‘
3.2.4 YUM查询 |
查询已安装和可以安装的软件包清单,或查询某个特定的软件包
# yum list [PACKAGE_NAME]
查询软件包信息
# yum info [PACKAGE_NAME]
# yum info installed ### 列出已安装的软件包信息
# yum info available ### 列出可安装的软件包信息
查询软包提供的功能或者命令
# yum provides | whatprovides feature1 [feature2] [...]
查询包组已安装和可以安装的软件包组清单,或查询某个特定的软件包组
# yum grouplist[hidden] [groupwildcard] [...]
查询某个软件包组信息
# yum groupinfo group1 [...]
根据关键字模糊查询包名或包的sumary信息包含此KEYWORD的相关列表;
# yum search string1 [string2] [...]
查询所有可用YUM仓库都有那些或启用或关闭某个仓库
# yum repolist [all|enabled|disabled]
例子:
### yum list httpd
### yum info ftp
### yum provides *bin/sz
### yum grouplist | less
### yum groupinfo ‘ServerPlatform Development‘
### yum search ‘vsftp‘
### yum repolist
3.2.5 YUM仓库缓存数据 |
YUM仓库缓存数据清理
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
### yum clean all
重新生成yum仓库缓存数据
### yum makecache
四、YUM扩展讲解 |
4.1 YUM客户端配置
4.1.1 YUM配置文件的具体格式 |
[Local-YUM]是仓库名repository_ID,名字可以随便取
name:yum的名称也可以随便取“=”两边不能有空格
baseurl:指定rpm包的路径,该路径下必须有repodata这个文件
enabled:默认为1,表示启动此仓库,0表示不启用
gpgcheck:默认也是1,1表示检查公钥,0表示不检查,当检查公钥时要指定gpgkey的地址
cos:t默认是1000,越小越优先访问
4.1.2 YUM配置服务器 |
YUM服务器基于http、ftp、nfs、file访问格式
相对应的baseurl路径,例如:
http://
ftp://
nfs://
file:///
本地光盘yum例子:
cat >> /etc/yum.repos.d/CentOS-Local.reop <<END [YUM-Local] name=CentOS 6.6 Local YUM baseurl=file:///media/cdrom enabled=1 gpgcheck=0 END |
公网http yum例子:
cat >> /etc/yum.repos.d/CentOS-sohu.reop <<EOF [sohu] name=Sohu for CentOS 6.x YUM baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch enabled=1 gpgcheack=1 gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6 EOF |
4.1.3 搭建YUM仓库服务器 |
# yum install httpd -y # 以http的方式向外提供yum仓库服务 # yum install createrepo -y # 安装创建yum仓库的工具 # mkdir -p /var/www/html/centos6.6 #创建yum以http服务提供的路径 # mkdir -p /media/cdrom # 创建光盘挂载点 # mount -r /dev/cdrom /media/cdrom/ # 以只读方式挂载光盘 # cp -r /media/cdrom/Packages/ /var/www/html/centos6.6 # 拷贝rpm包(最好将两个光盘的包都拷贝) # cd /var/www/html/centos6.6 # createrepo Packages/ -o . # 创建Packages软件包目录的元数据信息 # service httpd restart # 启动httpd,以便于提供YUM仓库 YUM仓库配置完毕的baseurl如下: ### baseurl=http://172.16.249.165/centos6.6 |
本文出自 “心静梵音” 博客,请务必保留此出处http://masters.blog.51cto.com/6516495/1592529
《Linux程序包管理之RPM及YUM》