rpm程序包管理器

linux程序包管理器:

协作用户管理应用程序:安装、升级、查询、校验、卸载等

软件程序包生成过程:

    源代码——》目标二进制格式–》组织成为一个或有限几个包文件

    源代码:程序员写好的纯文本文档格式的代码

    目标二进制:通过编译器编辑成为的二进制代码

程序包管理器:(每一个发行版管理器各有不同)

     debian:程序包以“.deb”为后缀

         dpt/dpkg:管理工具

     redhat:程序包以“ .rpm”为后缀

         rpm:管理工具

     S.u.SE:程序包以“.rpm”为后缀

         rpm:管理工具

源代码命令格式:

    name-VERSION-.tar.gz

        VERSION:major(主)、minor(次)、release(发行号)

        major:重大版本发生改变才会更改此版本号

        minor:某一功能增加或减少会更改

        release:修复bug等一些小的操作


rpm包命令格式:

    name-Version-release.arch.rpm

        VERSION:major(主)、minor(次)、release(发行号)

        major:重大版本发生改变才会更改此版本号

        minor:某一功能增加或减少会更改

        release:修复bug等一些小的操作

        release.arch:rpm包的发行号(包括release.arch)

        arch:表示程序包适合应用在什么平台架构上

         #redis-3.0.2-2.el7.i386.rpm

         redis:名字

         3.0.2:版本号分别一一对应

         2:第二次制作

         el7:rhel7

         i386:适用在架构兼容i386的cpu上

包的依赖关系

        在linux系统中,所有应用程序功能都非常单一,简单(linux哲学思想之一,组合小程序完成复杂任务,除hadoop程序外)所以,一个程序包的运行可能会依赖于气筒程序包功能的存在性,所以,程序包和程序包之间存在依赖关系。

        比如安装A程序包,而A程序包依赖于B程序包的功能,而B程序包又依赖于D程序包,这就叫做依赖关系

自动解决包依赖关系的前端工具

         yum:rpm包管理的前端工具(rhel系列的都用此为前端工具)

         apt-get:deb包管理的前端工具(debain,Ubuntu系列)

         zyyper:suse的rpm包管理前端工具

         dnf:fedora 22以上的系统上的rpm管理前端工具

        

rpm包程序管理器:

        功能:将编译好的应用程序的个组成文件打包成为一个或几个程序包文件,从而更方便的实现程序包的安装,升级,卸载,查询等管理操作

    1.程序包的组成清单(每个包都是独立的各自存在的清单)

        有安装所需的文件清单、安装及卸载时的脚本等。

    2.数据库(公共的存放系统上所有程序包的信息数据库)

        用于存储程序包的名称和版本、依赖关系、功能说明、安装生成的个文件的文件路径及校验码信息

Centos系统上rpm命令管理程序包

        功能:安装、升级、查询、校验、数据库维护等

rpm命令:

rpm [options][Package_file]

     安装:-i  –install

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

   卸载:-e    –erase

   查询:-q   –query

   校验:-V  –verify

   数据库维护:–rebulidb、–initdb

    通用选项,用于所有功能:

     -v:verbose 详细信息

     -vv:更详细的信息

1.安装:

rpm  {-i|–install} [install-options] Package_file…

在安装时必须使用的选项(i和–install)其中一个,在结合其他安装选项及包文件地址进行安装

    [install – options]安装选线:

    -h:进度条
    --test:测试安装,用于检查安装时所有的依赖关系及错误报告等信息
    --nodeps:忽略依赖关系进行安装,(虽能安装成功,但不一定能运行成功)
    --replacepkgs:覆盖安装,重新安装并覆盖原有文件
    --force:强制安装

注:在安装程序包时常用的组合选项:

  #rpm -ivh  PACKage_file

2.升级(会替换原有的程序包)

     rpm  {-U|–install} [install-options] Package_file…

     rpm  {-F|–install} [install-options] Package_file…

     -U:表示安装和升级,当时用此升级程序时,如果原本程序不存在,则会安装程序包

     -F:表示只升级程序包,如果原程序不存在,则不会进行升级或安装操作)

     常用组合选项:

     rpm -Uvh  Packages_file (会替换原有的文件包)

     rpm -Fvh  Packages_file   

    

       可用于安装选项(如:–test、nodeps、noplacepkgs、–force等)

     –oldpackage:降级安装

     –force:忽略高版本强行降级到旧版本

注意:   

(1)不要对内核做升级操作;linux支持多内核版本并存,因此,直接安装新版本内核

(2)如果某源程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.remnew)  

 

3.卸载: 

注意:卸载时、查询时都是package name,安装和升级都是package file

        rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

    –allmatches :卸载所有匹配指定名称的程序包的各版本

    –nodeps :忽略依赖关系

    –test:测试卸载(会显示依赖关系等信息,但不真正卸载)


4.查询:(有两类选项)***非常重要***

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

第一类:select-options:选择选项

    查询时直接给定包名

        #rpm -q package_name  //查询指定的程序包是否安装及其版本

    -a:查询所有已安装上的所有包

        #rpm -qa pachage_name   //可使用正则表达式进行匹配

    -f:查询某文件是由哪个程序包安装生成:

        #rpm -qf /path/to/somefile

    -p:查询的未安装的程序包执行查询操作,(配合选项进行查看):

        # rpm -qpi package_file    //查询指定的程序包的详细信息

    –whatprovides CAPABILITY(能力):查询指定的能力由哪个程序包提供:

        #rpm -q whatprovides bash //查询bash能力是由谁(那个程序包)提供的

        #rpm -q –whatprovides “config(bash)”//查询bash

    –whatrequires CAPAbILITY (能力):查询指定的能力被哪个包所依赖

        #rpm -q –whatrequires bash //查询指定的bash能力被那些个包所依赖

第二类query-options: 

    –changelog :查询rpm包的changelog(包改变日志);(rpm包的,而非源码包的)

        #rpm -q –changelog PACKAGE name 

    -l  :查询某包安装生成的文件列表

        #rpm -ql P—name

    -i : 查询程序包的相关信息(如:版本号,大小、所属的包组等)

        #rpm -qi P-name

    -c (configfles):查询指定的程序包提供的配置文件;

        #rpm -qc bash(P-name)

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

        #rpm -qd bash (P-name)

    –provides :列出指定的程序包提供的所有能力(CAPBILITY)

        #rpm -q –provides bash(P-name)//查看bash提供能力

        #rpm -q –whatprovides bash

    -R:查询指定程序包所依赖的各种资源

        #rpm -q -R bash

    –scripts:查看程序包自带的脚本片段

        #rpm -q –scripts bash

用法:

   – qi PACkAGE,-qf FILE,-qc PACkAGE ,-ql PAckage,-qd PACKAGE

   -qpi PACKAGE_file, -qpl PACKAGE_file ,-qpc PACHAGE_file


5.校验:“V”

    查看程序包安装之后有没有被更改过

      可指定只检查指定

      # rpm -V zsh

      #rpm -V –nofiles bash

    用rpm -V P-name  查看出来的结果显示

   [root@CentOs6 mnt]# rpm -V tree
   [root@CentOs6 mnt]# rpm -Va
    S.5....T.  c /etc/bashrc
    S.5....T.  c /etc/profile   
     //如果对应的有显示下面的选项,则改包发生了对应的改变,根据数据来进行查找(数据库地址/var/lib/rpm)

       S:文件大小发生改变 (file Size differs)

       M:文件权限和类型发生改变(Mode differs (includes permissions and file type)

       5:文件内容发生改变MD5这一种指纹的内容已经不同(digest (formerly MD5 sum) differs)   

       D:设备的主次号发生改变( Device major/minor number mismatch)

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

       U:文件的属主已被改变(User ownership differs)

       G:文件的属组已被改变 (Group ownership differs)

       T:文件的时间戳(创建时间)发生改变 (mTime differs)

       P:文件所提供的能力发生改变 ( caPabilities differ)

包合法性验证和完整性验证:

        在软件安装之前我们最好是要对即将安装的软件进行合法验证,这样可以检查出软件是否来源合法,内容合法等,在一定程度上避免不必要的安全因素导致的不安全事件

来源和法性:

        由我们信任的制作者提供的依赖于制作者的数字签名,签名是作者使用自己的私钥加密程序包的特性码进行的。

内容合法性:

        包未被二次修改;完整性校验成功,依赖于制作者提供的程序特征码

验证方式:

        安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的特征码相比较

验证其光盘中程序包的来源及完整性:

    先导入合法的KEY文件:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)

列如:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-6 //获取程序包的秘钥

验证:rpm -K Package_file 用光盘中的key与程序包奥的秘钥相对比

      –nosignature:不检查来源合法性

     –nodigest:不检查完整性

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

对于Centos发行版来说:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)

验证:

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

(2)手动验证:rpm -K Package-FILE

来源合法性验证:

数字签名:用自己的私钥去加密对应数据的特征码,这样来源合法性和数据完整性得到验证

制作者:

     1.使用单向加密法提取包的特征码

     2.用自己的私钥去加密特征码,然后附加在文件后面

使用者:

     拿到包之后,要检验包的来源合法性,拿到制作者的公钥。然后解密特征码,如果能解密则通过。这样包的来源合法性和数据完整性得到验证

6.数据库重建

rpm管理器数据路径:/var/lib/rpm

查询操作:通过此处的数据库进行,

数据库操作查询:

   Centos6:man rpm

   Centos7:man rpmdb

rpm {–initdb} –rebuliddb

       –initdb:初始化数据库,当前完全没有数据库存在时,可自动创建一个新的,如果有则不创建。

       –rebuliddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新构建,(无论当前数据库存在与否,都会直接重建此库;构建的数据库存放在/var/lib/rpm中)

原创文章,作者:Lii,如若转载,请注明出处:http://www.178linux.com/37553

(0)
LiiLii
上一篇 2016-08-19
下一篇 2016-08-19

相关推荐

  • Linux文本处理三剑客之一sed

    这周我们学习了文本处理工具三剑客之一的sed,对于之前学的grep同样的重要,也同样是一个难点。sed是针对一个文件或者多个文件一行一行处理的,它处理的时候,把当前处理的行存储在模式空间,处理完成后,把缓冲区内容输出到屏幕上,接着处理下一行。直到文件末尾。原文件并没有经过更改。 1、sed一些常用的选项     -n …

    2017-08-26
  • Linux部分命令及通配符用法

    pwd: 显示工作目录 cd -: 在上一次所在目录与当前目录之间来回切换 cd: 切换回家目录 cat:  文本查看工具 n:给显示的文本行编号 -E:显示行结束符$ passwd 修改用户的密码 which 查看系统命令所对应的路径 df 查看系统分区 runlevel 查看系统运行级别  (共有6个级别) Tty…

    2017-03-28
  • Shell中的循环语句

    在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外。把相关内容整理一下吧。 这里包括for/while/until循环,以及变量自增的语法实例。 Shell(以Bash为例)中的循环语句一般有for、while、until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下。也为今后使用提供一个快捷的资料获取渠道。 一、…

    Linux干货 2016-08-22
  • 一周学会shell编程之小结1

    一周学会shell编程之小结1 内容: shell脚本创建与执行 变量 条件测试 if,case判断语句 练习   检查错误: bash -n path 调试执行: bash -x path   创建shell脚本步骤: 1 添加第一行 #!/bin/bash 2 给予…

    Linux干货 2016-08-15
  • N25-第六周

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;      cp /etc/rc.d/rc.sysinit /tmp     &nbsp…

    Linux干货 2017-03-08