Yum
参考文档
- Red Hat 7, system administrators guide: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-yum
MAN 文档
- man yum.conf
简介
Yum 是 Red Hat 的软件包管理工具,它可以从仓库查询软件包元信息或下载它们,也可以安装、卸载这些软件包,并且,可以更新整个系统到最新可用版本。在更新、安装、卸载软件包时,Yum 可以自动进行依赖解析,所以可以自动安装所有可用的依赖包。
Yum 可以配置新的、额外的仓库或软件包源,并且提供了很多插件来增强和扩展它的功能。Yum 可以做很多 RPM 做的任务,并且,它们的命令行选项很多是类似的。Yum 可以使一台或一组机器上的软件包管理工作变得简单容易。
下面的章节假设你的系统在安装时已经注册了 Red Hat 订阅管理。如果你的系统还没有订阅,参考 Chapter 7, Registering the System and Managing Subscriptions。
通过 Yum,你也可以轻松搭建你自己的 PRM 软件包仓库。可能的话,Yum 会使用并行下载多个软件包和其元信息来加速下载过程。
学习 Yum 是一项非常有价值的投资,因为它是最快的系统管理任务工具,并且它提供的功能远远多于可视化软件包管理工具。
重要提示
Yum 通过为所有软件包仓库/源(包括个人仓库)下的 GPG 签名的软件包启用 GPG(Gnu Privacy Guard;also known as GnuPG)签名校验来提供安全的软件包管理功能。签名校验启动时,yum 会拒绝安装 GPG 签名校验失败的软件包。也就是说,你可以相信你从受信任源(例如:Red Hat)安装的 PRM 软件包,可以确认它们在网络传输的过程中没有被修改。Yum 启用签名校验的详情可以参考:Section 9.5, “Configuring Yum and Yum Repositories”
注意
为了在你的系统上通过 Yum 练习安装、更新和卸载软件包,你必须有超级用户权限。本章所有的例子均假设你已经使用 su 或 sudo 命令获得了超级用户权限。
软件包仓库
查询软件包仓库列表
- 列举启用的软件包仓库:yum repolist
- 列举启用的软件包仓库的详细信息:yum repolist -v 或 yum repoinfo
- 列举禁用的软件包仓库:yum repolist disabled
- 列举全部(启用+禁用)的软件包仓库:yum repolist all
- 正则语法举例:yum repolist mysql-tools* -v,正则语法详情类似列举软件包
软件包
搜索软件包
- 根据 name 和 summary 匹配:yum search vim
- 根据所有元信息匹配:yum search all vim
查询软件包列表
- yum list 命令支持简单的正则语法:* 代表任意字符、?代表单个字符。为了防止 Shell 解释这些特殊字符,通常有两种方法:① 使用反斜线,例如:yum list vi*;② 使用双引号或单引号:yum list "vi*"
- yum list 或 yum list all 输出所有的已安装软件包和可安装软件包
- yum list installed 输出所有已安装软件包
- yum list available 输出所有可安装软件包
- 正则语法举例:yum list abrt-addon* abrt-plugin*
- 正则语法举例:yum list installed "krb?-*"
- 正则语法举例:yum list available gstreamer*plugin*
查询软件包元信息
- 查看软件包:yum info abrt,会列举出已安装和仓库中可安装的软件包,与 rpm -q --info abrt-server-info-page 类似,但 rpm -q 仅支持查看已安装的软件包,并且 yum info 支持查看软件包的仓库来源
- 正则语法举例:yum info abrt*
- 命令: yumdb info abrt-tui,支持查看软件包更多的元信息,其中 reason = user 表示用户主动安装,reason = dep 表示由于其他软件包依赖才安装的
查询软件包安装的文件
- 如果是本地 RPM 包文件,则使用命令:rpm -qlp [包的路径]
- 如果是 yum 安装的软件包,则使用 yum-utils 工具(安装:yum install -y yum-utils):repoquery -ql <package_name>
下载软件包
- 下载软件包:yum install wireshark.x86_64,不要选择 y 而是选择 d,即是只下载,不安装,下载后的 rpm 包位置:find /var/cache/yum/x86_64/ -type f -name wireshark*
安装软件包
- 安装软件包:yum install sqlite 或 yum install sqlite.i686
- 通过软件包提供的文件来安装软件包:yum install /usr/sbin/httpd,从这里可以看出 yum install 命令有一套复杂的分析逻辑来解析参数含义,这套逻辑是耗时的。要想加速安装过程,可以明确指名参数就是软件包名称:yum install -n name;或明确指名参数就是软件包名称加架构:yum installl -na name.architecture;或明确指名更详细的参数:yum install -nevra name-epoch:version-release.architecture;
- 同时,也支持:yum remove -n, yum remove -na, yum remove -nevra
- 如果不确定某个软件包提供的二进制文件位于 bin/ 文件夹还是 sbin/ 文件夹,可以使用命令:yum provides */httpd
- 正则语法举例:yum install audacious-plugins-*
- 安装本地软件包(比如之前使用了 yum install package_name 仅下载,未安装):yum localinstall path
卸载软件包
- 卸载软件包:yum remove wireshark,卸载命令不是 uninstall,有点奇怪呀!
查看有更新的软件包
- 查看有更新的软件包,使用命令:yum check-update
更新软件包
- 你可以选择更新单个或多个软件包,也可以一次更新所有软件包。如果你更新的软件包的依赖也有更新可用,则它们也会跟着更新。
- 要更新单个软件包,以 root 身份运行命令:yum update package_name
- 相似的,可以运行命令更新一个软件包组:yum group update group_name。关于软件包组的更新信息,可以参考:Section 9.3, “Working with Package Groups”
- Yum 也提供一个与 update 命令基本一样的命令 upgrade ,但 upgrade 会启用 obsoletes 配置(参考:Section 9.5.1, “Setting [main] Options”)。在配置文件 /etc/yum.conf 中,默认情况下,obsoletes 配置是启用的,这也就使得这两个命令功能一样。
- 更新所有软件包以及它们的依赖:yum update
- 仅执行安全相关的更新:yum update --security
- 执行最近的安全相关的更新:yum update-minimal --security。例如:the kernel-3.10.0-1 是目前系统上安装的软件包,kernel-3.10.0-2 是作为安全更新分发的软件包,kernel-3.10.0-3 是作为修复 bug 分发的软件包,那么yum update-minimal --security 更新到版本 kernel-3.10.0-2,yum update --security 更新到版本 kernel-3.10.0-3
- 可以使用 yum-cron 服务自动刷新软件包数据库和下载更新,关于 yum-cron 详情参考:Section 9.7, “Automatically Refreshing Package Database and Downloading Updates with Yum-cron”
离线更新软件包
离线条件下,使用 ISO 镜像文件,yum update 命令可以简单快速的更新软件包,步骤如下:
- 创建挂载目录:mkdir /media/mount_dir
- 挂在 ISO 镜像文件:mount -o loop iso_file_path /media/mount_dir
- 复制一份仓库配置:cp /media/mount_dir/media.repo /etc/yum.repos.d/new.repo
- 修改仓库配置文件,增加如下一行:baseurl=file:///media/mount_dir
- 更新软件包:yum update
- 取消挂载:umount /media/mount_dir
- 删除挂载目录:rmdir /media/mount_dir
- 删除仓库配置:rm /etc/yum.repos.d/new.repo
软件包组
查询
- 查询软件包组概览:yum groups summary
- 查询软件包组列表:yum group list glob_expression
- 查询软件包组列表,并且带有 group id:yum group list ids
- 查询软件包元信息:yum group info 'KDE Desktop'
安装
- 根据软件包组名安装:yum group install "group name"
- 根据软件包组 id 安装:yum group install groupid
- 安装 KDE Desktop 软件包组的四种方法,第一种:yum group install "KDE Desktop"
- 安装 KDE Desktop 软件包组的四种方法,第二种:yum group install kde-desktop
- 安装 KDE Desktop 软件包组的四种方法,第三种:yum install @"KDE Desktop"
- 安装 KDE Desktop 软件包组的四种方法,第四种:yum install @kde-desktop
卸载
- 卸载 KDE Desktop 软件包组的四种方法,第一种:yum group remove "KDE Desktop"
- 卸载 KDE Desktop 软件包组的四种方法,第二种:yum group remove kde-desktop
- 卸载 KDE Desktop 软件包组的四种方法,第三种:yum remove @"KDE Desktop"
- 卸载 KDE Desktop 软件包组的四种方法,第四种:yum remove @kde-desktop
事务历史
yum history 命令允许用户按时间线查看 yum 事务,事务发生时的日期和时间、受影响的包数目、事务是否成功和 RPM 数据库在事务之间是否有更改。另外,这个命令还可以用于 undo 或 redo 某个事务。所有的历史事务数据存储在 /var/lib/yum/history/ 文件夹中的 history 数据库中。
查询事务列表
- 查询事务状态概览:yum history stats,可以查看到事务 DB 文件
- 查询最近事务列表,可以使用命令:yum history 或 yum history list
- 查询所有事务列表,可以使用命令:yum history list all
- 查询某个 id 范围的事务,可以使用命令:yum history list 1..5
- 查询包含某个软件包更改的事务:可以使用命令:yum history list vim*
Action(s) 字段取值:
Action | Abbreviation | Description |
---|---|---|
Downgrade | D | At least one package has been downgraded to an older version. |
Erase | E | At least one package has been removed. |
Install | I | At least one new package has beed install. |
Obsoleting | O | At least one packge has been marked as obsolete. |
Reinstall | R | At least one package has been reinstalled. |
Update | U | At least one package has been updated to a newer version. |
Altered 字段取值:
Symbol | Description |
---|---|
< | Before the transaction finished, the rpmdb database was changed outside yum. |
> | After the transaction finished, the rmpdb database was changed outside yum. |
* | The transaction failed to finish. |
# | The transaction finished successfully, but yum returned a non-zero exit code. |
E | The transaction finished successfully, but an error or a warning was displayed. |
P | The transaction finished successfully, but problems already existed in the rmpdb database. |
s | The transaction finished successfully, but the --skip-broken command-line option was used and certain packages were skipped. |
- 查询事务记录概览:yum history summary
- 查询某个事务记录概览:yum history summary 51
- 查询某段 ID 范围内的事务记录概览:yum history summary 1..5
- 查询包含某个软件包更改的事务记录概览:yum history summary vim*
- 以软件包视角,查询事务列表:yum history package-list vim*
查询事务详情
- 查询某个事务详情:yum history info 51
- 查询最近一次事务详情:yum history info
- 查询某段事务详情:yum history info 30..32
- 查询某个事务附加信息:yum history addon-info 50
关键词 | 含义 |
---|---|
config-main | global yum options that were in use during the transaction. See Section 9.5.1, “Setting [main] Options” for information on how to change global options. |
config-repos | options for individual yum repositories. See Section 9.5.2, “Setting [repository] Options” for information on how to change options for individual repositories. |
saved_tx | the data that can be used by the yum load-transaction command in order to repeat the transaction on another machine (see below). |
- 查询最近事务附加信息:yum history addon-info 或 yum history addon-info last
同步 rpmdb 和 yumdb
- 同步 rpmdb 和 yumdb:yum history sync
事务的 undo 和 redo
- yum history undo id
- yum history redo id
- 多台机器执行相同的事务:① 导出事务:yum -q history addon-info id saved_tx > file_name;② 导入事务:yum load-transaction file_name
启动新的事务历史
- 事务历史存储在 /var/libyum/history/ 文件夹中的一个 SQLite 数据库文件中;
- 启动新的事务历史:yum history new,该命令会创建一个全新的数据库文件来存储事务历史;
Yum 和 Yum 仓库配置
Yum 和 Yum 仓库的配置文件是 /etc/yum.conf,该文件包含一个 [main] 小节和多个 [repository] 小节,其中,[main] 小节设置的是全局配置,[repository] 中的配置可以覆盖 [main] 中的配置。但是,不建议在 /etc/yum.conf 上面配置 [repository] 配置,而是建议放在 /etc/yum.repos.d/ 目录下单独的文件中。
[main] 小节配置项
- assumeyes=0 表示:询问用户输入 yes/no
- assumeyes=1 表示:-y, --assumeyes answer yes for all questions
- cachedir=directory 配置存储缓存和数据库的文件
- debuglevel=0 表示禁用 debug 输出
- debuglevel=[1-10] debug 日志级别,值越大日志越详细