rpm与yum

来源:互联网 发布:搞笑特效软件 编辑:程序博客网 时间:2024/06/09 16:54

0.目录

  • 目录
  • 程序包管理器
    • 1 为何使用包管理器
    • 2 程序包管理器分类
  • rpm
    • 1 rpm包名规则
    • 2 rpm包管理器组成
    • 3 rpm指令
      • 31 安装
      • 32 升级
      • 33 卸载
      • 34 查询
        • 341 格式及参数
        • 342 使用举例
      • 35 校验
      • 36 验证程序包的来源合法性和内容完整性
      • 37 初始创建重建数据库
  • yum
    • 1 为何使用yum
    • 2 机制
    • 3 创建yum仓库
    • 4 yum配置文件
      • 41 repo的文件格式
    • 5 yum命令使用

1.程序包管理器

1.1 为何使用包管理器

一个可使用的程序一般包括:

  • 二进制程序
    已编译过,可运行。
  • 配置文件
    用于定义程序运行时的特性等。
  • 库文件
    这里不是指系统库文件,而是一个程序所提供的能共享给其他程序使用的库文件。
  • 帮助文档

这些文件如果都由用户手动管理,最简单地比如:安装时分别将这些文件放在指定目录,卸载时从各目录将这些文件一一删除……显然会非常繁琐。

所以要把一个程序的所有文件,组织成一个或几个包1,使用包管理器进行安装、查询、升级、卸载等操作,用户不必关心细节2。

1.2 程序包管理器分类

包管理器在几个linux分支上不同:

  • debian的被称为dpt,包名以“.deb”结尾。
  • redhat的被称为rpm(redhat package manager),包名以“.rpm”结尾。
  • Suse使用的也是rpm,只是各文件安装路径不同于redhat。

2.rpm

把程序源码编译成二进制,并和其配置文件、库文件、帮助文档等文件,及记录该程序安装时需依赖哪些其他程序,通过一定机制组织为rpm包3。rpm包很多有依赖关系,即一个包在安装时很可能需先安装其他包。

2.1 rpm包名规则

进入光盘的Packages目录下可看到光盘自带的各rpm包,以bash安装包名为例:

[root@local Packages]# ls | grep bashbash-4.1.2-40.el6.x86_64.rpm
各字段 意义 bash 程序名 4.1.2 对应源代码的主版本号.次版本号.发行号 40 rpm包的发行号。rpm打包方式改变,应变更rpm包的发行号,这和程序源码的发行号无关 el6.x86_64 适合的硬件平台。如为noarch,表示与硬件平台无关。

又如程序httpd的包:

[root@local Packages]# ls | grep httpdhttpd-2.2.15-53.el6.centos.x86_64.rpmhttpd-devel-2.2.15-53.el6.centos.x86_64.rpmhttpd-manual-2.2.15-53.el6.centos.noarch.rpmhttpd-tools-2.2.15-53.el6.centos.x86_64.rpm

为第53次制作的,适用于centos的rpm包(发行号偶尔也会包含程序适用于的操作系统)。

也可看出,一个程序不一定只有一个rpm包。因一个程序可能包含多种功能,如果全都做成一个包,则不论需要与否,都会全部安装。
所以需分开,上面4个rpm包中,第一个是httpd程序主要内容做成的包(可启动服务);下面3个包,根据功能的不同,分别在程序名后加上各自功能。比如devel表示供开发使用的包等。

2.2 rpm包管理器组成

更贴切地说,是rpm管理器通过什么来管理各rpm包:

  • 各rpm包都有自己的首部(header)信息
    其中记录了程序包依赖哪些其他包、含哪些文件,安装、卸载时需运行哪些脚本、说明信息等。
  • rpm数据库
    该数据库路径为目录/var/lib/rpm
    其中存储了当前系统上每一个rpm包的名称和版本、包和包之间有怎样的依赖关系、各包的功能说明、每个程序包安装生成了哪些文件(路径)等等

2.3 rpm指令

管理rpm包使用指令“rpm”即可,各功能均依赖rpm数据库/var/lib/rpm

不同功能(也可称为模式)对应不同选项4,不过各模式也有一些通用选项:

常用通用选项 意义 -v 表示输出细节(verbose)信息。-vv、-vvv表示输出更详细的信息 –quiet 静默。除非报错,否则不输出任何信息至屏幕

2.3.1 安装

命令格式:rpm {-i|--install} [install-options] PACKAGE_FILE ...

常用install-options 意义 -h 安装时,输出“#”号用来展示安装进度 –test “干跑”一遍,不真正安装,这只是为了检测安装指定软件时是否会引起冲突等

选项“-ivh”常连用。

比如,仍切换至光盘的Package目录,安装zsh:

[root@local Packages]# cat /etc/shells | grep zsh[root@local Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm Preparing...                ########################################### [100%]   1:zsh                    ########################################### [100%][root@local Packages]# cat /etc/shells | grep zsh/bin/zsh

2.3.2 升级

命令格式:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...# -U或--update表示安装&升级。如果老版本的包未安装,则会安装再升级rpm {-F|--freshen} [install-options] PACKAGE_FILE ...# -F或--freshen表示仅升级。如果老版本的包未安装,则不做操作
常用install-options 意义 –oldpackage 降级至旧版本。如果升级后发现不兼容,则使用此选项回滚至升级前 -h 同上,“#”显示进度 –test 同上,干跑一遍。看是否有冲突,不真正升级

注意:如果老版本程序的配置文件被修改过,那么升级到新版本后,新版本的配置文件不会(也不应该,因为老版本程序的配置文件会被认为是用户有意修改的)覆盖该配置文件,而是把新版本的配置文件重命名(在名字后加上rpmnew)后提供。

2.3.3 卸载

卸载选项 意义 -e或–erase 卸载 –allmatches 指定程序的各版本均卸载 –test 同上,干跑

2.3.4 查询

2.3.4.1 格式及参数

命令格式:rpm {-q|--query} [select-options] [query-options]

常用select-options 意义 包名 此时命令格式就变为rpm {-q|--query} Package [query-options]5,表示对单个包进行查询(其是否安装即版本) -a,–all 查询对当前系统上的所有已安装的包 -f,–file 参数是文件。表示查询指定文件是由哪个程序包生成的 -g,–group 参数是包组名。表示查询指定包组 -p,–package 参数是一个未安装的程序包。表示对一个未安装的程序包进行查询(不加此选项则只能查询已安装的程序包),且仍可结合query-options进行查询 –whatprovides 参数是capability6。查询指定的capability是被哪个包提供的 –whatrequires 参数是capability。查询指定的capability被哪些包依赖

分割线————-

常用query-options 意义 -i,–info 查询程序包相关说明信息 -l,–list 查询程序包安装后生成哪些文件 -c 查询程序包提供的配置(configuration)文件 -d 查询程序包提供的文档(document),主要是帮助文档 –provides 查询程序包能提供哪些capability;正好与select-options中的–whatprovides“相反” -R,–requires 查询程序包依赖的capability;正好与select-options中的–whatrequires“相反” –scripts 查询程序包包含的脚本片段7 –changelog 查询程序包各版本经历过哪些演进(注意是程序包的演进,而非对应的源码)

可看出,select-options指定的是查什么程序包;query-options指定的是查程序包的什么。

2.3.4.2 使用举例

依次使用上述列出的选项,从query-options开始。
查询当前系统上已安装的httpd的rpm包名及版本(这里的select-options就取httpd):

[root@local ~]# rpm -q httpdhttpd-2.2.15-53.el6.centos.x86_64

查询httpd的安装包简要信息:

[root@local ~]# rpm -qi httpdName        : httpd                        Relocations: (not relocatable)Version     : 2.2.15                            Vendor: CentOSRelease     : 53.el6.centos                 Build Date: Thu 12 May 2016 03:29:17 AM CSTInstall Date: Tue 08 Nov 2016 09:28:00 PM CST      Build Host: worker1.bsys.centos.orgGroup       : System Environment/Daemons    Source RPM: httpd-2.2.15-53.el6.centos.src.rpmSize        : 3133738                          License: ASL 2.0Signature   : RSA/SHA1, Thu 12 May 2016 06:52:29 PM CST, Key ID 0946fca2c105b9dePackager    : CentOS BuildSystem <http://bugs.centos.org>URL         : http://httpd.apache.org/Summary     : Apache HTTP ServerDescription :The Apache HTTP Server is a powerful, efficient, and extensibleweb server.

查询httpd的安装包安装后生成的所有文件(含配置、说明文件)、或仅查询配置文件、说明文档(限于篇幅,都仅显示数量):

[root@local ~]# rpm -ql httpd | wc -l          # 生成的所有文件357[root@local ~]# rpm -qc httpd | wc -l          # 生成的配置文件27[root@local ~]# rpm -qd httpd | wc -l          # 生成的说明文档11

查询httpd提供的所有capability。可看到有配置文件、库文件、web服务等等:

[root@local ~]# rpm -q --provides httpdconfig(httpd) = 2.2.15-53.el6.centoshttpd-mmn = 20051115httpd-suexec = 2.2.15-53.el6.centosmod_actions.so()(64bit)  mod_alias.so()(64bit)  mod_asis.so()(64bit)  mod_auth_basic.so()(64bit)  mod_auth_digest.so()(64bit)  mod_authn_alias.so()(64bit)  mod_authn_anon.so()(64bit)  mod_authn_dbd.so()(64bit)  mod_authn_dbm.so()(64bit)  mod_authn_default.so()(64bit)  mod_authn_file.so()(64bit)  mod_authnz_ldap.so()(64bit)  mod_authz_dbm.so()(64bit)  mod_authz_default.so()(64bit)  mod_authz_groupfile.so()(64bit)  mod_authz_host.so()(64bit)  mod_authz_owner.so()(64bit)  mod_authz_user.so()(64bit)  mod_autoindex.so()(64bit)  mod_cache.so()(64bit)  mod_cern_meta.so()(64bit)  mod_cgi.so()(64bit)  mod_cgid.so()(64bit)  mod_dav = 2.2.15-53.el6.centosmod_dav.so()(64bit)  mod_dav_fs.so()(64bit)  mod_dbd.so()(64bit)  mod_deflate.so()(64bit)  mod_dir.so()(64bit)  mod_disk_cache.so()(64bit)  mod_dumpio.so()(64bit)  mod_env.so()(64bit)  mod_expires.so()(64bit)  mod_ext_filter.so()(64bit)  mod_filter.so()(64bit)  mod_headers.so()(64bit)  mod_ident.so()(64bit)  mod_include.so()(64bit)  mod_info.so()(64bit)  mod_ldap.so()(64bit)  mod_log_config.so()(64bit)  mod_log_forensic.so()(64bit)  mod_logio.so()(64bit)  mod_mime.so()(64bit)  mod_mime_magic.so()(64bit)  mod_negotiation.so()(64bit)  mod_proxy.so()(64bit)  mod_proxy_ajp.so()(64bit)  mod_proxy_balancer.so()(64bit)  mod_proxy_connect.so()(64bit)  mod_proxy_ftp.so()(64bit)  mod_proxy_http.so()(64bit)  mod_proxy_scgi.so()(64bit)  mod_reqtimeout.so()(64bit)  mod_rewrite.so()(64bit)  mod_setenvif.so()(64bit)  mod_speling.so()(64bit)  mod_status.so()(64bit)  mod_substitute.so()(64bit)  mod_suexec.so()(64bit)  mod_unique_id.so()(64bit)  mod_userdir.so()(64bit)  mod_usertrack.so()(64bit)  mod_version.so()(64bit)  mod_vhost_alias.so()(64bit)  webserver                               # web服务  httpd = 2.2.15-53.el6.centoshttpd(x86-64) = 2.2.15-53.el6.centos

查询httpd程序包依赖哪些capability:

[root@local ~]# rpm -qR httpd | wc -l38

查询系统上已安装的所有包:

[root@local ~]# rpm -qa | wc -l1126

查询指定文件由哪个程序包提供:

[root@local ~]# rpm -qf /etc/httpd/conf/httpd.conf httpd-2.2.15-53.el6.centos.x86_64

查询指定的capability由哪个包提供:

[root@local ~]# rpm -q --whatprovides webserverhttpd-2.2.15-53.el6.centos.x86_64# webserver由哪个包提供[root@local ~]# rpm -q --whatprovides /etc/httpd/conf/httpd.conf httpd-2.2.15-53.el6.centos.x86_64# 因为capability可以是文件,所以这里查询的就是就是文件/etc/httpd/conf/httpd.conf由哪个包提供。相当于命令“rpm -qf”

查询指定的capability被哪些包依赖:

[root@local ~]# rpm -q --whatrequires /bin/bash | wc -l67

查询某未安装的程序包的信息:

[root@local Packages]# rpm -q mysql-5.1.73-7.el6.x86_64.rpm package mysql-5.1.73-7.el6.x86_64.rpm is not installed[root@local Packages]# rpm -qp mysql-5.1.73-7.el6.x86_64.rpm mysql-5.1.73-7.el6.x86_64# 可结合各query-options

2.3.5 校验

如何知道指定程序包生成的文件是否被修改过,发生了什么变化?使用校验功能即可。

格式:rpm {-V|--verify} [select-options] [verify-options]

其中select-options同上述查询的,用于指定要校验的包(只是把“-q”换成了“-V”)。

verify-options用于指定不校验的内容,比如“–nouser”表示校验时忽略属主的改变等。默认是对所有内容进行校验。

比如修改httpd的配置文件,并校验生成该文件的程序包所生成的文件中,哪些已被改变(此例中显然是其配置文件):

[root@local ~]# echo hello >> /etc/httpd/conf/httpd.conf   # 修改,然后校验 [root@local ~]# rpm -Vf /etc/httpd/conf/httpd.confS.5....T.  c /etc/httpd/conf/httpd.conf[root@local ~]# mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak                           # 重命名,然后校验[root@local ~]# rpm -V httpdmissing   c /etc/httpd/conf/httpd.conf[root@local ~]# rpm -Va            # 查看当前系统上所有被更改过的由rpm包安装生成的文件

如不输出任何信息,则表示指定程序包生成的文件均没有被改变;如改变则会按特定规则输出。
文件左边的字符用于表示哪个文件发生变化:

字符 意义 c 配置文件(configuration file) d 数据、文档文件(documentation file) g 鬼文件(ghost file),某文件不被指定程序包包含,很少出现这个 l 许可证文件(license file) r 说明文件(readme file)

分割线———

前面的8位字符表示发生了何种变化:

字符 意义 S 大小(Size)改变 M 模式(Mode)改变。指的是文件类型和文件权限 5 MD5码改变 D 主或次设备(Device)号改变 L 读取路径改变 U 属主改变 G 属组改变 T 修改时间改变 P 功能(caPability8)改变

如果对应位置表示的内容没有改变,则使用“.”号。

2.3.6 验证程序包的来源合法性和内容完整性

使用数字签名9验证程序包的来源合法性与内容完整性。

互联网上的rpm包基本都有数字签名。公钥存储在系统光盘镜像上的RPM-GPG-KEY开头的文件内,实际上在安装时,此公钥又被安装在/etc/pki/目录下。不同的版本可能位置上有区别,可使用locate或find查找。

找到公钥的文件路径就可导入了:

[root@local media]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

如不导入公钥,则无法验证rpm包合法性与完整性。但只要安装rpm包,系统默认会自动去验证,所以这时会出现警告。

如果想在安装前手动验证下某程序包合法性与完整性,使用选项-K即可(也是要先导入公钥才能验证):

[root@local Packages]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6[root@local Packages]# rpm -K mysql-5.1.73-7.el6.x86_64.rpm mysql-5.1.73-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK# 验证成功,来源合法、内容完整

2.3.7 初始创建、重建数据库

如果数据库/var/lib/rpm不存在,则可初始化创建;如已存在,则初始化无任何动作,不会覆盖已有的。
如果损坏,则可重建,且就算没损坏也会重建,覆盖已有的。数据库的重建是依据当前系统上已安装的rpm包的首部(header)信息

初始化:

[root@local ~]# rm -rf /var/lib/rpm[root@local ~]# rpm --initdb[root@local ~]# ls /var/lib/rpm/Packages  __db.001  __db.002  __db.003  __db.004

重建:

[root@local ~]# rpm --rebuilddb[root@local ~]# ls /var/lib/rpm/Packages

3.yum

3.1 为何使用yum

单个rpm包仅用于完成较单一的功能,很可能依赖其他包提供的功能。因此rpm包之间常有复杂的依赖关系(甚至循环依赖)。

如果使用rpm指令程序包,并逐个安装其依赖的其他程序包,会非常繁琐。

yum作为rpm的前端管理工具,就是为了解决rpm包之间的依赖关系。比如安装rpm包时,会自动先安装其所依赖的包。

3.2 机制

yum采用的是客户端/服务器端机制,yum仓库作为服务器端。仓库地址可以是网上的URL、FTP服务器、或本地文件路径,需在yum配置文件中指定。
把各rpm包放入yum服务器,并通过各rpm包所含的各自的依赖关系信息,制作出依赖关系列表。

这样安装一个rpm包的过程就变为:
安装软件过程

下载的依赖关系列表,会缓存至本地/var/cache/yum目录,这样就不需要每次都下载依赖关系列表,只需通过二者的校验码(如md5)比对本地缓存中的依赖关系列表与yum服务器上的是否相同。只有yum服务器上的列表出现更新才会重新下载,这样可减少带宽占用。

使用yum安装完成软件包后,软件包会被删除。

3.3 创建yum仓库

使用URL、FTP服务器、本地路径作为yum源,原理相同,只是前两者需先创建http、FTP服务器。
以下根据上述机制描述,创建一个本地的yum源(即仓库地址是本地文件路径):

1、把apache相关的一些软件包放在/root/test_yum目录下:

[root@localhost ~]# cd test_yum/[root@localhost test_yum]# lsant-apache-bcel-1.7.1-15.el6.x86_64.rpm   ant-apache-regexp-1.7.1-15.el6.x86_64.rpmant-apache-bsf-1.7.1-15.el6.x86_64.rpm    ant-apache-resolver-1.7.1-15.el6.x86_64.rpmant-apache-log4j-1.7.1-15.el6.x86_64.rpm  apache-jasper-5.5.28-3.el6.noarch.rpmant-apache-oro-1.7.1-15.el6.x86_64.rpm    apache-tomcat-apis-0.1-1.el6.noarch.rpm

2、使用命令createrepo创建目录repodata,此目录下就是yum仓库中包含的软件列表、各软件间的依赖关系列表等元数据信息10:

[root@localhost test_yum]# createrepo ./Spawning worker 0 with 8 pkgsWorkers FinishedGathering worker resultsSaving Primary metadataSaving file lists metadataSaving other metadataGenerating sqlite DBsSqlite DBs complete[root@localhost test_yum]# lsant-apache-bcel-1.7.1-15.el6.x86_64.rpm    ant-apache-resolver-1.7.1-15.el6.x86_64.rpmant-apache-bsf-1.7.1-15.el6.x86_64.rpm     apache-jasper-5.5.28-3.el6.noarch.rpmant-apache-log4j-1.7.1-15.el6.x86_64.rpm   apache-tomcat-apis-0.1-1.el6.noarch.rpmant-apache-oro-1.7.1-15.el6.x86_64.rpm     repodataant-apache-regexp-1.7.1-15.el6.x86_64.rpm

这样创建的repodata目录,会与各程序包在同一路径下。也可使用选项“–basedir”指定repodata目录创建在哪个路径。比如系统光盘上就是把repodata目录创建在与Packages同级的目录了:

[root@localhost ~]# ls /mediaCentOS_BuildTag  images                    repodata                       RPM-GPG-KEY-CentOS-Testing-6EFI              isolinux                  RPM-GPG-KEY-CentOS-6           TRANS.TBLEULA             Packages                  RPM-GPG-KEY-CentOS-Debug-6GPL              RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Security-6

3.目录repodata所在的路径,就可(也只能是这个路径)作为yum源的路径了。repodata目录下包含依赖关系列表等元数据信息:

[root@localhost test_yum]# ls repodata/1fa4d3fb19a7a878191b36d911958fd638da732eef57a8ea61cf58c0f0733a75-primary.sqlite.bz258ff43ad2e4db0b5a7c5374641635d1540b2536f56df900b2b45f4469db6743d-other.sqlite.bz277d18002ead86750d28c1791ac13d2fb6dff4e7da9fe102d47200293375baf4c-other.xml.gz7d8a39efa548c97ef3a06a9e09eefc8de87a8e6c47e706407e058283a4589c1b-filelists.sqlite.bz2ce547a2019ffd59b97228311bf62037b3d5d143d12f5e9adab1a5ef6d986a039-filelists.xml.gze9b85bfe09cec4b241c6e3a87bd9617441b5178a3ae3c9c86937764ad120da02-primary.xml.gzrepomd.xml                              # 这就是存储校验码的文件,用于检测repodata是否更新

3.4 yum配置文件

主配置文件/etc/yum.conf是所有yum仓库公共的配置,一般不需修改。
各yum仓库各自特有的配置(其中包括仓库指向)则是定义在/etc/yum.repos.d/目录下以“.repo”结尾的各文件11。

3.4.1 .repo的文件格式

第一行是仓库ID,使用一个字符串并用中括号括起来,用于唯一标识yum仓库。
之后各行可定义其他配置:

变量 意义 name 仓库名 baseurl 指定yum源。如yum源内的软件相同,则可同时指定多个;不同的话就写成两个yum仓库 enabled 取值1或0。1表示启用此仓库,0表示不启用。默认是启用的。 gpgcheck 取值1或0。基于此仓库安装程序包时,是否检查合法性和完整性。1检查;0不检查 gpgkey 指明使用此仓库安装程序包时,用于验证合法性和完整性所需公钥的路径(或url)。类似rpm –import

上述这些定义完成后,一般就可正常使用了。还有俩其他值可能也会用到:

变量 意义 failovermethod 取值{roundrobin|priority}。当仓库的yum源指定了多个,roundrobin表示每次随机使用其中一个;priority表示顺序使用。默认是roundrobin cost 指定仓库的开销大小,默认值是1000。系统优先选择开销小的仓库使用。

比如,系统光盘挂载到了/media目录,那么以此为yum源的仓库可如此编辑:

[test]name=testbaseurl=file:///mediagpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6enabled=1

下文示例均使用此仓库。

3.5 yum命令使用

命令格式:

yum [options] [command] [package ...]

其中常用的通用选项(options):

选项 意义 -y 安装程序包等过程中需用户输入“y”表示确认时,此选项表示自动确认 -q,–quiet 安装等过程中,不输出信息至屏幕 –nogpgcheck 表示安装或升级时不检查来源合法性与数据完整性,即便仓库配置文件中已定义了gpgcheck=1

下面说明下常用的各command:

  • repolist { all | enabled | disabled }
    用于列出当前系统的yum仓库列表,默认仅显示启用的(enabled)。

    [root@localhost Packages]# yum repolist Failed to set locale, defaulting to CLoaded plugins: fastestmirror, refresh-packagekit, securityLoading mirror speeds from cached hostfilerepo id                                           repo name                                      statustest                                              test                                           6696repolist: 6696
  • list
    用于列出yum仓库中的程序包。可指定列出所有的(all)、可安装的(available)、可升级的(updates)、或已安装的(installed)等等。同时也可使用globbing通配符查询指定的程序包。
    比如列出当前系统上yum仓库,所包含的可安装的、包名含“bash”的程序包:

    [root@localhost ~]# yum list available *bash*Loaded plugins: fastestmirror, refresh-packagekit, securityLoading mirror speeds from cached hostfileAvailable Packagesbash-doc.x86_64                                      4.1.2-40.el6                                  testpcp-pmda-bash.x86_64                                 3.10.9-6.el6                                  test
  • install,reinstall
    install用于安装程序包。
    默认安装最新版本,如需安装老版本,可在包名后加上版本号。
    使用yum安装程序包,完成后会删除程序包。
    reinstall表示重装程序包,覆盖原程序包。

  • update,check-update,downgrade
    用于升级、查询可用的升级、降级程序包。

  • remove或erase
    用于卸载程序包。
    依赖于要卸载的程序包的其他程序包,也会被自动卸载。

  • info
    输出程序包简要信息,类似“rpm -qi”。

  • provides或whatprovides
    查看指定的文件是由哪个程序包提供。类似“rpm -qf”选项。

  • clean
    用于手动清理yum缓存,即目录/var/cache/yum中的内容。
    可仅清理用于生成依赖关系的headers信息,也可以仅清理软件包名(packages)等(具体可通过man查看),因为这些信息在软件安装完成后不会自动被删除。
    全清理则使用all(比如当配置文件中的baseurl变化时可使用全清,因为原先的信息就没用了)。

  • deplist
    列出指定程序包的依赖关系,查看其依赖于哪些CAPABILITIES,以及这些程序由哪些包提供。

[root@localhost ~]# yum deplist bashLoaded plugins: fastestmirror, refresh-packagekit, securityFinding dependencies: Determining fastest mirrorstest                                                                            | 4.0 kB     00:00 ... test/primary_db                                                                 | 4.7 MB     00:00 ... package: bash.x86_64 4.1.2-40.el6  dependency: libc.so.6(GLIBC_2.4)(64bit)        # 依赖的capability   provider: glibc.x86_64 2.12-1.192.el6         # 提供它的程序包  dependency: libdl.so.2()(64bit)   provider: glibc.x86_64 2.12-1.192.el6  dependency: libtinfo.so.5()(64bit)   provider: ncurses-libs.x86_64 5.7-4.20090207.el6  dependency: rtld(GNU_HASH)   provider: glibc.i686 2.12-1.192.el6   provider: glibc.x86_64 2.12-1.192.el6  dependency: libdl.so.2(GLIBC_2.2.5)(64bit)   provider: glibc.x86_64 2.12-1.192.el6  dependency: ncurses-libs   provider: ncurses-libs.x86_64 5.7-4.20090207.el6   provider: ncurses-libs.i686 5.7-4.20090207.el6
  • search
    用于在不确定(就是记不清)包名的情况下,通过字符串查询程序包。
    这并不与list完全相同,因为使用search默认会从包名、说明信息开始查找,如没有找到则会从描述(description)信息、或url查找等。

  • history
    查看事务历史。
    每次安装、升级、卸载都是一次yum事务(即有改动发生,查询不算是事务)。

    [root@localhost ~]# yum historyFailed to set locale, defaulting to CLoaded plugins: fastestmirror, refresh-packagekit, securityID     | Login user               | Date and time    | Action(s)      | Altered-------------------------------------------------------------------------------     2 | root <root>              | 2017-04-07 01:35 | Install        |    3        1 | System <unset>           | 2017-04-07 08:24 | Install        |  933   history list
  • 包组相关command
    与包组相关的command,功能同上,只是添加了“group”:

    命令 意义 grouplist 显示yum仓库中的包组 groupinstall 安装包组中的程序包(包组中的所有包并不是都必须安装) groupupdate 更新升级 groupremove 卸载 groupinfo 查看包组信息。其中列出了安装该包组时强制(mandatory)安装的包、可选(optional)安装的包等

    比如,查询包组“Java Platform”信息:

    [root@localhost ~]# yum groupinfo "Java Platform"Failed to set locale, defaulting to CLoaded plugins: fastestmirror, refresh-packagekit, securitySetting up Group ProcessLoading mirror speeds from cached hostfileGroup: Java Platform Description: Java support for the CentOS Linux Server and Desktop Platforms. Mandatory Packages:   java-1.6.0-openjdk   java-1.7.0-openjdk Optional Packages:   icedtea-web   java-1.8.0-openjdk

(完)


  1. 有的程序功能较多,不一定全部要安装使用。所以各功能可做成独立的包,这个程序就包含多个包了。如下所述的httpd程序就包含多个包。 ↩
  2. 比如对于安装来说,包管理器会自动将二进制程序、库文件、配置文件等放在对应目录下。 ↩
  3. 具体什么机制,制作一个rpm包就明白了。 ↩
  4. 因为有了yum,rpm指令最常用功能是查询和校验。 ↩
  5. 当然query-options可写在包名前面。显然,如果对单个包进行查询,则其他select-options就不会同时使用了。 ↩
  6. capability可理解为“能力”,比如一个程序包能够提供的功能、配置文件、服务等都可视为它的“能力”。 ↩
  7. 完整的脚本片段分为四个:安装前、安装后、卸载前、卸载后。不过并非所有程序都包含完整的脚本片段。
    这里对此仅做如上简要说明。制作一个rpm包时,会对脚本片段有更清楚认识。 ↩
  8. 这里的capability应该是文件的功能,而不是程序包的capability。否则只要有文件改变,这一位就得算上,因为程序包的capability包含其所生成的所有文件。 ↩
  9. 简单过程如下:
    1、先用单向加密算法(如MD5)把程序包内容M加密成密文A,并附在其后为M+A;
    2、再用非对称加密算法(如RSA)的私钥加密M+A为密文B。
    3、对方拿到密文B后,使用非对称加密算法的公钥解开,能够解开说明来源是合法的(没有被冒充);
    解开后用相同的单向加密算法加密密文M为C,比对C和A如果一致,说明内容是完整的(没有被篡改)。 ↩
  10. yum仓库中的依赖关系列表,就是由此命令创建而来。 ↩
  11. 实际上所有仓库的配置可写在同一个*.repo文件中,分开不同文件只是便于管理。
    在自行定义前,系统已经给出了一些yum仓库指向,如无需使用可先重命名它们,只要文件名不以“.repo”结尾就不会被认为是yum仓库配置文件。 ↩
0 0
原创粉丝点击