![Red Hat Enterprise Linux 8.0 系统运维管理](https://wfqqreader-1252317822.image.myqcloud.com/cover/515/34667515/b_34667515.jpg)
4.2 dnf 软件包管理工具
4.2.1 dnf简介
使用dnf可以安装或升级RPM软件包,并自动处理软件包的依赖性和要求。dnf命令可以用来从服务器上下载软件包,也可以用来建立自己的软件库。与传统的yum命令相比,dnf在功能和性能方面有了重大改进。dnf还带来了许多新功能,包括对模块化内容的支持及更稳定和文档完善的API。使用dnf命令编辑或创建配置文件时,dnf与yum v3兼容。你可以使用类似于在早期版本中使用yum命令的方式使用dnf命令及其所有选项。Red Hat Enterprise Linux 8.0系统带的yum命令是dnf命令的符号链接。yum和dnf命令是完全可以互换的。
4.2.2 理解dnf配置文件
dnf 的主要配置文件是/etc/dnf/dnf.conf。dnf 的全局定义位于[main]小节标题下。dnf的重要参数如下。
cachedir:存储下载的软件包的目录。
debuglevel:日志记录级别,从0(不记录)到10(记录全部)。
exclude:用空格分隔的要从安装或更新中排除的软件包列表,如exclude=virtualbox-4.?kernel*。
gpgcheck:如果设置为1,则通过检查gpg签名来验证软件包。如果软件包是未签名的,则可将其设置为0。但应注意未签名的软件包可能已被恶意更改。
gpgkey:gpg公钥文件的路径。
installonly_limit:一个软件包可以安装的最大版本数。
keepcache:如果设置为0,则在安装后自动删除软件包。
logfile:yum日志文件的路径。
obsoletes:如果设置为1,则在升级过程中更换过时的软件包。
plugins:如果设置为1,则启用扩展yum功能的插件。
proxy:代理服务器的地址和端口号。
proxy_password:使用代理服务器进行身份验证的密码。
proxy_username:使用代理服务器进行身份验证的用户名。
reposdir:扩展名为.repo的存储库文件的目录,默认目录为/etc/yum.repos.d。
若想了解有关dnf.conf的更多信息,可以查看命令行手册。
[main]配置文件中的示例部分如下所示。
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_76_1.jpg?sign=1739284898-4sn4Va2JaXWrGSuyt8VZuHRxIrYOOgC0-0-9f49e6f0b7004bc1ac1c6f885c0c5673)
4.2.3 代理服务设置
如果将代理服务器作为 Internet 访问的中介,那么请按照如下指令设置/etc/dnf/dnf.conf:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_76_2.jpg?sign=1739284898-i9UGlYz7mYDeR3YX4jWtgKTsmo3I3Fvs-0-6219cfb13e019cf2a1a5020e493c4016)
如果代理服务器需要身份验证,那么请另外指定proxy_username和proxy_password,相应代码如下:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_76_3.jpg?sign=1739284898-uyes9Esl4hTxJrl8L7jhFmHhmQaiJPAu-0-97e062733a261bed4e752005447720c5)
4.2.4 从命令行使用dnf
1.了解dnf命令行选项
dnf的命令格式为:dnf [选项] COMMAND。
主要COMMAND命令列表如表4-1所示。
表4-1 主要COMMAND命令列表
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_77_1.jpg?sign=1739284898-8KFx0uJEpsrg7Y7SBBqymfe02ULAz8TZ-0-2be342eef93c30efbdb7911595ea4287)
插件命令列表如表4-2所示。
表4-2 插件命令列表
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_78_1.jpg?sign=1739284898-OFXLfPsVHdysdIR3XK5E9HccvB9zRv8U-0-bafa532ac4e19467282e76480528a409)
可选参数列表如表4-3所示。
表4-3 可选参数列表
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_78_2.jpg?sign=1739284898-vSkF29rte57JesQdDop5zzrEfq9jjiCj-0-9268e2ef09c17658aba17f1fd09c760a)
续表
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_79_1.jpg?sign=1739284898-gBWxgNGcm2TWo6tuIsqc2N2D7hoLgp13-0-74f8254bae29fb587cc660855460d9ef)
2.dnf命令实例
(1)查看dnf版本
通过如下命令查看安装在系统中的dnf包管理器的版本:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_79_2.jpg?sign=1739284898-9qLOhvLtWll7UKUfLoHsYF4G5krXVTHX-0-86b9092f6aad78d10e33380884daf9a2)
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_80_1.jpg?sign=1739284898-Qq6r3WtRawB6fK0ZZ8bO3dabT8nrJ5VD-0-cb89a1b7aa02806695a40bf630493ae8)
说明
命令输出显示dnf在Red Hat Enterprise Linux 8中的版本是4.0.9.2-5。
(2)查看系统中可用的dnf软件库
通过如下命令显示系统中可用的dnf软件库:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_80_3.jpg?sign=1739284898-B6ngSDwP3qQN41k9zTsBNPv78n1V0vlk-0-7395b47bf3c12f6cb02ac30d1961d3f2)
(3)查看系统中可用和不可用的所有dnf软件库。
通过如下命令显示系统中可用和不可用的所有dnf软件库:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_80_4.jpg?sign=1739284898-yv5fSU6xDADS9mrQrNOuF14It9oyuAbd-0-efc7519447ab223704b4ab41f69f6b59)
说明
状态栏中的禁用表示目前不可用。
(4)查看所有RPM软件包。
通过如下命令查看用户系统上的所有来自软件库的可用软件包和所有已经安装在系统上的软件包:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_80_6.jpg?sign=1739284898-hOlCfrDWnBeKDxG6qHnFrcGcLTLc5HXR-0-575c69b8c505640091d389034a20b1d0)
(5)查看所有已经安装的RPM软件包。
通过如下命令查看所有安装了的RPM软件包:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_80_7.jpg?sign=1739284898-yuwYWn7WAhGYS9s6xoqRKJHcuNViUtbL-0-ffaf75a253d5dfd265a68511a324cd78)
(6)查看所有可供安装的RPM软件包。
通过如下命令查看来自可用软件库的所有可供安装的RPM软件包:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_80_8.jpg?sign=1739284898-HN9yX0SMqyjNk2aStaSckxxKFRpJSwjb-0-ce280248dd0c003b8c7f8705e9c91e87)
(7)搜索软件库中的RPM软件包。
当你不知道你想要安装的软件的准确名称时,你可以用如下命令在“search”参数后面键入软件的部分名称来搜索RPM软件包(在本例中我们使用“gcc”):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_80_9.jpg?sign=1739284898-waeLDpRqkSIetHmsyflNYcQocKFElrtm-0-7e5de8c7c38a3d800ba16b6b93d6414c)
(8)查找某一文件的提供者。
当你想要查看是哪个软件包提供了系统中的某一文件时,可以使用如下命令(在本例中,我们将查找“ip”这个命令的提供者):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_1.jpg?sign=1739284898-VEF8v9BfZOOrVZ7nHl2oZw4PotkYWly5-0-675da6002bca44aeb4c9a5d8903c5b8f)
(9)查看软件包详情。
当你想在安装某一软件包之前需查看其详细信息时,可以使用如下命令(在本例中,我们将查看“gcc”这一软件包的详细信息):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_2.jpg?sign=1739284898-i0cMjlQPFxCBeAHdYkrYigLc7eLkE4sG-0-5cef00566694c9f62209753380cb8ecb)
(10)安装软件包。
使用如下命令系统将会自动安装对应的软件及其所需的所有依赖项(在本例中,我们将安装bind软件):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_3.jpg?sign=1739284898-Ckg6PaKLJZJLdkA28OkNcmREjiCtRmJi-0-8e92cfb38eab3f96456bac785f092b88)
(11)升级软件包。
使用如下命令升级制定软件包(在本例中,我们将升级“gcc”这一软件包):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_4.jpg?sign=1739284898-ZXNcQhBROpAMjYbov0qnMFizzZyw2NXn-0-2f68f4e56e12ba7173396086f895a5d2)
(12)检查系统软件包的更新。
使用如下命令检查系统中所有软件包的更新:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_5.jpg?sign=1739284898-7kFctxO8F9dxuUjcPGtF8mfNsCY9UYMC-0-937fd00d159fbadcd759aebb70470b01)
(13)升级所有系统软件包。
使用如下命令升级系统中所有可用的软件包:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_6.jpg?sign=1739284898-FWU37zV1k7tYroC33LCWIVm8qCL7LL6n-0-1ec2a44b2d9213f336a9a2a64817eed0)
或
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_7.jpg?sign=1739284898-xEpsfrLdtClZWfWxdWebC6Gl9EJH5EEX-0-2db0c22e02d85333ab74ac273f6d360c)
(14)删除软件包。
使用如下命令删除系统中指定的软件包(在本例中,我们将删除“gcc”这一软件包):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_8.jpg?sign=1739284898-Vx5XsKzGFTV8vjIgQkqNaoagiXv40HNN-0-1adf69c032fe7fd8051d6c4954747706)
或
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_9.jpg?sign=1739284898-2CPDfakF4ZMSlforOom7OWJ6swYmzsfE-0-19cb41e928d1d52d86d21ff51183d712)
(15)删除缓存的无用软件包。
在使用 dnf 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程,使用如下命令即可删除这些垃圾文件:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_10.jpg?sign=1739284898-6YYZ8XqudIKofaMtxNtmcqecybirwWcd-0-2127d7db19cdb6175e5e64ef432eef4f)
(16)获取某条命令的使用帮助。
使用如下命令获取某条命令的使用帮助,包括可用于这个命令的参数和这个命令的用途说明(在本例中,我们将获取“clean”命令的使用帮助):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_11.jpg?sign=1739284898-Ztb5PslruThvrf7BHFSwGTsmK9flIxNb-0-3a033b9840b91acaf4f8bb9a89fa6353)
(17)查看dnf命令的执行历史。
使用如下命令查看系统上 dnf 命令的执行历史,通过这个命令可以知道在使用 dnf 后有什么软件被安装和卸载:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_81_12.jpg?sign=1739284898-1l6pyNWcislk3sOx8wxHV5yQvEa52r3m-0-6de8315c751c4698b5860783dfd5b5e7)
(18)查看所有软件包组。
使用如下命令查看所有软件包组:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_1.jpg?sign=1739284898-EHP5n2PSKuUgdvknPdnhp4Ngfb7OKMP0-0-0e1f9755f78fafe6a270964b591cf006)
(19)安装一个软件包组。
使用如下命令安装一个软件包组(在本例中,我们将安装“Editors”软件包组):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_2.jpg?sign=1739284898-xTTONhi1Qzt4CwdyxTT93tIyEBhqatwI-0-cfa673e588b5d8758d43e3917c889487)
(20)升级一个软件包组中的软件。
使用如下命令升级一个软件包组中的软件(在本例中,我们将升级“Editors”软件包组中的软件):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_3.jpg?sign=1739284898-b8uXS0mdeVQA2d3YTDGjgcKjuWBV4s6c-0-590ef1b9e3eeefea5f1099091c9b8663)
(21)删除一个软件包组。
使用如下命令删除一个软件包组(在本例中,我们将删除“Editors”软件包组):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_4.jpg?sign=1739284898-4IBT2tsxrF1LI4a365nOfPdyoz14gbA2-0-11659bcdcb4df3b53d3b0a7ff1f98c93)
(22)从特定的软件包库中安装特定的软件。
使用如下命令从特定的软件包库中安装特定的软件(在本例中,我们将从软件包库epel中安装 phpmyadmin 软件包):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_5.jpg?sign=1739284898-o9ih7KcaA1n0a7cCsKu7iYmitw5qTK5z-0-0e0f369dd2c8c67739b8ee1ccaf7e27c)
(23)重新安装特定软件包。
使用如下命令重新安装特定软件包(在本例中,我们将重新安装“gcc”软件包):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_6.jpg?sign=1739284898-KMrQmJLKm2Ep2uwbfqdekTO7bmXePBvD-0-73170280cfffd839d276cd72c728b04f)
(24)降低特定软件包的版本。
使用如下命令降低特定软件包的版本(如果可能的话)(在本例中,将降低“acpid”软件包的版本):
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_7.jpg?sign=1739284898-67HGVLNKq5q4f2YbJACCFRk0BPlAJ5H0-0-0223ba523b483a85945a302732f8d0f9)
(25)同步系统。
使用如下命令同步系统,以确保正在运行的软件包是最新的:
![](https://epubservercos.yuewen.com/299F91/18519308801627606/epubprivate/OEBPS/Images/39598_82_8.jpg?sign=1739284898-JxHlMR3RiSoVcINMcODkO1e0PT001XtQ-0-e59af071a116f264d6bc7aec12693b90)