rpm包管理

rpm包管理

rpm(RedHat Package Manager) 是RedHat公司发展的一种将软件安装到Linux系统的管理机制,也是一种数据库记录方法。

Linux系统上软件的安装主要分两种方式,从厂商发布的tarball通过编译来安装;或者使用厂商已经在相应平台上编译好的二进制文件。

从源码编译安装的程序,在漏洞修补以及软件功能升级时太过麻烦,并且管理员不能清晰地知道系统上已经安装了哪些软件,以及相应的版本等摘要信息。

Linux发行商或者社区组织在固定的硬件平台与操作系统上将需要安装的软件编译好,然后将编译好的软件与相关文件打包成一个特殊格式的文件。此特殊文件中包含了预先检测系统与依赖关系的脚本,并提供该软件的文件信息。用户取得该软件后,通过特殊的命令安装,首先会根据内部的脚本来检测该软件所依赖的前驱软件是否存在,若安装环境复合,就开始安装。安装完成后还会将该软件的信息写入软件管理机制,以备将来进行升级、移除等动作。目前在Linux界软件安装方式最常见的有以下两种:

  • dpkg,由Debian Linux社群开发,目前Debian系的Linux发行版大多使用dpkg机制来管理软件,例如Ubuntu。

  • rpm, 由Red Hat公司开发,目前Fedora、CentOs、SuSE等发行版都使用该机制。

需要注意的是:因为rpm文件是已经编译好的二进制文件,所以在使用时,硬件平台和系统必须和编译时一致。如果要用其他发行版提供的rpm软件,可以下载srpm,也即某一rpm软件对应的源码(*.src.rpm命名),在使用srpm安装软件时,首先需要以rpm管理方式编译程rpm文件,然后将编译后的rpm包依照rpm包的安装方法安装至系统。

rpm包管理命令

  • rpm包安装

只有root用户有权限管理rpm包

rpm -ivh pkgs_name
    -i 安装
    -v 显示详细信息
    -h 显示安装进度
        pkgs_name 可以是单个或多个rpm包文件名,也可以是rpm包路径(如果可以连入互联网的话,也可以是软件包的互联网地址)

此外rpm包在安装时,还额外提供安装选项可供选择使用

--nodeps 忽略软件安装所需要考虑的依赖关系问题
--replacepkgs 重新安装
--test 测试某rpm包安装到环境中,是否有依赖关系问题
--prefix /path/to/somewhere 执行新的安装路径
--nosignature 不检查包签名信息,不检查包来源的合法性
--nodigest 不检查包的完整性
--no[pre|post|preun|postun] 选择安装或卸载前后不执行安装包自带脚本
  • rpm包卸载

rpm包卸载时应注意依赖关系问题

rpm -e program_name
rpm -e --nodeps program_name 强制卸载,会影响依赖此软件的软件的正常使用

rpm包的安装、移除以及升级操作有时误操作可能会导致rpm数据库/var/lib/rpm内的文件损坏,可以使用–rebuilddb 来重建rpm数据库

rpm --rebuilddb 
rpm --initdb 初始化数据库
  • rpm包查询

rpm查询操作,其实查询的/var/lib/rpm/目录下的数据库文件。此外也可以查询系统上未安装的rpm包的相关信息

rpm -q program_name 确认相应软件是否已被安装
    -qa 列出系统上所有软件名称
    -qi 列出软件的相关信息
    -ql 列出软件安装所生成的文件
    -qc 指出软件的配置文件
    -qd 列出软件包提供的文档
    -qR 列出该软件所依赖的软件
    --whatrequites capability 查询指定capability被哪些软件所依赖
    -qf /path/to/file 查询指定文件为哪个软件安装所产生的
    -qp[idclR] 查询某个rpm文件内的信息,并非已安装的软件的信息
    --whatprovides capability 查询指定capability由那个软件所提供
    --script 查询rpm程序包自带的脚本
  • rpm安装程序升级

升级rpm包安装的程序

rpm -Uvh program_name 如果该软件并未被安装则会自动安装
rpm -Fvh program_name 如果系统上并没有该软件,则不会执行相应操作
  • rpm安装程序校验

校验rpm安装程序是否被篡改过,一般configure文件在使用过程中可能被修改,但binary program被修改就需要特别注意

rpm -V program_name 检查软件所属的文件是否被修改过
    -Va 列出系统上rpm包安装的程序所属的文件中所有被修改过的
    -Vp 后跟rpm包文件名,列出对应的安装程序中被修改过的文件
    -Vf 检查某个文件是被修改过

    SM5DLUGT c filename

    S :(file Size differs) 文件的容量大小是否被改变
    M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可运行等参数已被改变
    5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同
    D :(Device major/minor number mis-match) 装置的主/次代码已经改变
    L :(readLink(2) path mis-match) Link 路径已被改变
    U :(User ownership differs) 文件的所属人已被改变
    G :(Group ownership differs) 文件的所属群组已被改变
    T :(mTime differs) 文件的创建时间已被改变

    c :配置档 (config file)
    d :文件数据档 (documentation)
    g :鬼文件~通常是该文件不被某个软件所包含,较少发生!(ghost file)
    l :授权文件 (license file)
    r :读我文件 (read me)
  • rpm包来源合法性和完整性验证

首先安装rpm包发行组织释出的公钥;每次安装rpm包时,rpm命令会读取rpm包文件的签名,并与公钥比对;如果相同则顺利安装,如果不同则停止安装(-ivh –signature 选项也是针对此处)。

rpm --import /path/to/public-key 导入公钥
rpm -qi `rpm -qa | grep pubkey` 查看已导入的公钥信息

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

(0)
N24_fynlN24_fynl
上一篇 2016-11-18 20:20
下一篇 2016-11-18 22:58

相关推荐

  • 第四周博客分享

                    时间匆匆,转眼来马哥已经快一个月了,这一个月对我来说是收获满满,每天都在学到新的东西。       &nbs…

    2017-08-06
  • sed命令用法

    sed命令 [option]  “script”  file sed命令是一种行编辑工具,他是逐行对文件进行编辑。sed命令有一个模式空间,他将一行命令读取进模式空间进行编辑,完成后将本行数据打印再读取下一行数据进行处理。 option: -n:静默模式不显示模式空间内容 -f:从指定文件中读取 -i:修改源文件(-i.###会自动将原文…

    Linux干货 2016-08-12
  • awk学习笔记

    一、linux的文本处理器三剑客   文本过滤器:grep、egrep、fgrep   行编辑器:sed(模式空间;保持空间)   报表生成器:awk(格式化文本输出)gawk awk的工作流程: 从文本中读取一行内容,根据指定的分隔符;将读入的一行内容分隔成字段,然后格式化输出指定的字段 二、awk的命令相关的参数及用法 &n…

    Linux干货 2015-06-23
  • 文件查找命令之find

    文件查找命令一共有两种,locate 和find ,那么他们在用法和功能上面有什么区别呢?     locate:查找速度快,模糊查找,遍历整个文件系统的目录到数据库中,然后在去数据库中查找,依赖于事先创建好的索引库,该数据库属于系统自动创建,定期自动更新,也可手动跟新,更新命令updatedb,更新数据库需要遍历整个根文件系统…

    Linux干货 2016-08-16
  • N28 第三周【2】:用户和组管理

    用户和组管理 前言 Linux用户管理非常关键且重要,Linux的所有进程都是以不同的身份拥有不同的权限来运行和调度资源的。但是我们不用费劲心思去管理,因为系统将用户划分成为了两部分:无所不能的root用户和普通用户。同时呢,又将普通用户分为系统用户和登录用户。对于Linux,他会用UID去快速识别用户身份,对于我们,可以用用户名去识别。 接下来介绍一下用户…

    Linux干货 2017-12-19
  • date(时间),timedatectl(时区),cal(日历)的用法

    date+%F 显示日期,   显示格式如 2017-07-15+%T 显示时间    显示格式如 15:00:15+%Y 显示年      显示格式如 2017+%m 月 +%d 日+%H 时+%M 分+%S 秒+%s 从linux初始到现在经历了多少秒+%w 显示数字形式的星期+%a …

    Linux干货 2017-07-14