yum 命令详解

yum简介

Yum(Yellow dog Updater, Modified)由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。被Yellow Dog Linux本身,以及Fedora、Red Hat Enterprise Linux采用。

–wiki

之前也写过一篇《yum常用参数》的文章,但更多地只是记录一些简单的用法,现在这篇文章就当是补充说明吧。

yum客户端的执行流程

yum客户端第一次执行

  1. 向yum仓库请求所有数据包的元数据(不止一个文件,包含依赖关系)到本地。
  2. 分析元数据,找出依赖关系。
  3. 分析本地软件安装情况,找出依赖关系中未安装的程序。
  4. 从yum仓库下载所有需要安装的程序包并缓存在本地。
  5. 按依赖关系依次安装程序。
  6. 删除已安装程序的程序包。

yum客户端再次执行

  1. 向yum仓库请求元数据的校验文件并与本地校验文件比较。
  2. 如果元数据未更新,则根据本地元数据分析依赖关系。
  3. 如果元数据已更新,则重新获取元数据。
  4. 分析元数据,找出依赖关系。
  5. 分析本地软件安装情况,找出依赖关系中未安装的程序。
  6. 从yum仓库下载所有需要安装的程序包并缓存在本地。
  7. 按依赖关系依次安装程序。
  8. 删除已安装程序的程序包。

yum客户端配置

公共配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/etc/yum.conf:为所有仓库提供公共配置(不属于具体仓库的配置)。

[main] # 主配置名称
cachedir=/var/cache/yum/$basearch/$releasever # 缓存路径
keepcache=0 # 是否保留缓存的部署包
debuglevel=2 # 日志级别(0-10)
logfile=/var/log/yum.log # 日志文件保存路径
exactarch=1 # 是否进行精确的平台匹配(比如centos6安装centos7的程序包平台就不匹配,或者X86安装X64的包也属于平台不匹配)
obsoletes=1 # 是否更新旧的rpm包
gpgcheck=1 # 是否检查GPG(GNU Private Guard)密钥签名
plugins=1 # 是否允许使用插件
installonly_limit=5 # 允许同时安装几个程序包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum # 追踪bug的地址
distroverpkg=centos-release # 当前发行版版本号

自定义配置

1
2
3
4
5
6
7
8
9
10
11
12
/etc/yum.repos.d/*.repo:为仓库的指向提供配置(仓库自定义配置)。

[repositoryID] # 仓库ID(唯一标示)
name=Some name for this repository # 仓库名称(更多作为解释之用)
baseurl=url://path/to/repository/ # 仓库路径
enabled={1|0} # 是否启用此仓库(默认:1)
gpgcheck={1|0} # 是否校验GPG密钥签名
repo_gpgcheck={1|0} # 是否校验元数据GPG密钥签名
gpgkey=URL # GPG密钥路径
enablegroups={1|0} # 是否支持使用组批量管理程序包(默认:1)
failovermethod={roundrobin|priority} # 故障转移(默认为:roundrobin,意为轮询挑选。)
cost=1000 # 开销,仓库挑选优先级(默认:1000)

yum的repo配置文件中可用的变量

1
2
3
4
$releasever:当前OS的发行版的主版本号;
$arch:平台;
$basearch:基础平台;
$YUM0-$YUM9:用户自定义变量;

查看更多配置项

1
man 5 yum.conf

yum命令用法

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

显示仓库列表

1
yum repolist [all|enabled|disabled]

显示程序包

1
2
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1]

安装程序包

1
2
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)

升级程序包

1
2
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)

检查可用升级

1
yum check-update

卸载程序包

1
yum remove | erase package1 [package2] [...]

查看程序包information

1
yum info [...]

查看指定的特性(可以是某文件)是由哪个程序包所提供

1
yum provides | whatprovides feature1 [feature2] [...]

清理本地缓存

1
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

构建缓存

1
yum makecache

搜索

以指定的关键字搜索程序包名及summary信息。

1
yum search string1 [string2] [...]

查看指定包所依赖的capabilities

1
yum deplist package1 [package2] [...]

查看yum事务历史

1
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地程序包

1
2
3
4
yum localinstall rpmfile1 [rpmfile2] [...]
(仅为了兼容而保留,建议直接使用 yum install)
yum localupdate rpmfile1 [rpmfile2] [...]
(仅为了兼容而保留,建议直接使用 yum update)

包组管理的相关命令

1
2
3
4
5
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

更多命令和选项

1
man yum

yum仓库

yum repository 存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)。

文件服务器可包含以下类型:

1
2
3
4
ftp://
http://
nfs://
file:///

如何使用光盘当作本地yum仓库

(1)挂载光盘至某目录,例如/media/cdrom

1
mount -r -t iso9660 /dev/cdrom /media/cdrom

(2)创建yum仓库:

1
2
3
createrepo [options] <directory>

createrepo /media/cdrom

(3)创建配置文件

参考yum客户端配置章节。

(4)创建缓存

1
yum makecache