Linux学习之RPM包管理-rpm命令管理(十六)

时间:2022-02-08 15:08:41

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)