RPM及YUM工具介绍及使用(上)

  • 写在前面

  1. 常见的计算机硬件平台大致可以为分:x86、x86_64、amd64、ppc、arm、aarch64。软件平台,在Linux界则是指不同的Linux发行版。

  2. Linux系统中的软件(非源码)由于都是在不同的硬件+软件平台开发编译完成之后发布的,因此同一个软件会区分硬件和软件环境而有不同的软件包。在安装软件时应该选择与自己的硬件和软件平台一致的软件包进行安装。通常在软件包的名称中即可见到所针对的硬件、软件平台的描述。如openssh-6.6.1p1-22.el7.x86_64,则是针对x86_64位硬件下的rhel系的软件包。

  3. Linux系统中的软件,很多软件彼此之间有依赖关系,其实Windows下的软件也是如此,因此在安装某软件时,被它所依赖的软件需要先行安装,在卸载时也需要同样小心软件间的依赖关系,避免盲目卸载而对其它软件造成损坏。

  4. Linux系统中的软件安装及管理方式在不同的Linux发行版中的方式是不一样的。目前比较主流的方式按照发行版的不同可以分为两类:

  • dpkg
    这种方式主要适用于Debian系的Linux发行版使用,包括B2D和Ubuntu都使用这种方式。dpkg这种方式所使用的操作指令为dpkg

  • rpm
    这种方式是由著名的Linux发行厂商Red Hat开发出来的,后来被很多Linux发行版所采用,如Fedora,CentOS,SuSE等。rpm这种方式所使用的操作指令为rpm

    这两种方式的共同点就是,其所使用的软件包是已经经过编译的了,不需要我们手动在去进行编译操作。

  • 软件间的依赖关系
    在这些已经编译好的软件包中包含了记录依赖关系等信息。当我们在Linux系统中安装这些软件包时,RPM程序会根据这一信息去查找系统中是否已安装相应软件,如果发现依赖软件没有安装,安装会失败,也可以使用特定安装选项--nodeps忽略依赖关系,然后将软件包安装上去,但非常不建议这么使用,除非明确知道所忽略的内容,对软件的使用毫无影响。
    上文提到了RPM包会查找系统已安装了哪些RPM包的软件,这一查找过程依赖于RPM数据库,在CentOS系统中这一数据库位于/var/lib/rpm目录中,它非常重要,记录了系统上所有通过rpm方式安装的软件包信息。在对系统已安装的rpm软件进行安装、升级、查询、卸载操作时都依赖于这个数据库。
    大致总结一下,使用rpm包安装软件,需要注意以下两点:

    • 安装软件包的环境需要与该软件包编译时的环境一致。

    • 需要解决好软件包的依赖关系。

  • SRPM包与RPM包

    • RPM包是指已经针对特定硬件和软件平台进行了编译的包,可以拿到与之匹配的环境中直接进行安装。其文件名一般形如:openssh-6.6.1p1-22.el7.x86_64

    • SRPM包实际提供的是软件源码,包含configure和makefile,但它也同时包含了RPM软件包所能够提供的,如依赖关系说明以及所有RPM包能够提供的信息。要通过这种包来安软件,首先需要利用rpm工具进行按需编译成最终的RPM包以后,然后使用RPM工具将软件安装到系统中。其文件名一般形如:openssh-6.4p1-8.el7.src.rpm,名称中有src字样。

RPM工具的使用

再唠叨一次RPM工具的作用:可以用来对rpm软件包进行安装、升级、卸载、查询和检验,以及RPM数据库的维护。以下逐个讲解其常用的用法。

  1. 安装
    指令:rpm {-i|--install} [install-options] PACKAGE_FILE ...
    指令选项含义说明:
    -i或者--install 表示安装后面跟的rpm软件包,但如果只使用-i选项无法看到安装的过程及安装进程,要显示安装过程及进度将-v-h选项一起使用。
    install-options常用的有:
    --test 测试这一rpm包是否可以被安装到系统中,而不会执行真正的安装操作。
    --replacepkgs 对已经安装过的软件进行重新安装,修改过的配置文件不会被覆盖。
    --nosignature 在安装过程中不进行包签名信息和来源合法性验证。
    --nodigest 在安装过程中不检查包的完整性。
    示例:
    rpm -ivh openssh-server-6.6.1p1-22.el7.x86_64
    不常用的install-options选项:
    --justdb 由于RPM数据库产生错误或者损坏而查询不到已安装的RPM软件包信息时,可以使用这一选项来更新其在RPM数据库中的信息。
    --prefix 后面跟上某一路径,可以将这一RPM软件包安装到这个路径中。
    --nodeps 忽略软件包之间的依赖关系。
    --force 强制安装,它会忽略依赖关系,以及文件的冲突情况。
    PACKAGE_FILE 指的是RPM软件包的完整名称及URL,软件包即在当前目录时直接使用RPM包名称即可。可以同时指定多个RPM包,即同时安装这些RPM包。

  2. 升级
    指令:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...或者
    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    指令选项含义说明:
    -U 当系统中没有老版本时会安装后面的RPM包,有则进行升级。
    -F 只有系统中有老版本时才会执行安装操作。
    --force 强制升级,不常用。
    --oldpackages 进行降级操作。
    注意:

    • 不要对Linux内核进行升级操作,Linux支持多内核共存,直接安装新版的内核即可。

    • 如果某软件包安装以后其配置文件被修改过,升级时新版本的软件包不会覆盖原配置文件,会将新的配置文件以FILENAME.rpmnew的方式提供。

  3. 卸载
    指令:rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
    指令选项含义说明:
    -e 表示卸载后面所跟的RPM包名,而非RPM包文件名,。
    --allmatches 表示卸载所有匹配指定名称软件的所有版本。
    --nodeps 表示不卸载与此软件有依赖关系的软件。
    --test 表示模拟一次卸载的过程而不真正执行卸载操作。
    卸载操作需要注意,对于存在依赖关系的软件进行卸载时,要从上往下卸载,不要直接将被依赖的软件包先卸载。

  4. 查询
    指令:rpm {-q|--query} [select-options] [query-options]
    指令选项含义说明:
    -q 单独使用表示查询后面所跟软件包是否安装,常结合select-options或query-options一起使用。
    常用的select-options:
    -a 查询系统中所有已安装的RPM软件包名称。
    -f 查询后面所跟的文件是由哪个软件安装后产生。
    -p 对没有安装到系统中的RPM软件包内的信息进行查询。
    --whatprovides CAPABILITY 查询指定的CAPABILITY是由哪个程序提供。
    --whatrequires CAPABILTY 查询指定的CAPABILTY被哪个包所依赖。
    常用的query-options:
    --changelog 查询所指定的RPM包中所包含的chagelog文件的内容。
    -c 列出所指定的RPM包提供的配置文件。
    -d 列出所指定的RPM包提供的man手册及share文档。
    -i 列出所指定的RPM包的详细说明信息:版本,支持的架构,开发商、发布时间,安装时间和说明等。
    -l 列出所指定的RPM包安装后生成的所有文件和目录。
    --provides 列出指定的RPM包所能够提供的CAPABILTY,安装或者没有安装都可。
    -R 列出指定RPM包的依赖关系。
    --scripts 查询指定的程序包自带脚本的内容。

  5. 校验
    指令:rpm {-V|--verify} [select-options] [verify-options]
    常用选项及含义:
    -V 后面跟上软件名称,如果该软件所包含的文件被更改过,才会被列出来。
    -Va 列出系统上所有可能被更改过的软件相关文件。
    -Vp 后面跟RPM包的名称,查询这个包中可能被更改过的文件 。
    -Vf 查询某软件相关文件是否被更改过。
    对于验证软件包的来源合法性,需要借助数字签名实现。使用rpm-import指令在系统中导入RPM包制作者的公钥,然后可以使用rpm -k PACKAGE_FILE进行验证,或者在安装时rpm工具默认会自动进行验证。

  6. RPM数据库重建
    指令:rpm {--initdb|--rebuilddb}
    当RPM数据库出现损坏时,可以使用--rebuilddb选项将数据库重建;如果这个数据库不存在,可以使用--initdb 重新创建一个数据库。

注意:

RPM包文件名

  • 当包文件位于当前执行指令的目录时,直接使用包名,如rpm -ivh a2ps-4.14-23.el7.i686.rpm

  • 当包文件位于其它路径,然后跟上包文件名,如rpm -ivh /media/cdrom/Packages/a2ps-4.14-23.el7.i686.rpm

  • 当包文件 位于网络位置时,可以写:rpm -ivh http://web.site.name/path/a2ps-4.14-23.el7.i686.rpm

RPM工具小结

  • 优点

    • 一般不用手动人工编译,安装难度低于源码安装方式。

    • 安装之前会进行相关属性,如硬盘容量、系统版本等检查,避免软件被错误安装。

    • 采用RPM数据库记录系统所有已安装软件的信息,方便软件包的管理。

  • 不足

    • 不能够自动解决软件包之间的依赖关系,对于依赖关系复杂的软件,其安装过程还是较繁琐。

    为了解决这一不足,yum工具诞生了,yum工具的介绍及使用见下篇。

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

(0)
N24_lantianN24_lantian
上一篇 2016-12-26
下一篇 2016-12-26

相关推荐

  • 如何在Java中避免equals方法的隐藏陷阱

    译者注 :你可能会觉得Java很简单,Object的equals实现也会非常简单,但是事实并不是你想象的这样,耐心的读完本文,你会发现你对Java了解的是如此的少。如果这篇文章是一份Java程序员的入职笔试,那么不知道有多少人会掉落到这样的陷阱中。原文转自http://www.artima.com/lejava/articles/equality.…

    开发运维 2015-04-03
  • 我的第一篇博客

    2018.3.26 整理

    2018-03-26
  • Linux网络功能协议介绍(二)

      上个内容中,我们知道了只要是本地通信得广播,而广播不是逻辑(IP)地址对应的MAC地址,所以主要是将逻辑地址转换成目标地址,这叫地址解析称为ARP,还有一种是反向解析RARP,都是在本地网络中完成的,逻辑IP地址分为两个阶段,前一段分为网络地址,后一段分为主机地址,如何判定?用子网掩码用来判断那一部分是网络位,那一部分是主机位,最重要…

    Linux干货 2016-11-25
  • 详解linux磁盘管理

                           磁盘管理 设备文件 1. I/O ports:I/O设备地址 2. 一切皆文件,open(),read(),write(),close(),对设备的操作也都是通     过这…

    Linux干货 2016-08-29
  • 使用ext_skel和phpize构建php5扩展

    首先声明:我们要构建的是扩展或者模块名为hello_module.该模块提供一个方法:hello_word. 1、php环境的搭建 我们一般使用源码包编译安装,而不是binary包安装。因为使用PHP的二进制分发包安装有些冒险,这些版本倾向于忽略./configure的两个重要选项,它们在开发过程中很便利: 第一个–enable-debug。这个…

    Linux干货 2015-05-28
  • 包管理及源码安装Apache

    一,概述 yum 仓库的安装 在/etc/yum.repos.d/目录下创建后缀名为repo的配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= 配置文件基本包含的四个要求 安装及升级本地程序包: * localinstall rpmfile1 [rpmfile2] […] (用install替代) …

    Linux干货 2016-09-01