O gerenciamento de pacotes na família Red Hat — RHEL, Fedora, Rocky, AlmaLinux e Oracle Linux — gira em torno do formato RPM e de duas camadas de ferramentas: o rpm na base (arquivos .rpm e banco de dados local) e o dnf/yum no topo (dependências e repositórios). Este guia cobre o ecossistema completo — do uso diário ao troubleshooting — e é o espelho do guia APT e dpkg para a família Debian.
| Caminho | Função |
|---|---|
/var/lib/rpm |
Banco de dados do RPM. Contém metadados de todos os pacotes instalados, incluindo versões, dependências, arquivos pertencentes a cada pacote e scripts de instalação. Nunca edite ou delete arquivos deste diretório manualmente. |
/etc/yum.repos.d/ |
Diretório onde ficam os arquivos .repo, cada um definindo um ou mais repositórios (URL, chave GPG, habilitado/desabilitado). |
/etc/dnf/dnf.conf |
Arquivo de configuração principal do DNF. |
/var/cache/dnf/ |
Cache local dos metadados e pacotes baixados pelo DNF. |
/var/log/dnf.rpm.log / /var/log/dnf.log |
Logs de operações do DNF. |
rpm: A camada inferior. Instala, remove, consulta e verifica pacotes .rpm individualmente, sem resolver dependências automaticamente. É o motor do sistema.yum: Front-end legado (Yellowdog Updater, Modified). Resolve dependências e gerencia repositórios. Em RHEL 8+, yum é um alias para dnf, mas mantém compatibilidade de sintaxe.dnf: O Dandified YUM — sucessor moderno do yum. Possui resolução de dependências mais eficiente, histórico transacional, suporte a módulos (AppStream) e melhor performance. Recomendado para uso em scripts e terminal.yum-config-manager: Ferramenta do pacote yum-utils para gerenciar repositórios em sistemas mais antigos (RHEL 7).dnf config-manager: Plugin do DNF (pacote dnf-plugins-core) que substitui o yum-config-manager em RHEL 8+ e Fedora.repoquery: Ferramenta de consulta avançada a repositórios (parte do yum-utils/dnf-utils). Permite buscas complexas, listagem de dependências, arquivos fornecidos por pacotes não instalados, etc.subscription-manager: Utilitário específico do RHEL para registrar o sistema no Red Hat Subscription Management (RHSM), ativar subscriptions e acessar repositórios oficiais. Não existe em Rocky, Alma, Oracle Linux ou Fedora.| Utilitário | Função Principal | Exemplo de Uso Comum | Quando Usar em Vez de Outro |
|---|---|---|---|
dnf |
Instalar, remover, atualizar pacotes; resolver dependências; gerenciar módulos | dnf install nginx |
Uso padrão em RHEL 8+, Fedora, Rocky, Alma. Substitui yum em todos os cenários modernos |
yum |
Mesma função do dnf (alias em RHEL 8+) |
yum install nginx |
Quando precisa de compatibilidade com scripts legados ou sistemas RHEL 7 |
rpm |
Instalar/remover .rpm diretamente; consultar banco local; verificar assinaturas |
rpm -qa \| grep nginx |
Quando precisa de operação de baixo nível, instalar .rpm local ou consultar o banco de dados |
yum-config-manager |
Gerenciar repositórios em RHEL 7 | yum-config-manager --add-repo <url> |
Apenas em sistemas legados (RHEL/CentOS 7) |
dnf config-manager |
Gerenciar repositórios em RHEL 8+ | dnf config-manager --add-repo <url> |
Sistemas modernos com DNF |
repoquery |
Consultas avançadas a repositórios | repoquery -l nginx |
Quando dnf repoquery não oferece a granularidade necessária; ou em scripts legados |
subscription-manager |
Registrar sistema RHEL e gerenciar subscriptions | subscription-manager register --username <user> |
Apenas em RHEL oficial; necessário para acessar repositórios oficiais da Red Hat |
dnf vs yum vs rpmdnf (Moderno) vs yum (Legado)O dnf foi introduzido no Fedora 18 e tornou-se o gerenciador padrão no RHEL 8. Em sistemas RHEL 8+, Rocky 8+, Alma 8+ e Fedora, o comando yum na verdade invoca o dnf (é um symlink ou um script wrapper que chama dnf). No entanto, existem diferenças importantes:
| Aspecto | dnf |
yum (legado, RHEL 7) |
|---|---|---|
| Resolução de dependências | Libsolv (mais rápida e precisa) | Yum-depsolve (mais lenta, pode falhar em casos complexos) |
| Histórico transacional | Sim (dnf history) |
Limitado |
| Suporte a módulos (AppStream) | Sim (dnf module) |
Não |
| API Python | libdnf |
yum (API diferente) |
| Performance de metadados | Melhor (metadados compactados) | Inferior |
| Uso recomendado | Padrão em todos os sistemas modernos | Apenas RHEL 7 e scripts legados |
Regra de ouro: em RHEL 8+, Rocky, Alma, Oracle Linux 8+ e Fedora, use sempre
dnf— mesmo queyumfuncione, você estará usando o DNF por baixo. Em scripts novos, escrevadnf.
rpm diretamenteO rpm é a ferramenta de baixo nível. Use quando:
.rpm local e precise instalá-lo (mas leia a advertência na seção 4.3).O rpm não resolve dependências automaticamente. Se um pacote precisar de bibliotecas que não estão instaladas, a operação falhará ou deixará o pacote em estado inconsistente.
dnf — O Gerenciador ModernoSubcomandos mais úteis:
| Subcomando | Descrição |
|---|---|
dnf update / dnf upgrade |
Atualiza todos os pacotes instalados (sinônimos no DNF) |
dnf install <pkg> |
Instala um pacote e suas dependências |
dnf remove <pkg> |
Remove um pacote e suas dependências não mais necessárias |
dnf reinstall <pkg> |
Reinstala um pacote (útil para corrigir arquivos corrompidos) |
dnf search <termo> |
Pesquisa pacotes nos repositórios |
dnf info <pkg> |
Exibe informações detalhadas de um pacote |
dnf list installed |
Lista todos os pacotes instalados |
dnf provides <arquivo> |
Descobre qual pacote fornece um arquivo ou padrão |
dnf history |
Mostra o histórico transacional de operações |
dnf history undo <id> |
Desfaz uma operação do histórico |
dnf module list |
Lista módulos disponíveis (AppStream) |
dnf module enable <modulo> |
Habilita um módulo (ex.: nodejs:18) |
dnf autoremove |
Remove dependências que não são mais necessárias |
dnf clean all |
Limpa todo o cache de metadados e pacotes |
Exemplo real com saída comentada:
# Atualizar a lista de metadados e instalar o nginx
$ sudo dnf install nginx
# Saída (resumida):
# Last metadata expiration check: 0:05:12 ago on Mon Aug 22 14:30:00 2026.
# Dependencies resolved.
# ================================================================================
# Package Arch Version Repository Size
# ================================================================================
# Installing:
# nginx x86_64 1:1.20.1-10.el9.0.1 appstream 36 k
# Installing dependencies:
# nginx-filesystem
# noarch 1:1.20.1-10.el9.0.1 appstream 8.2 k
# openssl-libs x86_64 1:3.0.1-43.el9_0 baseos 2.1 M
#
# Transaction Summary
# ================================================================================
# Install 3 Packages
#
# Total download size: 2.1 M
# Installed size: 4.5 M
# Is this ok [y/N]: y
# Downloading Packages:
# (1/3): nginx-filesystem-1.20.1-10.el9.0.1.noarch.rpm 8.2 kB/s | 8.2 kB 00:00
# (2/3): nginx-1.20.1-10.el9.0.1.x86_64.rpm 36 kB/s | 36 kB 00:00
# (3/3): openssl-libs-3.0.1-43.el9_0.x86_64.rpm 2.1 MB/s | 2.1 MB 00:00
# --------------------------------------------------------------------------------
# Total 1.1 MB/s | 2.1 MB 00:01
# Running transaction check
# Transaction check succeeded.
# Running transaction test
# Transaction test succeeded.
# Running transaction
# Preparing : 1/1
# Installing : openssl-libs-1:3.0.1-43.el9_0.x86_64 1/3
# Installing : nginx-filesystem-1:1.20.1-10.el9.0.1.noarch 2/3
# Installing : nginx-1:1.20.1-10.el9.0.1.x86_64 3/3
# Running scriptlet: nginx-1:1.20.1-10.el9.0.1.x86_64 3/3
# Verifying : nginx-1:1.20.1-10.el9.0.1.x86_64 3/3
#
# Installed:
# nginx-1:1.20.1-10.el9.0.1.x86_64
# nginx-filesystem-1:1.20.1-10.el9.0.1.noarch
# openssl-libs-1:3.0.1-43.el9_0.x86_64
#
# Complete!
# O DNF resolveu automaticamente as dependências (nginx-filesystem, openssl-libs)
# e executou a transação de forma atômica
Exemplo — Módulos AppStream (RHEL 8+):
# Listar módulos Node.js disponíveis
$ dnf module list nodejs
# Saída:
# Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)
# Name Stream Profiles Summary
# nodejs 16 default Javascript runtime
# nodejs 18 default Javascript runtime
# nodejs 20 default Javascript runtime [d]
# [d] = default. Para instalar a versão 18 em vez da padrão:
$ sudo dnf module enable nodejs:18
$ sudo dnf install nodejs
Boas práticas:
dnf check-update antes de atualizações planejadas para ver o que será alterado.dnf history para auditar e, se necessário, reverter alterações.dnf update --security (RHEL e Oracle Linux, que publicam metadados de errata) para aplicar apenas atualizações de segurança.yum — O Gerenciador LegadoEm RHEL 7 e CentOS 7, o yum é a ferramenta nativa. Em RHEL 8+, é um alias para dnf. A sintaxe é quase idêntica à do dnf.
| Subcomando | Descrição |
|---|---|
yum install <pkg> |
Instala pacote |
yum remove <pkg> |
Remove pacote |
yum update |
Atualiza todos os pacotes |
yum search <termo> |
Pesquisa pacotes |
yum info <pkg> |
Informações do pacote |
yum list installed |
Lista instalados |
yum provides <arquivo> |
Descobre qual pacote fornece um arquivo |
yum clean all |
Limpa cache |
Exemplo em RHEL 7 (legado):
# Em RHEL 7, yum não possui histórico transacional completo nem módulos
$ sudo yum install httpd -y
# Saída:
# Loaded plugins: product-id, search-disabled-repos, subscription-manager
# Resolving Dependencies
# --> Running transaction check
# ---> Package httpd.x86_64 0:2.4.6-97.el7 will be installed
# --> Processing Dependency: httpd-tools = 2.4.6-97.el7 for package: httpd-2.4.6-97.el7.x86_64
# --> Running transaction check
# ---> Package httpd-tools.x86_64 0:2.4.6-97.el7 will be installed
# --> Finished Dependency Resolution
#
# Dependencies Resolved
#
# ================================================================================
# Package Arch Version Repository Size
# ================================================================================
# Installing:
# httpd x86_64 2.4.6-97.el7 rhel-7-server-rpms 1.2 M
# Installing for dependencies:
# httpd-tools x86_64 2.4.6-97.el7 rhel-7-server-rpms 92 k
#
# Transaction Summary
# ================================================================================
# Install 1 Package (+1 Dependent package)
#
# Total download size: 1.3 M
# Installed size: 4.1 M
# Downloading packages:
# (1/2): httpd-tools-2.4.6-97.el7.x86_64.rpm | 92 kB 00:00:00
# (2/2): httpd-2.4.6-97.el7.x86_64.rpm | 1.2 MB 00:00:00
# --------------------------------------------------------------------------------
# Total 3.8 MB/s | 1.3 MB 00:00
# Running transaction check
# Running transaction test
# Transaction test succeeded
# Running transaction
# Installing : httpd-tools-2.4.6-97.el7.x86_64 1/2
# Installing : httpd-2.4.6-97.el7.x86_64 2/2
# Verifying : httpd-2.4.6-97.el7.x86_64 1/2
# Verifying : httpd-tools-2.4.6-97.el7.x86_64 2/2
#
# Installed:
# httpd.x86_64 0:2.4.6-97.el7
#
# Dependency Installed:
# httpd-tools.x86_64 0:2.4.6-97.el7
#
# Complete!
rpm — A Camada Inferior| Opção | Descrição |
|---|---|
rpm -ivh <pacote.rpm> |
Instala um pacote .rpm local (i=install, v=verbose, h=hash progress) |
rpm -Uvh <pacote.rpm> |
Atualiza ou instala um pacote (U=upgrade) |
rpm -e <pkg> |
Remove (erase) um pacote |
rpm -qa |
Lista todos os pacotes instalados (q=query, a=all) |
rpm -q <pkg> |
Consulta se um pacote está instalado |
rpm -qi <pkg> |
Informações detalhadas do pacote instalado |
rpm -ql <pkg> |
Lista todos os arquivos instalados pelo pacote |
rpm -qf <caminho> |
Descobre a qual pacote pertence um arquivo |
rpm -qc <pkg> |
Lista apenas os arquivos de configuração do pacote |
rpm -V <pkg> |
Verifica a integridade dos arquivos do pacote |
rpm --import <chave.asc> |
Importa chave GPG para o chaveiro do RPM |
rpm --checksig <pacote.rpm> |
Verifica a assinatura GPG de um pacote .rpm |
rpm --rebuilddb |
Reconstrói o banco de dados do RPM em caso de corrupção |
rpm -qa --last |
Lista pacotes ordenados pela data de instalação |
Exemplo 1 — Instalar um .rpm local (com advertência):
# Instalar um pacote RPM baixado manualmente
$ sudo rpm -ivh google-chrome-stable_current_x86_64.rpm
# Se houver dependências não satisfeitas:
# error: Failed dependencies:
# liberation-fonts is needed by google-chrome-stable-114.0.5735.90-1.x86_64
# libvulkan.so.1()(64bit) is needed by google-chrome-stable-114.0.5735.90-1.x86_64
# CORREÇÃO: use dnf para resolver dependências automaticamente
$ sudo dnf install ./google-chrome-stable_current_x86_64.rpm
# ou, em RHEL 7:
$ sudo yum localinstall ./google-chrome-stable_current_x86_64.rpm
Advertência crítica: nunca instale
.rpmde fontes não confiáveis comrpm -Uvh. Pacotes RPM executam scripts de pre/post-instalação como root. Sempre prefiradnf install ./pacote.rpm, que além de resolver dependências, mantém o pacote sob o controle do DNF para futuras atualizações e verifica assinaturas GPG automaticamente.
Exemplo 2 — Consultar o banco de dados local:
# Verificar se o pacote nginx está instalado
$ rpm -q nginx
# Saída:
# nginx-1.20.1-10.el9.0.1.x86_64
# Se não estiver instalado:
# package nginx is not installed
# Listar todos os arquivos instalados pelo pacote
$ rpm -ql nginx
# Saída (resumida):
# /etc/logrotate.d/nginx
# /etc/nginx/nginx.conf
# /usr/sbin/nginx
# /usr/share/nginx/html/index.html
# /var/log/nginx
# Descobrir a qual pacote pertence um arquivo
$ rpm -qf /usr/sbin/nginx
# Saída:
# nginx-1:1.20.1-10.el9.0.1.x86_64
Exemplo 3 — Verificar integridade de um pacote instalado:
# Verificar se algum arquivo do pacote nginx foi alterado, corrompido ou teve permissões mudadas
$ rpm -V nginx
# Saída vazia = todos os arquivos estão íntegros
# Se houver problemas, a saída será algo como:
# S.5....T. c /etc/nginx/nginx.conf
#
# Legenda das flags:
# S = tamanho do arquivo mudou
# 5 = hash MD5 mudou
# T = timestamp mudou
# c = arquivo de configuração (esperado que mude; não é necessariamente um problema)
Exemplo 4 — Verificar assinatura de um pacote antes de instalar:
# Verificar se o pacote .rpm foi assinado por uma chave confiável
$ rpm --checksig pacote-1.0-1.el9.x86_64.rpm
# Saída se assinado e chave importada:
# pacote-1.0-1.el9.x86_64.rpm: digests signatures OK
# Saída se não assinado:
# pacote-1.0-1.el9.x86_64.rpm: digests OK
dnf config-manager / yum-config-manager — Gerenciamento de Repositóriosdnf config-manager (RHEL 8+, Fedora, Rocky, Alma) — plugin do DNF; se não estiver instalado:
$ sudo dnf install dnf-plugins-core
| Subcomando | Descrição |
|---|---|
dnf config-manager --add-repo <url> |
Adiciona um repositório a partir de um arquivo .repo remoto |
dnf config-manager --set-enabled <repo> |
Habilita um repositório desabilitado |
dnf config-manager --set-disabled <repo> |
Desabilita um repositório |
dnf config-manager --save --setopt=<repo>.enabled=0 |
Desabilita via setopt |
Exemplo:
# Adicionar o repositório do Docker
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Habilitar o repositório CRB (CodeReady Builder) no RHEL 9
$ sudo dnf config-manager --set-enabled crb
# Desabilitar um repositório de terceiros temporariamente
$ sudo dnf config-manager --set-disabled epel
yum-config-manager (RHEL 7, CentOS 7) — parte do pacote yum-utils:
$ sudo yum install yum-utils
| Subcomando | Descrição |
|---|---|
yum-config-manager --add-repo <url> |
Adiciona repositório |
yum-config-manager --enable <repo> |
Habilita repositório |
yum-config-manager --disable <repo> |
Desabilita repositório |
repoquery — Consultas AvançadasO repoquery é extremamente poderoso para consultar metadados de repositórios sem instalar nada. Em RHEL 8+, está no pacote dnf-utils (ou yum-utils).
| Opção | Descrição |
|---|---|
repoquery -l <pkg> |
Lista todos os arquivos que um pacote forneceria (mesmo não instalado) |
repoquery --requires <pkg> |
Lista dependências do pacote |
repoquery --whatrequires <pkg> |
Lista pacotes que dependem deste |
repoquery --location <pkg> |
Mostra a URL do arquivo .rpm no repositório |
repoquery -a |
Lista todos os pacotes disponíveis nos repositórios habilitados |
Exemplo real:
# Descobrir quais arquivos o pacote vim-enhanced instalaria, sem instalá-lo
$ repoquery -l vim-enhanced
# Saída (resumida):
# /etc/profile.d/vim.sh
# /usr/bin/vim
# /usr/bin/vimdiff
# /usr/share/man/man1/vim.1.gz
# /usr/share/vim
# Descobrir quais pacotes dependem do libssl.so.1.1
$ repoquery --whatrequires 'libssl.so.1.1()(64bit)'
# Saída:
# nginx-1:1.20.1-10.el9.0.1.x86_64
# curl-7.76.1-19.el9.x86_64
# python3-3.9.14-1.el9.x86_64
Dica:
dnf repoqueryé o equivalente moderno e geralmente substitui orepoquerystandalone. Usednf repoquery -l <pkg>quando possível.
subscription-manager — Registro e Subscriptions (RHEL Oficial)Este utilitário é exclusivo do Red Hat Enterprise Linux e não existe em derivados gratuitos (Rocky, Alma, Oracle Linux) nem no Fedora.
| Subcomando | Descrição |
|---|---|
subscription-manager register --username <user> --password <pass> |
Registra o sistema na conta Red Hat |
subscription-manager attach --auto |
Atacha automaticamente a subscription mais adequada |
subscription-manager attach --pool <pool_id> |
Atacha uma subscription específica |
subscription-manager list --available |
Lista subscriptions disponíveis |
subscription-manager repos --list |
Lista repositórios disponíveis via RHSM |
subscription-manager repos --enable <repo_id> |
Habilita um repositório específico |
subscription-manager status |
Verifica o status da subscription |
subscription-manager unregister |
Remove o registro do sistema |
Exemplo real:
# Registrar o sistema (em RHEL recém-instalado)
$ sudo subscription-manager register --username admin@empresa.com --password 'senha_segura'
# Saída:
# The system has been registered with ID: 12345678-1234-1234-1234-123456789abc
# Atachar subscription automaticamente
$ sudo subscription-manager attach --auto
# Saída:
# Installed Product Current Status:
# Product Name: Red Hat Enterprise Linux for x86_64
# Status: Subscribed
# Habilitar repositórios adicionais (ex.: EPEL não é via RHSM, mas extras sim)
$ sudo subscription-manager repos --enable rhel-9-for-x86_64-baseos-rpms
$ sudo subscription-manager repos --enable rhel-9-for-x86_64-appstream-rpms
# Verificar status
$ sudo subscription-manager status
# Saída:
# +-------------------------------------------+
# System Status Details
# +-------------------------------------------+
# Overall Status: Current
Nota: Em Rocky Linux, AlmaLinux e Oracle Linux, os repositórios já vêm pré-configurados em
/etc/yum.repos.d/e não há necessidade de registro.
A forma moderna e segura de adicionar um repositório de terceiros é criar um arquivo .repo dedicado em /etc/yum.repos.d/, referenciando a chave GPG corretamente.
Anatomia de um arquivo .repo:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
O método moderno e seguro é não usar rpm --import manualmente para adicionar chaves ao chaveiro global. Em vez disso, referencie a chave diretamente no arquivo .repo com a diretiva gpgkey=. O DNF/YUM baixará e importará a chave automaticamente na primeira operação.
Exemplo completo — Adicionar o repositório do Google Chrome manualmente:
# 1. Criar o arquivo de repositório
$ sudo tee /etc/yum.repos.d/google-chrome.repo > /dev/null <<'EOF'
[google-chrome]
name=google-chrome
baseurl=https://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
EOF
# 2. O DNF baixará e validará a chave GPG automaticamente na primeira operação
$ sudo dnf install google-chrome-stable
# Saída na primeira execução:
# Importing GPG key 0x7FAC5991:
# Userid : "Google, Inc. Linux Package Signing Key <linux-packages-keymaster@google.com>"
# Fingerprint: 4CCA 1EAF 950C EE4A B839 76DC A040 830F 7FAC 5991
# From : https://dl-ssl.google.com/linux/linux_signing_key.pub
# Is this ok [y/N]: y
Atenção sobre repositórios de terceiros:
- Conflitos de versões: repositórios de terceiros podem conter versões mais novas de bibliotecas do que as do sistema base, causando incompatibilidades.
- Substituição de pacotes base: alguns repositórios (ex.: certos repos de PHP ou MySQL) substituem pacotes oficiais do RHEL, o que pode quebrar atualizações futuras.
- Verifique compatibilidade: sempre confirme se o repositório suporta a versão major do seu sistema (ex.: EL9 vs EL8). A variável
$releasevernobaseurlajuda, mas nem todos os repositórios a respeitam.
| Tarefa | Comando Recomendado | Alternativa / Nota |
|---|---|---|
| Atualizar lista de metadados | sudo dnf makecache |
sudo yum makecache (RHEL 7) |
| Atualizar todos os pacotes | sudo dnf upgrade |
sudo yum update (RHEL 7) |
| Buscar pacote por nome | dnf search <nome> |
yum search <nome> |
| Consultar informações de pacote | dnf info <pkg> |
yum info <pkg> / rpm -qi <pkg> (se instalado) |
| Instalar pacote | sudo dnf install <pkg> |
sudo yum install <pkg> |
| Remover pacote (com dependências órfãs) | sudo dnf remove <pkg> |
sudo yum remove <pkg> |
Instalar .rpm local (com dependências) |
sudo dnf install ./pacote.rpm |
sudo yum localinstall ./pacote.rpm (RHEL 7). NUNCA use rpm -Uvh sozinho |
| Descobrir qual pacote fornece um arquivo | dnf provides */nome_arquivo |
repoquery -f /caminho/completo / rpm -qf /caminho (se arquivo existe localmente) |
| Listar pacotes instalados | dnf list installed |
rpm -qa / yum list installed |
| Listar arquivos de um pacote instalado | rpm -ql <pkg> |
repoquery -l <pkg> (também funciona para não instalados) |
| Verificar integridade de pacote instalado | rpm -V <pkg> |
rpm -Va (verifica TODOS os pacotes — lento) |
| Reverter uma atualização | sudo dnf history undo <id> |
Use dnf history para descobrir o ID da transação |
| Habilitar repositório | sudo dnf config-manager --set-enabled <repo> |
sudo yum-config-manager --enable <repo> (RHEL 7) |
| Desabilitar repositório | sudo dnf config-manager --set-disabled <repo> |
Editar enabled=0 no arquivo .repo |
| Listar módulos AppStream | dnf module list |
Apenas RHEL 8+ / Fedora |
| Habilitar módulo | sudo dnf module enable <nome:stream> |
Ex.: sudo dnf module enable nodejs:18 |
| Limpar cache | sudo dnf clean all |
sudo yum clean all |
| Remover dependências órfãs | sudo dnf autoremove |
sudo yum autoremove (RHEL 7.7+) |
| Registrar sistema RHEL | sudo subscription-manager register --username <user> |
Necessário apenas para RHEL oficial |
| Atachar subscription | sudo subscription-manager attach --auto |
Ou --pool <id> para subscription específica |
Verificar assinatura de .rpm |
rpm --checksig pacote.rpm |
Verifica antes de instalar |
| Reconstruir banco de dados RPM | sudo rpm --rebuilddb |
Use apenas em caso de corrupção |
O rpm -V é uma ferramenta poderosa de auditoria. Verifica tamanho, MD5, permissões, dono, grupo e timestamp dos arquivos contra os metadados registrados no banco de dados.
# Verificar TODOS os pacotes instalados (demorado; ideal para auditoria periódica)
$ sudo rpm -Va
# Saída típica (arquivos de configuração que foram editados são normais):
# S.5....T. c /etc/ssh/sshd_config # OK — arquivo de configuração editado
# S.5....T. /usr/bin/ls # ALERTA — binário do sistema foi modificado!
Interpretação: arquivos marcados com
csão arquivos de configuração; espera-se que mudem. Arquivos de binários ou bibliotecas (/usr/bin,/usr/lib,/usr/sbin) que aparecem modificados sem explicação podem indicar comprometimento do sistema.
Uma das maiores vantagens do dnf sobre o yum legado é o histórico transacional completo.
# Ver histórico de transações
$ dnf history
# Saída:
# ID | Command line | Date and time | Action(s) | Altered
# --------------------------------------------------------------------------------
# 7 | install nginx | 2026-08-22 14:30 | Install | 3
# 6 | remove htop | 2026-08-22 14:15 | Removed | 1
# 5 | update | 2026-08-22 13:00 | Upgrade | 45
# Desfazer uma transação específica (ex.: desinstalar o nginx e suas dependências)
$ sudo dnf history undo 7
# Reverter uma transação de update (downgrade dos pacotes atualizados)
$ sudo dnf history rollback 5
Boas práticas: antes de atualizações críticas em produção, anote o ID do histórico atual. Se algo der errado,
dnf history rollbackpermite retornar ao estado anterior de forma atômica.
# Simular instalação sem realmente instalar
$ sudo dnf install --assumeno nginx
# Simular remoção
$ sudo dnf remove --assumeno nginx
Nota: diferente do
apt-get --simulate, o DNF 4 não tem--dry-run— a opção--assumenoresponde "não" a todas as confirmações, exibindo o plano completo da transação sem executá-la. (O DNF5, nova geração que estreou no Fedora 41, introduziu o--dry-run.)
# Limpar todo o cache de metadados e pacotes baixados
$ sudo dnf clean all
# Remover pacotes que foram instalados como dependências e não são mais necessários
$ sudo dnf autoremove
# Verificar se há atualizações de segurança disponíveis (RHEL)
$ sudo dnf updateinfo list security
$ sudo dnf update --security
Em casos raros de corrupção do banco de dados (erros do tipo rpmdb open failed ou db5 error), reconstrua-o:
# Fazer backup do banco de dados atual (sempre!)
$ sudo cp -a /var/lib/rpm /var/lib/rpm.backup.$(date +%Y%m%d)
# Reconstruir o banco de dados
$ sudo rpm --rebuilddb
# Verificar se a reconstrução foi bem-sucedida
$ rpm -qa | head -5
Cuidado:
rpm --rebuilddbpode levar vários minutos em sistemas com muitos pacotes. Sempre faça backup do diretório/var/lib/rpmantes. Nunca interrompa o processo.
┌─────────────────────────────────────────┐
│ Camada de Usuário (Interativa/Scripts) │
│ dnf, yum │
├─────────────────────────────────────────┤
│ Camada de Plugins e Utilitários │
│ dnf config-manager, repoquery, │
│ subscription-manager (RHEL) │
├─────────────────────────────────────────┤
│ Camada Inferior (Banco de Dados) │
│ rpm │
├─────────────────────────────────────────┤
│ Banco de Dados Local │
│ /var/lib/rpm │
└─────────────────────────────────────────┘
Nota final: a transição de
yumparadnfrepresentou uma mudança significativa na família Red Hat, trazendo resolução de dependências mais robusta, histórico transacional e suporte a módulos AppStream. Em ambientes de produção, prefiradnfpara todas as operações, mantenha o histórico em mente como ferramenta de rollback, e nunca instale pacotes.rpmdesconhecidos diretamente comrpm -Uvh— a camada superior do DNF existe exatamente para proteger a integridade do sistema.
dnf config-manager --add-repo aplicado na prática (nesta wiki)dnf (nesta wiki)