Yum 更新与升级

到目前为止,我们在本教程中只讨论了 yum update 命令,但还有另一个非常相似的命令:yum upgrade。

$ yum upgrade

yum upgrade 和 yum update有什么区别?

这两个命令之间有一个小的区别。
Yum update 将更新我们系统上的软件包,但跳过删除过时的软件包。

Yum upgrade 还会更新我们系统上的所有软件包,但它也会删除过时的软件包。

这本质上使 yum update 成为更安全的选择,因为我们不必担心在更新软件时意外删除必要的软件包。

执行 yum upgrade 命令时要谨慎,因为它可能不会保留我们仍在使用的某些软件包。

yum 更新如何工作?

我们可以使用 yum update 命令更新系统上安装的应用程序。
如果我们在没有指定任何包名称的情况下运行该命令,它将更新系统上的所有包。

$ yum update

运行此命令时,yum 将首先检查其存储库中是否有系统当前安装的软件的更新版本。

查看 yum 计划升级的软件列表后,我们可以通过键入“y”并按 Enter 来确认这些更改。

然后 Yum 将执行升级,这可能需要一些时间,具体取决于连接速度和系统本身。

完成后,我们将获得最终摘要,其中将列出所有成功升级的软件包,以及可能遇到的任何错误。

跳过错误

更新或者安装软件包时,该软件包可能需要另外的软件才能正常运行。
Yum 知道这些依赖项,并会在更新期间尝试通过安装或者升级所需的另外包来解决它们。

如果 yum 在安装必要的依赖项时遇到问题,它会产生一个错误并且不会继续进行下去。
如果我们有其他软件包需要更新,这是一个问题。

要指示 yum 继续更新其他软件包并跳过依赖项损坏的软件包,我们可以在 yum update 命令中指定 -skip-broken 命令。

$ yum update --skip-broken

更新单个包

如果我们需要更新某个包而不为每个安装的应用程序运行更新,只需在 yum update 命令中指定包的名称。

$ yum update name-of-package

可以指定多个包,用空格分隔。
我们需要输入完整的包名称,以便 yum 在其存储库中找到它;
如果我们不确定软件包名称,请首先检查哪些软件包可以更新:

$ yum check-update

显示补丁

Yum 可以使用以下命令显示可用的安全补丁,而无需安装它们:

$ yum updateinfo list security

如果它没有返回任何输出,这意味着你的系统上没有任何软件可用的安全补丁。

排除多个包

我们可以使用更多 -exclude 标志排除多个包。

$ yum update --exclude=kernel* --exclude=httpd

回滚(恢复)更新

yum 的一个很棒的功能是它允许我们撤消最近的更新,从而将升级后的软件包恢复到以前的版本。

每个 yum 操作(安装、更新、擦除等)都会分配一个事务 ID,并且在撤消 yum 更新时必须指定此 ID。
要查看最近 yum 操作的事务 ID 列表,请使用以下命令:

$ yum history

要撤消此更改并将程序回滚到以前的版本,请发出以下命令:

$ yum history undo 7

检查上次运行 yum 更新的时间

要查看 yum 事务列表以及它们运行的日期和时间,请使用 yum history 命令。

$ yum history

更新除某些软件包外的所有软件包

如果我们需要运行 yum update 命令来更新所有软件包但我们希望排除某个软件包,我们可以指定 -exclude 选项。

不更新内核包:

$ yum update --exclude=kernel*

星号用作通配符,以防有多个相关包,或者我们不知道包的全名。

或者:

$ yum update -x 'kernel*'

从本地仓库更新

可以为 yum 设置本地存储库,以便在进行更新时进行查询。
如果我们想使用 yum 更新未包含在默认存储库中的软件包,或者我们需要升级离线系统,通常会这样做。

首先,将所有更新的 RPM 文件放在一个新文件夹中。
在本例中,我们将使用 /root/rpms。

接下来,转到以下目录,我们可以其中看到 yum 的所有 repo 文件:

$ cd /etc/yum.repos.d

要设置本地存储库,请在此目录中创建一个新文件。

$ vi MyRepo.repo

在 repo 文件中,以这种格式配置它,根据需要更改行:

[MyRepo]
name=My Local Repo
baseurl=file:///root/rpms
enabled=1
gpgcheck=0

本地存储库和远程存储库之间的最大区别在于“baseurl”行,其中 file:// 协议指定本地文件,而不是远程协议 http:// 或者 ftp://

保存文件后,设置正确的权限:

$ chmod 644 MyRepo.repo

存储库现在应该可以使用了。
在尝试 yum update 命令之前,请确保清除 yum 的缓存:

$ yum clean all

清理失败的 yum 更新(故障排除)

如果运行 yum update 命令时一个或者多个软件包升级失败,系统可能会安装重复的软件包(同一程序的 2 个版本)。

有时,按照上一节中的回滚说明操作可以解决问题。
如果这不起作用,我们可以使用以下命令删除系统上的重复包:

$ package-cleanup --dupes

Yum 存储包、元数据和标头的信息缓存。
如果遇到错误,清除 yum 的缓存是故障排除的良好第一步。
使用以下命令来做到这一点:

$ yum clean all

获取需要更新的软件包列表

像往常一样运行 yum update 命令,没有其他选项,将输出可用更新的列表。

$ yum update

如果我们想查看有关可用软件包更新的一些添加信息,执行以下命令:

$ yum updateinfo

要查看有关系统可用的安全更新的信息,执行以下命令:

$ yum updateinfo security

有可用更新时通知

有一些软件包可以帮助管理系统上的 yum 更新。
有些甚至可以在 yum 有可供安装的更新时通知管理员。
其中一项服务称为 yum-cron。

使用 yum 安装 yum-cron:

$ yum install yum-cron

设置 yum-cron 服务在开机时启动:

$ systemctl enable yum-cron.service
$ systemctl start yum-cron.service

使用 vi 或者我们喜欢的文本编辑器在配置文件中配置 yum-cron 的设置:

$ vi /etc/yum/yum-cron.conf

在此文件中,我们可以指定是否应自动应用更新。
如果我们只想接收通知,请在配置文件中填写电子邮件信息。
Yum-cron 会在系统有可用更新时向我们发送电子邮件。

apply_updates = no #don’t apply updates automatically
email_from = jack@onitroad
email_to = jack@onitroad
email_host = localhost

yum update 使用什么端口

Yum 在检查更新时使用端口 80。
如果我们查看系统上的存储库文件,我们会看到里面的所有链接都以 http 开头。

如果我们需要在防火墙中创建规则以允许 yum 运行,则需要允许端口 80。

Linuxyum update 命令示例

Yum 是在 Red Hat、CentOS 和其他使用 RPM 包管理器的 Linux 发行版上使用的包管理器。

Yum 用于安装、更新、删除或者以其他方式操作安装在这些 Linux 系统上的软件包。

无需 gpg 检查即可更新

我们可以使用 GPG 密钥来验证 RPM 包的真实性。
yum 中的 -nogpgcheck 选项将指示它跳过检查包上的 GPG 签名。
这在我们有未签名的包或者没有 GPG 密钥的情况下很有用。

$ yum update --nogpgcheck

当我们正常运行 yum update 命令时,如果遇到类似““Package NameOfPackage.rpm is not signed .. install failed!”之类的错误,这是一个快速解决方案。
-nogpgcheck 选项将忽略此警告并继续升级包。

yum check updates 和 yum list update的区别

虽然这两个命令听起来很相似,但在 yum 中检查更新和列出更新是有区别的。

$ yum list updates

上面显示的列出更新的命令将列出存储库中具有可用更新的所有包。
请记住,存储库中的某些软件包甚至可能未安装在系统上。

$ yum check-update

上面看到的检查更新的命令是一种在不提示用户交互的情况下检查更新的方法。
例如,如果我们正在编写脚本以检查更新,则我们会选择check-update命令。

如果有可用更新的包,check-update 命令将返回退出值 100,如果没有可用更新,它将返回退出值 0。

如果遇到错误,则返回值 1.

日期:2020-07-15 11:16:48 来源:oir作者:oir