rpm命令解析
rpm是redhat(红帽)公司开发的一个包管理器,专门用于管理rpm安装包的。
rpm名字解析:
原为:redhat package manager
现为:RPM is Package Manager
rpm是现在linux的工业级标准
包管理器的功能:
打包、安装、卸载、升级、校验、数据库管理
rpm优缺点:
安装方便,相对于古老的为编译方式。
还是不能直接解决依赖关系,如果碰到需要依赖关系的程序,要一个一个依赖包都转起来
rpm包源代码命名:
name-version.tar.{gz,bz2,xz}
rpm包的命名格式
name-version-relase.arch.rpm
version:major.minor.release,同源代码,跟源代码的version一样
release:
rpm自身的发行号,与程序源代码的发行号无关,仅用于表示对rpm包不同制作的修订;
同时,release还包含此包适用的OS
例如:bash-4.2.3-3.centos5
arch:适用于的硬件平台
X86:i386,i486,i586,i686等,不用的86表示支持不通可能较新兼容性更好,
可以使用32位更新的特性
X86_64:x86_64
powerpc:pcc
noarch:依赖于虚拟机
例如:bash-4.2.3-3.centos5.x86_64.rpm
一个程序有20个功能:常用功能有8个,特殊场景A:3个,特殊场景B:6个,二次开发相关功能:3个
分包机制:
核心包(主包):
例如:
主包命名与源程序一致
bash-4.2.3-3.centos7.x86_64.rpm
子包:bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
安装程序包:
格式:rpm [option] /path/to/package_file
-i:install,安装
-v:显示安装信息
-vv:显示更详细的安装信息
-vvv:显示更加详细的安装信息
-h:显示安装进度
组合选项:-ivh
--test:仅作测试,没有真正执行安装,检测安装是否正常
如果依赖于其他包:
1、解决依赖关系
2、忽略依赖关系,能装上,但有可能无法运行
--nodeps:表示忽略依赖关系
重新安装:
--replacepkgs:替换上次原有的安装包
重新安装时,如果原有的配置文件做了修改,很有可能不执行替换,而是将安装应该生成的配置文件重命名为.rpmnew
卸载程序包:
格式:rpm [option] package_name
-e:erase,擦除,卸载
如果被其他包所依赖:
1、将依赖于此包的所有包一并卸载
2、忽略依赖关系
能卸载,但依赖于此包的程序包可能会运行不正常
--nodeps:表示忽略依赖关系
如果包的配置文件安装后曾被改动过,卸载时,此文件将不会被卸载,而是被重命名并保留
例如: warning:/etc/zprofile saved as /etc/zprofile.rpmsave
升级程序包:
新版本替换老版本
格式:rpm [option] /path/to/package_file
1、升级或安装,有老版本就替换升级,没有就安装
-U:组合Uvh
2、纯升级,一定要有老版本
-F:组合Fvh
升级也有依赖关系,升级后的版本可能会有冲突:
--force:强制升级
注意:不应该对内核执行升级操作,而是安装
Linux系统允许多内核并存,如果升级了Linux,启动Linux的时候会崩溃
查询操作:
1、查询某包是否安装
格式:rpm -q package_name...
一次可以查询多个,各个包之间用空格隔开
2、查询所有已经安装的包
rpm -qa
按条件过滤:rpm -qa | grep ‘PATTERN‘
3、查询包的描述信息
rpm -qi package_name
4、查询某包安装生成了哪些文件
rpm -ql package_name
(1)查询某包安装生成了哪些配置文件:rpm -qc package_name
(2)查询某包安装生成了哪些帮助文档:rpm -qd package_name
(3)查询程序包的相关脚本:rpm -q --scripts package_name
脚本有四类:
preinstall:安装前脚本
postinstall:安装后脚本
preuninstall:卸载前脚本
postuninstall:卸载后脚本
5、查询某文件是由哪个包安装生成的
rpm -qf /path/to/some_file
数据库重建:
数据库目录:/var/lib/rpm
数据库包含了:程序的各个数据,有安装目录,文件大小,key等
重建:
1、rpm --initdb:初始化
如果事先没有库,会新建一个,如果有,则不新建
2、rpm --rebuilddb:重建
直接重建,覆盖原有的数据库