首先我们需要了解什么是程序包管理:

程序包管理:

    程序包管理:
    功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包        的安装、卸载、查询、升级和校验等管理操作;
        1、程序的组成组成清单 (每个包独有)
            文件清单
            安装或卸载时运行的脚本
        2、数据库(公共)
            程序包名称及版本
            依赖关系;
            功能说明;
            安装生成的各文件的文件路径及校验码信息;

程序包管理方式分为两种(这里我们只讲解RPM):
        使用包管理器:rpm
        使用前端工具:yum, dnf


RPM是一款好用的软件包安装和管理程序。使用RPM,用户可以自行安装和管理 Linux上的应用程序和系统工具。RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件;在用RPM删除程 序时,它又会聪明地询问用户是否要删除有关的程序。如果使用RPM来升级软件,RPM会保留原先的配置文件,这样用户就不用重新配置新的软件了。RPM保留一个数据库这个数据库中包含了所有的软件包的资料,通过这个数据库, 用户可以进行软件包的查询。


rpm包命名方式:
    name-VERSION-release.arch.rpm
        VERSION: major.minor.release
        release.arch
        release:release.OS

例子:zlib-1.2.7-13.el7.i686.rpm, yum-3.4.3-125.el7.centos.noarch.rpm---noarch指与平台无关

rpm包有主包和支包,主包提供软件的主要功能,而支包提供扩展功能

        testapp: 拆包

        testapp-VERSION-ARCH.rpm: 主包
            testapp-devel-VERSION-ARCH.rpm:支包
            testapp-testing-VERSION-ARHC.rpm

下图中第一个yum包就是主包,下面提供了其外围的子包以及子包的子包

wKioL1Xqe8iCebwOAADqIbn0y5Q018.jpg

打印应用程序依赖的各个共享库使用ldd命令

第一个列出的是访问其他库文件的接口

wKioL1Xqff-SO5xkAAFpojEaGKc151.jpg

管理及查看本机装载的库文件:
        ldconfig
            /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系;
            配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
            缓存文件:/etc/ld.so.cache

wKiom1Xqe9qQwmz8AAGhKZz2N-Y540.jpg

1.安装:
    rpm {-i|--install} [install-options] PACKAGE_FILE ...
        -v: verbose显示详细安装过程
        -vv:  显示更为详细的安装过程
        -h: 以#显示程序包管理执行进度;每个#表示2%的进度
            [install-options]
            --test: 测试安装,但不真正执行安装过程;dry run模式;
            --nodeps:忽略依赖关系;
            --replacepkgs: 重新安装;
            --nosignature: 不检查来源合法性;
            --nodigest:不检查包完整性;
            --noscipts:不执行程序包脚本片断;
                %pre: 安装前脚本; --nopre
                %post: 安装后脚本; --nopost
                %preun: 卸载前脚本; --nopreun
                %postun: 卸载后脚本;  --nopostun

使用rpm安装软件:

wKiom1Xqgyjxi47zAACrabAj1W0013.jpg

重装软件包:

wKioL1XqhU-h5V1CAACy616pp54058.jpg

不检测来源合法性和包完整性安装:发现没有了像上面安装时出现的警告信息

wKiom1XqgymQn2P8AACRtg88hk0620.jpg

2.升级

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

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
    freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;
        rpm -Uvh PACKAGE_FILE ...
        rpm -Fvh PACKAGE_FILE ...
        --oldpackage:降级;
        --force: 强行升级;

3.查询:      

rpm {-q|--query} [select-options] [query-options]
    [select-options]
        -a: 所有包
        -f: 查看指定的文件由哪个程序包安装生成
        -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
        --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
        --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
    [query-options]
        --changelog:查询rpm包的changlog
        -c: 查询程序的配置文件
        -d: 查询程序的文档
        -i: information
        -l: 查看指定的程序包安装后生成的所有文件;
        --scripts:程序包自带的脚本片断
        -R: 查询指定的程序包所依赖的CAPABILITY;
        --provides: 列出指定程序包所提供的CAPABILITY;

查询所有已经安装的以z开头的程序包

wKiom1XqiVfy-XfCAABS8NAIG7w295.jpg

查看指定的文件由哪个程序包安装生成

wKioL1Xqi32Q-DuPAAAxnldardI228.jpg

查询rpm包的changlog

wKiom1XqiVfR-uvNAAD0DvaEhEs366.jpg

查询指定的CAPABILITY被哪个包所依赖;

wKioL1XqjEnA6nA2AADBTUqw0SU502.jpg

查询包的详细信息

wKioL1XqjYqQp5yJAADYOijw6Ms183.jpg

查询包的配置文件

wKioL1XqjYqgGQyyAABEJXyqFL0492.jpg

查询包的帮助文档

wKiom1Xqi2Sx8pSvAADmG_s3FGw147.jpg

查询包的脚本片段

wKiom1Xqi2SyAPHzAAFT50ZWnBw407.jpg

查询程序包安装时生成的文件

wKioL1XqjzuDGVIUAABCS1-L0ww474.jpg

查询指定的程序包所依赖的CAPABILITY

wKiom1XqjRXASrUcAABdCfkgJ0k551.jpg


查询未安装的程序包需要使用-p选项组合以上说到的选项

wKiom1XqjZDB7uS0AADAO6mCXd0450.jpg


rpm -qpR 查询某rpm包的依赖


4.卸载:
        rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...

wKiom1Xqjn_iNXCiAAA_J0SZQMI821.jpg


5.校验:检测安装后是否修改过程序的某文件 使用-V选项

wKioL1XqkWPBwLTgAABPNq4MzXs681.jpg

        对以上输出信息解释:

           S file Size differs
           M Mode differs (includes permissions and file type)
           5 digest (formerly 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
           P caPabilities differ

6.包的合法性,来源性确认

        导入所需要公钥:
            rpm --import /PATH/FROM/GPG-PUBKEY-FILE
            CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7

wKioL1Xqk_-gYsdkAAB8SxXc-28110.jpg

7. 数据库重建:rpm数据库文件发生损坏时
    rpm {--initdb|--rebuilddb}
        initdb: 初始化
        如果事先不存在数据库,则新建之;否则,不执行任何操作;
        rebuilddb:重建
        无论当前存在与否,直接重新创建数据库;