在Linux平台上,众所周知的,我们安装软件包,无外乎两种:一种是以RPM的方式直接安装,这是一种已经编译完成的安装包;另外一种就是源代码安装,这是一种将压缩包解压后,根据自己的环境,加以定制的安装的方式。RPM安装相比源代码安装,更加的方便、快捷,而源代码能根据自己的环境,编译,得到自己想要的功能,这里,我们只介绍RPM包的相关情况:
RPM:RPM is Package Manager,原名并不是这个,但是,现在的RPM已经成为整个Linux界公认的行业标准了。凡事有一定的规范性,对于RPM,它的命名也是有法可寻。
1、RPM的命名格式:name-version-release.arch.rpm
name:这里指的是对应软件的名称,比如httpd,我们的apache服务
version:这里的版本主要指的是对应的源代码的版本号
release:这个是这个RPM的修订的次数,发布版本,与源代码的版本号无关
arch:这个是它所支持的硬件平台,有x86_64,i386,ppc,noarch等
这其中的version有三部分组成:主版本号、次版本号、发布版本号
例子:httpd-2.2.15-29.el6.centos.x86_64.rpm
上面,我们以httpd服务为例,它的name就是httpd,version为2.2.15,release为29.e16,这里,还包含了此包使用的系统,即centos,arch就是x86_64。
这么解释的话,不知道大家有没有一个具体的概念了?
2、RPM的打包功能及其分包机制:
核心包,即主包,它的命名与源程序一样(不是源代码啊)
例子:php-5.3.3-26.el6.x86_64.rpm,上面提到的httpd也是核心包
子包:它在name的后面有个子包名
例子:php-mysql-5.3.3-26.el6.x86_64.rpm,这里的mysql就是子包名
3、RPM包管理器的常见使用环境:
a、安装程序包:rpm [option] package_path
-i:安装,即install
-v:显示详细信息,这里也可以使用-vv和-vvv,信息更加详细
-h:使用"#"来显示安装的进度
rpm -ivh httpd-2.2.15-29.el6.centos.x86_64.rpm
配合上面-ivh使用的选项:
--test:这里仅做测试,并不是实际去执行安装
rpm -ivh --test httpd-2.2.15-29.el6.centos.x86_64.rpm
--nodeps:这里是在有依赖包的时候,你不想将依赖包安上,但是,这样做的话,
会造成包可能无法运行,下面这种情况就是需要依赖包:
rpm -ivh --nodeps php-pecl-apc-3.1.9-2.el6.x86_64.rpm
--replapacpkgs:看选项,我们就知道,这是重新安装替换,但是,配置文件不会被重新安装
rpm -ivh --replacepkgs httpd-2.2.15-29.el6.centos.x86_64.rpm
b、卸载程序包:
rpm [option] package_name
-e:卸载选项,意思为erase,擦除
--nodeps,卸载时,忽略它所依赖的包,只卸载当前包
rpm -e httpd --nodeps
c、升级版本程序包:
I、升级或安装
rpm -Uvh package_path
rpm -Uvh httpd-2.2.15-29.el6.centos.x86_64.rpm
II、纯升级
rpm -Fvh package_path
rpm -Fvh httpd-2.2.15-29.el6.centos.x86_64.rpm
III、强制升级
rpm --force package_path
rpm -force httpd-2.2.15-29.el6.centos.x86_64.rpm
d、查询操作:
已安装的包:
I、查询某个包是否安装
rpm -q package_name
rpm -q httpd
II、查询所有已经安装的包
rpm -qa
后面可以跟grep的正则表达式
rpm -qa | grep ‘^http‘
III、查询已安装的包描述信息
rpm -qi package_name
rpm -qi php #查看php这个包的详细信息
IV、查询某包生成了哪些文件
rpm -ql package_name
rpm -qi mysql #查看mysql这个包生成了哪些文件
V、查询某包安装生成哪些配置文件
rpm -ql package_name
rpm -qi httpd #查看httpd包安装后生成了哪些配置文件
VI、查询程序包的相关脚本
rpm -q --scripts package_name
rpm -q --scripts httpd
一般情况下,会有四个脚本,分别是,安装前、安装后、卸载前、卸载后
VII、查询某个文件是由哪个包安装生成的
rpm -qf file_path
rpm -qf /etc/httpd/conf/httpd.conf #我们查看httpd.conf这个文件是由哪个包生成的
对未安装的包执行查询:-p选项的使用
语法:rpm [option] package_path
I、查询这个包安装后的详细
rpm -qpi package_path
rpm -qpi mysql-5.1.71-1.el6.x86_64.rpm #查看mysql包安装后,会生成哪些信息
II、查询这个包安装后生成的文件
rpm -qpl package_path
rpm -qpl mysql-5.1.71-1.el6.x86_64.rpm
III、查询这个包安装后生成的配置文件
rpm -qpc package_path
rpm -qpc mysql-5.1.71-1.el6.x86_64.rpm
IV、查询这个包安装后生成的帮助文件
rpm -qpd package_path
rpm -qpd mysql-5.1.71-1.el6.x86_64.rpm
检验某个包安装后,其文件属性是否发生了改变
rpm -V package_name
rpm -V httpd #查看httpd的文件属性是否发生改变
4、RPM包的获取途径:
如果你在生成系统上装了一个RPM包,但是,是人家改过的,这样的程序,谁能放心,所以,RPM的安全可靠性就显得尤为重要了
a、到项目的官网去下载源代码或是安装包
b、从发行的光盘上去获取安装包
c、从国内知名的源上获取
比如:http://mirrors.sohu.com
d、很多第三方机构或个人都制作都公开发布许多rpm包
比如:http://rpm.pbone.net
e、可靠的途径:EPEL,fedora就有EPEL的源
5、对于包的本身,我们也要进行验证,即要获得发行商的公钥
在获得公钥的基础上,我们导入公钥
rpm --import PUBKEY
然后,在安装过程中,程序安装会自动提醒你的
RPM包是一个非常方便、高效的程序安装方式,我们应该多多加以学习,同时,一定要保证我们的包的来源,在企业生产系统上,如果是被人改过的包,那将可能会是个灾难