Entendendo o Gerenciamento de Pacotes Linux: APT vs. YUM vs. DNF
Uma comparação prática de APT, YUM e DNF para instalar, atualizar, remover e solucionar problemas de pacotes Linux.
Entendendo o Gerenciamento de Pacotes Linux: APT vs. YUM vs. DNF
Se você transita entre Ubuntu, Debian, Fedora, Rocky Linux, AlmaLinux ou RHEL, o gerenciamento de pacotes é um dos primeiros lugares onde a memória muscular falha. O trabalho é o mesmo em todos os lugares: instalar software, aplicar atualizações de segurança, remover o que não é mais necessário e manter as dependências consistentes. Os comandos e locais de arquivos são diferentes o suficiente para que copiar o manual errado possa desperdiçar tempo ou danificar um host.
APT, YUM e DNF não são ferramentas concorrentes que você normalmente escolhe em uma mesma máquina. Eles pertencem a diferentes famílias de distribuições. APT é a ferramenta de alto nível normal em sistemas baseados em Debian. YUM foi a ferramenta de alto nível de longa data em sistemas mais antigos baseados em Red Hat. DNF é o substituto moderno no Fedora atual, RHEL 8 e posteriores, CentOS Stream, Rocky Linux e AlmaLinux.
O que é um Gerenciador de Pacotes?
Em sua essência, um gerenciador de pacotes é uma coleção de ferramentas de software que automatizam o processo de instalação, atualização, configuração e remoção de pacotes de software de um sistema operacional. Em vez de compilar software a partir do código-fonte ou gerenciar manualmente as dependências, um gerenciador de pacotes interage com repositórios de software para buscar binários pré-compilados e lidar com todos os pré-requisitos necessários automaticamente.
As principais funções de um gerenciador de pacotes incluem:
- Resolução de Dependências: Identifica e instala automaticamente todas as bibliotecas necessárias e outros pacotes de software que um aplicativo específico precisa para funcionar.
- Repositórios de Software: Gerencia conexões com servidores remotos (repositórios) onde os pacotes são armazenados, garantindo acesso a uma ampla gama de software.
- Atualizações do Sistema: Facilita a atualização de pacotes individuais ou de todo o sistema operacional, garantindo que patches de segurança e novos recursos sejam aplicados.
- Integridade do Pacote: Verifica a autenticidade e integridade dos pacotes usando assinaturas digitais para evitar adulteração.
- Remoção Limpa: Garante que, quando o software for desinstalado, todos os seus arquivos e dependências associados sejam removidos de forma limpa, evitando bagunça no sistema.
As distribuições Linux normalmente usam um dos dois principais formatos de pacote: .deb para sistemas baseados em Debian e .rpm para sistemas baseados em Red Hat. APT gerencia pacotes .deb, enquanto YUM e DNF gerenciam pacotes .rpm.
APT (Advanced Package Tool)
APT é o utilitário de linha de comando para gerenciar pacotes .deb encontrados principalmente no Debian e seus derivados, como Ubuntu, Linux Mint, Pop!_OS e muitos outros. É conhecido por sua resolução robusta de dependências e um vasto ecossistema de software.
Conceitos Principais
dpkg: Enquantoapté a ferramenta de alto nível,dpkgé a ferramenta de baixo nível subjacente que realmente instala, remove e gerencia pacotes.debindividuais. APT atua como um front-end paradpkg, lidando com repositórios e dependências.sources.list: O arquivo/etc/apt/sources.list(e arquivos em/etc/apt/sources.list.d/) define os locais dos repositórios de software que o APT usa para encontrar pacotes. Estes podem ser repositórios oficiais, PPAs (Personal Package Archives) de terceiros ou fontes locais.- Estrutura do Pacote: Os pacotes são distribuídos como arquivos
.deb, que são essencialmente arquivos contendo o software compilado, arquivos de configuração e metadados.
Comandos Comuns do APT
Historicamente, apt-get era o comando principal, mas o comando apt (introduzido por volta do Debian 8 / Ubuntu 16.04) oferece uma interface mais amigável ao combinar os recursos mais comuns do apt-get e apt-cache.
| Tarefa | Comando apt |
Descrição |
|---|---|---|
| Atualizar listas de pacotes | sudo apt update |
Atualiza a lista de pacotes disponíveis e suas versões dos repositórios. |
| Atualizar pacotes instalados | sudo apt upgrade |
Atualiza todos os pacotes instalados para suas versões mais recentes. Não remove pacotes. |
| Atualização completa do sistema | sudo apt full-upgrade |
Atualiza todos os pacotes instalados, removendo os antigos se necessário para resolver dependências. |
| Instalar um pacote | sudo apt install <nome_do_pacote> |
Instala um pacote especificado e suas dependências. |
| Remover um pacote | sudo apt remove <nome_do_pacote> |
Remove um pacote, mas mantém seus arquivos de configuração. |
| Purgar um pacote | sudo apt purge <nome_do_pacote> |
Remove um pacote e seus arquivos de configuração. |
| Pesquisar por um pacote | apt search <palavra-chave> |
Pesquisa pacotes que correspondem a uma palavra-chave. |
| Mostrar detalhes do pacote | apt show <nome_do_pacote> |
Exibe informações detalhadas sobre um pacote. |
| Limpar pacotes antigos | sudo apt autoremove |
Remove pacotes de dependência instalados automaticamente que não são mais necessários. |
Exemplos
# Atualizar listas de pacotes
sudo apt update
# Instalar o servidor web 'nginx'
sudo apt install nginx
# Atualizar todos os pacotes instalados
sudo apt upgrade
# Remover 'nginx' e seus arquivos de configuração
sudo apt purge nginx
Vantagens do APT
- Manipulação confiável de dependências: APT é bom em explicar o que planeja instalar, atualizar, manter ou remover antes de alterar o sistema.
- Grande ecossistema de repositórios: Os repositórios Debian e Ubuntu cobrem uma ampla gama de software para servidores e desktops.
- Comportamento previsível do servidor: Lançamentos estáveis do Debian e Ubuntu LTS geralmente priorizam versões testadas de pacotes em vez da versão upstream mais recente.
Desvantagens do APT
- Versões de Software Mais Novas: Às vezes, os pacotes nos repositórios oficiais podem não ser as versões mais recentes devido ao foco na estabilidade e testes completos.
YUM (Yellowdog Updater, Modified)
YUM foi o gerenciador de pacotes principal para Red Hat Enterprise Linux (RHEL) e seus derivados como CentOS, Fedora (até recentemente) e Scientific Linux. Ele opera em pacotes .rpm (Red Hat Package Manager).
Conceitos Principais
rpm: Semelhante aodpkg,rpmé a ferramenta de gerenciamento de pacotes de baixo nível para arquivos.rpm. YUM atua como um front-end de nível superior.- Arquivos
.repo: As configurações de repositório são normalmente definidas em arquivos.repolocalizados em/etc/yum.repos.d/. Esses arquivos especificam a URL base, chaves GPG e outros metadados para cada repositório. - Estrutura do Pacote: O software é distribuído como arquivos
.rpm, contendo binários, bibliotecas e metadados.
Comandos Comuns do YUM
| Tarefa | Comando yum |
Descrição |
|---|---|---|
| Verificar atualizações | sudo yum check-update |
Verifica atualizações disponíveis sem instalá-las. |
| Atualizar todos os pacotes | sudo yum update |
Atualiza todos os pacotes instalados. |
| Instalar um pacote | sudo yum install <nome_do_pacote> |
Instala um pacote especificado e suas dependências. |
| Remover um pacote | sudo yum remove <nome_do_pacote> |
Remove um pacote. |
| Pesquisar por um pacote | yum search <palavra-chave> |
Pesquisa pacotes que correspondem a uma palavra-chave. |
| Mostrar detalhes do pacote | yum info <nome_do_pacote> |
Exibe informações detalhadas sobre um pacote. |
| Limpar arquivos em cache | sudo yum clean all |
Limpa metadados de repositório e pacotes em cache. |
Exemplos
# Verificar atualizações disponíveis
sudo yum check-update
# Instalar o servidor web 'httpd' (Apache)
sudo yum install httpd
# Atualizar todos os pacotes instalados
sudo yum update
# Remover 'httpd'
sudo yum remove httpd
Vantagens do YUM
- Comportamento empresarial maduro: YUM ainda é comum em sistemas RHEL e CentOS mais antigos, então você o verá em manuais legados.
- Histórico de transações:
yum historypode mostrar instalações, atualizações e remoções anteriores. Em alguns casos, você pode desfazer ou reverter uma transação, mas deve testar isso com cuidado porque arquivos de configuração, estado do serviço e dados externos não são magicamente restaurados.
Desvantagens do YUM
- Desempenho: Às vezes pode ser mais lento em comparação com gerenciadores de pacotes modernos como DNF, especialmente com grandes repositórios ou árvores de dependência complexas.
- Sendo Substituído: Em sistemas mais novos baseados em RHEL (RHEL 8+), o DNF substituiu o YUM como o gerenciador de pacotes padrão, embora
yummuitas vezes ainda funcione como um alias paradnf.
DNF (Dandified YUM)
DNF é o gerenciador de pacotes de próxima geração para distribuições baseadas em Red Hat, servindo como sucessor do YUM. É o padrão no Fedora (desde a versão 18), RHEL 8+, CentOS Stream, AlmaLinux e Rocky Linux. DNF aborda muitas das deficiências do YUM, oferecendo desempenho e resolução de dependências aprimorados.
Conceitos Principais
libsolv: DNF usalibsolvpara resolução de dependências, que é altamente otimizado e fornece desempenho significativamente melhor do que o solucionador mais antigo do YUM.- Modularidade: Um recurso chave no RHEL 8+ e Fedora, a modularidade permite que diferentes versões ou streams de um pacote de software (por exemplo, Python 3.6 vs. Python 3.8) estejam disponíveis simultaneamente, e os usuários podem escolher qual instalar.
- Compatibilidade: DNF mantém uma interface de linha de comando que é amplamente compatível com YUM, facilitando a transição para os usuários.
Comandos Comuns do DNF
Muitos comandos DNF são idênticos ou muito semelhantes aos comandos YUM.
| Tarefa | Comando dnf |
Descrição |
|---|---|---|
| Verificar atualizações | sudo dnf check-update |
Verifica atualizações disponíveis sem instalá-las. |
| Atualizar todos os pacotes | sudo dnf update |
Atualiza todos os pacotes instalados. |
| Instalar um pacote | sudo dnf install <nome_do_pacote> |
Instala um pacote especificado e suas dependências. |
| Remover um pacote | sudo dnf remove <nome_do_pacote> |
Remove um pacote. |
| Pesquisar por um pacote | dnf search <palavra-chave> |
Pesquisa pacotes que correspondem a uma palavra-chave. |
| Mostrar detalhes do pacote | dnf info <nome_do_pacote> |
Exibe informações detalhadas sobre um pacote. |
| Limpar arquivos em cache | sudo dnf clean all |
Limpa metadados de repositório e pacotes em cache. |
| Listar módulos disponíveis | dnf module list |
Lista streams de módulos de software disponíveis. |
| Habilitar um módulo | sudo dnf module enable <módulo> |
Habilita um stream de módulo específico. |
Exemplos
# Verificar atualizações disponíveis
sudo dnf check-update
# Instalar o banco de dados 'mariadb-server'
sudo dnf install mariadb-server
# Atualizar todos os pacotes instalados
sudo dnf update
# Listar streams de módulo Node.js disponíveis
dnf module list nodejs
# Habilitar o stream de módulo Node.js 16 (se disponível)
sudo dnf module enable nodejs:16
# Remover 'mariadb-server'
sudo dnf remove mariadb-server
Vantagens do DNF
- Resolução de dependências aprimorada: DNF usa
libsolv, que geralmente lida com escolhas de dependência complexas de forma mais rápida e clara do que o comportamento mais antigo do YUM. - Saída e APIs mais limpas: DNF é mais fácil de usar em scripts do que o YUM mais antigo em muitos fluxos de trabalho administrativos.
- Modularidade: Fornece flexibilidade para instalar diferentes versões de software dentro do mesmo sistema.
- Design Moderno: Construído com uma API clara para extensões e código mais limpo.
Desvantagens do DNF
- Tecnologia Mais Nova: Embora estável, alguns recursos, especialmente relacionados à modularidade, podem exigir uma curva de aprendizado um pouco mais íngreme para novos usuários.
Principais Diferenças e Casos de Uso
A distinção fundamental entre APT e YUM/DNF reside na família de distribuições que eles atendem e no formato de pacote que manipulam.
| Característica | APT (Debian/Ubuntu) | YUM/DNF (RHEL/Fedora) |
|---|---|---|
| Formato do Pacote | .deb (Pacote Debian) |
.rpm (Pacote Red Hat) |
| Ferramenta Subjacente | dpkg |
rpm |
| Arquivos de Configuração | /etc/apt/sources.list |
/etc/yum.repos.d/*.repo |
| Distribuições Principais | Debian, Ubuntu, Mint, Pop!_OS | RHEL, Fedora, CentOS, AlmaLinux, Rocky Linux |
| Solucionador de Dependências | Interno (robusto, bem testado) | YUM: Interno (mais lento); DNF: libsolv (mais rápido, moderno) |
| Evolução | apt-get -> apt |
yum -> dnf |
| Modularidade | Não integrada diretamente (PPAs para flexibilidade) | DNF oferece streams module para múltiplas versões |
- APT é ideal para usuários e administradores que priorizam estabilidade inabalável, amplo suporte da comunidade e um vasto repositório de software. É a escolha certa para sistemas baseados em Debian, que são populares tanto para servidores quanto para desktops.
- YUM cumpriu bem seu propósito em ambientes empresariais por anos, fornecendo um método estável e comprovado para gerenciar software. Embora ainda presente como um alias, seu uso direto está sendo eliminado.
- DNF é o padrão moderno para sistemas baseados em Red Hat. É a escolha para quem executa RHEL contemporâneo, Fedora ou seus derivados, oferecendo desempenho, resolução avançada de dependências e recursos como modularidade, tornando-o excelente para ambientes de desenvolvimento e produção que exigem versões específicas de software.
Melhores Práticas para Gerenciamento de Pacotes
Independentemente de qual gerenciador de pacotes você está usando, seguir as melhores práticas garante um sistema saudável e seguro:
- Atualizações Regulares: Execute periodicamente
sudo apt update && sudo apt upgradeousudo dnf updatepara aplicar patches de segurança e correções de bugs. - Entenda Antes de Instalar: Sempre verifique o que um pacote faz e sua reputação antes de instalar, especialmente de repositórios de terceiros.
- Verifique as Fontes do Repositório: Certifique-se de que quaisquer repositórios adicionados são confiáveis para evitar a instalação de software malicioso ou instável.
- Limpeza: Use
sudo apt autoremoveousudo dnf autoremovepara remover dependências órfãs e liberar espaço em disco. - Revise
apt showoudnf info: Antes de instalar, use esses comandos para obter detalhes sobre o pacote, incluindo suas dependências e tamanho. - Faça Backup de Sistemas Críticos: Antes de realizar grandes atualizações (por exemplo,
apt full-upgradeou atualizações de distribuição), certifique-se de ter um backup dos dados e configurações críticos.
Solucionando Problemas do Gerenciador de Pacotes
A maioria das falhas do gerenciador de pacotes não é misteriosa depois que você as separa em três categorias: metadados do repositório, conflitos de dependência e estado do banco de dados de pacotes local.
Se o APT disser que não pode encontrar um pacote, comece com sudo apt update. O APT não consulta todos os repositórios remotos novamente para cada instalação. Ele usa metadados locais. Se o pacote foi adicionado recentemente, ou se a máquina não atualizou suas listas por um tempo, a instalação pode falhar mesmo que o repositório esteja correto. Se o apt update falhar, leia a linha do repositório no erro. Um PPA desatualizado, chave de assinatura expirada, mirror quebrado ou codinome de distribuição não suportado é frequentemente o problema real.
Em sistemas DNF ou YUM, o primeiro movimento equivalente é geralmente:
sudo dnf makecache
sudo dnf repolist
Em sistemas mais antigos:
sudo yum makecache
sudo yum repolist
repolist é útil porque confirma se o repositório está habilitado. Um pacote pode estar disponível no EPEL, CodeReady Builder, PowerTools, CRB ou em um repositório de fornecedor, mas não nos repositórios base do sistema operacional. Nesse caso, a solução não é baixar um RPM aleatório da web. A solução mais limpa é habilitar o repositório correto e deixar o gerenciador de pacotes lidar com as dependências.
Conflitos de dependência precisam de mais cuidado. Se o APT propuser remover uma grande parte do sistema, pare e leia a transação. O mesmo se aplica a dnf remove. Remover um pacote pode remover serviços que dependem dele. Em servidores, gosto de copiar a transação proposta para as notas do incidente antes de aceitá-la. Isso lhe dá um registro do que mudou se um serviço quebrar depois.
Para instalações interrompidas, use o comando de reparo nativo antes de tentar a limpeza manual:
# Debian/Ubuntu
sudo dpkg --configure -a
sudo apt -f install
# Família Fedora/RHEL
sudo dnf check
sudo dnf history
A exclusão manual em /var/lib/dpkg, /var/lib/rpm, /var/cache/apt ou /var/cache/dnf deve ser o último recurso. Esses diretórios são o estado do gerenciador de pacotes, não bagunça comum.
Uma Folha de Dicas de Tradução Prática
Ao seguir a documentação escrita para uma família Linux diferente, traduza a intenção, não apenas o comando.
| Tarefa | Debian/Ubuntu | Família Fedora/RHEL |
|---|---|---|
| Atualizar metadados do repositório | sudo apt update |
sudo dnf makecache |
| Atualizar pacotes instalados | sudo apt upgrade |
sudo dnf upgrade ou sudo dnf update |
| Instalar um pacote | sudo apt install nginx |
sudo dnf install nginx |
| Remover um pacote | sudo apt remove nginx |
sudo dnf remove nginx |
| Remover pacote e configuração | sudo apt purge nginx |
Sem equivalente exato; scripts do pacote podem deixar config/dados |
| Pesquisar pacotes | apt search nginx |
dnf search nginx |
| Mostrar informações do pacote | apt show nginx |
dnf info nginx |
| Listar pacotes instalados | apt list --installed |
dnf list installed |
| Ver arquivos do pacote | dpkg -L nginx |
rpm -ql nginx |
| Encontrar pacote proprietário de um arquivo | dpkg -S /caminho/arquivo |
rpm -qf /caminho/arquivo |
Esse último par é subestimado. Se você encontrar um binário ou arquivo de configuração estranho em um host, dpkg -S ou rpm -qf informa qual pacote o possui. Se nenhum pacote o possui, o arquivo pode ter sido criado por um aplicativo, um script de implantação, um administrador ou um invasor. Isso não prova nada por si só, mas lhe dá uma próxima pergunta melhor.
A maneira mais segura de pensar sobre o gerenciamento de pacotes é simples: fique dentro da ferramenta que sua distribuição espera, leia as transações antes de aceitá-las e trate os repositórios de terceiros como dependências de produção. Depois que você souber onde os arquivos de repositório vivem e como inspecionar a propriedade do pacote, APT, YUM e DNF parecerão muito menos mundos diferentes.