Gerenciamento de Pacotes: Primeiros Passos com apt e yum
O que você vai conseguir fazer
- Mapear os comandos apt e dnf e escolher cada um com critério
- Conferir o impacto antes de instalar para manter a mudança segura
- Percorrer passo a passo os erros clássicos de gerenciamento de pacotes
Pré-requisitos (leia estes primeiro)
O Que Você Vai Aprender
- Você mapeia lado a lado os comandos
apteyum/dnf. - Você busca, instala, atualiza e remove pacotes com um fluxo confiável.
- Você confere o impacto antes de instalar para manter a mudança segura.
- Você decide entre
yumednfe distingueupdatedeupgrade. - Você diagnostica erros comuns como
Unable to locate packageeNO_PUBKEY.
Resumo Rápido
apt(Debian / Ubuntu / Mint) ednf(RHEL 9 / Rocky / AlmaLinux / Fedora) são os padrões atuaisyumsó é nativo no CentOS 7 / RHEL 7. No RHEL 8+yumé um symlink de compatibilidade paradnf- Sempre atualize o índice primeiro (
apt update/dnf makecache), depois instale - Nunca faça
installde memória -- confirme o nome exato do pacote comsearchouinfoprimeiro
Ambiente Assumido
- Família Debian: Ubuntu 20.04 / 22.04 / 24.04, Debian 11 / 12
- Família RHEL: CentOS 7 (yum), Rocky Linux 8/9, AlmaLinux 8/9, RHEL 8/9 (dnf)
- Todos os comandos executados como usuário regular com
sudo. Login direto como root não é assumido.
0. Seis Termos Para Alinhar Antes
Conclusão: Pacote, repositório, índice e dependência destravam a maioria das mensagens de erro.
As mensagens de erro do gerenciador de pacotes são ilegíveis sem o vocabulário. Estas são as seis palavras que vale definir antes.
| Termo | Significado em uma linha | Outros nomes que você verá |
|---|---|---|
| pacote | Um software empacotado em um arquivo distribuível | ".deb" e ".rpm" indicam a mesma coisa |
| repositório | O servidor que hospeda e distribui os pacotes | Também "repo" ou "origem" |
| índice | O catalogo do que um repositório oferece no momento | Também "lista de pacotes" ou "cache" |
| dependência | Outro pacote necessário para que este funcione | Também "pacote dependente" |
| metapacote | Um pacote vazio que puxa um grupo inteiro de pacotes | Também "pacote agregador" |
| chave GPG | A chave de assinatura usada para verificar se o repositório é legitimo | Também "chave de assinatura" ou "chave pública" |
O apt update atualiza o índice. Ele não atualiza nenhum software instalado.
Quem atualiza o software é o apt upgrade. Confundir os dois é o mal-entendido mais comum.
1. Mapa de Comandos apt vs yum/dnf
Conclusão: install, remove e search são iguais; só o refresh do índice e o purge diferem na nomenclatura.
A tabela mais útil que você pode manter à mão.
| Operação | Debian (apt) |
RHEL (dnf / yum) |
|---|---|---|
| Atualizar o índice de pacotes | sudo apt update |
sudo dnf makecache |
| Listar pacotes atualizáveis | apt list --upgradable |
dnf check-update |
| Instalar um pacote | sudo apt install <pkg> |
sudo dnf install <pkg> |
| Atualizar tudo | sudo apt upgrade |
sudo dnf upgrade |
| Remover (manter config) | sudo apt remove <pkg> |
sudo dnf remove <pkg> |
| Remover + purgar configs | sudo apt purge <pkg> |
(sem equivalente direto) |
| Buscar | apt search <kw> |
dnf search <kw> |
| Mostrar detalhes | apt show <pkg> |
dnf info <pkg> |
| Listar instalados | apt list --installed |
dnf list installed |
| Remover dependências orfas | sudo apt autoremove |
sudo dnf autoremove |
| Limpar cache | sudo apt clean |
sudo dnf clean all |
| Listar repositórios | apt policy |
dnf repolist |
Dica de memorização: install / remove / search são idênticos. As diferenças estão em como você atualiza o índice e como faz o "purge" dos arquivos de configuração.
2. apt: Fluxo de Trabalho Mínimo
Conclusão: Com apt, execute update primeiro, depois install, search, upgrade e remove ou purge.
Daqui em diante, os comandos alteram o sistema. Saiba o que muda e como desfazer antes de executá-los.
| Comando | O que muda | Como desfazer | Forma mais segura de testar |
|---|---|---|---|
update |
Apenas o índice de pacotes é atualizado | Nada a desfazer (o sistema não muda) | Pode executar direto |
install |
O pacote e suas dependências são adicionados | remove apaga |
apt-get install -s <pkg> mostra o plano |
upgrade |
Pacotes instalados passam para versões novas | Fixar cada versão na mão (trabalhoso) | Liste os alvos com apt list --upgradable |
remove |
Os binários saem; a configuração em /etc/ permanece |
install recoloca o pacote |
apt-get remove -s <pkg> mostra o alcance |
purge |
Binários e arquivos de configuração em /etc/ são apagados |
Configurações não voltam sem backup | Copie os arquivos de configuração antes |
autoremove |
Toda dependência julgada "desnecessária" é apagada de uma vez | Reinstalar cada pacote individualmente | Leia a lista de exclusão antes de confirmar |
O purge e o autoremove apagam em larga escala e são difíceis de reverter.
O purge remove arquivos de configuração em /etc/, então ajustes escritos à mão se perdem sem backup.
O autoremove pode errar o julgamento e levar junto uma dependência que um serviço em produção ainda usa.
Nos dois casos, leia a lista do que será apagado antes de digitar y.
2-1. Atualizar --> Instalar
$ sudo apt update $ sudo apt install nginx
Pular o apt update é a causa #1 de falhas de instalação em VMs novas (índice desatualizado causa 404s no mirror). Sempre atualize antes de instalar em sistemas novos ou inativos há muito tempo.
2-2. Buscar (quando você só lembra parte do nome)
$ apt search nginx $ apt show nginx
apt search faz busca de texto completo nas descrições, e por isso "buscar nginx" retorna dezenas de resultados. Para filtrar apenas por nomes, use um glob:
$ apt list 'nginx*'
Listing... Done nginx/jammy-updates 1.18.0-6ubuntu14.4 amd64 nginx-common/jammy-updates 1.18.0-6ubuntu14.4 all nginx-core/jammy-updates 1.18.0-6ubuntu14.4 amd64
As colunas trazem: nome e origem do pacote, versão e arquitetura.
Para ver apenas o que já está instalado:
$ apt list --installed 2>/dev/null | grep nginx
2-3. Atualizar
$ sudo apt update $ sudo apt upgrade # Atualizar pacotes instalados $ sudo apt full-upgrade # Permitir remocoes para resolver dependencias (kernels, etc.)
apt upgrade e apt full-upgrade (antigo dist-upgrade) não são a mesma coisa. Atualizações de kernel e systemd podem precisar de full-upgrade. Revise as mudanças propostas antes de executar em produção.
2-4. Remover
$ sudo apt remove nginx # Binario removido; configs em /etc/ permanecem $ sudo apt purge nginx # Configs tambem sao excluidas $ sudo apt autoremove # Remover dependencias orfas
apt remove deixa arquivos em /etc/ para trás. Se uma reinstalação "lembrar" de configurações antigas inesperadamente, execute purge para limpá-las.
3. yum / dnf: Fluxo de Trabalho Mínimo
Conclusão: No RHEL 8+ o dnf é nativo e yum é um symlink, então escreva dnf diretamente nos scripts.
3-1. yum vs dnf -- Qual devo usar?
- CentOS 7 / RHEL 7:
yumé nativo - CentOS 8+ / Rocky 8+ / AlmaLinux 8+ / RHEL 8+ / Fedora:
dnfé nativo; o comandoyumé um wrapper de compatibilidade sobre odnf
No RHEL 8+, digitar yum install ... ainda funciona -- mas você está realmente invocando o dnf. Para scripts que precisam sobreviver a futuras atualizações de SO, escreva dnf diretamente.
3-2. Operações Principais
$ sudo dnf check-update # Mostrar atualizacoes disponiveis $ sudo dnf install nginx $ sudo dnf upgrade # Atualizar tudo $ sudo dnf remove nginx $ dnf search nginx $ dnf info nginx $ dnf list installed | grep nginx
O dnf remove <pkg> também inclui na fila qualquer pacote que dependa do que você indicou.
Leia a lista de exclusão exibida e confirme que nada inesperado está nela.
Em sistemas da família RHEL, dnf history undo <ID> reverte a última transação (detalhado adiante).
3-3. Group Install (um ponto forte do dnf)
Instale um pacote de pacotes relacionados em um único passo.
$ dnf grouplist $ sudo dnf groupinstall "Development Tools"
A família Debian alcança o mesmo resultado através de meta-pacotes:
$ sudo apt install build-essential
4. Busca na Prática
Conclusão: Busque por padrão de nome, faça busca reversa por arquivo e verifique o nome oficial.
"Esqueci o nome exato do pacote" é o obstáculo mais comum. Esses três padrões cobrem quase todos os casos.
4-1. Filtrar por Padrão de Nome
# Debian $ apt list 'php*' 2>/dev/null # RHEL $ dnf list 'php*'
4-2. Busca Reversa a Partir de um Binário ou Arquivo
Quando você sabe o nome do comando mas não o do pacote, use apt-file / dnf provides.
# Debian (apt-file nao vem instalado por padrao) $ sudo apt install apt-file $ sudo apt-file update $ apt-file search /usr/bin/htop # RHEL (integrado) $ dnf provides /usr/bin/htop $ dnf provides '*/sshd_config'
Quando aparece command not found, começar com dnf provides ou apt-file search é o caminho mais rápido para descobrir "qual pacote preciso instalar?".
4-3. Verificar se Você Tem o Pacote Certo
$ apt show nginx $ dnf info nginx
Verifique Version, Source e Homepage para distinguir o pacote desejado de um impostor com o mesmo nome.
5. Inspeção de Repositórios
Conclusão: Liste repos ativos, adicione apenas repos de fornecedores e verifique a impressão digital da chave GPG.
5-1. Listar Repositórios Ativos
# Debian $ apt policy # Prioridades de fonte por pacote $ ls /etc/apt/sources.list.d/ # Definicoes de repos extras $ cat /etc/apt/sources.list # RHEL $ dnf repolist # Repos habilitados $ dnf repolist --all # Incluir desabilitados $ ls /etc/yum.repos.d/
5-2. Adicionando um Repositório de Terceiros -- Cuidados
Repositórios de terceiros expandem seu limite de confiança.
- Adicione apenas repos de fornecedores com um processo de segurança publicado (Docker, PostgreSQL, NodeSource, etc.)
- Verifique a impressão digital da chave GPG contra a documentação oficial do fornecedor
- Evite
curl ... | sudo bashcego em servidores de produção -- leia o script primeiro
5-3. Padrão Moderno para Adicionar Repos (família Debian)
Ubuntu 22.04+ deprecia apt-key. O padrão recomendado é colocar chaves GPG em /etc/apt/keyrings/ e referenciá-las em cada source list com signed-by=.
# Preparar a chave (siga as instrucoes do fornecedor)
$ sudo install -d -m 0755 /etc/apt/keyrings
$ curl -fsSL https://download.example.com/key.gpg \
| sudo tee /etc/apt/keyrings/example.gpg > /dev/null
# Definicao do repositorio
$ echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://download.example.com/apt stable main" \
| sudo tee /etc/apt/sources.list.d/example.list
$ sudo apt update5-4. Como Conferir a Impressão Digital
A impressão digital (fingerprint) é um identificador curto que resume a chave. A mesma chave sempre gera o mesmo valor, então compará-la revela se a chave veio mesmo do fornecedor.
Exiba a impressão digital da chave que você colocou e compare caractere por caractere com o valor publicado no site oficial do fornecedor. O comando apenas exibe, então execute quantas vezes quiser.
$ gpg --show-keys --fingerprint /etc/apt/keyrings/example.gpg
Se não conferir, a chave não é a oficial. Interrompa a configuração e apague os arquivos colocados em /etc/apt/keyrings/ e /etc/apt/sources.list.d/.
6. Solução de Problemas dos Erros Comuns
Conclusão: Pacote não encontrado, lock, GPG e espaço em disco, cada um tem um caminho de diagnóstico definido.
6-1. Unable to locate package <pkg> (apt)
Diagnostique nesta ordem:
- Você pulou o
apt update - O nome do pacote está errado (
pythonvspython3, etc.) - O componente correto do repositório está desabilitado (ex.
universe/multiverse)
$ sudo apt update $ apt search <palavra-chave-aproximada> $ apt-cache policy <pkg>
6-2. No match for argument (dnf)
Mesmo diagnóstico. Frequentemente resolvido reconstruindo os metadados:
$ sudo dnf clean all $ sudo dnf makecache $ dnf search <palavra-chave-aproximada>
6-3. Could not get lock /var/lib/dpkg/lock
Outro processo apt está em execução, ou uma execução anterior travou. Confirme primeiro, depois recupere.
Os arquivos de lock são vazios. O apt e o dpkg não verificam se o arquivo existe: eles usam flock (um bloqueio exclusivo aplicado sobre o arquivo).
Ou seja, "o arquivo está aí, então apague" é o instinto errado. Apagar é o último recurso, apenas depois de confirmar que ninguém os segura.
Primeiro verifique se algum processo segura os quatro arquivos de lock. O lsof apenas exibe; não altera nada.
$ sudo lsof /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock \
/var/cache/apt/archives/lock /var/lib/apt/lists/lockSaída vazia significa que ninguém os segura. Só então a remoção é segura.
$ sudo rm /var/lib/dpkg/lock-frontend $ sudo rm /var/lib/dpkg/lock $ sudo rm /var/cache/apt/archives/lock $ sudo rm /var/lib/apt/lists/lock $ sudo dpkg --configure -a
Excluir arquivos lock enquanto um processo apt ainda está em execução vai corromper o banco de dados dpkg. Sempre confirme que a saída do lsof está vazia antes de remover locks.
6-4. Erros GPG (NO_PUBKEY / Signature couldn't be verified)
A chave de assinatura de um repositório de terceiros expirou ou foi rotacionada.
$ sudo apt update # -> NO_PUBKEY ABCD1234...
Corrija buscando a chave atual do fornecedor e colocando-a em /etc/apt/keyrings/. Evite --allow-unauthenticated e nunca execute apt-key del cegamente.
6-5. Falha na Instalação por Falta de Espaço em Disco
$ df -h /var /usr $ sudo apt clean # Remover arquivos .deb baixados $ sudo dnf clean all # Mesmo para o cache do dnf
/var/cache/apt/archives/ e /var/cache/dnf/ são os suspeitos habituais.
7. Regras de Produção Que Evitam Dor de Cabeça
Conclusão: Em produção, evite upgrade cego ou curl-to-bash; revise as mudanças e mantenha opção de desfazer.
Não faça:
- Executar
apt upgradeem produção sem antes revisarapt list --upgradable - Fazer pipe de scripts de instalação não confiáveis para
sudo bash - Adicionar
--force-yes/--allow-downgradesreflexivamente - Puxar o mesmo pacote de múltiplos repositórios -- conflitos de prioridade ficam confusos
Checklist de operação segura:
- Sempre atualize primeiro:
apt update/dnf makecache - Simule mudanças do apt antes de aplicar:
apt-get install -s <pkg> - O RHEL tem histórico de transações que pode ser revertido:
$ dnf history list $ sudo dnf history undo <ID>
- Revise o escopo de atualização com
apt list --upgradableantes de executarupgrade - Verifique as impressões digitais GPG sempre que adicionar um novo repositório
8. Templates Prontos para Copiar e Colar
Conclusão: Conjuntos de comandos prontos para famílias Debian e RHEL, desde configuração até rollback.
Debian / Ubuntu
# Configuracao inicial sudo apt update && sudo apt upgrade -y # Buscar -> inspecionar -> instalar apt list 'nginx*' apt show nginx sudo apt install nginx # Visualizar atualizacoes antes de aplicar apt list --upgradable sudo apt upgrade # Remover incluindo configs sudo apt purge nginx && sudo apt autoremove
RHEL / Rocky / AlmaLinux
# Configuracao inicial sudo dnf upgrade -y # Buscar -> inspecionar -> instalar dnf search nginx dnf info nginx sudo dnf install nginx # Visualizar atualizacoes dnf check-update # Reverter uma transacao dnf history list sudo dnf history undo <ID>