Linux中國

Linux 包管理器比較:dnf 和 apt

在 Linux 系統上獲取一個應用 有多種方式。例如,有新的 Flatpak 和容器方式,也有 DEB 和 RPM 這樣一直以來經過考驗的方式。

並沒有一種通用的可以用於所有的操作系統的應用安裝程序。如今,因為有無數的開發者發布軟體,這導致了大部分的操作系統使用了應用商店(包括第一方和第三方)、拖放式安裝,還有安裝嚮導。不同的開發者對於他們發布的代碼有不同的需求,這直接導致了他們所選擇的安裝方式的不同。

Linux 開創了一種通過命令行安裝、管理、移除應用的包管理器的概念。aptdnf 就是兩種較為常見的包管理器apt 命令是用來管理 DEB 格式的包,dnf 命令是用來管理 RPM 格式的包。這兩種包管理器在理論上並不是完全互斥的,儘管在實際的實踐中,Linux 發行版通常只會使用到其中的一種。理論上,這兩種命令可以運行在同一個系統上,但是會造成安裝包的重疊,版本控制也會更加困難,命令也會是冗餘的。然而,如果你是在一個混合的 Linux 環境下工作,比如你的工作站運行的是一個發行版,同時需要與運行另外一種發行版的伺服器進行交互,那麼你最好同時掌握這兩種包管理器。

搜索應用

當你通過包管理器安裝一個應用時,你需要先知道包的名稱。通常,應用的名稱和包的名稱是一樣的。dnfapt 驗證要安裝的包名的過程是完全相同的。

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

使用 apt:

$ sudo apt search zsh
Sorting... Done
Full Text Search... Done
csh/stable 20110502-4+deb10u1 amd64
  Shell with C-like syntax

ddgr/stable 1.6-1 all
  DuckDuckGo from the terminal

direnv/stable 2.18.2-2 amd64
  Utility to set directory specific environment variables

draai/stable 20180521-1 all
  Command-line music player for MPD
[...]

如果想通過 apt 更快的獲取相關的搜索結果,你可以使用 正則表達式

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

查找應用程序包

有一些命令是與其它命令捆綁在一起的,都在一個包中。在這種情況下,你可以通過包管理器去了解哪個包提供了你需要的命令。dnfapt 命令在如何搜索這類元數據上是有區別的。

使用 dnf

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

apt 命令使用子命令 apt-file。要使用 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
The following NEW packages will be installed:
  apt-file libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl
0 upgraded, 5 newly installed, 0 to remove and 14 not upgraded.
Need to get 297 kB of archives.
After this operation, 825 kB of additional disk space will be used.
Do you want to continue? [Y/n] y

$ sudo apt-file update
[...]

你可以通過 apt-file 搜索命令。你可以使用此命令進行廣泛的全局搜索,但假如你知道命令的執行路徑,它會更準確:

$ sudo apt-file search /usr/bin/pgrep
pgreplay: /usr/bin/pgreplay              
procps: /usr/bin/pgrep

安裝應用程序

使用aptdnf 安裝應用程序基本上是相同的:

$ sudo apt install zsh

使用 dnf,你可以使用同樣的方式來安裝一個包:

$ sudo dnf install zsh

許多基於 RPM 的發行版都具有組包安裝的特性,它會將有時表面相關的應用程序收集到一個易於安裝的目標中。例如,Fedora 中的 Design Suite 組包就包含流行的創意應用程序。那些想要某一個創意應用程序的藝術家可能也想要類似的應用程序,選擇安裝一整個組包一個簡單而快速的方法,可以合理地開始建立一個數字工作室。你可以通過 group list 來查看可用的組包(使用 -v 來查看不帶空格的組名):

$ sudo dnf group list -v
[...]
Available Groups:
   Container Management (container-management)
   RPM Development Tools (rpm-development-tools)
   Design Suite (design-suite)
   Development Tools (development)
[...]

使用 group install 子命令安裝 RPM 組包:

$ sudo dnf group install design-suite

你可以使用 @ 符號來減少輸入:

$ sudo dnf install @design-suite

更新應用程序

使用包管理器的一個優點是,它知道所有已經安裝的應用。這樣你不必去尋找應用程序的更新版本。相反,你可以通過包管理器去獲取更新的版本。

dnfapt 使用的子命令略有不同。因為 apt 保存了一個需要定期更新的緩存信息,它使用 upgrade 子命令來更新應用程序:

$ sudo apt upgrade

相比之下,dnf 命令在你每次使用時都會更新元信息,所以 updateupgrade 子命令是可以互換的:

$ sudo dnf upgrade

這等同於:

$ sudo dnf update

移除應用程序

如果你曾經嘗試在任何一個平台上手動刪除一個應用程序,你就會知道,應用程序刪除後,在硬碟上會殘留各種文件,比如首選項文件、數據或圖標。所以包管理器的另一個優點是,包管理器管理著包中安裝的每一個文件,可以很方便的刪除:

$ sudo dnf remove zsh

remove 子命令也適用於 apt

$ sudo apt remove zsh

使用 apt 命令刪除一個包並不會刪除已修改的用戶配置文件,以防你意外刪除了包。如果你想通過 apt 命令刪除一個應用及其配置文件,請在你之前刪除過的應用程序上使用 purge 子命令:

$ sudo apt purge zsh

aptdnf 都不會刪除家目錄中的數據和配置文件(即使使用 purge 子命令)。如果想要從家目錄中刪除數據,你必須手動操作(通常你可以在 ~/.config~/.local 文件中找到)。

了解包管理

無論你選擇的發行版支持的是 apt 還是 dnf,這些命令的用途大致相同。它們可以幫助你安裝、更新和移除包。這兩種包管理器是目前最通用的包管理器。它們的語法元素在很大程度上是相同的,所以在兩者之間切換非常容易。

aptdnf 還有一些高級功能,例如倉庫管理,但這些功能並不像你使用 searchinstall 那樣頻繁。

無論你更經常使用哪種包管理器,你都可以下載我們的 apt 備忘單dnf 備忘單,以便你在最需要的時候可以查詢使用語法。

via: https://opensource.com/article/21/7/dnf-vs-apt

作者:Seth Kenlon 選題:lujun9972 譯者:perfiffer 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國