比如:httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布次数
e16.centos 适合的linux平台
i686 适合的硬件平台
rpm rpm扩展包名
rpm包依赖性
- 树形依赖: a->b->c
- 环形依赖:a->b->c->a
- 模块依赖:查询网站:www.rpmfind.net
一般服务器安装都是最小化安装,这样是为了降低被攻击的可能性,由于服务器的最下话安装,导致安装一个软件需要很多依赖,比如树形依赖,在安装依赖a的时候可能需要安装依赖包g,e,y,j,u等,安装b依赖时又需要其他各种依赖,树形依赖虽然麻烦,可以依旧可以解决。环形依赖也不是很难解决,只需要用一条命令a、b、c同时安装就能解决依赖问题。还有一种依赖时模块依赖,它依赖的是某个软件中的程序,我们可以通过查询www.rpmfind.net来安装依赖。
RPM包管理包括rpm命令管理和yum在线管理,rpm命令管理如上所说,遇到各种依赖问题的时候需要我们自己动手查找依赖包,然后手动解决依赖问题,进行后装。后来人们发现有没有一种什么简单的方法进行安装软件,于是就有了yum命令,事先准备一个包含所有rpm包的网站,作为在线服务器源我们只要使用在线命令安装软件,不管我去依赖那一个包,yum都会自动到服务器上把依赖下载安装。
rpm的安装更新与卸载
包名:如httpd,操作已经安装的软件包时,使用包名,是搜索/var/lib/rpm中的数据库
包全名:如httpd-2.2.15-15.e16.centos.1.i686.rpm,操作没有安装的软件包时,使用
包全名,一定要注意路径。
rpm安装:
rpm -ivh 包全名
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖性
上面就是通过rpm命令安装的,会产生各种依赖,这是rpm安装的缺点
rpm更新:
rpm -Uvh 软件包
-U(upgrade) 升级
有时候可以用更新命令代替安装命令是没问题的
rpm卸载:
rpm -e 包名
-e(erase) 卸载
--nodeps 不检查依赖性
一般rpm包的卸载顺序是按照安装顺序进行的,安装时是a->b->c,卸载时也是a->b->c。假如要卸载的rpm包是依赖于其他包,而没有其他软件包依赖要卸载的件,则卸载应该没什么问题,如果有其他包依赖于要卸载的软件,则需要考虑依赖,如果你输入rpm -e httpd命令,系统会提示你有依赖关系,不能卸载。所以要加上--nodeps不检查依赖强制删除,这个结果就是只删除了httpd,跟他有依赖关系的其它软件是不会删除的,但是这些软件因为系统里没有了httpd也会不能运行,这是所谓的没有删除干净,而yum -y remove httpd这种方式是把与httpd有依赖关系的所有软件一并删除。比如PHP,mod_ssl等等。这就干净了。
rpm查询
查询是否安装
rpm -q 包名
-q(query) 查询
查询所有已经安装的rpm包
rpm -qa
-a(all) 所有
不过我们常用的查询命令是rpm -qa | grep 包名
查询软件的详细信息
rpm -qip 包名(包全名)
-i(information) 查询软件信息
-p(package) 查询未安装包信息
查询软件的安装位置
rpm -qlp 包名(包全名)
-l(list) 查询位置
-p(package) 查询未安装的软件打算安装的位置
查询系统文件属于哪个rpm包
rpm -qf 系统文件名
-f(file) 查询系统文件属于哪个软件包
查询软件包的依赖性
rpm -qRp 包名(包全名)
-R(requires) 查询软件包的依赖性
-p(package) 查询未安装包的信息
rpm包的校验
rpm -V 包名
-V(verify) 校验指定rpm包中的文件
如果文件没有进行修改,不会出现变化,如果文件被修改,则会出现修改信息
S.5. . . . T. c 是有含义的:
S 文件大小是否改变
M 文件类型或文件权限是否改变
5 文件MD5校验和是否改变,可以看成文件内容是否改变
D 设备的中,从代码是否被改变
L 文件路径是否被改变
U 文件所有者是否改变
G 文件属组是否被改变
T 文件的修改时间是否被改变
c 配置文件
d 普通文件
g ghost文件,不应该出现的文件
l 授权文件
r 描述文件
rpm包中文件提取
rpm2cpio 包全名 | cpio -idv .文件绝对路径
rpm2cpio:将rpm包转换成cpio格式的命令
cpio:一个标准的工具,用于创建软件档案文件和从文档文件中提取文件
cpio 选项 < [文件|设备]
-i copy-in模式,还原
-d 还原时自动新建目录
-v 显示还原过程
接下来有个示例:
- 查询ls属于哪个软件包
- 造成ls误删的假象
- 提取rpm包中的ls命令到当前目录的/bin/ls下
- 把ls命令复制到/bin/目录下,修复文件