@perfiffer
感谢您,完成了第一篇翻译贡献!
This commit is contained in:
Xingyu Wang 2021-07-27 08:30:44 +08:00
parent 9c66c853e5
commit d316c86603

View File

@ -2,97 +2,101 @@
[#]: via: (https://opensource.com/article/21/7/dnf-vs-apt) [#]: via: (https://opensource.com/article/21/7/dnf-vs-apt)
[#]: author: (Seth Kenlon https://opensource.com/users/seth) [#]: author: (Seth Kenlon https://opensource.com/users/seth)
[#]: collector: (lujun9972) [#]: collector: (lujun9972)
[#]: translator: (perfiffer ) [#]: translator: (perfiffer)
[#]: reviewer: ( ) [#]: reviewer: (wxy)
[#]: publisher: ( ) [#]: publisher: ( )
[#]: url: ( ) [#]: url: ( )
Linux 包管理器: dnf 和 apt Linux 包管理器比较:dnf 和 apt
====== ======
包管理器提供同样的功能-安装,管理和删除应用-但是它们还是有一些不一样的地方。
![Gift box opens with colors coming out][1]
有多种方式 [在Linux系统上获取一个应用][2]。例如最新的Flatpak 和容器,另外,还有 DEB 和 RPM是一直以来经受住了考验的方式 > 包管理器提供大致相同的功能:安装、管理和移除应用,但是它们还是有一些不一样的地方。
对于所有的操作系统来说,目前并不存在一种通用的应用安装程序。今天,因为有无数的开发者发布软件,这导致了大部分的操作系统使用了应用商店(包括第一方和第三方),拖拽式的安装方式,还有安装向导。不同的开发者对于他们发布的代码有不同的需求,这直接导致了他们所选择的安装方式的不同。 ![](https://img.linux.net.cn/data/attachment/album/202107/27/083002sd5zzxu37yhiz6yc.jpg)
Linux 开创了一种通过命令行安装,管理,卸载应用的包管理器理念。`apt` 和 `dnf` 就是两种较为常见的包管理器。`apt` 命令是用来管理 DEB 格式的包,`dnf` 命令是用来管理 RPM 格式的包。这两种包管理器在理论上并不是完全互斥的尽管在实际的实践中Linux 发行版通常只会使用到其中的一种。理论上,这两种命令可以运行在同一个系统上,但是会造成安装包的重叠,版本控制也会更加困难,命令彼此之间是冗余的。然而,如果您是在一个复杂的 Linux 环境下工作,比如您的工作站运行的是一个发行版,同时需要与运行另外一种发行版的服务器进行交互,那么您最好掌握这两种包管理器。 [在 Linux 系统上获取一个应用][2] 有多种方式。例如,有新的 Flatpak 和容器方式,也有 DEB 和 RPM 这样一直以来经过考验的方式。
并没有一种通用的可以用于所有的操作系统的应用安装程序。如今,因为有无数的开发者发布软件,这导致了大部分的操作系统使用了应用商店(包括第一方和第三方)、拖放式安装,还有安装向导。不同的开发者对于他们发布的代码有不同的需求,这直接导致了他们所选择的安装方式的不同。
Linux 开创了一种通过命令行安装、管理、移除应用的包管理器的概念。`apt` 和 `dnf` 就是两种较为常见的包管理器。`apt` 命令是用来管理 DEB 格式的包,`dnf` 命令是用来管理 RPM 格式的包。这两种包管理器在理论上并不是完全互斥的尽管在实际的实践中Linux 发行版通常只会使用到其中的一种。理论上,这两种命令可以运行在同一个系统上,但是会造成安装包的重叠,版本控制也会更加困难,命令也会是冗余的。然而,如果你是在一个混合的 Linux 环境下工作,比如你的工作站运行的是一个发行版,同时需要与运行另外一种发行版的服务器进行交互,那么你最好同时掌握这两种包管理器。
### 搜索应用 ### 搜索应用
当您通过包管理器安装一个应用时,您需要先知道包的名称。通常,应用的名称和包的名称是一样的。`dnf` 和 `apt` 验证要安装的包名的过程是完全相同的。 你通过包管理器安装一个应用时,你需要先知道包的名称。通常,应用的名称和包的名称是一样的。`dnf` 和 `apt` 验证要安装的包名的过程是完全相同的。
``` ```
$ sudo dnf search zsh $ sudo dnf search zsh
====== 名称 精准匹配:zsh ====== ====== Name Exactly Matched: zsh ======
zsh.x86_64 : Powerful interactive shell zsh.x86_64 : Powerful interactive shell
[...]
``` ```
使用 `apt`: 使用 `apt`:
``` ```
$ sudo apt search zsh $ sudo apt search zsh
正在排序... 完成 Sorting... Done
全文搜索... 完成 Full Text Search... Done
csh/stable 20110502-4+deb10u1 amd64 csh/stable 20110502-4+deb10u1 amd64
  Shell with C-like syntax Shell with C-like syntax
ddgr/stable 1.6-1 all ddgr/stable 1.6-1 all
  DuckDuckGo from the terminal DuckDuckGo from the terminal
direnv/stable 2.18.2-2 amd64 direnv/stable 2.18.2-2 amd64
  Utility to set directory specific environment variables Utility to set directory specific environment variables
draai/stable 20180521-1 all draai/stable 20180521-1 all
  Command-line music player for MPD Command-line music player for MPD
[...] [...]
``` ```
如果想通过 `apt` 更快的获取相关的搜索结果,您可以使用 [正则表达式][3]: 如果想通过 `apt` 更快的获取相关的搜索结果,你可以使用 [正则表达式][3]
``` ```
apt search ^zsh apt search ^zsh
正在排序... 完成 Sorting... Done
全文搜索... 完成 Full Text Search... Done
zsh/stable 5.7.1-1 amd64 zsh/stable 5.7.1-1 amd64
  shell with lots of features shell with lots of features
[...] [...]
``` ```
### 查找应用程序包 ### 查找应用程序包
在一个包中,有一些命令是与其它命令捆绑在一起的。在这种情况下,您可以通过包管理器去了解哪个包提供了您需要的命令。`dnf` 和 `apt` 命令在如何搜索这类元数据上是有区别的。
使用 `dnf`: 有一些命令是与其它命令捆绑在一起的,都在一个包中。在这种情况下,你可以通过包管理器去了解哪个包提供了你需要的命令。`dnf` 和 `apt` 命令在如何搜索这类元数据上是有区别的。
使用 `dnf`
``` ```
$ sudo dnf provides pgrep $ sudo dnf provides pgrep
procps-ng-3.3.15-6.el8.x86_64 : System and process monitoring utilities procps-ng-3.3.15-6.el8.x86_64 : System and process monitoring utilities
仓库        : baseos Repo : baseos
匹配来源: Matched from:
文件名    : /usr/bin/pgrep Filename : /usr/bin/pgrep
``` ```
`apt` 命令使用子命令`apt-file`。要使用 `apt-file`,您必须先安装它,然后提示它更新缓存: `apt` 命令使用子命令 `apt-file`。要使用 `apt-file`,你必须先安装它,然后提示它更新缓存:
``` ```
$ sudo apt install apt-file $ sudo apt install apt-file
正在读取软件包列表... 完成 Reading package lists... Done
正在分析软件包的依赖关系树       Building dependency tree
正在读取状态信息... 完成 Reading state information... Done
下列额外的软件包将要被安装: The following additional packages will be installed:
  libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl
下列【新】软件包将被安装: The following NEW packages will be installed:
  apt-file libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl apt-file libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 14 个软件包未被升级。 0 upgraded, 5 newly installed, 0 to remove and 14 not upgraded.
需要下载 297 kB 的归档。 Need to get 297 kB of archives.
解压缩后会消耗 825 kB 的额外空间。 After this operation, 825 kB of additional disk space will be used.
您想要继续吗? [Y/n] y Do you want to continue? [Y/n] y
$ sudo apt-file update $ sudo apt-file update
[...] [...]
``` ```
您可以通过 `apt-file` 搜索命令。您可以使用此命令进行广泛的全局搜索,但假如您知道命令的执行路径,它会更准确: 你可以通过 `apt-file` 搜索命令。你可以使用此命令进行广泛的全局搜索,但假如你知道命令的执行路径,它会更准确:
``` ```
$ sudo apt-file search /usr/bin/pgrep $ sudo apt-file search /usr/bin/pgrep
@ -108,32 +112,32 @@ procps: /usr/bin/pgrep
$ sudo apt install zsh $ sudo apt install zsh
``` ```
使用 `dnf`可以使用同样的方式来安装一个包: 使用 `dnf`可以使用同样的方式来安装一个包:
``` ```
$ sudo dnf install zsh $ sudo dnf install zsh
``` ```
许多基于RPM的发行版都具有组包安装的特性这些特性会将具有相关性的应用程序收集到一个易于安装的目标中。例如Fedora 中的 [Design Suite][4] 组包就包含流行的创造性应用程序。那些想要一个创造性应用程序的“艺术家”可能也想要一个类似的应用程序,选择安装一整个组包是建立一个数据工厂简单而快速的方法。您可以通过 `group list` 来查看可用的组(使用 `-v` 来过滤空格 许多基于 RPM 的发行版都具有组包安装的特性,它会将有时表面相关的应用程序收集到一个易于安装的目标中。例如Fedora 中的 [Design Suite][4] 组包就包含流行的创意应用程序。那些想要某一个创意应用程序的艺术家可能也想要类似的应用程序,选择安装一整个组包一个简单而快速的方法,可以合理地开始建立一个数字工作室。你可以通过 `group list` 来查看可用的组包(使用 `-v` 来查看不带空格的组名
``` ```
$ sudo dnf group list -v $ sudo dnf group list -v
[...] [...]
可用组: Available Groups:
   Container Management (container-management) Container Management (container-management)
   RPM Development Tools (rpm-development-tools) RPM Development Tools (rpm-development-tools)
   Design Suite (design-suite) Design Suite (design-suite)
   Development Tools (development) Development Tools (development)
[...] [...]
``` ```
使用 `group install` 子命令安装 RPM 组: 使用 `group install` 子命令安装 RPM 组
``` ```
$ sudo dnf group install design-suite $ sudo dnf group install design-suite
``` ```
可以使用 `@` 符号来减少输入: 可以使用 `@` 符号来减少输入:
``` ```
$ sudo dnf install @design-suite $ sudo dnf install @design-suite
@ -141,15 +145,15 @@ $ sudo dnf install @design-suite
### 更新应用程序 ### 更新应用程序
使用包管理器的一个优点是,它知道所有已经安装的应用。这样您不必去寻找应用程序的更新版本。相反,您可以通过包管理器去获取更新的版本。 使用包管理器的一个优点是,它知道所有已经安装的应用。这样你不必去寻找应用程序的更新版本。相反,你可以通过包管理器去获取更新的版本。
`dnf``apt` 使用的子命令略有不同。因为 `apt` 保存了需要定期更新的缓存信息,它使用 `upgrade` 子命令来更新应用程序: `dnf``apt` 使用的子命令略有不同。因为 `apt` 保存了一个需要定期更新的缓存信息,它使用 `upgrade` 子命令来更新应用程序:
``` ```
$ sudo apt upgrade $ sudo apt upgrade
``` ```
相比之下,`dnf` 命令在每次使用时都会更新元信息,所以 `update``upgrade` 子命令是可以互换的: 相比之下,`dnf` 命令在每次使用时都会更新元信息,所以 `update``upgrade` 子命令是可以互换的:
``` ```
$ sudo dnf upgrade $ sudo dnf upgrade
@ -161,9 +165,9 @@ $ sudo dnf upgrade
$ sudo dnf update $ sudo dnf update
``` ```
### 除应用程序 ### 除应用程序
如果您曾经尝试在任何一个平台上手动删除一个应用程序,您就会知道,应用程序删除后,在硬盘上会残留各种文件,比如首选项文件、数据或图标。所以包管理器的另一个优点是,包管理器管理着包中安装的每一个文件,可以很方便的删除: 如果你曾经尝试在任何一个平台上手动删除一个应用程序,你就会知道,应用程序删除后,在硬盘上会残留各种文件,比如首选项文件、数据或图标。所以包管理器的另一个优点是,包管理器管理着包中安装的每一个文件,可以很方便的删除:
``` ```
$ sudo dnf remove zsh $ sudo dnf remove zsh
@ -175,21 +179,21 @@ $ sudo dnf remove zsh
$ sudo apt remove zsh $ sudo apt remove zsh
``` ```
使用 `apt` 命令删除一个包并不会删除已修改的用户配置文件,以防您意外删除了包。如果您想通过 `apt` 命令删除一个应用及其配置文件,可以在删除包之前,使用 `purge` 子命令: 使用 `apt` 命令删除一个包并不会删除已修改的用户配置文件,以防你意外删除了包。如果你想通过 `apt` 命令删除一个应用及其配置文件,请在你之前删除过的应用程序上使用 `purge` 子命令:
``` ```
$ sudo apt purge zsh $ sudo apt purge zsh
``` ```
`apt``dnf` 都不会删除家目录中的数据和配置文件(即使使用 `purge` 子命令)。如果想要从家目录中删除数据,您必须手动操作(通常您可以在 `~/.config``~/.local` 文件中找到)。 `apt``dnf` 都不会删除家目录中的数据和配置文件(即使使用 `purge` 子命令)。如果想要从家目录中删除数据,你必须手动操作(通常你可以在 `~/.config``~/.local` 文件中找到)。
### 了解包管理 ### 了解包管理
无论选择的发行版支持的是 `apt` 还是 `dnf`,这些命令的用途大致相同。它们可以帮助您安装,更新和删除包。这两种包管理器是目前最通用的包管理器。它们的语法元素在很大程度上是相同的,所以在两者之间切换非常容易。 无论选择的发行版支持的是 `apt` 还是 `dnf`,这些命令的用途大致相同。它们可以帮助你安装、更新和移除包。这两种包管理器是目前最通用的包管理器。它们的语法元素在很大程度上是相同的,所以在两者之间切换非常容易。
`apt``dnf` 还有一些高级功能,例如仓库管理,这些功能并不像您使用 `search``install` 那样频繁。 `apt``dnf` 还有一些高级功能,例如仓库管理,但这些功能并不像你使用 `search``install` 那样频繁。
无论您更多的使用哪种包管理器,您都可以下载我们的 [apt 备忘单][5] 和 [dnf 备忘单][6],以便您在最需要的时候可以查询使用语法。 无论你更经常使用哪种包管理器,你都可以下载我们的 [apt 备忘单][5] 和 [dnf 备忘单][6],以便你在最需要的时候可以查询使用语法。
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -198,7 +202,7 @@ via: https://opensource.com/article/21/7/dnf-vs-apt
作者:[Seth Kenlon][a] 作者:[Seth Kenlon][a]
选题:[lujun9972][b] 选题:[lujun9972][b]
译者:[perfiffer](https://github.com/perfiffer) 译者:[perfiffer](https://github.com/perfiffer)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出