Comando dnf: instalar, atualizar e remover pacotes e a diferença para o yum

Ambiente de testeFamília RHELAlmaLinux 9.8conta rootVerificado em 2026-10-28

O comando dnf é o comando de gerenciamento de pacotes usado para pesquisar, instalar, atualizar e remover pacotes em distribuições Linux da família RHEL. No AlmaLinux 9, digitar yum executa o mesmo programa. Em um servidor AlmaLinux 9, executamos de fato search, info, provides e history e conferimos na saída onde cada um dos comandos de busca de pacotes search, info e provides procura e quais registros de operações ficam no history.

Não executamos comandos que alteram o sistema, como instalar, remover e atualizar. Esse comportamento foi conferido na documentação oficial do DNF e nos registros de operações que já estavam no servidor.

1️⃣ Relação entre o comando dnf e o yum

É fácil supor que digitar yum executa o yum antigo, mas no AlmaLinux 9 yum e dnf são links para o mesmo executável, dnf-3.

ls -l /usr/bin/yum /usr/bin/dnf
lrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/dnf -> dnf-3
lrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/yum -> dnf-3

A única diferença entre yum e dnf é o nome que você digita; com qualquer um deles, os subcomandos e as opções são os mesmos. A saída de search htop executado com yum e com dnf também foi idêntica.

Segundo a documentação oficial do DNF [Changes in DNF CLI compared to YUM], update e upgrade fazem a mesma coisa, e a documentação recomenda upgrade.

Em distribuições antigas sem dnf, use o comando yum normalmente. Os nomes dos subcomandos deste artigo, como install, search e history, são os mesmos no yum.

2️⃣ Consultar pacotes com o comando dnf: search, info, provides

Quando você não sabe o nome exato do pacote do programa que quer instalar, pesquise com search e uma palavra. O search procura a palavra no nome e no resumo (Summary) dos pacotes e coloca no topo o pacote cujo nome corresponde exatamente.

dnf search htop
Last metadata expiration check: 0:21:53 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: htop ==========================
htop.x86_64 : Interactive process viewer

Para htop havia só um pacote com o nome exato, então o resultado ficou em uma linha abaixo de [Name Exactly Matched].

dnf search wget
Last metadata expiration check: 0:22:35 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: wget ==========================
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols
========================= Name & Summary Matched: wget =========================
perl-HTTP-Tinyish-Wget.noarch : HTTP::Tinyish wget backend
wget2-devel.x86_64 : Libraries and header files needed for using wget2 libraries
wget2-libs.x86_64 : Runtime libraries for GNU Wget2
============================== Name Matched: wget ==============================
wget2.x86_64 : An advanced file and recursive website downloader

Uma palavra presente em vários pacotes, como wget, apareceu dividida em três grupos: nome exatamente igual, presente no nome e no resumo, e presente só no nome.

O search não olha a descrição (Description), então não serve para buscar uma palavra que aparece só na descrição. Nesse caso, adicione a opção [--all] para ampliar a busca até a descrição e a URL.

Depois de saber o nome do pacote, use info para conferir a versão, o tamanho e de qual repositório ele vem.

dnf info htop
Last metadata expiration check: 0:22:37 ago on Wed Oct 28 15:24:31 2026.
Available Packages
Name         : htop
Version      : 3.3.0
Release      : 1.el9
Architecture : x86_64
Size         : 198 k
Source       : htop-3.3.0-1.el9.src.rpm
Repository   : epel
Summary      : Interactive process viewer
URL          : http://hisham.hm/htop/
License      : GPLv2+
Description  : htop is an interactive text-mode process viewer for Linux, similar to
             : top(1).

O htop, ainda não instalado, aparece em info htop abaixo de [Available Packages] com versão 3.3.0 e repositório epel. Como o htop só existe no repositório epel, se você executar o search de novo sem o epel, nada aparece.

dnf info wget
Last metadata expiration check: 0:22:38 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
Name         : wget
Version      : 1.21.1
Release      : 11.el9_8
Architecture : x86_64
Size         : 3.1 M
Source       : wget-1.21.1-11.el9_8.src.rpm
Repository   : @System
From repo    : appstream
Summary      : A utility for retrieving files using the HTTP or FTP protocols
URL          : http://www.gnu.org/software/wget/
License      : GPLv3+
Description  : GNU Wget is a file retrieval utility which can use either the HTTP or
             : FTP protocols. Wget features include the ability to work in the
             : background while you are logged out, recursive retrieval of
             : directories, file name wildcard matching, remote file timestamp
             : storage and comparison, use of Rest with FTP servers and Range with
             : HTTP servers to retrieve files over slow or unstable connections,
             : support for Proxy servers, and configurability.

O wget, já instalado, apareceu abaixo de [Installed Packages]. O Repository era @System, e o repositório de onde ele foi baixado na instalação aparecia como appstream na linha [From repo].

Ao contrário, quando você só sabe o nome do arquivo e não sabe em qual pacote ele está, passe o caminho do arquivo para o provides.

dnf provides /usr/bin/tree
Last metadata expiration check: 0:22:40 ago on Wed Oct 28 15:24:31 2026.
tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo        : @System
Matched from:
Filename    : /usr/bin/tree

tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo        : baseos
Matched from:
Filename    : /usr/bin/tree

A busca por /usr/bin/tree trouxe dois grupos do pacote tree: o lado instalado (@System) e o lado do repositório (baseos). O Filename abaixo de [Matched from] é o caminho que realmente correspondeu. Se você escrever só o nome do arquivo, sem caminho, o dnf acrescenta /usr/bin/ e /usr/sbin/ na frente e procura de novo; se ainda assim não encontrar, termina com o erro abaixo.

dnf provides nosuchfile
Last metadata expiration check: 0:22:41 ago on Wed Oct 28 15:24:31 2026.
Error: No matches found. If searching for a file, try specifying the full path or using a wildcard prefix ("*/") at the beginning.

A mensagem de erro sugere escrever o caminho completo ou colocar o curinga [*/] na frente. O que cada um dos três comandos recebe e onde procura pode ser comparado passo a passo no diagrama abaixo.

🧭 Onde os três comandos de busca de pacotes procuram
Diagrama explicativo
🔍 Comando
$ dnf search htopinfo htopprovides /usr/bin/tree
① EntradahtopUma palavrahtopNome do pacote/usr/bin/treeCaminho do arquivo
➜
② Onde procuraNome e resumo (Summary) do pacoteEncontra todos os pacotes com a palavra em todos os repositórios.Metadados de um pacoteMostra separadamente o que está instalado e o que pode ser instalado.Lista de arquivos fornecidos pelo pacoteEncontra de trás para frente o pacote que contém o arquivo daquele caminho.
➜
③ SaídaLista de pacotes correspondenteshtop.x86_64 : Interactive process viewerVersão, tamanho, repositório, descriçãoVersion 3.3.0, Size 198 k, Repository epelPacote que contém o arquivotree-1.8.0-10.el9.x86_64, @System, baseos
O search procura a palavra no nome e no resumo dos pacotes e mostra uma lista começando pelos nomes exatamente iguais.
O info mostra a versão, o tamanho e o repositório de origem de um pacote. Em pacotes instalados, aparece @System no campo Repository.
O provides encontra o pacote de trás para frente a partir do caminho do arquivo. O lado instalado (@System) e o lado do repositório (baseos) aparecem separados.

3️⃣ Instalar, remover e atualizar pacotes: install, remove, upgrade

O pacote encontrado é instalado com install. O dnf instala de uma vez não só o pacote indicado, mas também os pacotes de dependência de que ele precisa.

dnf install htop

Segundo a documentação oficial, o dnf mostra a lista de pacotes a instalar (o resumo da transação) e pergunta se deve continuar; com [-y], ele segue sem perguntar.

Os pacotes de dependência necessários na instalação podem ser conferidos antes com repoquery [--requires].

dnf repoquery --requires htop
Last metadata expiration check: 0:22:59 ago on Wed Oct 28 15:24:31 2026.
libc.so.6(GLIBC_2.34)(64bit)
libcap.so.2()(64bit)
libhwloc.so.15()(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libm.so.6(GLIBC_2.29)(64bit)
libncursesw.so.6()(64bit)
libnl-3.so.200()(64bit)
libnl-3.so.200(libnl_3)(64bit)
libnl-genl-3.so.200()(64bit)
libnl-genl-3.so.200(libnl_3)(64bit)
libtinfo.so.6()(64bit)
rtld(GNU_HASH)

Com apenas [--requires], aparecem só os nomes das bibliotecas que o htop exige. Para saber em qual pacote essas bibliotecas estão, use o comando a seguir.

dnf repoquery --requires --resolve htop
Last metadata expiration check: 0:23:01 ago on Wed Oct 28 15:24:31 2026.
glibc-0:2.34-283.el9_8.i686
glibc-0:2.34-283.el9_8.x86_64
hwloc-libs-0:2.4.1-6.el9_7.x86_64
libcap-0:2.48-10.el9_8.1.x86_64
libnl3-0:3.11.0-1.el9.x86_64
ncurses-libs-0:6.2-12.20210508.el9.x86_64

Ao adicionar [--resolve], a saída passa a mostrar os nomes dos pacotes que fornecem essas bibliotecas. Entre eles, o hwloc-libs não estava no servidor de teste, então ele é instalado junto ao instalar o htop.

O remove apaga o pacote indicado junto com os pacotes que dependem dele e, na configuração padrão, também remove os pacotes de dependência que deixaram de ser necessários.

dnf remove htop

Mesmo removendo só o htop, pacotes de dependência de que nenhum outro pacote precisa, como o hwloc-libs instalado por causa do htop, são removidos junto.

O que foi instalado como dependência no passado, mas hoje não é necessário para nenhum pacote, é removido pelo autoremove. Confira antes a lista do que será removido com list [--autoremove].

dnf list --autoremove
Last metadata expiration check: 0:23:09 ago on Wed Oct 28 15:24:31 2026.
Autoremove Packages
cmake-rpm-macros.noarch            3.31.8-3.el9                       @appstream
grub2-tools-efi.x86_64             1:2.06-126.el9_8.alma.1            @baseos
grub2-tools-extra.x86_64           1:2.06-126.el9_8.alma.1            @baseos
libatomic.x86_64                   11.5.0-14.el9.alma.1               @baseos
libvisual.x86_64                   1:0.4.0-34.el9                     @appstream
libwayland-server.x86_64           1.21.0-1.el9                       @appstream
dnf autoremove

No servidor de teste, apareceram 6 pacotes na lista, e o autoremove remove esses 6 de uma vez.

Para ver se saiu uma nova versão de um pacote instalado, use check-update. Com o nome de um pacote, ele verifica só esse pacote.

dnf check-update libavif libdav1d
Last metadata expiration check: 0:52:20 ago on Wed Oct 28 15:24:31 2026.

libavif.x86_64                          1.1.1-3.el9                         epel
libdav1d.x86_64                         1.5.4-1.el9                         epel

O comando acima, com libavif e libdav1d, terminou com código de saída 100 porque os dois tinham versão nova. O check-update termina com 100 quando há atualizações, 0 quando não há e 1 em caso de erro, então você pode usá-lo como condição em scripts.

Com list e o nome de um pacote, a versão instalada e a nova versão do repositório aparecem juntas. Com updateinfo list, você confere a qual advisory essa atualização corresponde.

dnf list libavif
Last metadata expiration check: 0:52:21 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
libavif.x86_64                        0.11.1-5.el9                         @epel
Available Packages
libavif.x86_64                        1.1.1-3.el9                          epel

No libavif, a versão instalada 0.11.1-5.el9 apareceu abaixo de [Installed Packages] e a 1.1.1-3.el9 do repositório, separada, abaixo de [Available Packages].

dnf updateinfo list libavif
Last metadata expiration check: 0:52:24 ago on Wed Oct 28 15:24:31 2026.
FEDORA-EPEL-2026-d611eab94a bugfix libavif-1.1.1-3.el9.x86_64

Essa nova versão era uma atualização do advisory de bugfix FEDORA-EPEL-2026-d611eab94a. Em atualizações de segurança, no mesmo lugar aparecem a gravidade e Sec., como em [Moderate/Sec.].

A atualização é feita com upgrade. Como o upgrade só instala versões novas dentro do que as dependências permitem, a versão mostrada pelo check-update pode não ser instalada exatamente.

dnf upgrade libavif

Com o nome de um pacote, só esse pacote e os pacotes de dependência necessários vão para a nova versão.

dnf upgrade

Sem o nome, o alvo são todos os pacotes instalados. O fluxo de mostrar o resumo da transação e perguntar se deve continuar é igual ao do install, e a transação executada fica registrada com um número no history.

4️⃣ Lista de repositórios do comando dnf: repolist

O lugar onde search e install procuram pacotes é o repositório (repository). O repolist mostra o id e o nome dos repositórios habilitados no momento.

dnf repolist
repo id             repo name
appstream           AlmaLinux 9 - AppStream
baseos              AlmaLinux 9 - BaseOS
epel                Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
extras              AlmaLinux 9 - Extras
nginx-stable        nginx stable repo
remi-modular        Remi's Modular repository for Enterprise Linux 9 - x86_64
remi-safe           Safe Remi's RPM repository for Enterprise Linux 9 - x86_64

É fácil supor que um repositório fora da lista não existe no servidor, mas a saída padrão do repolist mostra só os repositórios habilitados. Com [--all], ele mostra também os desabilitados, junto com a coluna status. No servidor de teste, os três repositórios CRB do AlmaLinux 9 estavam todos disabled.

dnf repolist --all | grep -i crb
crb                           AlmaLinux 9 - CRB                         disabled
crb-debuginfo                 AlmaLinux 9 - CRB - Debug                 disabled
crb-source                    AlmaLinux 9 - CRB - Source                disabled

O número de pacotes, o endereço de espelho, o tempo de expiração dos metadados e o local do arquivo de configuração de um repositório são conferidos com repoinfo.

dnf repoinfo baseos
Last metadata expiration check: 0:22:55 ago on Wed Oct 28 15:24:31 2026.
Repo-id            : baseos
Repo-name          : AlmaLinux 9 - BaseOS
Repo-status        : enabled
Repo-revision      : 1793090609
Repo-updated       : Tue Oct 27 17:43:29 2026
Repo-pkgs          : 3458
Repo-available-pkgs: 3458
Repo-size          : 21 G
Repo-mirrors       : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl       : http://aws.repo.almalinux.org/almalinux/9.8/BaseOS/x86_64/os/ (9 more)
Repo-expire        : 86400 second(s) (last: Wed Oct 28 15:24:26 2026)
Repo-filename      : /etc/yum.repos.d/almalinux-baseos.repo
Total packages: 3458

Em repoinfo baseos, apareceram 3.458 pacotes, e os metadados estavam configurados para ser verificados de novo a cada 86.400 segundos (um dia). O arquivo .repo da linha [Repo-filename] é o arquivo de configuração desse repositório. As opções [--set-enabled] e [--set-disabled], que habilitam e desabilitam repositórios, são usadas com o comando config-manager do dnf-plugins-core.

5️⃣ Histórico de operações e reversão com o comando dnf: history

Depois de várias instalações e remoções, fica difícil acompanhar o que mudou e quando, mas o dnf numera cada transação (transaction) e a registra no history. Com o nome de um pacote, aparecem só as transações que alteraram esse pacote.

dnf history list tmux
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    51 | install -y tmux          | 2026-10-15 20:40 | Install        |    1

Na saída filtrada por tmux, sobrou só a linha da transação 51, que instalou o tmux. Um intervalo de números é escrito com dois pontos, como [50..51].

dnf history list 50..51
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    51 | install -y tmux          | 2026-10-15 20:40 | Install        |    1
    50 | -y -q install mlocate    | 2026-10-07 19:39 | Install        |    1 EE

O número na coluna [Altered] é a quantidade de pacotes alterados. No fim da linha 50 apareceu [EE], o que significa que a transação terminou, mas houve saída de aviso ou erro.

A linha de comando, os pacotes alterados e o código de resultado de uma transação são conferidos com history info.

dnf history info 51
Transaction ID : 51
Begin time     : Thu Oct 15 20:40:51 2026
Begin rpmdb    : d3db9c92a9d0f6ef9a7a1404552bb76e9d56ba7602b1fce73fa5a62170d33c5c
End time       : Thu Oct 15 20:40:51 2026 (0 seconds)
End rpmdb      : a862c33ee6a2f2d0479e4dc2631907dee47591c5b6795551b755c6cd090ac1df
User           : root <root>
Return-Code    : Success
Releasever     : 9
Command Line   : install -y tmux
Persistence    : Persist
Comment        :
Packages Altered:
    Install tmux-3.2a-5.el9.x86_64 @baseos

Ao abrir a 51, o comando executado install -y tmux estava registrado tal como foi digitado em [Command Line]. Em [Packages Altered] constavam o tmux instalado e o repositório @baseos, e em [Return-Code], Success. Sem o número, aparece a transação mais recente.

Se você instalou algo por engano, passe o número da transação para history undo para executar a ação inversa dessa transação. O rollback volta o estado dos pacotes para logo depois da transação indicada.

dnf history undo 51

Como a transação 51 foi a instalação do tmux, undo 51 vira uma transação inversa que remove o tmux.

dnf history rollback 50

O rollback 50 desfaz todas as transações executadas depois da 50, até a última, então o resultado pode ser diferente do undo 51, que remove só o tmux.

Segundo a documentação oficial, se houver um pacote que não possa ser revertido, undo e rollback terminam sem alterar nada. Mesmo que alterações feitas diretamente com rpm não estejam no histórico, eles não param com erro.

🔲 Simulador do comando dnf

No simulador abaixo, você pode digitar search, info, provides, repolist e history e ver a saída. Digitando com yum, o resultado é o mesmo.

Simulador do comando dnfdnf 4.14.0
[root@server work]#
Use as teclas ↑↓ para chamar de volta os comandos digitados antes.

🔢 FAQ & conteúdo recomendado

É o momento em que a cópia local dos metadados do repositório foi verificada pela última vez. Segundo a documentação oficial, ela é baixada de novo quando passa o tempo metadata_expire definido para cada repositório. Comandos que não precisam necessariamente da informação mais recente, como search e provides, usam a cópia local mesmo que ela tenha expirado. Com [--refresh], os dados são baixados de novo à força, e [-C] usa só o cache.

Ao testar um comando inexistente como foo, apareceu o erro [No such command] com a sugestão de instalar um plugin no formato [dnf install dnf-command(nome)]. Isso acontece porque alguns subcomandos são adicionados por pacotes de plugin como dnf-plugins-core. Se for erro de digitação, confira a lista de comandos com [dnf --help].

O rpm -q lê só o banco de dados de pacotes instalados no servidor (RPMDB) e mostra a versão do pacote; se ele não existir, responde [package htop is not installed]. O dnf list –installed acrescenta as informações de repositório a esse mesmo banco de dados, então ao lado do pacote instalado aparece o repositório de onde ele veio (@epel). Se você usar dnf list sem [--installed], as novas versões do repositório também aparecem.

🧭 Conteúdo recomendado sobre comandos de pacotes 6 posts · 2 referências
🗂️ Comandos de pacotes
📄 YUM: conceito e comandos básicos 📄 Comando dnf 📄 Comando yum-config-manager 📄 Diferença entre RPM e YUM
📄 Comandos apt · apt-get 📄 Instalar o snapd

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 1   +   5   =