3.1、 Centos 8软件仓库
在Centos 8中把软件源分成了两部分:一个是BaseOS,一个是AppStream
在Centos 8中,统一的ISO自动加载BaseOS和AppStream安装源存储库。已经存在于光盘链接中,只不过要分别去配置.repo文件
Centos 8 软件管理_yum/dnf_第1张图片
BaseOS 存储库 - BaseOS 存储库以传统RPM包的形式提供底层核心OS内容
AppStream 存储库 - Application Stream 存储库提供您可能希望在给定用户空间中运行的所有应用程序,简单理解就是诸多第三方的应用。
3.2、 DNF包管理工具介绍
Centos 8中默认使用的软件管理工具由原版本的yum换成了dnf,而centos 8默认提供的yum命令仅为dnf的软链接。
Centos 8 软件管理_yum/dnf_第2张图片
注:CentOS 8附带的yum包管理器版本是v4.0.9,该版本现在使用DNF (Dandified YUM)技术作为后端。
DNF代表Dandified YUM,是基于RPM的Linux发行版的软件包管理器。它用于在Fedora / RHEL / CentOS操作系统中安装,更新和删除软件包。 它是Fedora 22,CentOS8和RHEL8的默认软件包管理器。 DNF是YUM的下一代版本,并打算在基于RPM的系统中替代YUM。 DNF功能强大且具有健壮的特征。DNF使维护软件包组变得容易,并且能够自动解决依赖性问题。
DNF的出现,是为了解决Yum系统的性能瓶颈,优化内存使用,依赖关系解析,执行速度等,yum已被DNF取代。这不仅仅是解决yum中待解决的问题。 此外,DNF添加了许多功能,以实现基于RPM的系统中软件包的无缝管理。DNF是用Python3写的。
CentOS 8使用了dnf 作为安装程序。虽然改变了软件包的安装方式,但是 dnf 还是能兼容使用 yum 的配置文件的和命令的使用方法的。估计在下一个版本中yum就会被取消了。
用dnf --help,查看你能够使用的命令参数,跟yum差不多。
3.3、 DNF的优势
DNF 和 YUM 均是 rpm 软件包管理工具,但是 DFN 替代 YUM 的说法由来已久,因为 YUM 包管理工具有一些问题长期得不到解决。这些问题包括性能低下、内存占用高以及依赖包解决方案不佳等。而 DNF 在依赖包解决方案中采用了由 SUSE 开发的”libsolv”库,用以提升依赖包解析性能。
1) DNF代码比Yum要简单,大约有29000行代码,而Yum代码有59000多行。
2) 执行速度更快,比Yum消耗更少内存。
3) 依赖包解析速度比yum更快。
3.4、 DNF配置文件的位置
主配置文件: /etc/dnf/dnf.conf
仓库文件: /etc/yum.repos.d/
日志:/var/log/dnf.rpm.log,/var/log/dnf.log
Cache Files: /var/cache/dnf
例如:在dnf.conf文件中加入keepcache=true参数,就可以将从远程仓库安装的包文件缓存到本地的/var/cache/dnf目录下。
3.5、 centos8 dnf源
dnf仓库文件所在目录依旧为/etc/yum.repos.d/下,在yum.repos.d目录下添加 .repo 文件。在原本的yum.repos.d目录下默认有cetnos官方源。
Centos 8 软件管理_yum/dnf
由于CentOS 8主要使用AppStream, BaseOS, Extras三个仓库,这三个仓库可以理解为同一个软件源中保存了不同种类软件的不同部分。
3.5.1、 配置centos 8本地仓库源
CentOS 8更改了软件包的安装程序,取消了 yum 的配置方法,改而使用了dnf 作为安装程序。虽然改变了软件包的安装方式,但是 dnf 还是能兼容使用 yum 的配置文件的和命令的使用方法的。
Centos 8本地仓库源存在于光盘链接中,只不过要分别去配置.repo文件,dnf源配置方法和yum源一样。
Centos 8 软件管理_yum/dnf_第3张图片
先备份centos8提供的官方源
Centos 8 软件管理_yum/dnf_第4张图片
挂载centos8的光盘到/mnt目录下
Centos 8 软件管理_yum/dnf
在yum.repos.d目录下创建.repo为结尾的仓库文件,内容如下:
Centos 8 软件管理_yum/dnf_第5张图片
使用dnf列出系统中的仓库,该命令列出了默认情况下启用的所有仓库
Centos 8 软件管理_yum/dnf
测试

dnf -y install wget //安装wget软件包

本地dnf源配置完毕。
3.5.2、 配置internet源(如阿里源、epel源)
首先将上面配置的本地源禁用

sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/centos8.repo

访问https://mirrors.aliyun.com/或https://developer.aliyun.com/mirror/地址
Centos 8 软件管理_yum/dnf_第6张图片
点击上图用红线框起来的链接,如centos
Centos 8 软件管理_yum/dnf_第7张图片
按照上图给出的方法下载仓库文件即可

Centos 8 软件管理_yum/dnf_第8张图片
Centos 8 软件管理_yum/dnf
阿里源配置完成。
3.6、 如何使用DNF
DNF命令的语法类似于YUM,你会发现它们之间有很多相似之处。

man dnf

dnf [options] [...]
遇到不懂的地方运行 man dnf 查看dnf的man帮助就可以了。
3.6.3、 DNF常用命令
检查并升级可用软件包:dnf update
删除缓存:dnf clean all
列出可用的软件源:dnf repolist
搜索软件:dnf search $package
安装软件:dnf install $package
升级软件包:dnf update $package
删除软件包:dnf remove $package
查看更多命令:dnf help
接下来,我们将学习DNF 包管理器的操作命令,使用这些命令,你可以方便有效的管理您系统中的 RPM 软件包。
3.6.4、 查看 DNF 包管理器版本
该命令用于查看安装在您系统中的 DNF 包管理器的版本
Centos 8 软件管理_yum/dnf_第9张图片
3.6.5、 使用dnf列出系统中的仓库
该命令列出了默认情况下启用的所有仓库,并提供了列出其他信息的选项。 在通过dnf命令添加-v选项时,可提供了更详细的信息。
此外,它不会强制同步过期的元数据,并且你可以强制同步使用--refresh开关启用的所有存储库。
3.6.5.1、 列出系统上启用的软件库
运行以下命令列出系统上启用的仓库
[root@localhost ~]# dnf repolist
Centos 8 软件管理_yum/dnf
或者,你可以运行以下命令以列出系统上已启用的仓库

dnf repolist enabled或# dnf repolist --enabled

Centos 8 软件管理_yum/dnf_第10张图片
3.6.5.2、 列出系统上禁用的仓库
运行以下命令以列出系统上禁用的仓库

dnf repolist disabled或# dnf repolist --disabled

Centos 8 软件管理_yum/dnf_第11张图片
3.6.5.3、 列出系统上的所有仓库(已启用和已禁用)
运行以下命令以列出系统上的所有仓库(已启用和已禁用)

dnf repolist all或# dnf repolist --all

Centos 8 软件管理_yum/dnf_第12张图片
3.6.5.4、 列出每个仓库的详细信息
要查看有关每个存储库的详细信息,使用dnf命令添加-v开关。 它显示repo-id,repo-name等。

dnf repolist -v

Centos 8 软件管理_yum/dnf_第13张图片
3.6.6、 列出RPM包
3.6.6.5、 列出所有 RPM 包

dnf list

dnf list命令用于列出系统上的所有来自软件库的可用软件包和所有已经安装在系统上的软件包。

dnf list或# dnf list all

Centos 8 软件管理_yum/dnf_第14张图片
3.6.6.6、 列出所有安装了的 RPM 包
dnf list installed该命令用于列出所有安装了的 RPM 包
Centos 8 软件管理_yum/dnf_第15张图片
3.6.6.7、 列出所有可供安装的 RPM 包
该命令用于列出来自所有可用软件库的可供安装的软件包(不包括已安装的软件包)

dnf list available

3.6.6.8、 查看是否安装了给定的软件包
以下命令查看是否安装了给定的软件包。如果是,它将显示类似下面的输出。否则,它将显示以下错误消息“Error: No matching packages to list”
Centos 8 软件管理_yum/dnf
3.6.6.9、 列出可用于已安装软件包的升级包

dnf list upgrades

Centos 8 软件管理_yum/dnf_第16张图片
3.6.7、 搜索软件库中的 RPM 包
dnf search命令使你可以根据给定的字符串(关键字)查找可用软件包的列表。当你不知道要安装的确切软件包名称时,你可以用该命令来搜索软件包。你需要在”search”参数后面键入软件的部分名称来搜索,关键字作为不区分大小写的子字符串进行匹配。默认情况下,列出与所有请求的关键字匹配的软件包。在软件包名称和摘要中搜索关键字。
Centos 8 软件管理_yum/dnf_第17张图片
3.6.8、 查找某一文件的提供者
dnf provides命令将查找提供给定文件的软件包。如果您想找出哪个软件包(已安装或未安装)提供了此文件,这将很有用。
例如,我们将查找”/bin/bash”这个文件的提供者
Centos 8 软件管理_yum/dnf_第18张图片
例如,我们都知道sar的使用,而我们大多数人都不知道哪个软件包提供了此文件。使用以下命令找到它。
Centos 8 软件管理_yum/dnf
3.6.9、 查看软件包详情
当你想在安装某一个软件包之前查看它的详细信息时,这条命令可以帮到你
以下命令用于列出有关已安装和可用软件包的描述和摘要信息。它显示了有关软件包的各种信息,例如名称,Arch,版本,发行版,大小,存储库名称等。

dnf info httpd

Centos 8 软件管理_yum/dnf_第19张图片
3.6.10、 安装软件包
使用该命令,系统将会自动安装对应的软件及其所需的所有依赖,默认情况下,每次DNF要求您确认安装软件包时,都添加-y选项以避免确认。
3.6.10.10、 安装单个软件包:

dnf install gcc

3.6.10.11、 安装多个软件包:

dnf install vsftpd ftp

3.6.10.12、 在dnf中添加-y选项以安装软件包,无需确认直接安装:

dnf -y install nginx

3.6.10.13、 安装rpm包文件:

dnf install /path/to/file.rpm

3.6.10.14、 从url安装rpm包:

dnf install https://xyz.com/file.rpm

3.6.10.15、 要安装提供/usr/bin/[xxx]文件的软件包,请运行以下命令。
例如,sar应用程序是“ sysstat”软件包的一部分,但我们大多数人都不知道其父软件包的名称。 但是,很难找到其父程序包名称,但是此命令允许您在不知道父程序包名称的情况下进行安装。

dnf install /usr/bin/sar

3.6.11、 删除软件包
3.6.11.16、 删除系统中指定的软件包
例如删除一个名为nginx的软件包

dnf remove nginx -y

3.6.11.17、 删除无用孤立的软件包
当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。

dnf autoremove

3.6.12、 升级软件包
3.6.12.18、 将所有已安装的软件包更新为最新的可用版本

dnf upgrade或# dnf update

3.6.12.19、 将给定的一个或多个软件包更新为最新的可用版本

dnf upgrade [Package_Name]

例如,我们将用命令升级”systemd”这一软件包

dnf upgrade system或# dnf update system

3.6.12.20、 检查系统软件包的更新
该命令用于检查系统中所有软件包的更新

dnf check-update

或者,使用下面的命令检查可用更新。

dnf list updates

以下命令检查对指定软件包的更新

dnf check-update [Package_Name]

dnf check-update sudo

3.6.13、 清除系统上的缓存数据
默认情况下,当你执行各种dnf操作时,dnf会将包和存储库元数据之类的数据缓存到“/var/cache/dnf”目录中。该缓存在一段时间内会占用大量空间。这将允许您删除所有缓存的数据。

dnf clean all

3.6.14、 获取有关某条命令的使用帮助
该命令用于获取有关某条命令的使用帮助(包括可用于该命令的参数和该命令的用途说明)(本例中我们将使用命令获取有关命令”clean”的使用帮助)

dnf help clean

3.6.15、 查看所有的 DNF 命令及其用途
命令用于列出所有的 DNF 命令及其用途

dnf help

Centos 8 软件管理_yum/dnf_第20张图片
3.6.16、 查看 DNF 命令的执行历史
你可以使用该命令来查看你系统上 DNF 命令的执行历史。通过这个手段你可以知道在自你使用 DNF 开始有什么软件被安装和卸载。
3.6.16.21、 显示dnf历史记录
dnf history命令允许用户查看在过去的事务中发生了什么操作

dnf history

Centos 8 软件管理_yum/dnf_第21张图片
或者,你可以使用以下命令获得相同的结果。

dnf history list

3.6.16.22、 显示有关历史的详细信息
显示有关历史的详细信息。如果未指定,则显示最近一次历史信息

dnf history info

Centos 8 软件管理_yum/dnf_第22张图片
运行以下命令以查看有关给定ID的历史详细信息。

dnf history info 3

Centos 8 软件管理_yum/dnf_第23张图片
3.6.17、 查看所有的软件包组
该命令用于列出所有的软件包组

dnf grouplist

Centos 8 软件管理_yum/dnf_第24张图片
3.6.18、 安装一个软件包组
该命令用于安装一个软件包组

dnf groupinstall 'Development Tools'

3.6.19、 升级一个软件包组中的软件包
该命令用于升级一个软件包组中的软件包

dnf groupupdate 'Development Tools'

3.6.20、 删除一个软件包组
该命令用于删除一个软件包组

dnf groupremove 'Development Tools'

3.7、 模块化管理功能
3.7.21、 利用AppStream管理软件
随着linux系统越来越庞大,软件包也越来越多,越来越复杂。CentOS 8 跟随上游RHEL8中引入了一种新的结构来管理软件内容,所有的软件内容被划分成了两个repository:BaseOS 和AppStream
BaseOS:类似于原来的软件仓库,主要提供了OS系统的基础组件,提供的是RPM形式的包,因为都是RPM包形式所以它支持与之前版本兼容。
AppStream:这是一个特殊类型的仓库,它提供的是用户空间的应用,运行时语言等,它提供了两种形式的内容:第一种是RPM形式的独立的软件包,第二种是Module形式的包集合,Module是代表着一组通常一起安装的RPM包,一个典型的module包含应用,依赖库,文档库,帮助组件等,即将相关的包组合在一起。
为什么要引入AppStream?
CentOS 8引入了新的仓库 AppStream,这个仓库通过流式更新可以为 CentOS 带来新的版本,不会像以前那样,软件包过于陈旧。但是这样带来一个问题,如何保证用户的迁移成本,比如一些程序运行时,主版本对于大部分人来说不能轻易更新。解决问题的方法是引入模块化。模块化让软件包仓库可以同时分发相同软件的不同版本,一个模块代表一个版本,需要指定版本安装或启用对应模块即可,一个模块可以包含多个软件包以解决依赖性问题。
当你在 CentOS 8 添加新的没有模块的软件仓库,比如 NodeJS 的官方仓库,然后准备运行dnf install nodejs安装的时候,却发现软件版本没有变,并没有使用第三方软件仓库的包,这是因为模块拥有更高的优先级,而第三方软件仓库没有引入模块化或者是模块没有被启用,解决方法是禁用掉当前启用的模块或者启用新的模块。
请注意,并非AppStream软件仓库中的所有包都分布在一个模块中。
3.7.22、 模块化基础知识
AppStream这个软件仓库有一个不同的管理软件的方法,将它分为几个子类:
Packages:作为常规包处理(即RPM形式的独立的软件包)。
Module:是代表着一组通常一起安装的RPM包,一个典型的module包含应用,依赖库,文档库,帮助组件等。
Module stream:代表一组组件的不同版本,模块通常有多个流,这通常代表软件的主要版本。它可以并行使用,但在给定系统上只能安装每个模块的一个流。
Module profiles:代表为了某个功能需要一起安装的包列表,module stream中可以包含多个profiles,可以根据profiles 选择性地安装模块。例如,数据库模块可以作为客户端,服务端或同时安装。
Centos 8 软件管理_yum/dnf_第25张图片
3.7.23、 dnf module命令来管理模块
你可以通过dnf module命令来管理模块,常用的用法:
注:可通过man dnf查看dnf的帮助手册中关于module的的命令用法
3.7.23.23、 模块列表:dnf module list
输出模块列表,显示每个模块关联的流、版本和可用安装配置文件。模块流旁边的 [d] 表示安装命名模块时使用的默认流。

dnf module list

执行该命令后会有如下的输出信息
Centos 8 软件管理_yum/dnf_第26张图片
要显示有关特定模块的信息,请提供名称作为上一个命令的参数:

dnf module list nginx //列出模块名为nginx的列表

Centos 8 软件管理_yum/dnf_第27张图片

dnf module list mysql //列出模块名为mysql的列表

Centos 8 软件管理_yum/dnf
可以看到四列输出,分别是:Name、Stream、Profiles、Summary
Name代表模块(module)名,stream代表模块流即软件版本,模块流旁边的 [d] 表示安装命名模块时使用的默认流。Profile代表为了某个功能需要一起安装的包列表。比如mysql模块,包含了一个8.0版本的流,其下有client、server两种安装组合,其中,server组合后,有一个“[d]”,那是缺省的安装组合。如果你安装的时候没有指定组合,则会安装这个server组合。下面两条命令的最终效果是一样的:

dnf module install mysql:8.0/server

dnf module install mysql:8.0

module stream中可以包含多个profiles,可以根据profiles 选择性地安装模块。例如,mysql模块可以作为客户端,服务端或同时安装。
3.7.23.24、 查看模块:dnf module info
要获取有关该模块的一些详细信息,请运行以下命令:

dnf module info mysql //获取mysql模块的详细信息

Centos 8 软件管理_yum/dnf_第28张图片
Centos 8 软件管理_yum/dnf
关于 module_spec 取值,不同的命令有些许不同,先列出模块列表,可以看到四列输出,分别是:Name、Stream、Profiles、Summary,除了 Summary 之外其他三列都有用。
例如:显示nginx模块流1.14的详细信息

dnf module info nginx:1.14

如要显示更加详细的信息可以视同-v选项
3.7.23.25、 安装模块:dnf module install
安装模块配置文件命令用法是:

dnf [options] module install ...

安装模块配置文件,包括其软件包。如果没有提供配置文件,则安装所有默认配置文件。相应地启用模块流。
首先获取模块stream,例如:

dnf module list mariadb

Centos 8 软件管理_yum/dnf
你可以看到模块mariadb有一个stream,要安装MongoDB的server,请运行:

dnf -y module install mariadb:10.3/server

因为mariadb模块的stream 10.3和profiles server是默认的,所以也可以执行下面的命令

dnf module install mariadb

安装后,你可以使用rpm命令确认包版本:

rpm -qa | grep mariadb

如果要安装的是mariadb模块的配置文件client,就需要指定profiles

dnf module install mariadb:10.3/client

3.7.23.26、 卸载模块:dnf module remove
删除已安装的模块配置文件,包括其软件包。如果没有提供配置文件,则会删除所有已安装的配置文件。

dnf module remove mariadb

3.7.23.27、 启用模块:dnf module enable
这将启用module stream并使包RPM中的流RPM可用。

dnf module enable

注:模块不需要启用也可以直接安装
3.7.23.28、 禁用模块:dnf module disable
要禁用模块并使所有相关module streams不可用,请使用:
$ dnf module disable
3.7.23.29、 重置模块状态
你还可以重置模块状态,以便不再启用或禁用它:

dnf module reset