在CentOS系统中linux下的程序管理主要会用到rpm,yum,与源码编译这几种手段,这篇文章主要对于rpm工具的使用做简要介绍。


    软件安装到计算机上,能够正常运行并使用,是要进行一系列复杂的操作的,平常我们安装软件基本上不需要几个步骤,是因为软件厂商对软件进行了特殊的处理,能够让我们非常方便的使用,编译安装好的rpm包就是其中一种手段。由于rpm是通过预编译并打包成为rpm包的形式,再加以安装的一种方式,并且还能够进行数据库的记载,所以rpm有以下的优点:

    1.rpm内含已经编译好的程序与设置文件等数据,可以让用户免除重新编译的困扰

    2.rpm在被安装之前,会先检测系统的硬盘容量、操作系统版本等数据,以避免文件被错误安装

    3.rpm文件本身提供软件版本信息、属性依赖信息、软件用途信息、软件所含文件等信息,便于了解软件;

    4.rpm软件管理的方式使用数据库记录rpm文件的相关参数,便于升级、删除、查询、验证


  rpm软件包的格式:我们可以使用rpm 

     例:VNC-Viewer-5.2.3-Linux-x64.rpm

     例如上面的一个rpm包的名称:

          VNC-Viewer:表示文件名

          5.2.3:表示版本号,主版本号.次版本号.微小改动的次数

          Linux-x64:适用的操作平台类型,Linux-x64代表适合64位Linux系统使用,此外还有                            i386,i586,i686,x86-64,noarch等各种表示


rpm命令的用法:rpm  [OPTIONS]  [PACKAGE_FILE]

安装:-i, --install

升级:-U, --update, -F, --freshen

卸载:-e, --erase

查询:-q, --query

校验:-V, --verify

数据库维护:--builddb, --initdb


    1.安装:rpm -i  [安装选项] [软件包名称]:安装软件

          安装选项:-v,显示更详细的安装信息

                    -h,以安装信息栏显示安装进度

                    --test:测试安装,检查并报告依赖关系及冲突消息等;

             还有后面这几个,但是平常不建议使用:


--nodeps:忽略依赖关系;不建议;

--replacepkgs:重新安装 

--nosignature:不检查包签名信息,不检查来源合法性;

--nodigest:不检查包完整性信息;

wKiom1bucBXRKAc8AAAZYTI5qpA931.png


    软件安装过程中的依赖关系:在我们使用rpm安装软件的过程中,很可能会出现,我们安装一个软件,却因为软件之间的依赖关系,需要安装多个文件,否则没办法安装的问题。这是因为只有这些依赖关系都存在的情况下,这个软件才能够正常使用,如果忽略了依赖关系,即使软件安装好,可能也无法正常使用。那么如何解决这个问题呢,留待下一篇文章。。。

wKioL1bucMqT1Mq-AAAfhdYOUUk218.png

    2.升级:rpm [-U|--upgrade] [升级选项] PACKAGE_FILE ...

    rpm [-F|--freshen] [升级选项] PACKAGE_FILE ...

-U:升级或安装;rpm  -Uvh PACKAGE_FILE ...

-F:升级,rpm  -Fvh PACKAGE_FILE ...

升级选项:--oldpackage:降级;

          --force:强制升级;


    3.卸载:rpm {-e|--erase}  [卸载选项] PACKAGE_NAME ...

   卸载选项:--allmatches:卸载所有匹配指定名称的程序包的各版本;

     --nodeps:忽略依赖关系

     --test:测试卸载,dry run模式

wKioL1bucM2QgyLGAAAqhkST_Fc287.png

    卸载就是解除安装,注意:解安装的过程一定要由最上层往下解除,而且删除的过程中,一些具有依赖关系的软件也是没办法强制卸载的。


    4.查询:

rpm {-q|--query} [select-options] [query-options]

-q:查询指定的程序包是否已经安装,及其版本;

-qa, --all:查询所有已经安装过的程序包;

-qf  FILE:查询指定的文件由哪个程序包安装生成;

-qp, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

[query-options]

--changelog:查询rpm包的changlog;

-l, --list:程序安装生成的所有文件列表;

-i, --info:程序包相关的信息,版本号、大小、所属的包组,等;

-c, --configfiles:查询指定的程序包提供的配置文件;

-d, --docfiles:查询指定的程序包提供的文档;

--provides:列出指定的程序包提供的所有的CAPABILITY;

-R, --requires:查询指定的程序包的依赖关系;

--scripts:查看程序包自带的脚本片断;

            注意:这些选项可以组合使用,例如:-qi  PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE,-qpi  PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ...

wKioL1bucojDGO3XAABJ0R6wqWc199.png

    5.校验:验证(Verify)功能主要在于提供系统管理员一个有用的管理机制。其作用的方式是使用/var/lib/rpm下面的数据库内容来比较目前Linux系统下面的所有文件

            

            rpm -Va:列出目前系统上所有可能被改动过的文件

            rpm -V [已安装软件名称]:若该软件所含的文件被改动过,才会显示出来

            rpm -Vp [某个rpm文件名称]:列出软件内可能被改动的文件

            rpm -Vf [在系统上的某个文件]

            

     对于列出的信息,你会发现文件名之前有个c,然后就是一堆奇怪的文字。c表示configuration,即设置文件的意思。至于最前面的8个信息:

        S file Size differs:文件的容量大小是否被改变

M Mode differs (includes permissions and file type):文件的类型或属性是否被改变

5 digest (formerly MD5 sum) differs:MD5这一种指纹码的内容已经不同

D Device major/minor number mismatch:设备的主/次代码已经改变

L readLink(2) path mismatch:Link路径已经被改变

U User ownership differs:文件的所有者已经被改变

G Group ownership differs:文件的所属用户组已经被改变

T mTime differs:文件的创建时间已经被改变

wKiom1bucDriFUd2AAAeLq0YlcM862.png

    经过验证,就可以知道哪个文件被改动过。所以当一个设置文件的所有信息都被改过之后,那么他的显示就会是:

SM5DLUGT c filename


    数据库重建:由于rpm文件经常会安装/删除/卸载/升级等,某些操作可能会导致rpm数据库/var/lib/rpm内的文件损坏。那么就可以使用--rebuilddb这个参数来重建数据库。

            rpm --rebuilddb:重建数据库


    包来源合法性验正和完整性验正:

来源合法性验正:

完整性验正:

获取并导入信任的包制作者的密钥:

对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

验证:(1) 安装此组织签名的程序时,会自动执行验正;

(2) 手动验正:rpm -K PACKAGE_FILE