1.概述

对于一个软件安装到LINUX后,一般而言,需要注意安装后的一些位置,比如可执行二进制程序,配置文件,帮助文件,库文件都分别存放在哪里,因为这些是应用程序运行所必须的。以前学习过LINUX的FHS结构,知道/etc用于存放配置文件;/lib,/usr/lib,/usr/local/lib用于存放库文件;/usr/share/,/usr/local/share/用于存放帮助文档;/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin用于存放可执行二进制程序。RPM,即redhat package manage,软件包管理器。RPM可以用于制作软件,安装软件,卸载软件,升级软件,校验软件等功能。


2. RPM命名规范

举例如下:

bind-9.7.1-el5-i586.rpm


bind即包名,包分为主包和子包,比如bind(主包) , bind-lib(子包)

9.7.1即版本号

el5即发行版号,明确说明用于REDHAT企业版5   相当于是系统平台

i586即平台架构,i586/i686都是32位平台  x64/x86_64是64位平台   相当于是物理平台


RPM有两种格式:

二进制格式:已经编译成二进制了,直接安装即可,方便简单

源码格式:需要进行编译,有点麻烦。但是可以最大化利用主机的硬件性能



3. 安装RPM

rpm -i  PATH_RPM

    -h  可以显示安装进度,一个#表示2%进度

    -v  显示详细信息

    -vv

    -vvv

    --nodeps  忽略依赖关系,强制安装【可能导致,软件安装后无法使用】

    --replacepkgs 重新安装 覆盖以前版本    

    --force 强制安装【可能覆盖,可能降级】

    --test 并不安装,仅仅测试下


对于安装RPM,其实我们常用的就是:

rpm -ivh PATH_RPM



4. 查询RPM

我们知道,对于WINDOWS,如果安装了应用程序的话,有什么注册表啦,什么菜单,什么控制面板等等可以查找到安装的应用程序。但是LINUX并没有这些概念,那么我们如何查询安装了哪些RPM,安装在哪里?


rpm -q packagename  查询是否安装指定名称的packagename包

rpm -qa   查询所有已经安装的RPM包  后面可以跟上进行通配

rpm -qi   packagename 查询更加详细的信息

rpm -ql   packagename  查询这个RPM到底安装在哪里,定位下安装后的文件列表

rpm -qf   FILEPATH   查询指定路径的文件是由哪个RPM安装的

rpm -qc   packagename  查询指定包名称的配置文件在哪里configfiles

rpm -qd   packagename   文档说明在哪里  docfiles 

rpm -q --scripts packagename 查看安装前(pre) ,安装后(post) ,卸载前,卸载后  所要执行的脚本。



如果一个RPM包并未安装的话,那么我想

查询更加详细的信息  rpm -qpi PATH_RPM

查询这个RPM到底安装在哪里,定位下安装后的文件列表 rpm -qpl PATH_RPM

查询指定包名称的配置文件在哪里configfiles  rpm -qpc PATH_RPM

文档说明在哪里  docfiles   rpm -qpd PATH_RPM

查看安装前(pre) ,安装后(post) ,卸载前,卸载后  所要执行的脚本。 rpm -qp --scripts PATH_RPM

和上面的一样,只不过加入-p选项即可,并且后跟RPM包路径即可。 



注意了,有时候,我们需要使用RPM的包名,有时候我们需要提供RPM的路径。如果RPM已经安装完毕,那么实际上在RPM的数据库(/var/rpm/lib)中已经进行了记录,所以查询直接使用RPM的包名即可。如果未安装,显然需要使用RPM的路径。


[root@localhost rpm]# rpm -qa a*
attr-2.4.32-1.1
avahi-0.6.16-1.el5
automake14-1.4p6-13
autoconf-2.59-12
automake-1.9.6-2.1
[root@localhost rpm]# rpm -qi apr
Name        : apr                          Relocations: (not relocatable)
Version     : 1.2.7                             Vendor: Red Hat, Inc.
Release     : 11                            Build Date: Wed 17 Jan 2007 08:36:50 AM PST
Install Date: Fri 27 Jun 2014 09:40:03 AM PDT      Build Host: ls20-bc2-14.build.redhat.com
Group       : System Environment/Libraries   Source RPM: apr-1.2.7-11.src.rpm
Size        : 267135                           License: Apache Software License
Signature   : DSA/SHA1, Wed 17 Jan 2007 12:29:27 PM PST, Key ID 5326810137017186
Packager    : Red Hat, Inc. 
URL         : http://apr.apache.org/
Summary     : Apache Portable Runtime library
Description :
The mission of the Apache Portable Runtime (APR) is to provide a
free library of C data structures and routines, forming a system
portability layer to as many operating systems as possible,
including Unices, MS Win32, BeOS and OS/2.
[root@localhost rpm]# rpm -qf  /usr/lib/libapr-1.so.0
apr-1.2.7-11
[root@localhost rpm]# 
[root@localhost rpm]# rpm -qc apr
[root@localhost rpm]# man rpm
[root@localhost rpm]# rpm -qd apr
/usr/share/doc/apr-1.2.7/CHANGES
/usr/share/doc/apr-1.2.7/LICENSE
/usr/share/doc/apr-1.2.7/NOTICE



5.升级RPM

rpm -Uvh PATH_NEW_PACKAGE  如果系统上本身装有老版本的,升级,否则安装。

rpm -Fvh PATH_NEW_PACKAGE  如果系统上本身装有老版本的,升级,否则退出。

rpm -Uvh --oldpackage  就是要降级安装【比如我们软件升级后,发现不好使了】

指定新版本的RPM包位置即可。


6.卸载RPM

卸载:

rpm -e PACKAGENAME

注意,如果这个软件包是其他软件包的依赖的话,卸载时会阻止你,当然你可以进行强制卸载--nodeps。


7.校验RPM

由于我们所下载的RPM是来自互联网的,这个文件有没有被改过呢?怎么判断呢?必须有一种机制来进行校验。

rpm -V packagename

也就是在我们完成安装RPM后,即可使用校验机制。

 S file Size differs

 M Mode differs (includes permissions and file type)

 5 MD5 sum differs

 D Device major/minor number mismatch

 L readLink(2) path mismatch

 U User ownership differs

 G Group ownership differs

 T mTime differs

用上述8个位来进行表示变化。



其他说明:

检查来源合法性,及软件完整性:

首先,这个软件包的作者或者公司,会公布一个密钥,就是一个文件

我们应导入它:

rpm --import  xxxfile

然后进行校验

rpm -k package_path



8.关于RPM数据库

rpm --rebuilddb  一定会重新建立

rpm --initdb  初始化数据库,没有则建立。有,不做处理。