1. RPM
1.1 RPM是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。
1.2 rpm安装
安装的rpm软件包主要参数
- -i 或--install 安装软件包
- -v 显示安装过程的信息
- -vv 显示安装过程中的详细信息
- -h 以#号来表示程序包的执行进度
[root@centos7.3 ~]#rpm -ivh /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm #安装软件包,在选项的后面跟上要安装的软件的路径
Preparing... ################################# [100%] #这一行表示安装准备完成
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%] #tree-1.6.0-10.el7这个软件包安装完成
安装升级卸载中会用到的一些参数
- --test:测试安装,只显示过程,并不执行安装
- -- nodeps:忽略依赖关系,在安装程序的时,有些时候会因为软件包的依赖关系无法安装,这时就可以用nodeps来解决。
- -- replacepkgs:覆盖安装软件
- -- replacefiles:只覆盖软件的文件
- -- nosignature: 不检查软件包来源合法性
- -- nodigest:不检查软件包的完整性
- -- noscripts:不执行程序包脚本,在软件包中通常都有一些脚本,来定义一些像安装的路径之类的。
- -- nopre:不执行安装前脚本
- -- nopost:不执行安装后脚本
- -- nopreun:不执行卸载前脚本
- -- nopostun:不执行卸载后脚本
- -- force: 强制安装
1.2升级降级rpm软件包
- -U 或 --upgrade 安装有旧版程序包,则升级如果不存在旧版程序包,则安装
[root@centos7.3 Packages]#rpm -qa rpm
rpm-4.8.0-55.el6.x86_64 #rpm软件的版本
[root@centos7.3 Packages]#rpm -Uvh rpm-4.11.3-21.el7.x86_64.rpm #升级rpm软件
warning: rpm-4.11.3-21.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies: #提示有依赖关系无法升级
libdb-5.3.so()(64bit) is needed by rpm-4.11.3-21.el7.x86_64
liblzma.so.5()(64bit) is needed by rpm-4.11.3-21.el7.x86_64
librpm.so.3()(64bit) is needed by rpm-4.11.3-21.el7.x86_64
librpmio.so.3()(64bit) is needed by rpm-4.11.3-21.el7.x86_64
rpm = 4.8.0-55.el6 is needed by (installed) rpm-libs-4.8.0-55.el6.x86_64
rpm = 4.8.0-55.el6 is needed by (installed) rpm-python-4.8.0-55.el6.x86_64
[root@centos7.3 Packages]#rpm -Uvh rpm-4.11.3-21.el7.x86_64.rpm --nodeps #用nodeps参数忽略依赖关系
warning: rpm-4.11.3-21.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ########################################### [100%]
1:rpm ########################################### [100%]
#升级成功
[root@centos7.3 ~]#rpm -qa rpm #查看rpm版本
rpm-4.11.3-21.el7.x86_64 现在的版本是4.11了
- -F 或 --freshen安装的有旧版程序包则升级,如果不存在旧版程序包,则不执行升级操作
- -- oldpackage:安装旧版本的软件包,把软件降级
注:如果旧程序的配置文件安装后曾被修改,升级时新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名“filename.rpmnew”后保留
1.3 rpm软件包的卸载
- -e或者--erase来卸载
[root@centos7.3 Packages]#rpm -evh tree #卸载tree软件
Preparing... ################################# [100%]
Cleaning up / removing...
1:tree-1.6.0-10.el7 ################################# [100%] #卸载成功
1.4 rpm软件包的查询
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
[root@centos7.3 ~]#rpm -qa rpm #查询rpm来自那个包
rpm-4.11.3-21.el7.x86_64
1.5 rpm软件包校验
rpm -V或--verify 可以验证软件包文件有没有被修改过
[root@centos7.3 bin]#rpm -V rpm
S.5....T. /bin/rpm #前面显示的几个字符表示修改的项,没有修改不显示
- S 文件大小不同
- M 权限和文件类型和原文件不一致
- 5 MD5不一致
- D 设备主/次编号不匹配
- L 路径不匹配
- U 属主不同
- G 所属组不一致
- T 修改时间不同
- P 功能不同
rpm - K或checksig 检查包的完整性和签名
[root@centos7.3 Packages]#rpm -checksig rpm-4.11.3-21.el7.x86_64.rpm #查询rpm软件包的完整性和签名
rpm-4.11.3-21.el7.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#f4a80eb5) #这里显示NOT OK,有问题
上面的问题不是软件包有问题,而是系统默认没有导入密钥,所以检查结果是not ok。下面我们导入密钥,在系统安装是安装程序会把密钥放在/etc/pkirpm-gpg/目录下,密钥的文件名是RPM-GPG-KEY-CentOS-7。
[root@centos7.3 Packages]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #导入密钥
[root@centos7.3 Packages]#rpm -K rpm-4.11.3-21.el7.x86_64.rpm #我们再来检查一下rpm软件包
rpm-4.11.3-21.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK #这里的检查结果是ok,没有问题
那密钥可以导入,也就可以卸载
[root@centos7.3 Packages]#rpm -qa "gpg-pubkey*" #用这条命令来查找密钥导入之后的名字
gpg-pubkey-f4a80eb5-53a7ff4b #密钥名
[root@centos7.3 Packages]#rpm -e gpg-pubkey-f4a80eb5-53a7ff4b #卸载密钥
1.6 rpm的数据库
- rpm的数据库放在/var/lib/rpm目录下
- 创建rpm数据库
2.1 initdb:如果事先不存在数据库,则新建一个,
否则,不执行任何操作
2.2 rebuilddb:重建已安装的包头的数据库索引目录