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
下一篇 2016-11-18

相关推荐

  • N22-第六周作业

    1、复制/etc/rc.d/init.d/functions文件至/tmp目录,将/tmp/functions文件中 的以至少一个空白字符开头的行的行首加# ~]# cp /etc/rc.d/init.d/functions /tmp~]# vim /tmp/functions %s@^[[:space:]]\+@#@g 2、复制/boot/grub/gru…

    Linux干货 2016-10-17
  • N25_第六周作业

    1、复制/etc/rc.d/rc.sysinit文件至tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s@^[[:space:]]\+@#&@g(CentOS7下并未看到这个文件) 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;…

    Linux干货 2017-02-15
  • 日志管理

    rsyslogd的相关介绍,journalctl的相关介绍和日志的转储

    2018-02-05
  • Linux软件包管理之rpm和yum的使用

    rpm命令的使用 什么是RPM? rpm:RPM Package Manager (原Redhat Package Manager) Linux 软件包管理工具 特定的程序由应用程序组成;     GPL:源码     glibs:标准的C库 常见Linux发行版的软件包管理器:…

    Linux干货 2016-08-25
  • 第七周博客作业

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost tmp]# cat /proc/partitions major minor #blocks name 8 16 52428800 sdb 8 17 1049041…

    Linux干货 2017-03-06
  • 简单shell脚本习题

    习题 作业 简单shell脚本习题 习题1 答案 习题2 答案 习题3 答案 习题4 答案 习题5 答案 习题6 答案 习题1 编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本, CPU型号,内存大小,硬盘大小。 答案 #!/bin/bash IPADDR=$(…

    Linux干货 2017-04-10