DNF是FEDORA的软件包管理工具,可以查询软件包的信息、从软件仓库中获取软件,安装、删除软件包,并自动处理包依赖。它还可以把所有软件更新到最新版本。因为DNF能在安装、删除和更新软件时自动处理包依赖,所以也就可以自动安装依赖包。DNF可以配置多个的软件仓库,也提供了很多增强功能的插件。DNF能执行与RPM相同的任务,而且命令行的选项也相似。NDF可以很容易的管理单个或多个电脑上的软件包。
用GPG签名为软件包提供安全管理
DNF提供了GPG签名工具用来管理软件包的安全,可以对软件仓库,也可以只针对单个的软件包。DNF拒绝安装任何错误的GPG安全签名的软件。意思是,你要相信你下载并安装到你系统上的RPM包来源于一个可信的源,并且没有被修改过。
DNF也可以让你很容易的创建自己的软件仓库来,以让其它电脑能够下载和安装。
你必须要有超级权限才能用DNF命令安装、升级或删除软件。下面的内容都假定你已经通过su或sudo获得了超级权限。
6.1 检查和更新软件
6.1.1 检查更新
检查可用的更新最快的方式是用DNF UPDATE命令:
~]# dnf upgrade
Last metadata expiration check performed 1:24:32 ago on Thu May 14 23:23:51 2015.
Dependencies resolved.
Nothing to do.
Complete!
注意,NDF UPGRADE只安装那些可以安装的更新,如果软件包由于包依赖问题等不能更新,那么这个软件包将不会安装到系统上。
DNF CHECK-UPDATE是用来检查系统中已安装的软件包是否有更新的版本的,并不意味着就能够成功安装。这个命令在检查哪些更新包未能安装的时候更有用。
比如:
~]# dnf check-update
Using metadata from Mon Apr 20 16:34:10 2015 (2:42:10 hours old)
python.x86_64 2.7.9-6.fc22 updates
python-cryptography.x86_64 0.8.2-1.fc22 updates
python-libs.x86_64 2.7.9-6.fc22 updates
输出的是有新版本的软件包。以第一行为例:
Python-软件包的名称
X86_64-适用的CPU架构
2.7.9-软件版本号
6.fc22-软件的小版本号
Updates-testing-软件包所在的源
6.1.2更新软件包
更新时可以选择对单个、多个或所有软件更新。如果所依赖的软件也有更新包,那么将自动更新。
更新单个软件包
命令如下:
dnf upgrade package_name
比如要更新python软件:
~]# dnf upgrade python
Using metadata from Mon Apr 20 16:38:16 2015 (2:42:14 hours old)

Dependencies resolved.

Package Arch Version Repository Size

Upgrading:
python x86_64 2.7.9-6.fc22 updates 92 k
python-libs x86_64 2.7.9-6.fc22 updates 5.8 M

Transaction Summary

Upgrade 2 Packages
Total download size: 5.9 M
Is this ok [y/N]:
输出信息包括:
1.python.x86_64-可以下载并安装的软件包
2.Python-libs.x86_64-dnf找到的python的依赖包
3.DNF会提示你是否执行更新,默认DNF是以交互式方式启动的。可以用 -y参数让DNF自动回答Y以达到自动更新的目的。
4.如果出现了错误,你可以用dnf history来查看出错信息。
用DNF更新和安装内核
DNF安装内核时是用RPM的rpm -i kernel方式,所以不用担心dnf upgrade和dnf install的区别。
当使用RPM更新时,rpm -i kernel和rpm -u kernel是不一样的,前者是安装一个新内核(与旧的并存),后者是把当前的内核替换成新版本。
更新所有的软件及其依赖包
更新全部软件并将其依赖包一起更新时不需要任何参数:
dnf upgrade
6.1.3 保存配置文件的变化
安装软件后不可避免的会修改配置文件。使用RPM的DNF更新软件时会用自动更新和整合配置文件。
6.2.1 查找软件

命令如下:
 dnf search term…
 增加all参数在所有源内查找:
 dnf search all term…
 比如查找meld或者kompare软件:
 ~]# dnf search meld kompare
 Loaded plugins: langpacks, presto, refresh-packagekit
 ============================== N/S Matched: meld ===============================
 meld.noarch : Visual diff and merge tool
 python-meld3.x86_64 : HTML/XML templating system for Python
 ============================= N/S Matched: kompare =============================
 komparator.x86_64 : Kompare and merge two folders
 Name and summary matches only, use "search all" for everything.


6.2.2 显示软件列表
Dnf list显示软件的相关信息,软件所在的组和源。
Dnf所有的list命令参数都可以使用简化后的正则表达式过滤显示的信息。包括(表示多个字符)和?(表示单个字符)。
用正则表达式过滤显示信息
如果你是把要正式表达式传递给DNF做为参数,就一定要注意,否则BASH有可能会解析成目录表达式,而在当前目录里查找软件。把正则表达式传递给DNF参数(而非作为BASH的目录参数)时要注意:
1.前面用\;
2.用双引号或单引号把表达式包起来。
DNF在使用正则表达式时只适用于软件包名。如果查查版本号,请用-隔开:

~]# dnf search kernel-4*
 Last metadata expiration check performed 2:46:09 ago on Thu May 14 23:23:51 2015.
 Installed Packages
 kernel.x86_64 4.0.0-1.fc22 @System
 kernel.x86_64 4.0.2-300.fc22 @System
 kernel-core.x86_64 4.0.0-1.fc22 @System
 kernel-core.x86_64 4.0.2-300.fc22 @System
 [output truncated]
 dnf list glob_expression…
 用正则表达式查找所有安装的和可安装的软件。
 例子6.1 显示所有ABRT及相关的软件(用正则表达式):
 ~]# dnf list abrt-addon* abrt-plugin*
 Last metadata expiration check performed 0:14:36 ago on Mon May 25 23:38:13 2015.
 Installed Packages
 abrt-addon-ccpp.x86_64 2.5.1-2.fc22 @System
 abrt-addon-coredump-helper.x86_64 2.5.1-2.fc22 @System
 abrt-addon-kerneloops.x86_64 2.5.1-2.fc22 @System
 abrt-addon-pstoreoops.x86_64 2.5.1-2.fc22 @System
 abrt-addon-python.x86_64 2.5.1-2.fc22 @System
 abrt-addon-python3.x86_64 2.5.1-2.fc22 @System
 abrt-addon-vmcore.x86_64 2.5.1-2.fc22 @System
 abrt-addon-xorg.x86_64 2.5.1-2.fc22 @System
 abrt-plugin-bodhi.x86_64 2.5.1-2.fc22 @System
 Available Packages
 abrt-addon-upload-watch.x86_64 2.5.1-2.fc22 fedora
 Dnf list all
 显示所有已安装和可用的软件。
 ~]# dnf list all
 Last metadata expiration check performed 0:21:11 ago on Mon May 25 23:38:13 2015.
 Installed Packages
 NetworkManager.x86_64 1:1.0.2-1.fc22 @System
 NetworkManager-libnm.x86_64 1:1.0.2-1.fc22 @System
 PackageKit.x86_64 1.0.6-4.fc22 @System
 PackageKit-glib.x86_64 1.0.6-4.fc22 @System
 aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
 abrt.x86_64 2.5.1-2.fc22 @System
 [output truncated]
 Dnf list installed
 显示所有已经安装的和可安装软件。
 例子6.2 显示所有已经安装的和可安装软件。
 ~]# dnf list all
 Last metadata expiration check performed 0:21:11 ago on Mon May 25 23:38:13 2015.
 Installed Packages
 NetworkManager.x86_64 1:1.0.2-1.fc22 @System
 NetworkManager-libnm.x86_64 1:1.0.2-1.fc22 @System
 PackageKit.x86_64 1.0.6-4.fc22 @System
 PackageKit-glib.x86_64 1.0.6-4.fc22 @System
 aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
 abrt.x86_64 2.5.1-2.fc22 @System
 [output truncated]


Dnf list installed
显示所有已安装的软件。最右侧列显示的是软件来源于哪个包。
例子6.3 显示所有已经安装的软件包(用双引号)
显示所有以krb开头的、后面只跟着一个字母或数字的、再后面是短横线的已经安装的软件:

~]# dnf list installed "krb?-"
 Last metadata expiration check performed 0:34:45 ago on Mon May 25 23:38:13 2015.
 Installed Packages
 krb5-libs.x86_64 1.13.1-3.fc22 @System
 krb5-workstation.x86_64 1.13.1-3.fc22 @System
 Dnf list avaliable


显示所有可用的软件。
例子6.4 显示所有可用的软件(单引号的使用)
显示名字里包括gstreamer并且后面有plugin的软件包:

~]# dnf list available gstreamer*plugin*
 Last metadata expiration check performed 0:42:15 ago on Mon May 25 23:38:13 2015.
 Available Packages
 gstreamer-plugin-crystalhd.i686 3.10.0-8.fc22 fedora
 gstreamer-plugin-crystalhd.x86_64 3.10.0-8.fc22 fedora
 gstreamer-plugins-bad-free.i686 0.10.23-24.fc22 fedora
 gstreamer-plugins-bad-free.x86_64 0.10.23-24.fc22 fedora
 gstreamer-plugins-bad-free-devel.i686 0.10.23-24.fc22 fedora
 gstreamer-plugins-bad-free-devel.x86_64 0.10.23-24.fc22 fedora
 [output truncated]
 Dnf group list
 显示所有软件组。
 例子6.5 显示所有软件组。
 ~]# dnf group list
 Loaded plugins: langpacks, presto, refresh-packagekit
 Setting up Group Process
 Installed Groups:
 Administration Tools
 Design Suite
 Dial-up Networking Support
 Fonts
 GNOME Desktop Environment
 [output truncated]
 Dnf repolist
 显示源的ID,名字和提供的软件数量
 例子6.6显示已启用的源的信息
 ~]# dnf repolist
 Last metadata expiration check performed 0:48:29 ago on Mon May 25 23:38:13 2015.
 repo id repo name status
 *fedora Fedora 22 - x86_64 44,762
 *updates Fedora 22 - x86_64 - Updates 0
 Dnf repository-packages repo_id list
 显示指定源的信息。
 例子6.7 显示某个源的软件信息。
 ~]# dnf repository-packages fedora list [option]
 Last metadata expiration check performed 1:38:25 ago on Wed May 20 22:16:16 2015.
 Installed Packages
 PackageKit.x86_64 1.0.6-3.fc22 @System
 PackageKit-glib.x86_64 1.0.6-3.fc22 @System
 aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
 [output truncated]
 没有参数时默认显示的是源里所有可用的软件以及通过该源已经安装的软件。如果要分别显示的话,可以增加avaliable和installed参数区分。
 6.2.3 显示软件信息
 命令如下:
 dnf info package_name…
 比如要显示abrt包的信息:
 ~]# dnf info abrt
 Last metadata expiration check performed 5 days, 1:12:55 ago on Wed May 20 22:16:16 2015.
 Installed Packages
 Name : abrt
 Arch : x86_64
 Epoch : 0
 Version : 2.5.1
 Release : 2.fc22
 Size : 2.1 M
 Repo : @System
 From repo : updates-testing
 Summary : Automatic bug detection and reporting tool
 URL : https:///abrt/abrt/wiki/ABRT-Project License : GPLv2+
 Description : abrt is a tool to help users to detect defects in applications and
 : to create a bug report with all information needed by maintainer to fix it.
 : It uses plugin system to extend its functionality.


Dnf info package_name和rpm -q --info package_name差不多,但多提供了软件源的信息。
 6.2.4 安装软件
 DNF可以安装单个或多个软件或者是一个软件组。
 安装单个软件
 dnf install package_name
 安装多个软件
 dnf install package_name package_name…
 如果你可安装到特殊多个lib库的系统,比如amd64或者intel64位,你可以指定软件适用的架构,增加.arch到包名即可。比如安装sqlite2的i586版本:
 ~]# dnf install sqlite2.i586
 你可使用正则表达式快速安装多个架构的软件:
 ~]# dnf install audacious-plugins-*
 也可以提供文件名给dnf install,如果你知道要安装的二进制文件名,但不知道软件包的名字,你可以把二进制文件的名字传递给dnf install:
 ~]# dnf install /usr/sbin/named
 Dnf 会查找软件的文件列表,找到含有/usr/sbin/name的包。
 找到含有某个文件的包
 如果你知道包里某个文件名,但不知道软件包的名,你可以用dnf provides命令查找:
 ~]# dnf provides "bin/named"
 Using metadata from Thu Apr 16 13:41:45 2015 (4:23:50 hours old)
 bind-32:9.10.2-1.fc22.x86_64 : The Berkeley Internet Name Domain (BIND) DNS (Domain Name
 System) server
 Repo : @System
 */file_name:在所有包里查找file_name.
 安装软件组(套件)
 软件组类似软件包,安装时会安装所有依赖的组件。软件组有名字和ID,dnf group list -v 会显示所有的软委肉虎蹊且信息。比如kde-desktop-environment:
 ~]# dnf -v group list kde*
 cachedir: /var/cache/dnf/x86_64/22
 Loaded plugins: builddep, config-manager, copr, playground, debuginfo-install, download,
 generate_completion_cache, kickstart, needs-restarting, noroot, protected_packages, Query,
 reposync, langpacks
 initialized Langpacks plugin
 DNF version: 0.6.5
 repo: using cache for: fedora
 not found deltainfo for: Fedora 22 - x86_64
 not found updateinfo for: Fedora 22 - x86_64
 repo: using cache for: updates-testing
 repo: using cache for: updates
 not found updateinfo for: Fedora 22 - x86_64 - Updates
 Using metadata from Thu Apr 16 13:41:45 2015 (4:37:51 hours old)
 Available environment groups:
 KDE Plasma Workspaces (kde-desktop-environment)
 用软件组名安装:
 dnf group install group_name
 多个时要用双引号。
 用软件组ID安装:
 dnf group install groupid
 ID也可以用双引号。如果你要安装软件组,可以用@group参数查询。
 dnf install @group
 比如,你要安装KDE PLASMA WORKSPACES组:
 ~]# dnf group install "KDE Plasma Workspaces"
 ~]# dnf group install kde-desktop-environment
 ~]# dnf install @kde-desktop-environment
 6.2.5 删除软件包:
 dnf remove package_name…
 比如你可删除totem, rhythmbox, and sound-juicer时:
 ~]# dnf remove totem rhythmbox sound-juicer
 remove和install一样,可以用:软件包名、正则表达式、文件列表、包的其它信息。
 特别提示:当要删除的软件包被其它包所依赖时
 在依赖于当前软件的软件未删除时,Dnf 不能删除当前软件,只能用RPM删除当前软件。
 删除软件组
 dnf group remove group
 dnf remove @group
 比如删除KDE PLASMA WORKSPACES组,下面3个都是可以的:
 ~]# dnf group remove "KDE Plasma Workspaces"
 ~]# dnf group remove kde-desktop-environment
 ~]# dnf remove @kde-desktop-environment
 6.2.6 历史信息的管理
 Dnf history允许复现DNF下载软件时的信息,包括日期、时间、影响的软件的数量,包括下载成功、取消、失败的情况。
 显示所有下载信息:
 dnf history list
 显示某一部分信息:
 dnf history list start_id..end_id
 也可以使用正则表达式:
 dnf history list glob_expression…
 比如:
 ~]# dnf history list 1..4
 Using metadata from Thu Apr 16 13:41:45 2015 (5:47:31 hours old)ID | Login user | Date a | Action | Altere
4 | root | 2015-04-16 18:35 | Erase | 1
 3 | root | 2015-04-16 18:34 | Install | 1
 2 | root | 2015-04-16 17:53 | Install | 1
 1 | System | 2015-04-16 14:14 | Install | 668 E
 显示的信息包括:
 ID-整数,定位于某一次下载。
 Login user -执行人,格式为 Full Name 。非特定用户执行的(比如系统自动更新),显示为System 。
 Date and time-日期及时间
 Actions(s)-操作类型(见表6.1)
 Altered-影响的软件数量。
 表6.1 操作类型列表
 操作类型 简称 说明
 Downgrade D 下载
 Install I 安装
 Obsoleting O 淘汰
 Reinstall R 重装
 Update U 升级
 恢复和重新执行
 Dnf history可以恢复到安装之前的状态:
 dnf history undo id
 重新执行:
 dnf history redo id
 可以使用last参数对最近一次的操作执行恢复或重新执行。
 注意,如果源里的包不存在这,这两个命令会失败。Dnf history undo可能会尝试删除和降级软件包。
 6.3 配置DNF和DNF的源
 DNF的配置文件为/etc/dnf/dnf.conf,包括main部分和reposity部分。Main部分是全局选项,可以改变DNF的配置。REPOSITORY部分是针对某个源的选项。建议对每个源的设置放到/etc/yum.repos.d目录里,在这里定义的将优先于dnf.conf里的部分。
 6.3.1 main部分的设置
 样子如下:
 [main]
 gpgcheck=1
 installonly_limit=3
 clean_requirements_on_remove=true
 debuglevel=value
 0-10之间,默认为2,显示调试输出信息。
 exclude=package_name [more_package_names]
 排除某些包,可以使用*和?
 gpgcheck=value
 0 — 不检查GPG签名
 1 — 检查GPG签名,默认为1.
 installonlypkgs=space separated list of packages
 以空格分开,指可以安装新软件的包名,但永不更新。
 installonly_limit=value
 默认为3,指同一软件最多可安装的版本数,不建议修改。
 keepcache=value
 0 — 默认值,不保留缓存。
 1 — 成功安装后仍保留缓存。
 6.3.2 reposity部分的配置
 [repository]
 name=repository_name
 baseurl=repository_url
 name=repository_name
 源的名字
 parameter=repository_url
 baseurl, metalink, or mirrorlist的参数设置
 通常使用HTTP
 baseurl=http://path/to/repo/releases/$releasever/server/$basearch/os/ enabled=value
 0 —启用源
 1 — 停用源
 6.3.3 使用DNF参数
 参数可以在/etc/dnf/dnf.conf或者.repo文件里设置,包括:
 $releasever 指操作系统的版本号
 $arch 指CPU的架构,如i586,i686,x86_64。
 $basearch 指系统架构,比如i686 i586都是i386架构,amd64和intel64都是x86_64架构。
 6.4 显示当前配置信息
 ~]$ dnf config-manager --dump
 =============================== main ======================================
 [main]
 alwaysprompt = True
 assumeno = False
 assumeyes = False
 bandwidth = 0
 best = False


bugtracker_url = https:///enter_bug.cgi?product=Fedora&component=dnf cachedir = /var/cache/dnf/x86_64/22
[output truncated]
6.5 增加、启用、停用源
增加一个源
可以在 /etc/dnf/dnf.conf 里增加,也可以单独写一个.repo文件放在/etc/yum.repos.d/ 目录里。
例子6.8 增加example.repo
http://www.example.com/example.repo增加到源里: ~]# dnf config-manager --add-repo http://www.example.com/example.repo adding repo from: http://www.example.com/example.repo 启用DNF源
dnf config-manager --set-enabled repository…
注意参数是源的ID,显示当前的配置,使用--dump参数。
停用dnf源
dnf config-manager --set-disabled repository…
注意参数是源的ID,显示当前的配置,使用--dump参数。
其它信息