Linux程序包管理(一)RPM使用

Linux程序包管理


在早期我们使用源代码的方式安装软件时,都需要先把源程序代码编译成可执行的二进制应用程序,然后进行安装。意味着每次安装软件都需要经过 预处理 
–> 编译 –> 汇编–> 链接, 这个复杂的过程。为简化安装步骤,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给人们下载,我们只需要根据自己的系统去下载相应的安装包进行安装即可,这里可以对比理解,windows和linux在程序包方面有类似的方面,都是由程序开发者将应用程序编译好打包供需要的人下载,不同的地方是windows平台应用程序的开发者是将应用程序编译打包成二进制格式的可执行程序,而linux平台应用程序开发者则是将应用程序编译打包成rpm格式的软件包。 
那么既然应用程序都被打包,肯定需要一样工具来管理程序包,这个工具就叫做程序包管理器.

什么是程序包管理器?

顾名思义“程序包管理器”,主要作用肯定是对软件程序包进行管理的一种工具,那么我们在学习的时候就这理解。在Linux上,程序包管理器是用于管理Linux下软件包的软件,其主要功能是:

将编译好的程序好的程序打包成一个文件或多个文件,可用于实现软件的安装、卸载升级、查询等功能。


常见的程序包管理器有哪些?

两大主流:

debian:deb,dpt。debian系。deb管理器,程序包以dpt结尾。
edhat:rpm,rpm。rhel系。 rpm管理器,程序包以rpm结尾。

程序包的组成部分以及安装之后的存放路径

– 二进制程序

存放路径:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

– 库文件

存放路径:/lib64,/usr/lib64,/usr/local/lib64等

– 配置文件

存放路径:/etc或者conf目录中

– 帮助文件

存放路径:/usr/share/man,/usr/local/share/man等


rpm包命名方式

  • name-VERSION-release.arch.rpm 

    • VERSION:major.minor.release 依次是主版本号.次版本号.发行号 
        release.arch:rpm自身的发行号.平台编号

    • 常见的arch: 
        x86(32位):i386,i486,i586,i686 
        x86_64(64位):x64,x86_64,amd64 
      eg: 
        zsh-5.0.2-14.el7.x86_64.rpm 
         5.0.2:5(主版本号).0(次版本号).2(发行号) 
         14.el7.x86_64:14(rpm自身的发行号).el7(表示适用redhat 7).x86_64(适用64位操作系统)

    • 分包机制:对于一个程序来说,其可能有很多功能,包括常用功能和非常用功能,弱把所有的功能打包到一块儿,无疑程序包增大许多,一些普通用户无需使用的功能都需一并下载安装,无形之中造成了资源的浪费,所以,程序包在打包时就出现了分包机制,主要分为主包和支包。 
      eg: 
        zlib-1.2.7-15.el7.x86_64.rpm –>主包 
        zlib-devel-1.2.7-15.el7.x86_64.rpm –>支包 
        zlib-static-1.2.7-15.el7.x86_64.rpm –>支包


管理程序包的方式:

使用报管理器:rpm 
使用前端管理工具:yum,dnf


获取程序包的途径


CentOS系统上rpm命令管理程序包:

包括安装、卸载、升级、查询、校验、数据库维护


  • 安装: 
      rpm {-i|–install} [install-options] PACKAGE_FILE … 
         -v: verbose 
         -vv: 
         -h: 以#显示程序包管理执行进度;每个#表示2%的进度 
      rpm -ivh PACKAGE_FILE…

[root@Daniel Packages]# rpm -qa lshw
[root@Daniel Packages]# echo $?
0
[root@Daniel Packages]# rpm -ivh lshw-B.02.17-5.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...   1:lshw-B.02.17-5.el7               ################################# [100%]
[root@Daniel Packages]# rpm -qa lshw lshw-B.02.17-5.el7.x86_64
[root@Daniel Packages]# rpm -e lshw 
[root@Daniel Packages]# rpm -qa lshw 
[root@Daniel Packages]# echo $?
0
[root@Daniel Packages]#
     [install-options]
        --test: 测试安装,但不真正执行安装过程;dry run模式;
        --nodeps:忽略依赖关系;
        --replacepkgs: 重新安装;
        --nosignature: 不检查来源合法性;
        --nodigest:不检查包完整性;
        --noscipts:不执行程序包脚本片断;
    %pre: 安装前脚本; --nopre
    %post: 安装后脚本; --nopost
    %preun: 卸载前脚本; --nopreun
    %postun: 卸载后脚本;  --nopostun
[root@Daniel Packages]# rpm -ivh --test unixODBC-2.3.1-11.el7.x86_64.rpm 
准备中...                          ################################# [100%]
[root@Daniel Packages]# rpm -qa unixODBC
[root@Daniel Packages]# rpm -ivh --test unixODBC-2.3.1-11.el7.x86_64.rpm 
准备中...                          ################################# [100%]
[root@Daniel Packages]# rpm -qa unixODBC
[root@Daniel Packages]# rpm -ivh  unixODBC-2.3.1-11.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...   1:unixODBC-2.3.1-11.el7            ################################# [100%]
[root@Daniel Packages]# rpm -qa unixODBC-2.3.1-11.el7.x86_64
[root@Daniel Packages]#
  • 升级

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

[root@Daniel Packages]# rpm -Uvh unixODBC-2.3.1-11.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...   1:unixODBC-2.3.1-11.el7            ################################# [100%]
[root@Daniel Packages]# rpm -fvh unixODBC-2.3.1-11.el7.x86_64.rpm 
rpm:--hash (-h) 选项只能在软件包安装和擦除时指定
[root@Daniel Packages]# rpm -Fvh unixODBC-2.3.1-11.el7.x86_64.rpm 
[root@Daniel Packages]# echo $?
0
[root@Daniel Packages]#
    --oldpackage:降级;
    --force: 强行升级;

  注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核; 
     (2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;


  • 查询:

    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;
        用法:
        -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
        -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
        -qa
[root@Daniel Packages]# rpm -qi time
Name        : time
Version     : 1.7
Release     : 45.el7
Architecture: x86_64
Install Date: 2016年02月21日 星期日 19时41分51秒
Group       : Applications/System
Size        : 47926
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 13时33分47秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : time-1.7-45.el7.src.rpm
Build Date  : 2014年06月12日 星期四 21时29分00秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem < 
Vendor      : CentOS
URL         :  
Summary     : A GNU utility for monitoring a program's use of system resources
Description :The GNU time utility runs another program, collects information aboutthe resources used by that program while it is running, and displaysthe results.

[root@Daniel Packages]# rpm -qf /etc/grub.d/
grub2-tools-2.02-0.29.el7.centos.x86_64
[root@Daniel Packages]# rpm -ql time 
/usr/bin/time/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/AUTHORS
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/ChangeLog
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz

  • 卸载:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
          [--notriggers] [--test] PACKAGE_NAME ...
            -e:表示擦除,卸载
            --allmatcher:表示所有匹配到的
            --nodeps:不依赖,表示仅卸载当前包
            --noscripts:卸载时不执行脚本
            --notriggers:卸载时不执行触发器
            --test:卸载测试,并不真正卸载
[root@Daniel Packages]# rpm -qa unixODBC
unixODBC-2.3.1-11.el7.x86_64
[root@Daniel Packages]# rpm -e --test unixODBC 
错误:依赖检测失败:    
libesoobS.so.2()(64bit) 被 (已安裝) 
unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libmimerS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libnn.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbccr.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg1S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg2S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcminiS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要   
libodbcnnS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbctxtS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboplodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboraodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libsapdbS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtdsS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtemplate.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
unixODBC(x86-64) = 2.3.1-11.el7 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要
[root@Daniel Packages]# rpm -e --test unixODBC --nodeps
[root@Daniel Packages]# rpm -qa unixODBC
[root@Daniel Packages]# rpm -e unixODBC 
错误:依赖检测失败:    
libesoobS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libmimerS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libnn.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbccr.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg1S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg2S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcminiS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcnnS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbctxtS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboplodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboraodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libsapdbS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtdsS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtemplate.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
unixODBC(x86-64) = 2.3.1-11.el7 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要
[root@Daniel Packages]# rpm -e unixODBC --nodeps
[root@Daniel Packages]# echo $?
0

  • 校验:

 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 
 公钥加密: 
 对称加密:加密、解密使用同一密钥; 
 非对称加密:密钥是成对儿的, 
 public key: 公钥,公开所有人 
 secret key: 私钥, 不能公开 
 导入所需要公钥: 
  rpm –import /PATH/FROM/GPG-PUBKEY-FILE 
CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7

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

(2)
Daniel-WDaniel-W
上一篇 2016-06-01
下一篇 2016-06-01

相关推荐

  • 马哥教育网络班N22期+第2周课程练习

    马哥教育网络班N22期+第2周课程练习 1 linux上的常用文件管理类命令 1.1 常用文件查看命令 MORE命令 作用:分屏显示查看文件内容 用法:more file 查看翻页方式: B键向上 一页 空格向下一页 enter键一行一行翻阅 翻到最后一行自动退出 LESS命令 作用:分屏显示查看文件内容 用法:less file 查看方式:less命令与查…

    Linux干货 2016-08-29
  • linux文本处理工具

    linux文本处理工具 1.Linux 文件系统上的特殊权限: SUID     SGID   Sticky       进程的安全上下文:(1)任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行去权限       &…

    Linux干货 2017-02-25
  • I/O重定向及管道

    一、I/O重定向     程序=指定+数据     读取数据:input     输出数据:output     打开的文件都有一个fd:文件描述符     l…

    Linux干货 2016-08-02
  • LVM逻辑卷管理练习

         小编今天要讲的内容是如何创建逻辑卷,然后扩展它、缩减它。LVM 的重点就在于可以弹性的调整文件系统的容量!所以,下面练习开始。 1、创建一个至少有两个PV组成的大小为20G的名为testvg的 VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻 辑卷testlv;挂载至/users目录。 ①准备两个10G的…

    2017-08-26
  • CentoS 6.8 安装(小白请进)

    先说点题外话,我现在还是一个小白,刚接触‘高大上’的linux不久,随着深入的学习了解,兴趣越来越浓,这个东西很有意思的,不像学windows那样枯燥无味,真的,不信?欢迎加入马哥大家庭。 废话不多说,注意了:前方高能!!! 首先呢,先下载一个VMware Workstation这个虚拟机软件,它的作用很强大,可以使你在一台机器上同时运行一个甚至多个linu…

    2017-02-17
  • ​Linux基础知识之磁盘及文件系统管理(一)

    1.设备类型:     块设备(block):随机访问,数据交换单位是"块"     字符设备(character):线性访问,数据交换的单位是"字符" 2.设备文件:FHS     /dev &nb…

    Linux干货 2016-08-29

评论列表(2条)

  • stanley
    stanley 2016-06-01 15:34

    已置顶,欢迎加入免检家庭

    • Daniel-W
      Daniel-W 2016-06-01 22:11

      @stanley感谢老师