一:

        1、API 和ABI 

           API : Application Programming Interface

                 应用程序编程接口

                 程序源代码-->预处理--> 编译-->汇编--> 链接

           ABI: Application Binary Interface    

                  应用程序二进制接口

                  windows 与linux不兼容

                  库级别的虚拟化

                     Linux :Wine

                     Windows: Cywin

        2、二进制应用程序的组成部分:

            二进制文件、库文件、配置文件、帮助文件

            程序包管理器:

                 Debian:deb-->apt

                 Redhat:rpm-->rpm

                 Gentoo:emerge Portage

                 Archlinux:pacman

                 Suse: zypper

                 Fedora 22+:dnf

        3、查看二进制程序所依赖的库文件:

            ldd  /PATH/TO/BINARY_FILE

        4、管理及查看本机装载的库文件

            ldconfig

              /sbin/ldconfig -p    //显示本机已缓存的可用库文件及文件映射关系

              配置文件: /etc/ld.so.conf

                     /etc/ld.so.conf.d/*.conf

              缓存文件:/etc/ld.so.cache

        5、程序包管理;

           功能:将编辑好的应用程序的各组成文件打包成一个或者几个程序包文件;

               从而方便快速完成安装、卸载、查询、升级等

             (1)程序的组成清单  -----每个包独有

                  文件清单

                  安装和卸载时运行的脚本

             (2)、数据库  ----公共----- 

                  程序包名称和版本

                  依赖关系

                  功能说明

                  安装生成的各文件的文件路径及校验信息

        6、管理程序包的方式:

              使用包管理器:rpm

              使用前端工具:yum、dnf

      7、获取程序包的途径:

              (1)系统发行版的光盘或者官方的服务器:

                  Centos镜像:

                     http://mirrors.aliyum.com

                     http://mirrors.sohu.com

                     http://mirrors.163.com

                

              (2)项目官方站点

              (3)第三方组织:

                   Fedora-EPEL

                   搜索引擎:

                   http://pkgs.org 

                   http://rpmfind.net

                   http://rpm.pbone.net  

              (4)自己制作

           注意:检查合法性----->来源合法性、程序包完整性

            

二:rpm程序包管理命令

----实现安装、卸载、升级、查询、校验、数据库维护

    rpm {-i | --install} [install-options] PACKAGE_FILE...

           -v : verbose

           -h : 以#显示程序包管理执行进度;每个#表示2%的进度

     rpm -ivh PACKAGE_FILE ... 

           [ install-options ]

               --test : 测试安装,但不真正的执行安装过程。

               --nodeps: 忽略依赖关系。

               --replacepkgs: 重新安装

               --nodigest : 不检查包来源合法性

               --nosignature :不检查包完整性

               --noscipts :

                 %pre:安装前脚本

                 %post:安装后脚本

                 %prenu:卸载前脚本

                 %postun : 卸载后脚本

升级:

      rpm { -U|--upgrade}[install-option] PACKAGE_FILE

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

        rpm -Uvh PACKAGE_FILE...

            rpm - Fvh PACKAGE_FILE...

                 --oldpackage : 降级

                 --force : 强行升级

                   

      注意:

        (1)不要对内核做升级操作,linux支持多内核版本共存。

        (2)如果原程序包的配置文件安装后曾被修改,升级时,新配置不会覆盖而是重命名保留(.rpmnew)

        

 查询:

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

         [select-options]

              -a : 所有包

              -f : 查询命令由那个程序包安装生成。

              -P /PATH/PACKAGE_FILE: 针对尚未安装的程序包安装文件做查询操作

              --whatprovides CAPABILITY :查询指定的CAPABILITY是由那个包提供

              --whatrequires CAPABILITY : 查询指定的CAPABILITY是由那个包所依赖

          [query-options]

             --changelog : 查询rpm包的changelog

             -c : 查询程序的配置文件

             -d: 文档

             -i :包的描述信息

             -l : 查看程序包安装后生成的所有文件。

             --scripts :程序包自带的脚本片段。

             -R : 查询程序包所依赖的CAPABILITY

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

      校验:

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

        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

                

包来源合法性验证及完整性验证

    完整性验证:sha256

    来源合法性验证:RSA