在管理CentOS服务器的过程中难免需要安装或者删除一些软件。而在这个过程中就涉及到程序包的管理。在很久以前的CentOS上,包管理真的是一个技术活,在这个过程中不仅需要管理者去了解一些常用程序软件的安装,还需要管理者很熟练地掌握这些技术,以便出现问题可以及时的解决。

  在包的安装过程中不可避免的会出现一些包的依赖问题。简而言之,就是你需要安装A软件,而A软件又依赖了B包的一些基础功能,而B呢又有一些功能依赖于C等等这样的问题很常见。作为系统管理员,在早期的程序管理过程中解决包的依赖问题是一件很麻烦的事情,你不仅需要了解一款软件,更重要的是需要知道它有哪些依赖,从而快速准确的安装一个程序。这些东西想想就很可怕。

  还好,REH系列发行版在使用中也发现了这一问题,就在自己的系统中集成了rpm包管理程序。这是一款后台的包管理程序,通过rpm包管理程序可以解决程序包的一些依赖问题。但是,这个rpm包管理器也有自己的一些缺陷,其中最为人诟病的一点就是,包太少,还是需要从第三方站点下载,然后手动编译安装。由此,又一个程序包管理器诞生了。yum,这个是迄今为止CentOS下比较好用的程序包管理器了。yum是一个C/S架构的软件。通常服务端是一个镜像服务器,而客户端只要正确配置,能够正常使用即可。使用简单,最重要的是它有丰富的软件仓库,而且还支持在本地假设软件仓库。所以今天就来说一说CentOS下这两款程序包管理器。

  首先来看看man文档中rpm的使用方法

RPM(8)                      System Manager's Manual                     RPM(8)

NAMEISCELLANEOUS:
       rpm - RPM Package Manager}
 Manual page rpm(8) line 1 (press h for help or q to quit)
SYNOPSIS
   QUERYING AND VERIFYING PACKAGES:
       rpm {-q|--query} [select-options] [query-options]

       rpm {-V|--verify} [select-options] [verify-options]

   INSTALLING, UPGRADING, AND REMOVING PACKAGES:
       rpm {-i|--install} [install-options] PACKAGE_FILE ...

       rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

       rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

       rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...

   MISCELLANEOUS:
       rpm {--querytags|--showrc}

       rpm {--setperms|--setugids} PACKAGE_NAME ...

   select-options
        [PACKAGE_NAME] [-a,--all] [-f,--file FILE]
        [-g,--group GROUP] {-p,--package PACKAGE_FILE]
        [--hdrid SHA1] [--pkgid MD5] [--tid TID]
        [--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME]
        [--whatprovides CAPABILITY] [--whatrequires CAPABILITY]

   query-options
        [--changelog] [-c,--configfiles] [--conflicts]
        [-d,--docfiles] [--dump] [--filesbypkg] [-i,--info]
        [--last] [-l,--list] [--obsoletes] [--provides]
        [--qf,--queryformat QUERYFMT] [-R,--requires]
        [--scripts] [-s,--state] [--triggers,--triggerscripts]
verify-options
        [--nodeps] [--nofiles] [--noscripts]
        [--nodigest] [--nosignature]
        [--nolinkto] [--nofiledigest] [--nosize] [--nouser]
        [--nogroup] [--nomtime] [--nomode] [--nordev]
        [--nocaps] [--noconfig]

   install-options
        [--allfiles] [--badreloc] [--excludepath OLDPATH]
        [--excludedocs] [--force] [-h,--hash]
        [--ignoresize] [--ignorearch] [--ignoreos]
        [--includedocs] [--justdb] [--nocollections]
        [--nodeps] [--nodigest] [--nosignature] [--noplugins]
        [--noorder] [--noscripts] [--notriggers]
        [--oldpackage] [--percent] [--prefix NEWPATH]
        [--relocate OLDPATH=NEWPATH]
        [--replacefiles] [--replacepkgs]
        [--test]

看到这些也是很头疼,然而在日常的系统管理过程中用到的也不是很多。

先来看看rpm的安装

rpm -ivh pkg_name 
    			install options:
				--test:测试安装,但不真正执行安装过程
				--nodeps:忽略依赖关系 <处理循环依赖>
				--replacepkgs:替换原有程序包
				--ignoreos: 忽略OS
				--ignoresignature:不检查来源合法性
				--nodigest:不检查包完整性
                --noscripts:不执行安装过程中的所有脚本
                    在安装软件包的时候会有大概四类脚本需要安装
                       --nopre 不执行安装前的脚本
                       --nopost 不执行安装后的脚本
                       --nopreun 不执行卸载前的脚本
                       --nopostun 不执行卸载后的脚本
                --oldpackage pkg_name 对于一个软件包进行降级处理

升级相关的操作

rpm -U[Upgrade]vh pkg_name 有旧版程序则升级没有则安装
rpm -F[freshen]vh pkg_name 有旧版程序则升级没有不做任何操作
这里有一个不经常用的选项--force 强制升级 <一般不建议使用>

查询相关的操作

rpm [-q|query] [select optins] [qurey options]
这是rpm在查询时所用的一般的语法
select options:
    -a 查询所有已经安装的包
        rpm -qa [pkg_name] 如果没有任何参数则显示所有已经安装的包
    -f 查询指定的文件由那个包生成
        rpm -qf file_name 
    --whatrequires 查询指定的capability被哪个包依赖
        rpm -q --whatrequires bash 即查看bash被那些包所依赖
    --whatprovides 查询指定的capability由哪个包提供
        rpm -q --whatprovides bash 可以查看哪个包提供了bash功能
query options:
    --changelog 查询rpm包制作的changelog<这里指的是制作rpm包的changelog而不是软件升级的log>
        rpm -q --changelog pkg_name 可以查看这个包的changelog
    -c|--configfile 查询安装后的配置文件
        rpm -q --configfile pkg_name 查看此包的配置文件由哪些
    --conflicts 查询安装包的冲入选项
        rpm -q --conflicts pkg_name 查看此包的冲突项
    -i|--info 查看这个包的所有信息 
        rpm -qi pkg_name 查看这个包的摘要信息 <常用项>
    -l 查看安装包后所有生成的文件
        rpm -ql pkg_name 
    --scripts 查看指定包的所有脚本
        rpm -q --scripts pkg_name

 rpm包认证相关的操作

rpm -V|verfiey [select options] [verfiey options] pkg_name
    rpm -V bash 如果认证成功则没有任何显示
可以从本地导入rpm的GPG-KEY文件[安装需要校验的公钥文件]
rpm --import local-GPG-KEY

rpm卸载软件

 

rpm -e|erase pkg_name

rpm数据库维护操作

rpm initdb 初始化数据库,如果数据库不存在则重建,如果存在则不做任何操作
rpm rebuilddb 重建数据库,无论存在与否直接重建