RPM简介与基本使用
一、什么是RPM
RPM的全名是Red Hat Package Manager,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用。
简单来说,RPM是以一种数据库记录的方式将所需要的软件安装到Linux主机的一套管理程序,最大的特点是将要安装的软件先编译并打包,通过包装好的软件中默认的数据库记录,记录这个软件在安装的时候需要的依赖属性模块,在用户的Linux主机安装时,RPM会先根据软件里的记录数据,查询Linux主机的依赖属性软件是否满足,若满足则予以安装,不满足则不安装。安装的时候将该软件的信息全部写入RPM的数据库中以便将来的查询、验证与卸载。
软件安装流程如下:
总结一下,RPM的用途有以下几点:
1、安装、删除、升级和管理软件;当然也支持在线安装和升级软件;
2、通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个软件包;
3、可以在查询系统中的软件包是否安装以及其版本;
4、作为开发者可以把自己的程序打包为RPM 包发布;
5、软件包签名GPG和MD5的导入、验证和签名发布
6、依赖性的检查,查看是否有软件包由于不兼容而扰乱了系统;
二、RPM的优点和缺点
1. 优点
- 由于已经编译完成并且打包,所以安装很方便
- 由于套件信息已经记录在Linux主机的数据库中,方便查询、升级与卸载
2. 缺点
- 安装环境必须与打包时的环境一致
- 需要满足软件的依赖属性需求
- 卸载时需要特别小心,最底层的软件不可以先删除,否则可能造成整个系统出问题
三、RPM的使用权限
RPM软件的安装、删除、更新只有root权限才能使用;对于查询功能任何用户都可以操作;如果普通用户拥有安装目录的权限,也可以进行安装。
四、RPM包的命名规则
1. 命名格式
- name-version-arch.rpm
- name-version-arch.src.rpm
2. 说明
- name:软件包名称。
- version:带有主、次和修订的软件包版本。
- arch:硬件平台。硬件平台包括了:i386、i486、i586、i686、x86_64、ppc、sparc、alpha
- src.rpm:源代码包。
3. 范例
以“openssl-1.0.1c-1.fc18.i686.rpm”为例:
- openssl:是软件名称。
- 1.0.1c-1:是软件版本。
- i686:是适用的硬件平台。
4. 特殊名称
1)fcXX,elXX:表示这个软件包的发行商版本,就像这里的fc18,说明这个软件包是在Fedora 18下使用的。而openssl-1.0.0-20.el6.x86_64.rpm表示这个软件包是在RHEL 6.x(Red Hat Enterprise Linux)/CentOS 6.x下使用。
2)devel:表示这个RPM包是软件的开发包,例如mysql-devel-5.1.52-1.el6_0.1.i686.rpm。
3)noarch:说明这样的软件包可以在任何平台上安装,不需要特定的硬件平台。在任何硬件平台上都可以运行。
五、基本用法
一)RPM的软件包查询功能
RPM在查询的时候,查询的地方是在/var/lib/rpm目录下的数据库文件。
命令格式:
rpm -qa
rpm -q[licdR] 已经安装的软件名称
rpm -qf 存在于系统中的某个文件名称
rpm -qp[licdR] 未安装的某个文件名称
从上面的命令看来,根据后面所带的参数来区分可以分为四种:
1. 后面不接名称的
- -qa:查询所有已经安装的软件名称
2. 后面接已经安装的软件名称的:
- -q:查询后面接的软件是否安装,已安装有信息输出,否则没有
- -qi:列出该软件的详细信息(information),包含开发商、版本与说明等
- -ql:列出该软件所有的文件与目录(list)
- -qc:列出该软件的所有配置文件
- -qd:列出该软件的所有帮助文件(与man有关的文件)
- -qR:列出与该软件有关的依赖软件所含的文件(Required)
3. 后面接一个存在于系统的文件名称
- -qf:找出该文件属于哪个已安装的软件
4. 后面接一个.rpm文件
- -qp[licdR]:-qp后面接的所有参数以上面的说明为准,目的在于找出某个rpm文件内的信息,而非已安装的软件信息
二)软件包的安装和升级
1. 安装
1)命令格式
rpm -ivh package_name.rpm
参数:
-i:install的意思
-v:查看更详细的安装信息页面
-h:以安装信息列显示安装进度
2)范例
rpm –ivh rp-ppppoe-3.1-.i386.rpm # 安装一个软件
rpm –ivh a.i386.rpm b.i386.rpm *.rpm # 安装多个软件
rpm –ivh http://website.name/path/pkgname.rpm # 通过网络直接安装软件
如果在安装过程中发现问题,或者已经知道会发生的问题,还执意安装,可以使用“强制”安装参数:
可执行的参数 |
表示意义 |
--nodeps |
使用时机:如果安装某个套件事,总足发现rpm告诉您“有相关厲性的套件尚未安装”,而您又想直接强制安装这个套件,可以加上--nodeps告知RPM不要去检查套件的依赖性。 危险性:套件有依赖性的原因是因为彼此会使用对方的机制或功能,如强制安装而不考虑套件的属性依赖,则可能会进成该套件无法正常使用 |
--nomd5 |
使用时机:不想检查RPM文件所含的MD5信息时 说明:除非您很清楚这个套件的来源,否则建议不使用这个参数 |
--noscripts |
使用时机:不想让该套件自行启用或者自行执行某些系统命令 说明:RPM的优点除了可以将文件放到确定的位置之外,还可以自动执行一些前置工作的命令,例如数据库的初始化。如果不想要让RPM帮您自动执行这一类型的命令,就加上它 |
--replacefiles |
使用时机:如果在安装的过程中出现了“某个文件已安装在系统上”的信息,或出现版本冲突的信息(conflicting files)时,可以使用这个参数来直接覆盖文件 危险性:覆盖的操作是无法复原的。所以,必须要很清楚地知道被覆盖的文件真的不重要 |
--replacepkgs |
使用时机:重新安装某个已经安装过的套件 |
--force |
使用时机:这个参数其实就是—replacefiles与—replacepkgs的综合体 |
--test |
使用时机:想要测试一下该套件是否可以安装到用户的Linux环境中,范例: Rpm –ivh pkgname.i386.rpm --test |
2.升级
1)命令格式
rpm –Uvh package_name.rpm # 如果该软件没安装过,则直接安装,若没安装则升级至最新版
rpm –Fvh package_name.rpm # 如果该软件没有安装,则不会安装
三)RPM卸载与重建数据库
1. 命令格式
rpm -e logrotate # 卸载logrotate
rpm –-rebuilddb # 重建数据库
注意,卸载过程要自上而下,否则会出现结构问题。由于一直在修改文件内容,有时候会导致数据库有点乱,这个时候就可以使用命令重建rpm的数据库。
四)RPM验证与数字签名
验证功能主要是向系统管理员提供一种有用的管理机制,方式是用数据库内容,来比较当前Linux系统环境的所有软件文件,当有数据丢失或者误删/修改某个软件的文件时,就用这种方法来验证原理的文件系统,以了解改动的地方。
1. 命令格式
rpm -Va
rpm -V 已安装的软件名称
rpm -Vp 某个rpm文件的文件名
rpm -Vf 系统上的某个文件 参数:
-Va:列出当前系统上所有可能改动过的文件
-V:跟软件名称,如果所含文件被更改过,才会列出来
-Vp:跟文件名称,列出该软件内可能更改过的文件
-Vf:列出某个文件是否被更改过
2. 从范例看修改因素
查询/etc/crontab是否被更改过
rpm –Vf /etc/crontab
S.5…..T c /etc/crontab
上面的信息从左到右分别表示已改变的因素:
- S:(file Size differs)文件的容量大小
- M:(Mode differs)文件的类型或属性,以及可执行参数
- 5:(MD5 sum differs)MD5这一加密防被黑的属性
- D:(Device major/minor number mis-match)设备名称
- L:(readLink(2)path mis-match)Link属性
- U:(User ownership differs)文件的拥有者
- G:(Group ownership differs)文件所属用户组
- T:(mTime differs)文件的建立时间
如果一个文件全部信息都改过,显示会是:
SM5DLUGT c filename
其中c表示“Config file”,也就是文件类型,文件类型有几类:
- c:配置文件,config file
- d:文档文件,documentation
- g:ghost文件,通常该文件不包含在某个软件中,较少发生,ghost file
- l:授权文件,license file
- r:自述文件,read me
经过验证就知道哪个文件被改过,是否符合预期。
3. 数字签名
rpm可以使用数字签名来判断待安装的软件是否有问题,对数字签名不熟悉的,可以看看阮一峰的两篇文章:
一般我们使用的是GPG的公钥,方法很简单,如果想要使用某个软件,就要将该发布商的GPG公钥先安装到自己的系统上,然后,安装软件时,就会坚持两个密钥是否相同,如果相同就直接安装,不同则在显示信息,之初未安装发布商的GPG公钥。
安装公钥方法很简单,如red hat系统自带有公钥,安装方法:
rpm --import /usr/share/rhn/RPM-GPG-KEY
一般来说,Linux系统都会发布自己的GPG密钥,可以使用以下命令来搜索文件:
locate GPG-KEY
已经安装的公钥可以用下面命令查询
rpm -qa | grep gpg
然后选取gpg-pubkey-…文件来查看信息
rpm -qi gpg-pubkey-c105b9de-4e0fd3a3
六、小结
本文开头介绍了RPM的由来和用途,然后分析了RPM的优缺点和使用权限,最后重点将了包的命名规则和RPM的基本用法。
虽然RPM很好用,但是实际上现在已经出现了基于RPM包管理的,更强大的工具,如yum。所以建议在安装软件的时候,还是使用yum来安装。
七、参考
3. 《鸟哥的Linux私房菜_基础学习篇》(第二版)
(完)
RPM简介与基本使用的更多相关文章
- Linux程序包管理之rpm
rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...
- 末学者笔记--rpm和yum软件管理(Linux)
一.rpm简介 这是一个数据库管理工具,可以通过读取数据库,判断软件是否已经安装,如果已经安装可以读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Packa ...
- rpm和yum软件管理
rpm简介 数据库管理工具,通过读取数据库,判断软件是否安装,如已安装可读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Package Manager(递归 ...
- rpm和yum软件管理(week2_day5)--技术流ken
rpm简介 这是一个数据库管理工具,可以通过读取数据库,判断软件是否已经安装,如果已经安装可以读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Package ...
- yum和rpm
rpm简介 这是一个数据库管理工具,可以通过读取数据库,判断软件是否已经安装,如果已经安装可以读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Package ...
- RPM Database
RPM Database RPM 不仅在安装.升级.卸载方面工作出色,而且在查询和验证方面也表现非凡.你很久前安装了一个数据库软件,但现在忘记了它的版本号,也不知道它的说明文档的位置,可以通过 RPM ...
- Linux基础学习-RPM
目录 1. RPM简介 2. 常用软件安装工具 3. RPM命令参数 4. 使用范例 4.1 查看rpm包信息 4.2 查看rpm包内容 4.3 查看rpm包依赖 4.4 安装rpm包 4.5 卸载r ...
- rpm与yum软件管理
一.rpm 简介 这是一个数据库管理工具,可以通过读取数据库,判断软件是否已经安装,如果已经安装可以读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Pack ...
- 【程序包管理】Linux程序包管理之rpm安装总结
rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...
随机推荐
- tomcat深入学习
总体结构:https://www.jianshu.com/p/d74eef07487f servlet相关:https://www.ibm.com/developerworks/cn/java/j-l ...
- MyEclipse自动生成Ant Build.xm
关于MyEclipse 自动生成 Ant Build.xml 配置文件,生成的方法很隐蔽,是自己无意中找到的.选择你要生成Build.xml文件的项目,右键. Export-> General ...
- vue的路由初识01
今天就做了一个vue-router的实例,(路由跳转,参数的传递[一个参数,多个参数])<!DOCTYPE html> <html> <head> <meta ...
- 字符串全排列 java实现
经常会遇到字符串全排列的问题.例如:输入为{‘a’,’b’,’c’},则其全排列组合为abc,acb,bac,bca,cba,cab.对于输入长度为n的字符串数组,全排列组合为n!种. package ...
- sourceTree 添加 ssh key 方法【转】
1.使用 git 客户的生成公私钥:id_rsa.id_rsa.pub 1.1设置Git的user name和email: $ git config --global user.name " ...
- 记录:Web无引用无配置方式动态调用WCF服务
这几年一直用WebApi较多,最近项目中有个需求比较适合使用WCF,以前也用过JQuery直接调用Wcf的,但是说实话真的忘了… 所以这次解决完还是花几分钟记录一下 WCF服务端:宿主在现有Win服务 ...
- xsd解析
1. 解释: <xsd:element name="interceptors"> <xsd:annotation> 这一块是对第一行的注解(解释) < ...
- 反向生成hibernate实体类和映射文件
工欲善其事,必先利其器.我们可以使用IDE来根据数据库中的表反向生成实体类和映射文件,虽然这些东西手写也并不是难度很大,但是如果存在大量的简单工作需要我们做,也会显得很麻烦. 写在前面 我们反向生成的 ...
- CORDIC逼近算法
现在开始学习CORDIC算法 学习的博文: (1)http://blog.csdn.net/liyuanbhu/article/details/8458769 三角函数计算,Cordic 算法入门 ...
- isset ,empty,is_null 区别
<?php $a = ''; $b = ""; $c = null; $d = array(); $e = ' '; $f = 0; $g = "0"; ...