软件包管理器RPMnode
目前linux界管理软件有2种方式,一是使用dpt来管理,二是使用RPM来管理linux
dpt使用Debian linxu社区开发的,目前使用dpt来管理的发行商包括:B2D,Ubuntu等。算法
而RPM是有Red Hat公司开发出来的,目前使用RPM来管理软件的发行商包括:Fedora、CentOS、SuSE等。数据库
因为当前最主流的软件包管理大多使用RPM来管理的,所以在这里咱们只介绍如何使用RPM来管理软件包centos
什么是RPM呢?ide
RPM:全名是RedHat Package Manager,简称RPM,他是以一种数据库记录的方式将你所须要的软件安装到你的linux系统上的一套管理机制。也就是安装某个软件时,该软件的信息所有写入到了RPM数据库中,之后关于该软件包的升级、卸载、以及校验等操做都是根据RPM数据库中的数据来进行的。优化
RPM软件包的命名规则:ui
name-version-release.arch.rpmspa
软件名称-版本号-发行次数.操做平台.rpm操作系统
其中版本号分为主版本号和次版本号
主版本号:当软件包的重大功能发生改进时,才用于修正主版本号
次版本号:某个子功能发生改变时,才会改变,才用于修正次版本号
发行次数就是编译的次数
操做平台主要由如下几种:
i386:适用于全部的x86平台
i586:针对586等级的计算机进行优化编译的
x86_64:针对64位的CPU进行优化编译的
noarch:表示没有任何硬件等级上的限制
软件包管理器的核心功能是:
一、制做软件包。
咱们知道RPM包是通过原始码编译而来的,因此RPM包是能够直接用来安装的,可是不一样的发行商的RPM包是不用相互通用的,有的连相同发行商不一样版本的RPM包也不可使用。缘由是编译这些RPM包的编译环境不同所致使的。这些编译环境包括硬件平台、库文件等等。
换句话说,只有编译环境和安装RPM的环境一致时,该软件包才可使用。而软件包管理器就能够用来编译原始码,使其在特定的平台上使用。
二、软件包管理器能够来安装、查询、升级、卸载、校验软件包中文件的正确性、重建数据库等操做。
在这里咱们先介绍如何使用RPM来安装软件的。
在linux系统中,许多软件在安装过程当中,存在依赖关系,这里所谓的依赖关系就是说在安装A软件时,必须先安装B软件,才能在安装A软件。这就是软件的相依属性。
RPM 的优势
因为RPM 是透过预先编译并打包成为 RPM 文件格式后,再加以安装的一种方式,而且还可以进行数据库的记载。 因此 RPM 有如下的优势:
RPM 内部已经编译过的程序和配置文件等数据,可让用户克除从新编译的困扰;
RPM 包在被安装以前,会先检查系统的硬盘容量、操做系统版本等,可避免文件被错误安装;
RPM 包自己提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件;
RPM 管理的方式使用数据库记录 RPM 包的相关参数,便于升级、移除、查询和验证。
1、RPM包安装
语法格式:rpm [option] package_file(这个是软件的文件名,全称)
-i:install的意思
-v:显示安装过程当中的详细信息
-vv:显示更加详细的信息
-h:以#号来显示安装进度,其中每一个#表示2%的进度
其中ivh一般一块儿使用
--nodeps:在安装过程当中,忽略依赖关系,这可能会致使安装的软件没法使用
--replacepkgs:从新安装,替换原有的安装
--replacefiles:在安装过程当中,若是某个安装文件已经存在,可使用此选项覆盖。
--force:强行安装,能够实现从新安装或者降级安装.
--prefix 安装路径:自定义安装路径。
2、RPM包查询
以前说过RPM包在安装的时候会生成一个数据库文件,这个文件是/var/lib/rpm/目录,RPM查询就是在这个目录下查找数据库文件的。
语法格式:rpm [option] [package_name]
-q:查询指定的包是否已经安装
-qa:查询已经安装的全部包,后面不接包名
-qi:查询指定包的说明信息
-qc:查询指定包的全部配置文件
-qd:查询指定包的帮助文件(与man相关)
-ql:查询指定包安装后生成的文件列表
-qR:列出与该软件有关的相依软件所含的文件
-q --scripts:查询指定包中所包含的脚本
-qf /path/to/somefile:查询指定的文件是由那个rpm包安装生成的。
若是某个软件包未安装,想要查询其相关信息,可使用-qp来查询
语法格式:rpm -qp[ilcdR] package_name(未安装的软件包名,且安装包必须在本地已存在的)
其中-icldR意思和上面同样
3、RPM包升级
rpm -Uvh package_file :若是该软件包已安装,则升级;没有安装,则进行安装
rpm -Fvh package_file:若是该软件以安装,则升级;没有安装,则退出
其中选项--oldpackage用于降级安装
4、RPM包卸载
rpm -e package_name:卸载某个软件包
--nodeps:在卸载过程当中忽略依赖关系。
在卸载过程当中,最好从上层一次往下卸载,避免系统混乱。
5、验证RPM的完整性
RPM完整性验证能够用来检测某个文件是否被修改过,以及该文件是否被误删了等信息。它是经过对比/var/lib/rpm/下的数据库内容和当前系统上面的全部软件包的文件等机制来进行检测的。
语法格式:
rpm [option] [package_name]
-V :检测指定的软件包中的文件是否被修改过,只有被更动过的文件才会显示出来。
-Va:列出系统上全部被更动的文件。
-Vf:检测某个文件是否被更动过。
其中这上面的每个点表明的是SM5DLUGT,只有改变的才会显示出来
S:文件的大小发生改变
M:文件的类型或者权限发生改变
5:MD5随机码不一样
D:装置的主/次代号发生改变
L:Link路径发生改变
U:文件的属主发生改变
G:文件的属组发生改变
T:文件的修改时间发生改变
其中后面的字符表示文件类型
c:表示配置文件
d:数据文件
g:该文件不被某个软件所包含
l:许可证文件(license file)
r:自述文件(read me)
6、建立数据库
若是某个用户别不当心损毁了/var/lib/rpm/目录下的文件,那么可使用rpm来重建数据库
语法格式:
rpm --rebuilddb:无论RPM数据库是否存在,使用该选项必定会从新建立数据库
rpm --initdb:初始化数据库,也就是说若是数据库不存在则建立数据库;存在则不用建立。
7、数字签名
数字签名用来验证rpm包的来源合法性。刚刚谈到的rpm验证功能,他只能验证软件包里的文件与/var/lib/rpm/目录下的数据库文件而已,若是软件自己就有问题,那么使用刚刚的那种验证方式是不行的。所以,为了验证rpm包的来源合法性,咱们的软件开发商都推出了本身的一个数字签名系统,软件开发商利用数字签名系统生产一个专属的签章,并将这个签章中的公钥释放出来。所以,在安装一个软件包时:
一、首先须要安装软件开发商提供的公钥文件
二、实际安装原厂软件包时,rpm指令会读取其rpm软件包中的签章信息,并与本机内的签章信息进行对比。
三、若签章相同则予以安装;不相同,则给出警告并中止安装。
在咱们的redhat和centos系统上,有一个专门的数字签名系统GPG,他能够利用哈希算法生产独一无二的专属秘钥系统或数字签名系统。
rpm包的来源合法性验证过程以下:
一、将GPG公钥文件导入到系统中。
GPG公钥文件默认位于/etc/pki/rpm-gpg/目录下。
使用rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
二、查看密钥是否已安装
生成的密钥一般以pubkey做为软件包的名称,所以,可使用以下命令来查看:
# rpm -qa | grep pubkey
三、查看密钥软件的相关信息
使用rpm -qi 软件包名
四、验证软件包的来源合法性和完整性的命令
rpm [-K|--checksig] [--nosignature] [--nodigest] Package
dsa,gpg:使用哪一种算法来验证来源合法性,选项--nosignature:不验证rpm包来源合法性。
sha1,md5:使用哪一种算法来验证rpm包的完整性,选项--nodigest:不验证rpm包的完整性。