Linux的程序包管理器(上)——rpm详解

    在使用Linux操作系统的过程中,我们需要的一些服务(例如Nginx)并没有提供,需要用户自行安装相应的程序包,才能使用相应的服务。本文以CentOS6.6为例,分三小节为读者朋友们尽可能详细的讲解rpm、yum以及程序包的编译安装三种程序包的管理方法。

    rpm

    rpm包管理工具是Red Hat公司贡献的一款rpm程序包管理器,在RHEL、CentOS、Fedora、SUSE等主流发行版本中,被广泛使用。

    rpm包管理工具可用于安装,升级,卸载,重新安装程序;也可以用于查询当前系统上安装了哪些程序,安装程序生成了哪些文件,或者查询一个文件是由哪个程序安装后生成的;也可以校验包的来源完整性和合法性。

    在讲解rpm使用之前,先了解一下rpm包。rpm包的命名方式:rpm包名-主版本号-次版本号-发行号-rpm包自己的发行号(注:与源代码的发行号无关)-平台类型.rpm。如:bash的rpm包名:bash-4.1.2-29.el6.x86_64。每个rpm包当中都有一份程序的组成清单,其中包含了安装、卸载时的脚本,公共数据库指向路径,以及安装之后该程序会生成的文件的清单。读者朋友们可以想想一下Windows下的安装程序,例如QQ,它在自动安装的过程中,也是运行其中的脚本文件进行安装,在注册表中注册(类似于Linux下的公共数据库)生成相应的文件在Windows系统中。rpm管理工具正是将包里的文件抽取出来安装,安装过程中,会检查安装的程序包的是否依赖于其他包,其他包是否已安装在系统中,反馈相应的信息给用户,例如,若安装的包依赖于其他包,会告诉用户安装该包要先安装那些包等(其实,在Windows下安装程序时也会出现这样的提示信息,安装英雄联盟的时候,如果没安装Directx的话,会提示用户安装该软件包)。

    rpm包的安装

    要安装rpm包,首先得先下载rpm包,巧妇难为无米之炊嘛!通常获取rpm的途径有以下几种:①优先选择系统发行光盘或者官方镜像站点;②程序项目的官方站点;③可靠的第三方组织:例如Fedora的EPEL社区:http://fedoraproject.org/wiki/EPEL/zh-cn;④良心rpm包专享搜索引擎:http://rpmfind.net 、http://rpm.pbone.net、http://pkgsorg。

    安装命令:rpm -ivh 程序包名(注意路径)

例如,安装Nginx程序包rpm -ivh nginx-1.4.7-1.el6.ngx.x86_64.rpm。

常用安装选项:

--nodeps 忽略程序包的依赖关系。注:强烈不建议使用该选项。

--replacepkgs 替换原来的包重新安装,即重装该程序。例如,我们将Nginx程序重新安装:rpm -ivh nginx-1.4.7-1.el6.ngx.x86_64.rpm --replacepkgs

--test 仅作测试性安装而非真正安装,常用于检查包之间的依赖性关系

--prefix NEWPATH 将程序安装在自定义的路径下,前提是该包支持用户自定义安装路径。

    升级命令:rpm -Uvh 程序包名(注意路径):如果有旧版本的程序包,则升级安装,否则执行安装操作

              rpm -Fvh 程序包名(注意路径):如果有旧版本的程序包,则升级安装;否则不执行任何操作。

例如,将nginx从1.4.7-1升级到1.6.1-1:rpm -Uvh nginx-1.6.1-1.el6.ngx.x86_64.rpm

常用的升级选项:

--force:强制升级忽略冲突过程

--oldpackage:降级安装,即用旧版本的程序替代现有程序。例如:我们将现在1.4.7-1版本的nginx降级为1.0.8-2版本。从nginx官网:http://nginx.org/packages/centos/6/x86_64/RPMS/下载相应的版面,执行命令:rpm -Uvh nginx-1.0.8-2.el6.ngx.x86_64.rpm --oldpackages

--test测试升级过程

注:不要对内核包执行升级操作,Linux本身支持多版本的内核并存,因此,对新版本的内核包可以直接安装;如果原程序包的配置文件安装后被改动过,升级时,新版本的文件并不会直接覆盖老版本的文件而是把新版本的文件重命名(加后缀.rpmnew)保留。

    卸载命令:rpm -e 程序名(注:不是程序包名)

例如,卸载nginx:rpm -e nginx

常用选项:

            --nodeps 忽略依赖关系执行卸载

    --test 卸载测试

注:如果包的配置文件安装后曾被改动过,卸载时,此配置文件不会被删除而是被重命名(加后缀.rpmsave)保留。

    查询类命令

查询某程序是否已经安装:rpm -qa 程序名



查询某文件是由哪个包安装后生成的:rpm -qf /path/to/somefile




查询尚未安装的程序包安装之后会生成哪些文件:rpm -qpl PACKAGE_FILE.rpm



查询某程序的摘要信息 rpm -qi 程序名



查询某程序生成的文件列表:rpm -q 程序名

    生产环境中常用的rpm命令大致就这么多,想要了解更多rpm的命令说明,详见man手册。

    写在最后:使用rpm安装程序是无法自动解决依赖关系的,而另一款rpm包管理器yum帮用户解决了这一问题。

本文出自 “小志” 博客,请务必保留此出处http://948555452.blog.51cto.com/9146446/1584543

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。