15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
09.10.2024

apt vs yum: Gerenciamento de Pacotes Linux Explicado para Administradores de Sistema

A gestão de pacotes Linux é o mecanismo pelo qual o software é instalado, atualizado, configurado e removido num sistema Linux. O apt (Advanced Package Tool) gere pacotes `.deb` em distribuições baseadas em Debian, como Ubuntu e Linux Mint, enquanto o yum (Yellowdog Updater Modified) gere pacotes `.rpm` em sistemas baseados em Red Hat, incluindo CentOS e RHEL. Ambas as ferramentas abstraem a complexidade da resolução de dependências, interação com repositórios e verificação da integridade dos pacotes — mas são arquiteturalmente distintas e não intercambiáveis.

Compreender qual ferramenta governa o seu sistema não é um conhecimento opcional. Afeta diretamente a forma como provisiona servidores, automatiza implementações, escreve scripts de gestão de configuração (Ansible, Chef, Puppet) e mantém ciclos de patches de segurança em ambientes de produção.

O Que É um Gestor de Pacotes Linux

Um gestor de pacotes é um conjunto de ferramentas de software que automatiza o ciclo de vida completo do software num sistema Linux: obter pacotes de repositórios remotos, verificar assinaturas criptográficas, resolver e instalar cadeias de dependências, executar scripts de pré/pós-instalação e registar a instalação numa base de dados de pacotes local.

A base de dados de pacotes é crítica e frequentemente ignorada. Em sistemas baseados em Debian, encontra-se em `/var/lib/dpkg/`. Em sistemas baseados em RPM, reside em `/var/lib/rpm/`. Ambas as bases de dados mantêm o registo oficial do que está instalado, em que versão e com que propriedade de ficheiros — tornando-as a espinha dorsal da auditoria do sistema e das operações de reversão.

Os gestores de pacotes interagem com repositórios — servidores remotos que alojam coleções selecionadas de pacotes compilados e assinados. Os metadados do repositório (listas de pacotes, checksums, chaves GPG) são sincronizados localmente antes de qualquer instalação ocorrer, razão pela qual `apt update` ou `yum check-update` deve preceder os comandos de instalação em scripts automatizados.

apt: Advanced Package Tool para Sistemas Baseados em Debian

O apt é a interface de linha de comandos de alto nível para gestão de pacotes no Debian, Ubuntu, Linux Mint, Pop!_OS e todos os seus derivados. Opera sobre a ferramenta de nível inferior `dpkg`, que trata da instalação real de pacotes `.deb`. Pense no `dpkg` como o motor e no `apt` como o condutor inteligente que sabe onde obter combustível e em que ordem queimá-lo.

A Cadeia de Ferramentas apt em Profundidade

O ecossistema apt inclui vários binários que servem propósitos distintos:

  • `apt` — a CLI interativa moderna e recomendada (introduzida no Ubuntu 14.04 / Debian 8)
  • `apt-get` — o backend mais antigo e programável; preferido em scripts de shell devido ao seu formato de saída estável
  • `apt-cache` — consulta a cache de pacotes local para metadados, descrições e grafos de dependências
  • `dpkg` — o instalador de pacotes de baixo nível; usado diretamente ao instalar um ficheiro `.deb` local com `dpkg -i package.deb`
  • `apt-mark` — marca pacotes como retidos, instalados automaticamente ou instalados manualmente

Comandos apt Principais com Contexto Técnico

Atualizar o índice de pacotes local:

“`bash

sudo apt update

“`

Isto obtém metadados atualizados de todos os repositórios configurados em `/etc/apt/sources.list` e `/etc/apt/sources.list.d/`. Não instala nem atualiza nada. Executar isto antes de qualquer operação de instalação é obrigatório — ignorá-lo significa que pode resolver versões de pacotes desatualizadas ou perder patches de segurança.

Atualizar pacotes instalados:

“`bash

sudo apt upgrade

“`

Atualiza todos os pacotes para os quais existe uma versão mais recente, mas não removerá nenhum pacote atualmente instalado nem instalará um novo pacote para satisfazer uma dependência. Para uma atualização mais agressiva que lida com alterações de dependências:

“`bash

sudo apt full-upgrade

“`

O `full-upgrade` (anteriormente `dist-upgrade`) instalará novas dependências e removerá pacotes conflituantes conforme necessário. Use-o com cautela em sistemas de produção.

Instalar um pacote:

“`bash

sudo apt install package_name

“`

Para instalar múltiplos pacotes numa única transação:

“`bash

sudo apt install nginx curl git

“`

Combinar instalações num único comando é mais eficiente porque o apt resolve o grafo completo de dependências uma vez em vez de repetidamente.

Remover um pacote (preservar ficheiros de configuração):

“`bash

sudo apt remove package_name

“`

Purgar um pacote (remover binários e ficheiros de configuração):

“`bash

sudo apt purge package_name

“`

Prefira sempre `purge` em vez de `remove` ao desativar um serviço. Os ficheiros de configuração restantes do `remove` podem causar comportamento inesperado se o pacote for reinstalado posteriormente.

Remover dependências órfãs:

“`bash

sudo apt autoremove

“`

Isto é frequentemente negligenciado e leva ao inchaço de dependências ao longo do tempo. Incorpore-o no seu fluxo de trabalho de manutenção regular.

Pesquisar um pacote:

“`bash

apt search package_name

“`

Inspecionar detalhes do pacote antes de instalar:

“`bash

apt show package_name

“`

Isto revela a versão do pacote, tamanho instalado, dependências e o mantenedor — útil antes de incorporar um pacote desconhecido.

Reter um pacote na sua versão atual (crítico para estabilidade em produção):

“`bash

sudo apt-mark hold package_name

“`

Isto impede que `apt upgrade` toque no pacote. Essencial quando está a executar uma versão específica do kernel ou uma versão de aplicação fixada.

Caso de Uso apt no Mundo Real: Provisionar um Servidor Web no Ubuntu

“`bash

sudo apt update

sudo apt install -y nginx certbot python3-certbot-nginx

sudo systemctl enable nginx

sudo systemctl start nginx

“`

O sinalizador `-y` suprime o prompt de confirmação, o que é necessário para scripts de provisionamento não interativos. Combine sempre isto com `apt update` no mesmo bloco de script para garantir que está a instalar a partir dos metadados atuais do repositório.

yum: Yellowdog Updater Modified para Sistemas Baseados em RPM

O yum é o gestor de pacotes para Red Hat Enterprise Linux (RHEL), CentOS 7 e versões mais antigas do Fedora. Gere pacotes `.rpm` e assenta sobre a base de dados RPM. Tal como o apt sobre o dpkg, o yum fornece resolução de dependências e gestão de repositórios sobre o comando `rpm` bruto.

Nota arquitetural crítica: No CentOS 8+, RHEL 8+ e em todas as versões modernas do Fedora, o yum foi substituído pelo dnf (Dandified YUM). Nestes sistemas, o comando `yum` é tipicamente uma ligação simbólica ou alias para `dnf`. Se estiver a gerir qualquer sistema com RHEL/CentOS 8 ou posterior, deve escrever comandos `dnf`. A sintaxe dos comandos é amplamente compatível, mas o dnf oferece uma resolução de dependências significativamente melhor, uma API mais limpa e suporte a repositórios modulares.

Comandos yum Principais com Contexto Técnico

Verificar atualizações disponíveis sem as aplicar:

“`bash

sudo yum check-update

“`

Isto é particularmente útil em scripts de monitorização automatizados para detetar se um sistema está atrasado em patches sem desencadear uma atualização.

Aplicar todas as atualizações disponíveis:

“`bash

sudo yum update

“`

Ao contrário do `apt upgrade`, o `yum update` também instalará novos pacotes de dependências conforme necessário. Não existe um equivalente separado ao `full-upgrade` — o yum trata disto por padrão.

Instalar um pacote:

“`bash

sudo yum install package_name

“`

Remover um pacote:

“`bash

sudo yum remove package_name

“`

Nota: a operação de remoção do yum pode por vezes propagar-se e remover pacotes dependentes. Reveja sempre o resumo da transação antes de confirmar.

Pesquisar um pacote:

“`bash

yum search package_name

“`

Inspecionar informações do pacote:

“`bash

yum info package_name

“`

Listar pacotes instalados:

“`bash

yum list installed

“`

Limpar a cache local:

“`bash

sudo yum clean all

“`

Limpa dados de pacotes e metadados em cache. Execute isto quando suspeitar que dados de repositório obsoletos estão a causar falhas de resolução.

Reter um pacote na sua versão atual:

“`bash

sudo yum versionlock add package_name

“`

Requer o plugin `yum-plugin-versionlock`. O equivalente ao `apt-mark hold`, isto é essencial para manter ambientes de produção estáveis onde uma versão específica de um pacote não deve ser tocada por atualizações automatizadas.

Caso de Uso yum no Mundo Real: Implementar Apache no CentOS 7

“`bash

sudo yum install -y httpd

sudo systemctl enable httpd

sudo systemctl start httpd

sudo firewall-cmd –permanent –add-service=http

sudo firewall-cmd –reload

“`

Um erro comum é instalar o Apache e esquecer de abrir a firewall. Em sistemas CentOS/RHEL, o `firewalld` está ativo por padrão e bloqueará silenciosamente o tráfego HTTP mesmo que o serviço esteja em execução.

apt vs yum: Comparação Direta

Funcionalidadeapt (Debian/Ubuntu)yum / dnf (RHEL/CentOS/Fedora)
Formato do pacote`.deb``.rpm`
Ferramenta subjacente`dpkg``rpm`
Distribuições principaisDebian, Ubuntu, Mint, Pop!_OSRHEL, CentOS, Fedora, AlmaLinux, Rocky Linux
Sucessor / CLI moderno`apt` (substituiu `apt-get` para uso interativo)`dnf` (substituiu `yum` no RHEL 8+)
Resolução de dependênciasAutomática, gere conflitosAutomática; o dnf é mais robusto que o yum
Configuração de repositório`/etc/apt/sources.list`, `/etc/apt/sources.list.d/``/etc/yum.repos.d/*.repo`
Mecanismo de retenção de pacotes`apt-mark hold``yum versionlock` (plugin necessário)
Instalação de pacote local`dpkg -i file.deb``rpm -i file.rpm` ou `yum localinstall`
Gestão de cache`apt clean`, `apt autoclean``yum clean all`
Remoção de órfãos`apt autoremove``yum autoremove` (o dnf trata disto melhor)
Histórico de transaçõesLimitadoHistórico completo de transações com reversão via `yum history`
Fluxos de módulosNão suportado nativamenteSuportado no dnf (Application Streams)
Verificação de assinatura GPGSimSim
Sinalizador compatível com scripts`-y` (não interativo)`-y` (não interativo)

dnf: O Sucessor Moderno do yum

Se estiver a gerir qualquer sistema RHEL 8+, CentOS Stream, AlmaLinux, Rocky Linux ou Fedora, o dnf é o seu gestor de pacotes. A transição do yum para o dnf não é cosmética — o dnf resolve uma série de problemas arquiteturais de longa data no yum:

  • Resolução de dependências: o dnf usa a biblioteca `libsolv`, que é significativamente mais rápida e precisa do que o resolvedor do yum
  • Estabilidade da API: o dnf expõe uma API Python estável para scripting e automação
  • Fluxos de módulos: o dnf suporta Application Streams, permitindo que múltiplas versões do mesmo software (por exemplo, PHP 7.4 e PHP 8.1) coexistam nos repositórios
  • Reversão de transações: o `dnf history undo <id>` permite reverter uma transação específica — uma capacidade sem equivalente direto no apt

Comandos dnf principais que diferem do yum:

“`bash

Install a module stream (e.g., PHP 8.1)

sudo dnf module enable php:8.1

sudo dnf install php

Roll back the last transaction

sudo dnf history undo last

Check which package provides a specific file

sudo dnf provides /usr/bin/python3

“`

Gestão de Repositórios: Uma Competência Operacional Crítica

Tanto o apt como o yum/dnf são apenas tão úteis quanto os repositórios que estão configurados para usar. Repositórios mal configurados ou não confiáveis representam um risco de segurança significativo.

No Debian/Ubuntu, adicione um repositório de terceiros de forma segura:

“`bash

Import the GPG key

curl -fsSL https://example.com/gpg.key | sudo gpg –dearmor -o /usr/share/keyrings/example-archive-keyring.gpg

Add the repository with key reference

echo "deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] https://repo.example.com/apt stable main" | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

“`

No RHEL/CentOS, adicione um repositório:

“`bash

sudo yum-config-manager –add-repo https://repo.example.com/centos/example.repo

Or manually create /etc/yum.repos.d/example.repo

“`

Princípio de segurança: Nunca adicione um repositório sem verificar a sua chave GPG de forma independente. Um repositório comprometido pode enviar pacotes maliciosos que serão instalados com privilégios de root.

Escolher o Gestor de Pacotes Certo para o Seu Ambiente de Servidor

O gestor de pacotes que utiliza é ditado pela sua distribuição Linux — não escolhe o apt ou o yum de forma independente. O que escolhe é a sua distribuição, e essa decisão tem consequências a jusante para a disponibilidade de pacotes, contratos de suporte empresarial, cadência de patches de segurança e compatibilidade de ferramentas.

  • Ubuntu LTS (apt): Melhor escolha para cargas de trabalho gerais de Alojamento VPS, servidores web e ambientes de desenvolvimento. As versões de suporte de longo prazo recebem 5 anos de atualizações de segurança, extensíveis a 10 com o Ubuntu Pro.
  • RHEL / AlmaLinux / Rocky Linux (dnf): O padrão para ambientes de produção empresarial, particularmente quando executado em Servidores Dedicados que requerem pilhas de software certificadas, frameworks de conformidade (PCI-DSS, HIPAA) ou implementações de aplicações suportadas por ISV.
  • Debian Stable (apt): Versões de pacotes extremamente conservadoras, tornando-o ideal para servidores onde a estabilidade é priorizada em detrimento de software de ponta. Comumente usado para servidores de base de dados e correio de longa duração.
  • CentOS Stream / Fedora (dnf): Adequado para ambientes de desenvolvimento e staging onde pretende acompanhar as alterações upstream do RHEL antes de chegarem às versões estáveis.

Ao implementar um painel de controlo como o cPanel, o gestor de pacotes subjacente é significativamente importante. O cPanel suporta oficialmente AlmaLinux, Rocky Linux e CloudLinux — todos baseados em dnf. Se estiver a usar um VPS com cPanel, estará a trabalhar num ambiente dnf em implementações modernas.

Para ambientes onde necessita de uma interface gráfica ou baseada na web para gerir pacotes e configuração do servidor sem recorrer à linha de comandos, explore os Painéis de Controlo VPS que abstraem a gestão de pacotes numa interface gráfica enquanto ainda utilizam apt ou dnf por baixo.

Fortalecimento da Segurança Através da Gestão de Pacotes

Os gestores de pacotes são uma superfície de ataque primária para ataques à cadeia de fornecimento. Estas práticas são inegociáveis em qualquer servidor voltado para a internet:

  • Ativar atualizações de segurança automáticas — No Ubuntu: pacote `unattended-upgrades`. No RHEL/CentOS: `dnf-automatic` com `apply_updates = yes` em `/etc/dnf/automatic.conf`.
  • Verificar assinaturas GPG — Nunca desative a verificação GPG (`–nogpgcheck` no yum/dnf ou `–allow-unauthenticated` no apt) fora de ambientes de laboratório isolados.
  • Auditar pacotes instalados regularmente — Use `dpkg -l` ou `rpm -qa` para gerar um manifesto completo de pacotes. Compare isto com uma linha de base conhecida como boa.
  • Remover pacotes desnecessários — Cada pacote instalado é uma superfície de ataque. Execute `apt autoremove` ou `dnf autoremove` após grandes implementações.
  • Fixar pacotes críticos — Use `apt-mark hold` ou `dnf versionlock` para evitar atualizações não intencionais de pacotes como o kernel, OpenSSL ou motores de base de dados em sistemas de produção.

Se estiver a executar um servidor de correio ou a alojar infraestrutura de email, manter pacotes como Postfix, Dovecot e as suas dependências TLS atualizados é especialmente crítico. Combine uma gestão rigorosa de pacotes com Certificados SSL devidamente configurados para manter a segurança de transporte encriptado. Da mesma forma, os ambientes de alojamento web geridos através de plataformas de Alojamento Web Partilhado beneficiam do facto de o fornecedor de alojamento manter a segurança dos pacotes subjacentes, mas compreender a camada de pacotes continua a ser valioso para depuração e configuração personalizada.

Matriz de Decisão Prática e Principais Conclusões

Antes de executar qualquer comando de gestão de pacotes num sistema de produção, siga esta lista de verificação:

Lista de verificação pré-operação:

  • Confirme qual distribuição e versão está a executar: `cat /etc/os-release`
  • Confirme o gestor de pacotes correto: `which apt` ou `which dnf` ou `which yum`
  • Em sistemas apt: execute sempre `sudo apt update` antes de `apt install` ou `apt upgrade`
  • Em sistemas yum/dnf: `sudo yum check-update` ou `sudo dnf check-update` antes de atualizações
  • Reveja o resumo da transação antes de confirmar qualquer operação de instalação ou remoção
  • Para servidores de produção: teste as atualizações de pacotes num ambiente de staging primeiro
  • Após grandes atualizações: verifique o estado do serviço com `systemctl status <service>`
  • Após remover pacotes: execute `apt autoremove` ou `dnf autoremove` para limpar órfãos

Decisões arquiteturais:

  • Use `apt full-upgrade` em vez de `apt upgrade` apenas quando compreender e aceitar que os pacotes podem ser removidos
  • Use `dnf` em vez de `yum` em qualquer sistema com RHEL 8 / CentOS 8 ou posterior
  • Use `apt-get` (não `apt`) em scripts de shell e pipelines CI/CD para saída estável e analisável
  • Use `yum versionlock` ou `apt-mark hold` antes de qualquer pipeline de atualização automatizado tocar num servidor de produção
  • Nunca adicione repositórios de terceiros sem importar e verificar as suas chaves GPG

FAQ

Qual é a diferença entre apt e apt-get?

O `apt` é o comando moderno voltado para o utilizador, introduzido para consolidar `apt-get` e `apt-cache` numa única ferramenta com saída mais limpa e uma barra de progresso. O `apt-get` continua disponível e é preferido em scripts porque o seu formato de saída é garantidamente estável entre versões. Para uso interativo no terminal, o `apt` é o padrão atual.

Posso usar apt num servidor CentOS ou RHEL?

Não. O apt é exclusivo para sistemas baseados em Debian e gere pacotes `.deb`. O CentOS e o RHEL usam o formato de pacote RPM, gerido pelo yum ou dnf. Os formatos de pacote e as bases de dados são arquiteturalmente incompatíveis — não existe uma camada de conversão.

Qual é o equivalente yum do apt autoremove?

O `sudo yum autoremove` ou `sudo dnf autoremove` remove pacotes que foram instalados como dependências mas que já não são necessários por nenhum pacote explicitamente instalado. A implementação dnf é mais fiável do que a versão yum legada.

Como posso impedir que um pacote específico seja atualizado pelo apt ou yum?

Em sistemas baseados em apt: `sudo apt-mark hold package_name`. Em sistemas yum/dnf: instale o plugin `yum-plugin-versionlock` e execute `sudo yum versionlock add package_name`, ou no dnf: `sudo dnf versionlock add package_name`. Ambos os mecanismos sobrevivem aos comandos `upgrade` e `update` até serem explicitamente libertados.

O yum ainda é relevante em 2024?

Para sistemas CentOS 7 e RHEL 7 ainda em produção, sim — o yum continua a ser o gestor de pacotes. No entanto, o CentOS 7 atingiu o fim de vida em junho de 2024. Qualquer sistema ainda a executar CentOS 7 deve ser migrado para AlmaLinux 8/9 ou Rocky Linux 8/9, ambos os quais usam dnf. Escrever novos scripts de automação direcionados exclusivamente ao yum já não é aconselhável.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar