Yum

参考文档

  1. 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 文档

  1. 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 命令获得了超级用户权限。

软件包仓库

查询软件包仓库列表

  1. 列举启用的软件包仓库:yum repolist
  2. 列举启用的软件包仓库的详细信息:yum repolist -v 或 yum repoinfo
  3. 列举禁用的软件包仓库:yum repolist disabled
  4. 列举全部(启用+禁用)的软件包仓库:yum repolist all
  5. 正则语法举例:yum repolist mysql-tools* -v,正则语法详情类似列举软件包

软件包

搜索软件包

  1. 根据 name 和 summary 匹配:yum search vim
  2. 根据所有元信息匹配:yum search all vim

查询软件包列表

  1. yum list 命令支持简单的正则语法:* 代表任意字符、?代表单个字符。为了防止 Shell 解释这些特殊字符,通常有两种方法:① 使用反斜线,例如:yum list vi*;② 使用双引号或单引号:yum list "vi*"
  2. yum list 或 yum list all 输出所有的已安装软件包和可安装软件包
  3. yum list installed 输出所有已安装软件包
  4. yum list available 输出所有可安装软件包
  5. 正则语法举例:yum list abrt-addon* abrt-plugin*
  6. 正则语法举例:yum list installed "krb?-*"
  7. 正则语法举例:yum list available gstreamer*plugin*

查询软件包元信息

  1. 查看软件包:yum info abrt,会列举出已安装和仓库中可安装的软件包,与 rpm -q --info abrt-server-info-page 类似,但 rpm -q 仅支持查看已安装的软件包,并且 yum info 支持查看软件包的仓库来源
  2. 正则语法举例:yum info abrt*
  3. 命令: yumdb info abrt-tui,支持查看软件包更多的元信息,其中 reason = user 表示用户主动安装,reason = dep 表示由于其他软件包依赖才安装的

查询软件包安装的文件

  1. 如果是本地 RPM 包文件,则使用命令:rpm -qlp [包的路径]
  2. 如果是 yum 安装的软件包,则使用 yum-utils 工具(安装:yum install -y yum-utils):repoquery -ql <package_name>

下载软件包

  1. 下载软件包:yum install wireshark.x86_64,不要选择 y 而是选择 d,即是只下载,不安装,下载后的 rpm 包位置:find /var/cache/yum/x86_64/ -type f -name wireshark*

安装软件包

  1. 安装软件包:yum install sqlite 或 yum install sqlite.i686
  2. 通过软件包提供的文件来安装软件包:yum install /usr/sbin/httpd,从这里可以看出 yum install 命令有一套复杂的分析逻辑来解析参数含义,这套逻辑是耗时的。要想加速安装过程,可以明确指名参数就是软件包名称:yum install -n name;或明确指名参数就是软件包名称加架构:yum installl -na name.architecture;或明确指名更详细的参数:yum install -nevra name-epoch:version-release.architecture;
  3. 同时,也支持:yum remove -n, yum remove -na, yum remove -nevra
  4. 如果不确定某个软件包提供的二进制文件位于 bin/ 文件夹还是 sbin/ 文件夹,可以使用命令:yum provides */httpd
  5. 正则语法举例:yum install audacious-plugins-*
  6. 安装本地软件包(比如之前使用了 yum install package_name 仅下载,未安装):yum localinstall path

卸载软件包

  1. 卸载软件包:yum remove wireshark,卸载命令不是 uninstall,有点奇怪呀!

查看有更新的软件包

  1. 查看有更新的软件包,使用命令:yum check-update

更新软件包

  1. 你可以选择更新单个或多个软件包,也可以一次更新所有软件包。如果你更新的软件包的依赖也有更新可用,则它们也会跟着更新。
  2. 要更新单个软件包,以 root 身份运行命令:yum update package_name
  3. 相似的,可以运行命令更新一个软件包组:yum group update group_name。关于软件包组的更新信息,可以参考:Section 9.3, “Working with Package Groups”
  4. Yum 也提供一个与 update 命令基本一样的命令 upgrade ,但 upgrade 会启用 obsoletes 配置(参考:Section 9.5.1, “Setting [main] Options”)。在配置文件 /etc/yum.conf 中,默认情况下,obsoletes 配置是启用的,这也就使得这两个命令功能一样。
  5. 更新所有软件包以及它们的依赖:yum update
  6. 仅执行安全相关的更新:yum update --security
  7. 执行最近的安全相关的更新: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
  8. 可以使用 yum-cron 服务自动刷新软件包数据库和下载更新,关于 yum-cron 详情参考:Section 9.7, “Automatically Refreshing Package Database and Downloading Updates with Yum-cron”

离线更新软件包

离线条件下,使用 ISO 镜像文件,yum update 命令可以简单快速的更新软件包,步骤如下:

  1. 创建挂载目录:mkdir /media/mount_dir
  2. 挂在 ISO 镜像文件:mount -o loop iso_file_path /media/mount_dir
  3. 复制一份仓库配置:cp /media/mount_dir/media.repo /etc/yum.repos.d/new.repo
  4. 修改仓库配置文件,增加如下一行:baseurl=file:///media/mount_dir
  5. 更新软件包:yum update
  6. 取消挂载:umount /media/mount_dir
  7. 删除挂载目录:rmdir /media/mount_dir
  8. 删除仓库配置:rm /etc/yum.repos.d/new.repo

软件包组

查询

  1. 查询软件包组概览:yum groups summary
  2. 查询软件包组列表:yum group list glob_expression
  3. 查询软件包组列表,并且带有 group id:yum group list ids
  4. 查询软件包元信息:yum group info 'KDE Desktop'

安装

  1. 根据软件包组名安装:yum group install "group name"
  2. 根据软件包组 id 安装:yum group install groupid
  3. 安装 KDE Desktop 软件包组的四种方法,第一种:yum group install "KDE Desktop"
  4. 安装 KDE Desktop 软件包组的四种方法,第二种:yum group install kde-desktop
  5. 安装 KDE Desktop 软件包组的四种方法,第三种:yum install @"KDE Desktop"
  6. 安装 KDE Desktop 软件包组的四种方法,第四种:yum install @kde-desktop

卸载

  1. 卸载 KDE Desktop 软件包组的四种方法,第一种:yum group remove "KDE Desktop"
  2. 卸载 KDE Desktop 软件包组的四种方法,第二种:yum group remove kde-desktop
  3. 卸载 KDE Desktop 软件包组的四种方法,第三种:yum remove @"KDE Desktop"
  4. 卸载 KDE Desktop 软件包组的四种方法,第四种:yum remove @kde-desktop

事务历史

yum history 命令允许用户按时间线查看 yum 事务,事务发生时的日期和时间、受影响的包数目、事务是否成功和 RPM 数据库在事务之间是否有更改。另外,这个命令还可以用于 undo 或 redo 某个事务。所有的历史事务数据存储在 /var/lib/yum/history/ 文件夹中的 history 数据库中。

查询事务列表

  1. 查询事务状态概览:yum history stats,可以查看到事务 DB 文件
  2. 查询最近事务列表,可以使用命令:yum history 或 yum history list
  3. 查询所有事务列表,可以使用命令:yum history list all
  4. 查询某个 id 范围的事务,可以使用命令:yum history list 1..5
  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.
  1. 查询事务记录概览:yum history summary
  2. 查询某个事务记录概览:yum history summary 51
  3. 查询某段 ID 范围内的事务记录概览:yum history summary 1..5
  4. 查询包含某个软件包更改的事务记录概览:yum history summary vim*
  5. 以软件包视角,查询事务列表:yum history package-list vim*

查询事务详情

  1. 查询某个事务详情:yum history info 51
  2. 查询最近一次事务详情:yum history info
  3. 查询某段事务详情:yum history info 30..32
  4. 查询某个事务附加信息: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).
  1. 查询最近事务附加信息:yum history addon-info 或 yum history addon-info last

同步 rpmdb 和 yumdb

  1. 同步 rpmdb 和 yumdb:yum history sync

事务的 undo 和 redo

  1. yum history undo id
  2. yum history redo id
  3. 多台机器执行相同的事务:① 导出事务:yum -q history addon-info id saved_tx > file_name;② 导入事务:yum load-transaction file_name

启动新的事务历史

  1. 事务历史存储在 /var/libyum/history/ 文件夹中的一个 SQLite 数据库文件中;
  2. 启动新的事务历史:yum history new,该命令会创建一个全新的数据库文件来存储事务历史;

Yum 和 Yum 仓库配置

Yum 和 Yum 仓库的配置文件是 /etc/yum.conf,该文件包含一个 [main] 小节和多个 [repository] 小节,其中,[main] 小节设置的是全局配置,[repository] 中的配置可以覆盖 [main] 中的配置。但是,不建议在 /etc/yum.conf 上面配置 [repository] 配置,而是建议放在 /etc/yum.repos.d/ 目录下单独的文件中。

[main] 小节配置项

  1. assumeyes=0 表示:询问用户输入 yes/no
  2. assumeyes=1 表示:-y, --assumeyes answer yes for all questions
  3. cachedir=directory 配置存储缓存和数据库的文件
  4. debuglevel=0 表示禁用 debug 输出
  5. debuglevel=[1-10] debug 日志级别,值越大日志越详细
posted @ 2022-10-15 20:03  optor  阅读(218)  评论(0编辑  收藏  举报