服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Linux 包管理器比较:dnf 和 apt

Linux 包管理器比较:dnf 和 apt

2021-07-27 23:40Linux中国Seth Kenlon Linux

Linux 开创了一种通过命令行安装、管理、移除应用的包管理器的概念。apt 和 dnf 就是两种较为常见的包管理器。apt 命令是用来管理 DEB 格式的包,dnf 命令是用来管理 RPM 格式的包。

 

  • 包管理器提供大致相同的功能:安装、管理和移除应用,但是它们还是有一些不一样的地方。

 

Linux 系统上获取一个应用 有多种方式。例如,有新的 Flatpak 和容器方式,也有 DEB 和 RPM 这样一直以来经过考验的方式。

Linux 包管理器比较:dnf 和 apt

并没有一种通用的可以用于所有的操作系统的应用安装程序。如今,因为有无数的开发者发布软件,这导致了大部分的操作系统使用了应用商店(包括第一方和第三方)、拖放式安装,还有安装向导。不同的开发者对于他们发布的代码有不同的需求,这直接导致了他们所选择的安装方式的不同。

Linux 开创了一种通过命令行安装、管理、移除应用的包管理器的概念。aptdnf 就是两种较为常见的包管理器。apt 命令是用来管理 DEB 格式的包,dnf 命令是用来管理 RPM 格式的包。这两种包管理器在理论上并不是完全互斥的,尽管在实际的实践中,Linux 发行版通常只会使用到其中的一种。理论上,这两种命令可以运行在同一个系统上,但是会造成安装包的重叠,版本控制也会更加困难,命令也会是冗余的。然而,如果你是在一个混合的 Linux 环境下工作,比如你的工作站运行的是一个发行版,同时需要与运行另外一种发行版的服务器进行交互,那么你最好同时掌握这两种包管理器。

搜索应用

 

当你通过包管理器安装一个应用时,你需要先知道包的名称。通常,应用的名称和包的名称是一样的。dnf 和 apt 验证要安装的包名的过程是完全相同的。

  1. $ sudo dnf search zsh 
  2. ====== Name Exactly Matched: zsh ====== 
  3. zsh.x86_64 : Powerful interactive shell 
  4. [...] 

使用 apt:

  1. $ sudo apt search zsh 
  2. Sorting... Done 
  3. Full Text Search... Done 
  4. csh/stable 20110502-4+deb10u1 amd64 
  5.   Shell with C-like syntax 
  6. ddgr/stable 1.6-1 all 
  7.   DuckDuckGo from the terminal 
  8. direnv/stable 2.18.2-2 amd64 
  9.   Utility to set directory specific environment variables 
  10. draai/stable 20180521-1 all 
  11.   Command-line music player for MPD 
  12. [...] 

如果想通过 apt 更快的获取相关的搜索结果,你可以使用 正则表达式:

  1. apt search ^zsh 
  2. Sorting... Done 
  3. Full Text Search... Done 
  4. zsh/stable 5.7.1-1 amd64 
  5.   shell with lots of features 
  6. [...] 

查找应用程序包

 

有一些命令是与其它命令捆绑在一起的,都在一个包中。在这种情况下,你可以通过包管理器去了解哪个包提供了你需要的命令。dnf 和 apt 命令在如何搜索这类元数据上是有区别的。

使用 dnf:

  1. $ sudo dnf provides pgrep 
  2. procps-ng-3.3.15-6.el8.x86_64 : System and process monitoring utilities 
  3. Repo        : baseos 
  4. Matched from
  5. Filename    : /usr/bin/pgrep 

apt 命令使用子命令 apt-file。要使用 apt-file,你必须先安装它,然后提示它更新缓存:

  1. $ sudo apt install apt-file 
  2. Reading package lists... Done 
  3. Building dependency tree       
  4. Reading state information... Done 
  5. The following additional packages will be installed: 
  6.   libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl 
  7. The following NEW packages will be installed: 
  8.   apt-file libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl 
  9. 0 upgraded, 5 newly installed, 0 to remove and 14 not upgraded. 
  10. Need to get 297 kB of archives. 
  11. After this operation, 825 kB of additional disk space will be used. 
  12. Do you want to continue? [Y/n] y 
  13. $ sudo apt-file update 
  14. [...] 

你可以通过 apt-file 搜索命令。你可以使用此命令进行广泛的全局搜索,但假如你知道命令的执行路径,它会更准确:

  1. $ sudo apt-file search /usr/bin/pgrep 
  2. pgreplay: /usr/bin/pgreplay               
  3. procps: /usr/bin/pgrep 

安装应用程序

 

使用apt 和 dnf 安装应用程序基本上是相同的:

  1. $ sudo apt install zsh 

使用 dnf,你可以使用同样的方式来安装一个包:

  1. $ sudo dnf install zsh 

许多基于 RPM 的发行版都具有组包安装的特性,它会将有时表面相关的应用程序收集到一个易于安装的目标中。例如,Fedora 中的 Design Suite 组包就包含流行的创意应用程序。那些想要某一个创意应用程序的艺术家可能也想要类似的应用程序,选择安装一整个组包一个简单而快速的方法,可以合理地开始建立一个数字工作室。你可以通过 group list 来查看可用的组包(使用 -v 来查看不带空格的组名):

  1. $ sudo dnf group list -v 
  2. [...] 
  3. Available Groups: 
  4.    Container Management (container-management) 
  5.    RPM Development Tools (rpm-development-tools) 
  6.    Design Suite (design-suite) 
  7.    Development Tools (development) 
  8. [...] 

使用 group install 子命令安装 RPM 组包:

  1. $ sudo dnf group install design-suite 

你可以使用 @ 符号来减少输入:

  1. $ sudo dnf install @design-suite 

更新应用程序

 

使用包管理器的一个优点是,它知道所有已经安装的应用。这样你不必去寻找应用程序的更新版本。相反,你可以通过包管理器去获取更新的版本。

dnf 和 apt 使用的子命令略有不同。因为 apt 保存了一个需要定期更新的缓存信息,它使用 upgrade 子命令来更新应用程序:

  1. $ sudo apt upgrade 

相比之下,dnf 命令在你每次使用时都会更新元信息,所以 update 和 upgrade 子命令是可以互换的:

  1. $ sudo dnf upgrade 

这等同于:

  1. $ sudo dnf update 

移除应用程序

 

如果你曾经尝试在任何一个平台上手动删除一个应用程序,你就会知道,应用程序删除后,在硬盘上会残留各种文件,比如首选项文件、数据或图标。所以包管理器的另一个优点是,包管理器管理着包中安装的每一个文件,可以很方便的删除:

  1. $ sudo dnf remove zsh 

remove 子命令也适用于 apt:

  1. $ sudo apt remove zsh 

使用 apt 命令删除一个包并不会删除已修改的用户配置文件,以防你意外删除了包。如果你想通过 apt 命令删除一个应用及其配置文件,请在你之前删除过的应用程序上使用 purge 子命令:

  1. $ sudo apt purge zsh 

apt 和 dnf 都不会删除家目录中的数据和配置文件(即使使用 purge 子命令)。如果想要从家目录中删除数据,你必须手动操作(通常你可以在 ~/.config 和 ~/.local 文件中找到)。

了解包管理

 

无论你选择的发行版支持的是 apt 还是 dnf,这些命令的用途大致相同。它们可以帮助你安装、更新和移除包。这两种包管理器是目前最通用的包管理器。它们的语法元素在很大程度上是相同的,所以在两者之间切换非常容易。

apt 和 dnf 还有一些高级功能,例如仓库管理,但这些功能并不像你使用 search 和 install 那样频繁。

无论你更经常使用哪种包管理器,你都可以下载我们的 apt 备忘单 和 dnf 备忘单,以便你在最需要的时候可以查询使用语法。

原文地址:https://linux.cn/article-13620-1.html

延伸 · 阅读

精彩推荐
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30