使用 DNF 工具管理软件
使用 DNF 软件管理工具管理 RPM 存储库中的内容
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 点顶部导航栏中的 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 Red Hat Enterprise Linux 9 中的软件管理工具
在 Red Hat Enterprise Linux (RHEL) 9 中,使用 DNF 工具来管理软件。出于与之前的主 RHEL 版本的兼容性原因,您仍然可以使用 yum
命令。但是,在 RHEL 9 中,yum
是 dnf
的一个别名,它提供了与 yum
的一定程度的兼容性。
虽然 RHEL 8 和 RHEL 9 基于 DNF,但它们与 RHEL 7 中使用的 YUM 兼容。
第 2 章 RHEL 9 发布的内容
在以下部分中,了解软件是如何在 Red Hat Enterprise Linux 9 中分发的:
2.1. 软件仓库
Red Hat Enterprise Linux (RHEL)通过不同的存储库分发内容,例如:
- BaseOS
- BaseOS 存储库中的内容由底层操作系统功能的核心组件组成,其为所有安装提供基础。此内容以 RPM 格式提供,它的支持条款与 RHEL 早期版本中的条款类似。
- AppStream
- AppStream 仓库的内容包括额外的用户空间应用程序、运行时语言和数据库来支持各种工作负载和使用案例。
RHEL 需要 BaseOS 和 AppStream 内容集,它们在所有 RHEL 订阅中都提供。
- CodeReady Linux Builder
- CodeReady Linux Builder 存储库在所有 RHEL 订阅中可用。它为开发人员提供了额外的软件包。红帽不支持 CodeReady Linux Builder 存储库中包含的软件包。
其它资源
2.2. 应用程序流
红帽提供多个用户空间组件的版本作为应用程序流,它们比核心操作系统软件包的更新更频繁。这为自定义 Red Hat Enterprise Linux (RHEL)提供了更多的灵活性,而不影响底层平台或特定部署的稳定性。
提供以下格式的应用程序流:
- RPM 格式
- 模块,它们是 RPM 格式的扩展
- Software Collections
RHEL 9 通过提供初始应用程序流版本作为 RPM 来提高应用程序流体验,您可以使用 dnf install
命令安装它们。
从 RHEL 9.1 开始,红帽提供额外的应用程序流版本作为模块,其具有较短的生命周期。
每个应用程序流都有自己的生命周期,它可能与 RHEL 9 的生命周期相同或更短。请参阅 Red Hat Enterprise Linux 应用程序流生命周期。
始终决定您要安装应用程序流的哪个版本,并确保首先查看 RHEL 应用程序流生命周期。
2.3. 模块
模块是代表一个组件的一组 RPM 软件包。典型的模块包含以下软件包类型:
- 带有应用程序的软件包
- 带有特定于应用程序依赖项库的软件包
- 带有应用程序文档的软件包
- 带有助手工具的软件包
2.4. 模块流
模块流是可以作为 AppStream 物理存储库中的虚拟存储库的过滤器。AppStream 组件的模块流版本。每个流都独立接收更新,它们可以依赖于其他模块流。
模块流可以是活跃的或者不活跃的。活跃的流可让系统访问特定模块流中的 RPM 软件包,允许安装相应的组件版本。
在以下情况下,流处于活跃状态:
- 如果管理员明确启用了它。
- 如果流是启用的模块的依赖项。
- 如果流是默认流。每个模块都可以有一个默认流,但在 Red Hat Enterprise Linux 9 中,没有定义默认流。如果需要,您可以配置默认流,如 定义自定义默认模块流和配置文件 中所述。
给定时间点上只能激活一个特定模块的流。因此,只有特定流中的软件包可用。
在为运行时用户应用程序或开发人员应用程序选择特定流前,请考虑以下几点:
- 所需功能以及哪个组件版本支持该功能
- 与应用程序或用例的兼容
- 应用程序流的 生命周期 和您的更新计划
有关所有可用模块和流的列表,请查看软件包清单。有关每个组件的更改,请查看 发行注记。
其它资源
2.5. 模块配置集
模块配置文件是为特定用例要一起安装的推荐的软件包列表,如服务器、客户端、开发、最小安装或其他。这些软件包列表可以包含模块流以外的软件包,通常是来自 BaseOS 存储库或流依赖项的软件包。
使用配置集安装软件包是为方便用户提供的一次性操作。您还可以使用同一模块流的多个配置集安装软件包,而无需进一步准备步骤。
每个模块流可以有任何数量的配置集,包括没有。对于任何给定的模块流,其配置文件的某些部分可以被标记为 default,然后在您没有明确指定配置文件时用于配置文件安装操作。但是,模块流的默认配置文件的存在不是必需的。
例 2.1. nodejs
模块配置集
提供 Node.js 运行时环境的 nodejs
模块为安装提供以下配置集:
# dnf module list nodejs
Name Stream Profiles Summary
nodejs 18 common [d], development, minimal, s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
在本例中,提供了以下配置文件:
-
common
:生产就绪软件包。这是默认的配置文件([d]
)。 -
development
:生产就绪软件包,包括 Node.js 开发标头。 -
minimal
:提供 Node.js 运行时环境的最小软件包集合。 -
s2i
: 创建 Node.js 源-到-镜像 (S2I) Linux 容器所需的软件包。
第 3 章 配置 DNF
DNF 及相关工具的配置存储在 /etc/dnf/dnf.conf
文件的 [main]
部分中。
在以下部分中,了解如何使用 /etc/dnf/dnf.conf
配置文件配置 DNF :
- 查看当前的 DNF 配置
- 设置 DNF [main] 选项
- 管理、启用和禁用 DNF 插件
3.1. 查看当前的 DNF 配置
/etc/dnf/dnf.conf
文件中的 [main]
部分仅包含已明确设置的设置。但是,您可以显示 [main]
部分的所有设置,包括尚未设置的部分,因此请使用它们的默认值。
流程
显示全局 DNF 配置:
# dnf config-manager --dump
其它资源
-
dnf.conf(5)
手册页
3.2. 设置 DNF 主选项
/etc/dnf/dnf.conf
文件包含一个 [main]
部分。本节中的键-值对会影响 DNF 如何操作及对待存储库。
流程
-
编辑
/etc/dnf/dnf.conf
文件。 -
根据您的要求更新
[main]
部分。 - 保存更改。
其它资源
-
dnf.conf (5)
手册页中的[main] OPTIONS
和OPTIONS FOR BOTH [main] AND REPO
部分。
3.3. 管理 DNF 插件
每个安装的插件都可以在 /etc/dnf/plugins/
目录中有自己的配置文件。在此目录中命名插件配置文件 <plug-in_name>.conf
。默认情况下,插件通常是启用的。要在其中一个配置文件中禁用插件,请在文件中添加以下内容:
[main] enabled=False
3.4. 启用和禁用 DNF 插件
在 DNF 工具中,插件会被默认加载。但是,您可以影响 DNF 加载哪个插件。
禁用所有插件只用于诊断潜在的问题。DNF 需要某些插件,如 product-id
和 subscription-manager
,禁用它们会导致 Red Hat Enterprise Linux 无法从 Content Delivery Network (CDN)安装或更新软件。
流程
使用以下方法之一会影响 DNF 如何使用插件:
要在全局范围内启用或禁用 DNF 插件加载,请将
plugins
参数添加到/etc/dnf/dnf.conf
文件的[main]
部分中。-
设置
plugins=1
(默认)以启用加载所有 DNF 插件。 -
设置
plugins=0
以禁用加载所有 DNF 插件。
-
设置
-
要禁用特定的插件,请将
enabled=False
添加到/etc/dnf/plugins/<plug-in_name>.conf
文件的[main]
部分中。 要禁用特定命令的所有 DNF 插件,请在命令中附加
--noplugins
选项。例如,要为单个 update 命令禁用 DNF 插件,请输入:# dnf --noplugins update
要为单个命令禁用某些 DNF 插件,请在命令中附加
--disableplugin=plugin-name
选项。例如,要为单个 update 命令禁用某个 DNF 插件,请输入:# dnf update --disableplugin=<plugin_name>
要为单个命令启用某些 DNF 插件,请在命令中附加
--enableplugin=plugin-name
选项。例如,要为单个 update 命令启用某个 DNF 插件,请输入:# dnf update --enableplugin=<plugin_name>
第 4 章 搜索 RHEL 9 内容
在以下部分中,了解如何使用 DNF 查找和检查 Red Hat Enterprise Linux 9 中 AppStream 和 BaseOS 存储仓库中的内容:
4.1. 搜索软件包
要识别哪个软件包提供您需要的软件,您可以使用 DNF 搜索存储库。
流程
根据您的场景,使用以下选项之一来搜索存储库:
要在软件包的名称或摘要中搜索术语,请输入:
$ dnf search <term>
要在软件包的名称、概述或描述中搜索术语,请输入:
$ dnf search --all <term>
请注意,在描述中使用
--all
选项进行额外搜索比普通搜索操作要慢。要搜索软件包名称,并在输出中列出软件包名称及其版本,请输入:
$ dnf repoquery <package_name>
要搜索哪个软件包提供了文件,请指定文件名或文件的路径:
$ dnf provides <file_name>
4.2. 列出软件包
您可以使用 DNF 显示存储库中提供的软件包及其版本列表。如果需要,您可以过滤此列表,例如,只列出提供更新的软件包。
流程
列出所有可用软件包的最新版本,包括构架、版本号以及从其中安装的存储库:
$ dnf list --all ... zlib.x86_64 1.2.11-39.el9 @rhel-9-for-x86_64-baseos-rpms zlib.i686 1.2.11-39.el9 rhel-9-for-x86_64-baseos-rpms zlib-devel.i686 2.11-39.el9 rhel-9-for-x86_64-appstream-rpms zlib-devel.x86_64 1.2.11-39.el9 rhel-9-for-x86_64-appstream-rpms ...
存储库前面的
@
符号表示此行中的软件包当前已安装。另外,要显示所有可用的软件包,包括版本号和架构,请输入:
$ dnf repoquery ... zlib-0:1.2.11-35.el9_1.i686 zlib-0:1.2.11-35.el9_1.x86_64 zlib-0:1.2.11-39.el9.i686 zlib-0:1.2.11-39.el9.x86_64 zlib-devel-0:1.2.11-39.el9.i686 zlib-devel-0:1.2.11-39.el9.x86_64 ...
另外,您可以使用其他选项而不是
--all
来过滤输出,例如:-
使用
--installed
仅列出已安装的软件包。 -
使用
--available
列出所有可用软件包。 -
使用
--upgrades
列出新版本提供的软件包。
注意您可以通过将全局表达式附加为参数来过滤结果。如需了解更多详细信息,请参阅 在 DNF 输入中指定全局表达式。
-
使用
4.3. 列出软件仓库
要获得系统上启用和禁用的存储库的概述,您可以列出它们。
流程
列出系统上所有启用的存储库:
$ dnf repolist
要只显示某些存储库,请在命令中附加以下选项之一:
-
附加
--disabled
只列出禁用的存储库。 -
附加
--all
列出启用和禁用的存储库。
-
附加
可选:列出存储库的额外信息:
$ dnf repoinfo <repository_name>
注意您可以使用全局表达式过滤结果。详情请参阅 在 DNF 输入中指定全局表达式。
4.4. 显示软件包信息
您可以查询 DNF 存储库来显示软件包的详情,如下所示:
- 版本
- 发布
- 架构
- 软件包大小
- 描述
流程
显示一个或多个可用软件包的信息:
$ dnf info <package_name>
这个命令显示当前安装的软件包的信息,如果有的话,显示存储库中的较新版本。另外,使用以下命令显示存储库中具有指定名称的所有软件包的信息:
$ dnf repoquery --info <package_name>
注意您可以通过将全局表达式附加为参数来过滤结果。详情请参阅 在 DNF 输入中指定全局表达式。
4.5. 列出软件包组和它们提供的软件包
软件包组捆绑多个软件包,您可以使用软件包组在一个步骤中安装分配给组的所有软件包。但是,在安装前必须识别所需软件包组的名称。
流程
列出已安装的和可用的组:
$ dnf group list
请注意,您可以通过在
dnf group list
命令中附加--installed
和--available
选项来过滤结果。通过使用--hidden
选项,您可以在输出中显示隐藏的组。列出特定组中包含的强制的、可选的和默认的软件包:
$ dnf group info "<group_name>"
注意您可以通过将全局表达式附加为参数来过滤结果。如需了解更多详细信息,请参阅 在 DNF 输入中指定全局表达式。
可选:查看已安装和可用的组的数量:
$ dnf group summary
4.6. 列出可用模块及其内容
通过搜索模块并使用 DNF 显示有关它们的信息,您可以识别存储库中提供了哪些模块,并在安装模块前选择合适的流。
流程
使用以下方法之一列出模块信息:
列出所有可用模块:
$ dnf module list Name Stream Profiles Summary ... nodejs 18 common [d], development, minimal, s2i Javascript runtime postgresql 15 client, server PostgreSQL server and client module ... Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
使用
dnf module list <module_name>
命令列出相同的信息,但只用于特定的模块。搜索哪个模块提供了某个软件包:
$ dnf module provides <package_name>
例如,要显示哪些模块和配置文件提供了
npm
软件包,请输入:# dnf module provides npm npm-1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697.x86_64 Module : nodejs:18:9010020221009220316:rhel9:x86_64 Profiles : common development s2i Repo : rhel-9-for-x86_64-appstream-rpms Summary : Javascript runtime ...
使用以下方法之一列出模块详情:
列出模块的所有详情,包括描述、所有配置文件的列表以及模块提供的所有软件包的列表:
$ dnf module info <module_name>
例如,要显示
nodejs
软件包的详细信息,请输入:$ dnf module info nodejs Name : nodejs Stream : 18 Version : 9010020221009220316 Context : rhel9 Architecture : x86_64 Profiles : common [d], development, minimal, s2i Default profiles : common Repo : rhel-9-for-x86_64-appstream-rpms Summary : Javascript runtime Description : Node.js is a platform built on Chrome's JavaScript runtime... Requires : platform:[el9] Artifacts : nodejs-1:18.10.0-3.module+el9.1.0+16866+0fab0697.src : nodejs-1:18.10.0-3.module+el9.1.0+16866+0fab0697.x86_64 : npm-1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697.x86_64 ...
列出每个模块配置文件安装了哪些软件包:
$ dnf module info --profile <module_name>
例如,要显示
nodejs
模块的此信息,请输入:$ dnf module info --profile nodejs Name : nodejs:18:9010020221009220316:rhel9:x86_64 common : nodejs : npm development : nodejs : nodejs-devel : npm minimal : nodejs s2i : nodejs : nodejs-nodemon : npm ...
4.7. 在 DNF 输入中指定全局表达式
您可以通过将一个或多个全局表达式附加为参数来过滤 dnf
命令的结果。
流程
如果您在
dnf
命令中使用全局表达式,请使用以下方法之一:将整个全局表达式用单引号或双引号括起来:
# dnf provides "*/<file_name>"
请注意,如果完整路径未知,您必需在
<file_name>
前加上/
用于绝对路径或加上*/
使用通配符。在它们前面使用反斜杠(
\
)字符转义通配符字符:# dnf provides \*/<file_name>
第 5 章 安装 RHEL 9 内容
在以下部分中,了解如何在 Red Hat Enterprise Linux 9 中安装内容:
- 安装由模块、流和配置文件提供的 软件包、软件包组 或一组软件包。
- 定义默认模块流和配置文件。
5.1. 安装软件包
如果软件不是默认安装的一部分,您可以手动安装它。DNF 会自动解析和安装依赖项。
先决条件
- 可选:您知道要安装的软件包的名称。
- 如果要安装的软件包由模块流提供,则会启用对应的模块流。
流程
使用以下方法之一安装软件包:
要从存储库安装软件包,请输入:
# dnf install <package_name_1> <package_name_2> ...
如果您在支持多个构架的系统上安装软件包,如
i686
和x86_64
,您可以通过将其附加到软件包名称来指定软件包的架构:# dnf install <package_name>.<architecture>
如果您只知道软件包提供的文件的路径,但知道软件包名称,您可以使用此路径安装相应的软件包:
# dnf install <path_to_file>
要安装本地 RPM 文件,请输入:
# dnf install <path_to_RPM_file>
如果软件包有依赖项,还要指定到这些 RPM 文件的路径。否则,DNF 会从存储库下载依赖项,如果存储库中没有,则会失败。
其它资源
5.2. 安装软件包组
软件包组捆绑多个软件包,您可以使用软件包组在一个步骤中安装分配给组的所有软件包。
先决条件
流程
安装软件包组:
# dnf group install <group_name_or_ID>
5.3. 安装模块化内容
对于某些软件,红帽提供了模块。您可以使用模块安装特定版本(流)和一组软件包(配置文件)。
流程
列出提供您要安装的软件包的模块:
# dnf module list <module_name>
例如,要列出
nodejs
模块的详细信息,请输入:# dnf module list nodejs Name Stream Profiles Summary nodejs 18 common [d], development, minimal, s2i Javascript runtime nodejs ... common [d], development, minimal, s2i Javascript runtime Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
安装模块:
# dnf module install <module_name>:<stream>/<profile>
如果定义了流的默认配置文件,您可以在命令中省略
/<profile>
来安装流的这个默认配置文件。注意在 Red Hat Enterprise Linux 9 中,没有预定义默认的模块流。但是,如果您在模块安装过程中指定了流,则不必提前手动启用流。
例如,要从
nodejs
模块的流18
安装默认配置文件(common
),请输入:# dnf module install nodejs:18 ===================================================================================================== Package Architecture Version Repository Size ===================================================================================================== Installing group/module packages: nodejs x86_64 ... rhel-9-for-x86_64-appstream-rpms 12 M npm x86_64 ... rhel-9-for-x86_64-appstream-rpms 2.5 M Installing weak dependencies: nodejs-docs noarch .. rhel-9-for-x86_64-appstream-rpms 7.6 M nodejs-full-i18n x86_64 .. rhel-9-for-x86_64-appstream-rpms 8.4 M Installing module profiles: nodejs/common Enabling module streams: nodejs 18
验证
验证是否启用了正确的模块流(
[e]
),并且安装了所需的配置文件([i]
):# dnf module list nodejs Updating Subscription Management repositories. Last metadata expiration check: 0:33:24 ago on Mon 24 Jul 2023 04:59:01 PM CEST. Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs) Name Stream Profiles Summary nodejs 18 [e] common [d] [i], development, minimal, s2i Javascript runtime ... Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
5.4. 定义自定义默认模块流和配置文件
Red Hat Enterprise Linux 9 不会在 AppStream 存储库中定义默认流。但是,您可以配置默认模块流和默认模块配置文件。在这种情况下,您可以在安装模块的默认流和配置文件时忽略此信息。
流程
使用
dnf module list <module_name>
命令显示可用的流及其配置文件,例如:# dnf module list nodejs Name Stream Profiles Summary nodejs 18 common [d], development, minimal, s2i Javascript runtime
在本例中,
nodejs:18
没有被设置为默认流,此流中的默认配置文件是common
。在
/etc/dnf/modules.defaults.d/
目录中创建一个 YAML 文件,以定义模块的默认流和配置文件。例如,使用以下内容创建
/etc/dnf/modules.defaults.d/nodejs.yaml
文件,来将18
定义为nodejs
模块的默认流,将minimal
定义为默认配置文件:document: modulemd-defaults version: 1 data: module: nodejs stream: "18" profiles: '18': [minimal]
验证
使用
dnf module list <module_name>
命令来验证新的默认流和配置文件设置,例如:# dnf module list nodejs Name Stream Profiles Summary nodejs 18 [d] common, development, minimal [d], s2i Javascript runtime
第 6 章 更新 RHEL 9 内容
DNF 允许您检查您的系统是否有待处理的更新。您可以列出需要更新的软件包,并选择更新单个软件包、多个软件包或者所有软件包。如果您选择更新的软件包有依赖项,它们也会被更新。
在以下部分中,了解如何使用 DNF 更新 Red Hat Enterprise Linux 9 中的内容:
6.1. 检查更新
要使用 dnf check-update
命令检查系统上已安装的软件包的可用更新,请完成以下步骤。
流程
运行以下命令,以查看系统中安装的软件包是否有可用更新:
# dnf check-update
输出返回有可用更新的软件包及其依赖项列表。
6.2. 更新软件包
要使用 dnf upgrade
命令更新单个软件包、软件包组或所有软件包及其依赖项,请完成以下步骤。
流程
要更新所有软件包及其依赖项,请使用:
# dnf upgrade
要更新单个软件包,请使用:
# dnf upgrade package-name
使用软件包名称替换 package-name。
要更新软件包组,请使用:
# dnf group upgrade group-name
使用软件包组的名称替换 group-name。
当对内核应用更新时,无论是否使用了 dnf update
或 dnf install
命令,dnf
总会安装一个新内核。
6.3. 更新与安全相关的软件包
要使用 dnf upgrade
或 dnf upgrade-minimal
命令更新与安全相关的软件包,请完成以下步骤。
流程
要升级到有安全勘误的最新可用软件包,请使用:
# dnf upgrade --security
要升级到最后一个安全勘误软件包,请使用:
# dnf upgrade-minimal --security
第 7 章 在 RHEL 9 中自动化软件更新
要自动检查并下载软件包更新,您可以使用 dnf-automatic
软件包提供的 DNF Automatic 工具。
DNF Automatic 是 DNF 的替代命令行界面,它适用于使用 systemd 计时器、cron 作业和其他此类工具自动和定期执行。
DNF Automatic 根据需要同步软件包元数据,检查可用的更新,然后根据您配置工具的方式执行以下操作之一:
- Exit
- 下载更新的软件包
- 下载并应用更新
然后,通过所选的机制(如标准输出或电子邮件)报告操作的结果。
在以下部分中,了解如何在 Red Hat Enterprise Linux 9 中自动化软件更新:
7.1. 安装 DNF Automatic
要在您的系统上安装 DNF Automatic 工具,请完成以下步骤。
流程
安装
dnf-automatic
软件包:# dnf install dnf-automatic
验证
通过确认
dnf-automatic
软件包是否存在,来验证安装是否成功:# rpm -qi dnf-automatic
7.2. DNF Automatic 配置文件
默认情况下,DNF Automatic 使用 /etc/dnf/automatic.conf
作为其配置文件来定义其行为。
配置文件被分隔为以下主题部分:
[commands]
部分设置 DNF Automatic 的操作模式。
[emitters]
部分定义如何报告 DNF Automatic 的结果。
[command_email]
部分为用来发送电子邮件的外部命令提供电子邮件发布程序配置。
[email]
部分提供电子邮件发布程序配置。
[base]
部分覆盖 DNF 的主要配置文件中的设置。
通过 /etc/dnf/automatic.conf
文件的默认设置,DNF Automatic 检查可用更新,下载它们,并将结果报告为标准输出。
[commands]
部分中的操作模式设置会被 systemd 定时器单元用于除 dnf-automatic.timer
之外的所有计时器单元使用的设置覆盖。
其它资源
- DNF Automatic 文档
-
dnf-automatic (8)
手册页 - dnf-automatic 软件包中包含的 systemd 计时器单元概述
7.3. 启用 DNF Automatic
要运行 DNF Automatic,必须始终启用并启动特定的 systemd 计时器单元。您可以使用 dnf-automatic
软件包提供的一个计时器单元,也可以根据自己的需要写入您自己的计时器单元。
要在您的系统上启用 DNF Automatic,请完成以下步骤。
先决条件
-
您可以通过修改
/etc/dnf/automatic.conf
配置文件来指定 DNF Automatic 的行为。
流程
要选择、启用并启动 下载 可用更新的 systemd 计时器单元,请使用:
# systemctl enable dnf-automatic-download.timer # systemctl start dnf-automatic-download.timer
要选择、启用并启动一个用来 下载并安装 可用更新的 systemd 计时器单元,请使用:
# systemctl enable dnf-automatic-install.timer
# systemctl start dnf-automatic-install.timer
要选择、启用并启动 报告 可用更新的 systemd 计时器单元,请使用:
# systemctl enable dnf-automatic-notifyonly.timer
# systemctl start dnf-automatic-notifyonly.timer
要选择、启用并启动一个 systemd 计时器单元,该单元 下载、下载并安装,或者 报告 可用更新,请使用:
# systemctl enable dnf-automatic.timer
# systemctl start dnf-automatic.timer
(可选)使用
--now
选项在一个命令中选择、启用并启动 systemd 计时器单元。例如:# systemctl enable --now dnf-automatic-download.timer
您还可以从命令行或自定义脚本直接执行 /usr/bin/dnf-automatic
文件来运行 DNF Automatic。
验证
验证计时器是否已启用:
# systemctl status <systemd timer unit>
其它资源
-
dnf-automatic (8)
手册页 - dnf-automatic 软件包中包含的 systemd 计时器单元概述
- DNF Automatic 配置文件
7.4. dnf-automatic
软件包中包含的 systemd 计时器单元概述
systemd 定时器单元具有优先权,并在下载和应用更新时覆盖 /etc/dnf/automatic.conf
配置文件中的设置。
例如,如果您在 /etc/dnf/automatic.conf
配置文件中设置了 download_updates = yes
,但您已激活了 dnf-automatic-notifyonly.timer 单元
,则不会下载软件包。
dnf-automatic
软件包包括以下 systemd 计时器单元:
表 7.1. dnf-automatic
软件包中包含的 systemd 计时器
计时器单元 | 功能 | 覆盖 /etc/dnf/automatic.conf 文件中的设置? |
---|---|---|
| 下载软件包以便进行更新。
注: 这个计时器单元没有安装更新的软件包。要执行安装,您必须运行 | 是 |
| 下载并安装更新的软件包。 | 是 |
| 只下载存储库数据,以保持存储库缓存最新状态,并通知您是否有可用的更新。 注:这个计时器单元没有下载或安装更新的软件包。 | 是 |
|
此计时器在下载和应用更新时的行为是由
默认行为与 | 否 |
其它资源
-
dnf-automatic (8)
手册页 - DNF Automatic 配置文件
第 8 章 删除 RHEL 9 内容
在以下部分中,了解如何使用 DNF 删除 Red Hat Enterprise Linux 9 中的内容:
8.1. 删除安装的软件包
要使用 dnf remove
命令删除系统上安装的软件包,请完成以下步骤。
流程
要删除某个软件包以及所有未使用的依赖软件包,请使用:
# dnf remove package-name
使用软件包名称替换 package-name。
要同时删除多个软件包及其未使用的依赖项,请使用:
# dnf remove package-name-1 package-name-2
使用软件包名称替换 package-name-1 和 package-name-2。
dnf
命令将软件包与其他依赖软件包一起删除。
8.2. 删除软件包组
要使用 dnf group remove
命令按组名称或 groupID 删除软件包组,请完成以下步骤。
流程
要根据组群名称删除软件包组,请使用:
# dnf group remove group-name
使用组群的全名替换 group-name。
要通过 groupID 删除软件包组,请使用:
# dnf group remove groupID
使用组 ID 替换 groupID。
8.3. 删除安装的模块内容
当删除安装的模块内容时,您可以从 所选配置集 或 整个流中删除软件包。
DNF 会尝试删除所有名称与安装配置集或流的软件包对应的软件包,包括其依赖软件包。在进行操作前,务必检查要删除的软件包列表,特别是您是否在系统中启用了自定义软件仓库。
8.3.1. 从安装的配置集中删除软件包
当您删除安装有配置集的软件包时,所有名称与配置集安装的软件包相对应的软件包都会被删除。这包括其依赖项,但被其他配置集所需的软件包除外。
要从所选配置文件中删除软件包,请完成以下步骤。
先决条件
-
已使用
dnf module install module-name:stream/profile
命令安装了所选配置文件,或使用dnf install module-name:stream 命令
安装为默认配置文件。 - 您了解模块化依赖关系的解析。
流程
卸载属于所选配置集的软件包:
# dnf module remove module-name:stream/profile
将 module-name、stream 和 profile 替换为您要卸载的模块、流和配置集。
或者,从流中的所有安装配置集中卸载软件包:
# dnf module remove module-name:stream
这些操作不会从不属于任何配置集的流中删除软件包。
-
在进行删除事务前,请检查
Removing:
和Removing unused dependencies:
中的软件包列表。
要从所选流中删除所有软件包,请按照 8.3.2 节 "删除模块流中的所有软件包" 中的说明操作。
例 8.1. 从所选配置集中删除软件包
以下是如何删除属于 nodejs:18
模块流的 development
配置文件的软件包及其依赖项的一个示例。
本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。
安装
nodejs:18
模块流,包括所有可用的配置集:# dnf module install nodejs:18/* (...) Dependencies resolved. =================================================================================== Package Architecture Version Repository Size =================================================================================== Installing group/module packages: nodejs x86_64 1:18.7.0-1.module+el9.1.0+16284+4fdefb2f rhel-AppStream 12 M nodejs-devel x86_64 1:18.7.0-1.module+el9.1.0+16284+4fdefb2f rhel-AppStream 202 k nodejs-nodemon noarch 2.0.15-1.module+el9.1.0+15718+e52ec601 rhel-AppStream 762 k npm x86_64 1:8.15.0-1.18.7.0.1.module+el9.1.0+16284+4fdefb2f rhel-AppStream 2.2 M Installing dependencies: brotli x86_64 1.0.9-6.el9 rhel-AppStream 314 k brotli-devel x86_64 1.0.9-6.el9 rhel-AppStream 36 k ... Installing weak dependencies: nodejs-docs noarch 1:18.7.0-1.module+el9.1.0+16284+4fdefb2f rhel-AppStream 7.2 M nodejs-full-i18n x86_64 1:18.7.0-1.module+el9.1.0+16284+4fdefb2f rhel-AppStream 8.2 M Installing module profiles: nodejs/common nodejs/development nodejs/minimal nodejs/s2i Transaction Summary =================================================================================== Install 31 Packages Total download size: 36 M Installed size: 165 M Is this ok [y/N]: y (...) Complete!
检查安装的配置集:
$ dnf module info nodejs ... Name : nodejs Stream : 18 [e] [a] Version : 9010020221009220316 Context : rhel9 Architecture : x86_64 Profiles : common [d] [i], development [i], minimal [i], s2i [i] Default profiles : common Repo : rhel-AppStream ... Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive
所有配置集都如输出中显示。
从
development
配置集及其依赖软件包中删除软件包:# dnf module remove nodejs:18/development (...) Dependencies resolved. ======================================================================== Package Architecture Version Repository Size ======================================================================== Removing: nodejs-devel x86_64 1:18.7.0-1.module+el9.1.0+16284+4fdefb2f @rhel-AppStream 950 k Removing unused dependencies: brotli x86_64 1.0.9-6.el9 @rhel-AppStream 754 k brotli-devel x86_64 1.0.9-6.el9 @rhel-AppStream 55 k ... Disabling module profiles: nodejs/development Transaction Summary ======================================================================== Remove 26 Packages Freed space: 8.3 M Is this ok [y/N]: y
在移除后检查安装的配置集:
$ dnf module info nodejs ... Name : nodejs Stream : 18 [e] [a] Version : 9010020221009220316 Context : rhel9 Architecture : x86_64 Profiles : common [d] [i], development, minimal [i], s2i [i] Default profiles : common Repo : rhel-AppStream Summary : Javascript runtime ... Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive
除当前安装
development
外的所有配置集。
8.3.2. 从模块流中删除所有软件包
当您删除使用模块流安装的软件包时,所有名称与流安装的软件包对应的软件包都会被删除。这包括其依赖项,但其他模块所需的软件包除外。
要从所选模块流中删除所有软件包,请完成以下步骤。
先决条件
- 已启用模块流,并至少已安装了流中的一些软件包。
- 您了解模块化依赖关系的解析。
流程
从所选流中删除所有软件包:
# dnf module remove --all module-name:stream
使用您要卸载的模块和流替换 module-name 和 stream。
-
在进行删除事务前,请检查
Removing:
和Removing unused dependencies:
中的软件包列表。 - (可选)重置或禁用流。
如果您只想从所选配置集中删除软件包,请参阅 Section 8.3.1."从已安装的配置集中移动软件包"。
例 8.2. 从整个流中删除软件包
以下是如何从 nodejs:18
模块流中删除所有软件包的一个示例。
本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。
安装
nodejs:18
模块流,包括所有可用的配置集:# dnf module install nodejs:18/* (...) Dependencies resolved. =================================================================================== Package Architecture Version Repository Size =================================================================================== Installing group/module packages: nodejs x86_64 1:18.10.0-3.module+el9.1.0+16866+0fab0697 rhel-AppStream 13 M nodejs-devel x86_64 1:18.10.0-3.module+el9.1.0+16866+0fab0697 rhel-AppStream 203 k nodejs-nodemon noarch 2.0.15-1.module+el9.1.0+15718+e52ec601 rhel-AppStream 762 k npm x86_64 1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697 rhel-AppStream 2.2 M Installing dependencies: brotli x86_64 1.0.9-6.el9 rhel-AppStream 314 k brotli-devel x86_64 1.0.9-6.el9 rhel-AppStream 36 k ... Installing weak dependencies: nodejs-docs noarch 1:18.10.0-3.module+el9.1.0+16866+0fab0697 rhel-AppStream 7.3 M nodejs-full-i18n x86_64 1:18.10.0-3.module+el9.1.0+16866+0fab0697 rhel-AppStream 8.2 M Installing module profiles: nodejs/common nodejs/development nodejs/minimal nodejs/s2i Enabling module streams: nodejs 18 Transaction Summary =================================================================================== Install 31 Packages Total download size: 37 M Installed size: 167 M Is this ok [y/N]: y
从
nodejs:18
模块流中删除所有软件包:# dnf module remove --all nodejs:18 (...) Dependencies resolved. =================================================================================== Package Architecture Version Repository Size =================================================================================== Removing: nodejs x86_64 1:18.10.0-3.module+el9.1.0+16866+0fab0697 @rhel-AppStream 43 M nodejs-devel x86_64 1:18.10.0-3.module+el9.1.0+16866+0fab0697 @rhel-AppStream 953 k nodejs-docs noarch 1:18.10.0-3.module+el9.1.0+16866+0fab0697 @rhel-AppStream 78 M nodejs-full-i18n x86_64 1:18.10.0-3.module+el9.1.0+16866+0fab0697 @rhel-AppStream 29 M nodejs-nodemon noarch 2.0.15-1.module+el9.1.0+15718+e52ec601 @rhel-AppStream 2.0 M nodejs-packaging noarch 2021.06-4.module+el9.1.0+15718+e52ec601 @rhel-AppStream 41 k npm x86_64 1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697 @rhel-AppStream 6.9 M Removing unused dependencies: brotli x86_64 1.0.9-6.el9 @rhel-AppStream 754 k brotli-devel x86_64 1.0.9-6.el9 @rhel-AppStream 55 k ... Disabling module profiles: nodejs/common nodejs/development nodejs/minimal nodejs/s2i Transaction Summary =================================================================================== Remove 31 Packages Freed space: 167 M Is this ok [y/N]: y
在移除后检查
nodejs
模块:$ dnf module info nodejs ... Name : nodejs Stream : 18 [e] [a] Version : 9010020221009220316 Context : rhel9 Architecture : x86_64 Profiles : common [d], development, minimal, s2i Default profiles : common ... Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive
当前没有安装 Node.js 模块流。
其它资源
8.4. 其它资源
第 9 章 处理软件包管理历史记录
使用 dnf history
命令,您可以查看以下信息:
- DNF 事务的时间线
- 事务发生的日期和时间
- 受事务影响的软件包数量
- 事务是成功还是被中止
- 如果在事务间更改了 RPM 数据库
您还可以使用 dnf history
命令来撤销或重做事务。
在以下部分中,了解如何使用 dnf history
命令处理软件包管理历史记录:
- 列出最新的事务、所选软件包的最新操作,以及特定事务的详细信息。
使用
dnf history undo
和dnf history rollback
命令 恢复 DNF 事务 :- 重复选择的或最后的事务。
9.1. 列出事务
要列出最新的 DNF 事务、所选软件包的最新操作以及特定事务的详情,请完成以下步骤。
流程
要显示所有最新的 DNF 事务列表,请使用:
# dnf history
注意输出中的
Action (s)
列显示在事务期间执行的操作的类型,如 Install (I
)、Upgrade (U
)、Remove(E
)和其他操作。Altered
列显示事务期间执行的操作数。操作数也可以后跟事务的结果。有关Action (s)
和Altered
列的值的更多信息,请参阅dnf (8)
手册页。要显示所选软件包的最新操作列表,请使用:
# dnf history list package-name
使用软件包名称替换 package-name。
要显示特定事务的详情,请使用:
# dnf history info transactionID
用事务的 ID 替换 transactionID。
您可以通过附加全局表达式来过滤命令输出。如需了解更多详细信息,请参阅 在 dnf
输入中指定全局表达式。
其它资源
-
dnf(8)
man page
9.2. 恢复 DNF 事务
在 RHEL 9 中,您可以以两种方式恢复 DNF 事务:
-
使用
dnf history undo
命令恢复单个 DNF 事务。 -
使用
dnf history rollback
命令恢复在指定事务和最后一个事务之间执行的所有 DNF 事务。
请谨慎使用 dnf history undo
和 dnf history rollback
命令。不支持将 RHEL 软件包,特别是selinux
, selinux-policy-*
, kernel
, glibc
(glibc
的依赖项,如 gcc
) 软件包,降级到旧版本。因此,不建议将系统降级为次版本(例如,从 RHEL 9.1 到 RHEL 9.0),因为这可能会使系统处于不irsired 状态。
9.2.1. 使用 dnf history undo
恢复单个 DNF 事务
您可以使用 dnf history undo
命令恢复在单个事务中执行的步骤。
如果事务安装了新的软件包,dnf history undo
会卸载它。如果事务卸载了软件包,dnf history undo
会将其重新安装。如果旧的软件包可用,dnf history undo
命令还会尝试将所有更新的软件包降级到之前的版本。
如果旧的软件包版本不可用,则使用 dnf history undo
命令降级会失败。
要使用 dnf history undo
命令恢复单个事务,请完成以下步骤。
流程
确定您要恢复的事务的 ID:
# dnf history
可选:通过显示其详情来验证您要恢复的事务:
# dnf history info transaction_id
使用您要恢复的事务的 ID 替换 transaction_id。
恢复事务:
# dnf history undo transaction_id
使用您要恢复的事务的 ID 替换 transaction_id。
例 9.1. 使用 dnf history undo
命令恢复单个 DNF 事务
以下是如何使用 dnf history undo
命令恢复 unzip
软件包的安装事务的一个示例。
安装
unzip
软件包:# dnf install unzip Dependencies resolved. ========================================================================== Package Architecture Version Repository Size ========================================================================== Installing: unzip x86_64 6.0-56.el9 rhel 186 k Transaction Summary ========================================================================== Install 1 Package Total download size: 186 k Installed size: 392 k Is this ok [y/N]: y
确定您要恢复的事务 ID:
# dnf history ID | Command line | Date and time | Action(s) | Altered -------------------------------------------------------------------- 13 | install zip | 2022-11-03 10:49 | Install | 1 12 | install unzip | 2022-11-03 10:49 | Install | 1
恢复事务:
# dnf history undo 12
9.2.2. 使用 dnf history rollback
恢复多个 DNF 事务
您可以使用 dnf history rollback
命令恢复在指定事务和最后一个事务之间执行的所有 DNF 事务。请注意,事务 ID 指定的事务将保持不变。
要使用 dnf history rollback
命令恢复多个事务,请完成以下步骤。
流程
确定您要恢复到的状态的事务 ID:
# dnf history
恢复指定的事务:
# dnf history rollback transaction_id
使用您要恢复到的状态的事务 ID 替换 transaction_id。
或者,要恢复事务历史记录中的所有事务,请使用事务 ID 1:
# dnf history rollback 1
例 9.2. 使用 dnf history rollback
命令恢复多个 DNF 事务
以下是如何使用 dnf history rollback
命令回滚 unzip
和 zip
软件包的两个安装事务的一个示例。
安装
unzip
软件包:# dnf install unzip Dependencies resolved. ======================================================================== Package Architecture Version Repository Size ======================================================================== Installing: unzip x86_64 6.0-56.el9 rhel 186 k Transaction Summary ======================================================================== Install 1 Package Total download size: 186 k Installed size: 392 k Is this ok [y/N]: y
安装
wget
软件包:# dnf install wget Dependencies resolved. ======================================================================== Package Architecture Version Repository Size ======================================================================== Installing: wget x86_64 1.21.1-7.el9 rhel 794 k Transaction Summary ======================================================================== Install 1 Package Total download size: 794 k Installed size: 3.1 M Is this ok [y/N]: y
确定您要恢复到的状态的事务 ID:
# dnf history ID | Command line | Date and time | Action(s) | Altered ------------------------------------------------------------------ 14 | install wget | 2022-11-03 10:49 | Install | 1 13 | install unzip | 2022-11-03 10:49 | Install | 1 12 | install vim-X11 | 2022-11-03 10:20 | Install | 171 EE
恢复最后两个事务:
# dnf history rollback 12
此操作卸载
wget
和unzip
软件包,但会保留vim-X11
软件包。
9.3. 重复事务
您可以使用 dnf history redo
命令在事务期间重复执行的步骤。
要重复所选事务或最后一个 DNF 事务,请完成以下步骤。
流程
要重复特定的事务,请使用:
# dnf history redo transactionID
用事务的 ID 替换 transactionID。
要重复最后的事务,请使用:
# dnf history redo last
第 10 章 管理自定义软件存储库
您可以在 /etc/dnf/dnf.conf
文件或 /etc/yum.repos.d/
目录中的 .repo
文件中配置软件仓库。
DNF 及相关工具的配置信息保存在 /etc/dnf/dnf.conf
文件中。此文件包含 [main]
部分,可以包含一个或多个 [repository]
部分,可用于设置特定存储库的选项。您在 /etc/dnf/dnf.conf
文件的单独 [repository]
部分定义的值会覆盖 [main]
部分中设置的值。
但是,建议在 /etc/yum.repos.d/
目录中的新或现有 .repo
文件中定义单独的软件仓库。
在以下部分中,了解如何使用 DNF 管理自定义软件存储库:
10.1. 设置 DNF 软件仓库选项
/etc/dnf/dnf.conf
配置文件包含 [repository]
部分,其中 repository 是唯一的存储库 ID。[repository]
部分允许您定义独立的 DNF 软件仓库。
不要给出红帽软件仓库使用的自定义软件仓库名称以避免冲突。
有关可用 [repository]
选项的完整列表,请查看 dnf.conf(5)
man page 的 [repository] OPTIONS
部分。
10.2. 添加 DNF 软件仓库
要定义新存储库,您可以:
-
在
/etc/dnf/dnf.conf
文件中添加[repository]
部分。 在
/etc/yum.repos.d/
目录中的.repo
文件中添加[repository]
部分。安装 RPM 或软件管理工具(例如,订阅管理器)可以提供自己的
.repo
文件。
在 .repo
文件中定义您的仓库而不是 /etc/dnf/dnf.conf
,因为此目录中具有 .repo
文件扩展名的所有文件都可由 dnf
读取。
要使用 dnf config-manager
命令将一个 DNF 存储库添加到系统中,请完成以下步骤。
流程
在您的系统中添加软件仓库:
# dnf config-manager --add-repo repository_URL
使用指向库的 URL 替换 repository_url。
从基于证书的 Content Delivery Network
(CDN)以外的未验证或不信任的源获取并安装软件包具有潜在的安全风险,并可能导致安全性、稳定性、兼容性和可维护性问题。
10.3. 启用 DNF 软件仓库
要使用 dnf config-manager
命令启用添加到您系统中的 DNF 存储库,请完成以下步骤。
流程
启用存储库:
# dnf config-manager --enable repositoryID
使用唯一的存储库 ID 替换 repositoryID。
其它资源
10.4. 禁用 DNF 软件仓库
要使用 dnf config-manager
命令禁用添加到您系统中的 DNF 存储库,请完成以下步骤。
流程
禁用软件仓库:
# dnf config-manager --disable repositoryID
使用唯一的存储库 ID 替换 repositoryID。
其它资源
第 11 章 管理应用程序流内容版本
AppStream 仓库的内容可以在多个版本中提供,对应于模块流。
在以下部分中,了解更改现有启用的模块流时必须执行的操作:
11.1. 模块依赖关系和流更改
传统上,提供内容的软件包依赖于其他软件包,并且通常指定所需的依赖项版本。对于模块中包含的软件包,此机制也会应用这个机制,但将软件包及其特定版本分组到模块和流中可以进一步的限制。另外,模块流可以声明与其他模块流的依赖关系,独立于其包含的软件包并提供它们。
在使用软件包或模块操作后,所有底层已安装软件包的所有依赖项树都必须满足软件包声明的所有条件。另外,必须满足所有模块流依赖项。
因此:
- 启用模块流可能需要启用更多模块流。
- 安装模块流配置集或从流安装软件包需要启用更多模块流并安装其他软件包。
- 禁用模块流可能需要禁用其他模块流。不会自动删除任何软件包。
- 删除软件包可能需要删除其他软件包。如果模块提供了这些软件包,则模块流仍然启用,以准备进一步安装,即使这些流中没有安装这些软件包。这会镜像未使用的 DNF 存储库的行为。
11.2. 模块化和非模块化依赖项的交互
模块依赖关系 是常规 RPM 依赖项之上的额外层。模块依赖关系与存储库间可能存在的依赖关系的行为相似。这意味着安装不同的软件包需要同时解析 RPM 依赖项和模块依赖关系。
系统将始终保留模块和流选择,除非明确指示要更改它们。模块软件包将接收目前启用的模块流中包含的提供此软件包的更新,但不会升级到另一流中包含的版本。
11.3. 重置模块流
重置模块是一种操作,它会将所有流返回至初始状态(不启用或禁用)。如果模块有一个配置的默认流,则此流会因为重置模块而变为活动状态。
要使用 dnf module reset
命令将模块流重置为其初始状态,请完成以下步骤。
流程
重置模块状态:
# dnf module reset module-name
模块返回到初始状态。已启用的流和安装的配置集的信息会被清除,但没有删除安装的内容。
11.4. 禁用一个模块的所有流
具有默认流的模块始终会激活一个流。当无法访问所有模块流中的内容时,可以禁用整个模块。
要使用 dnf module disable
命令禁用模块的所有流,请完成以下步骤。
先决条件
- 您了解了 活动模块流的概念。
流程
禁用模块:
# dnf module disable module-name
dnf
命令要求确认,然后禁用该模块及其所有流。所有模块流都不再活跃。没有安装的内容被删除。
11.5. 切换到更新的流
当您切换到后期模块流时,所有对应的软件包都被后期版本替代。
备份您的数据,并按照特定于组件的迁移说明进行操作。
先决条件
- 这个系统已被完全更新。
流程
将安装的组件切换到新版本,并选择模块(组件)和流(版本):
# dnf module switch-to module:stream
可选:将已安装的组件切换到新版本,然后选择要安装的配置文件:
# dnf module switch-to module:stream/profile
例 11.1. 从非模块化内容切换到模块流
以下是一个如何从非模块化 PHP 8.0 切换到模块化 PHP 8.1 的示例。
本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。
验证是否安装了带有 PHP 8.0 的
php-common
软件包:$ rpm -q php-common php-common-8.0.27-1.el9_1.x86_64
从非模块化 PHP 8.0 切换到模块化 PHP 8.1 :
# dnf module switch-to php:8.1 ... Dependencies resolved. ======================================================================================== Package Arch Version Repository Size ======================================================================================== Upgrading: php-common x86_64 8.1.14-1.module+el9.2.0+17911+b059dfc2 rhel-AppStream 687 k Enabling module streams: php 8.1 Transaction Summary ======================================================================================== Upgrade 1 Package Total download size: 687 k Is this ok [y/N]: y Downloading Packages: ... Upgraded: php-common-8.1.14-1.module+el9.2.0+17911+b059dfc2.x86_64 Complete!
验证
php:8.1
模块流是否已启用:$ dnf module list php ... rhel-AppStream Name Stream Profiles Summary php 8.1 [e] common [d], devel, minimal PHP scripting language Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
检查安装的
php-common
软件包的版本:$ rpm -q php-common php-common-8.1.14-1.module+el9.2.0+17911+b059dfc2.x86_64
例 11.2. 从较早模块流切换到后期模块流
以下是一个如何从 nodejs:18
模块流切换到 nodejs:20
流的示例。
本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。
验证是否安装了
nodejs:18
模块流:$ dnf module list nodejs ... rhel-AppStream Name Stream Profiles Summary nodejs 18 [e] common [d] [i], development, minimal, s2i Javascript runtime nodejs 20 common [d], development, minimal, s2i Javascript runtime Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
切换到后期
nodejs:20
模块流:# dnf module switch-to nodejs:20 ... Dependencies resolved. ======================================================================================== Package Arch Version Repository Size ======================================================================================== Upgrading: nodejs x86_64 1:20.5.1-1.module+el9.3.0+19646+9a702805 rhel-AppStream 14 M nodejs-docs noarch 1:20.5.1-1.module+el9.3.0+19646+9a702805 rhel-AppStream 8.0 M nodejs-full-i18n x86_64 1:20.5.1-1.module+el9.3.0+19646+9a702805 rhel-AppStream 8.5 M npm x86_64 1:9.8.0-1.20.5.1.1.module+el9.3.0+19646+9a702805 rhel-AppStream 2.6 M Switching module streams: nodejs 18 -> 20 Transaction Summary ======================================================================================== Upgrade 4 Packages Total download size: 33 M Is this ok [y/N]: y Downloading Packages: ... Upgraded: nodejs-1:20.5.1-1.module+el9.3.0+19646+9a702805.x86_64 nodejs-docs-1:20.5.1-1.module+el9.3.0+19646+9a702805.noarch nodejs-full-i18n-1:20.5.1-1.module+el9.3.0+19646+9a702805.x86_64 npm-1:9.8.0-1.20.5.1.1.module+el9.3.0+19646+9a702805.x86_64 Complete!
验证
nodejs:20
模块流是否已启用:$ dnf module list nodejs ... rhel-AppStream Name Stream Profiles Summary nodejs 18 common [d], development, minimal, s2i Javascript runtime nodejs 20 [e] common [d] [i], development, minimal, s2i Javascript runtime Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
检查已安装的
nodejs
版本:$ rpm -q nodejs nodejs-20.5.1-1.module+el9.3.0+19646+9a702805.x86_64
附录 A. DNF 命令列表
在以下部分中,检查用于列出、安装和删除 Red Hat Enterprise Linux 9 上内容的 DNF 命令。
A.1. 在 RHEL 9 中列出内容的命令
以下是在 Red Hat Enterprise Linux 9 中查找内容及其详情的常用 DNF 命令:
命令 | 描述 |
---|---|
| 使用与软件包相关的术语搜索软件包。 |
| 为所选软件包及其版本搜索启用的 DNF 存储库。 |
| 列出所有已安装的和可用的软件包信息。 |
| 列出系统上安装的所有软件包。 |
| 列出用于安装的所有已启用的存储库中的所有软件包。 |
| 列出系统上所有启用的存储库。 |
| 列出系统上所有禁用的存储库。 |
| 列出启用和禁用的存储库。 |
| 列出有关存储库的其他信息。 |
| 显示可用软件包的详细信息。 |
| 显示系统上安装的软件包的详情。 |
| 列出模块及其当前状态。 |
| 显示模块的详细信息。 |
| 显示模块的当前状态。 |
| 显示与所选模块的可用配置文件关联的软件包。 |
| 使用指定流显示与模块的可用配置为念关联的软件包。 |
| 确定哪些模块、流和配置集提供软件包。 请注意,如果软件包在任何模块外可用,这个命令的输出为空。 |
| 查看已安装的和可用的组的数量。 |
| 列出所有已安装的和可用的组。 |
| 列出特定组中包含的强制的和可选的软件包。 |
A.2. 在 RHEL 9 中安装内容的命令
以下是在 Red Hat Enterprise Linux 9 中安装内容的常用 DNF 命令:
命令 | 描述 |
---|---|
| 安装软件包。
如果软件包由模块流提供, |
| 同时安装多个软件包及其依赖项。 |
| 在 multilib 系统(AMD64、Intel 64 机器)上安装软件包时,通过将其追加到软件包名称来指定软件包的架构。 |
| 通过将二进制路径用作参数来安装二进制文件。 |
| 从本地目录安装之前下载的软件包。 |
| 使用软件包 URL 安装远程软件包。 |
| 使用特定流启用模块。 请注意,运行这个命令不会安装任何 RPM 软件包。 |
| 从特定的模块流安装默认配置集。 请注意,运行这个命令还会启用指定的流。 |
| 使用特定流安装所选配置文件。 |
| 按组名称安装软件包组。 |
| 按 groupID 安装软件包组。 |
A.3. 在 RHEL 9 中删除内容的命令
以下是删除 Red Hat Enterprise Linux 9 中内容的常用 DNF 命令:
命令 | 描述 |
---|---|
| 删除特定软件包以及所有依赖的软件包。 |
| 同时删除多个软件包及其未使用的依赖项。 |
| 按组名称删除软件包组。 |
| 按 groupID 删除软件包组。 |
| 从指定的流中删除所有软件包。 请注意,运行此命令可从系统中删除关键软件包。 |
| 从安装的配置文件删除软件包。 |
| 从指定流中的所有安装的配置文件删除软件包。 |
| 将模块重置为初始状态。 请注意,运行此命令不会从指定的模块中删除软件包。 |
| 禁用一个模块及其所有流。 请注意,运行此命令不会从指定的模块中删除软件包。 |