O gerenciamento de pacotes no Debian e derivados (como Ubuntu) opera em duas camadas: a camada inferior, representada pelo dpkg, que lida diretamente com arquivos .deb e o banco de dados local; e a camada superior, composta pelas ferramentas apt, apt-get, apt-cache e afins, que resolvem dependências, consultam repositórios e orquestram as operações do dpkg. Este guia cobre o ecossistema completo — do uso diário ao troubleshooting.
| Caminho | Função |
|---|---|
/etc/apt/sources.list |
Arquivo principal que lista os repositórios APT (mirror, seção, componente). |
/etc/apt/sources.list.d/ |
Diretório para arquivos .list adicionais, um por repositório/PPA, evitando poluir o sources.list principal. |
/var/lib/dpkg/status |
Banco de dados central do dpkg. Contém o estado de todos os pacotes instalados, removidos ou em transição. Nunca edite este arquivo manualmente. |
/var/cache/apt/archives/ |
Cache local dos pacotes .deb baixados pelo APT. |
/var/lib/apt/lists/ |
Cache dos metadados dos repositórios (índices de pacotes). |
Nota sobre o futuro do
sources.list: a partir do Ubuntu 24.04 (e no Debian em transição), os repositórios passam a ser definidos no formato deb822 (arquivos.sourcesem/etc/apt/sources.list.d/), com campos estruturados comoTypes:,URIs:,Suites:eSigned-By:em vez da linha única tradicional. O formato clássico continua funcionando, mas instalações novas já usam o novo padrão — por exemplo,/etc/apt/sources.list.d/ubuntu.sources. Na automação, o módulodeb822_repositorydo Ansible escreve exatamente esse formato — aplicado na prática no tutorial Automatizando a Instalação do Docker com Ansible.
dpkg: Instala, remove e consulta pacotes .deb individualmente, sem resolver dependências. É o motor da camada inferior.apt-get: Front-end tradicional do APT. Resolve dependências, baixa e instala pacotes a partir de repositórios. Focado em scripts e automação (saída estável, sem barras de progresso coloridas).apt: Front-end moderno (desde Debian 8/Ubuntu 14.04). Combina funcionalidades de apt-get e apt-cache com interface mais amigável, barra de progresso e cores. Recomendado para uso interativo no terminal.apt-cache: Ferramenta exclusiva para consultas ao cache do APT (pesquisa, informações, dependências).apt-mark: Marca pacotes como manualmente instalados ou auto-instalados, e gerencia bloqueios de versão (hold).apt-add-repository: Script de conveniência (do pacote software-properties-common) para adicionar PPAs e repositórios externos.apt-key: Gerenciador de chaves GPG de repositórios. DEPRECADO — veja a seção 5.| Utilitário | Função Principal | Exemplo de Uso Comum | Quando Usar em Vez de Outro |
|---|---|---|---|
apt |
Instalar, remover, atualizar pacotes com interface amigável | apt install nginx |
Uso interativo no terminal; substitui apt-get para comandos diários |
apt-get |
Mesma função do apt, mas com saída scriptável |
apt-get update && apt-get upgrade -y |
Em scripts e automação (Cron, Ansible, CI/CD) |
apt-cache |
Consultar metadados de pacotes nos repositórios | apt-cache search nginx |
Quando precisa pesquisar ou inspecionar dependências sem instalar nada |
apt-mark |
Marcar pacotes como manual/auto ou bloquear versões | apt-mark hold docker-ce |
Para evitar que um pacote seja atualizado acidentalmente |
apt-add-repository |
Adicionar repositórios/PPAs de forma simplificada | apt-add-repository ppa:ondrej/php |
Quando quer adicionar um PPA sem editar arquivos manualmente |
apt-key |
Gerenciar chaves GPG de repositórios | NÃO USE — deprecado | Nunca mais use; substituído pelo método signed-by |
dpkg |
Instalar/remover pacotes .deb diretamente; consultar banco local |
dpkg -i pacote.deb |
Quando tem um arquivo .deb local ou precisa consultar o banco de dados local |
apt vs apt-get vs apt-cache vs dpkgapt (Moderno) vs apt-get (Tradicional)O apt foi introduzido para unificar e simplificar a experiência do usuário. A diferença é majoritariamente comportamental — saída, progresso e estabilidade para scripts —, mas existe também uma diferença funcional relevante:
| Aspecto | apt |
apt-get |
|---|---|---|
| Barra de progresso | Sim, colorida e amigável | Não (texto puro) |
| Saída estável para scripts | Não (pode mudar entre versões) | Sim (garantia de retrocompatibilidade) |
| Subcomandos combinados | apt search, apt show (antes em apt-cache) |
apt-get não faz consultas; usa apt-cache |
Comportamento do upgrade |
apt upgrade pode instalar novos pacotes se necessário (equivale a apt-get upgrade --with-new-pkgs) |
apt-get upgrade nunca instala pacotes novos; por isso às vezes deixa pacotes "held back" que o apt upgrade atualizaria |
| Uso recomendado | Terminal interativo | Scripts, playbooks, Dockerfiles |
Regra de ouro: use
aptno dia a dia no terminal; useapt-getem qualquer arquivo de automação.
apt-cacheSempre que precisar consultar sem alterar o sistema:
# Pesquisar pacotes por nome ou descrição
apt-cache search web server
# Ver informações detalhadas de um pacote
apt-cache show nginx
# Ver dependências (o que o pacote precisa) e dependências reversas (quem precisa dele)
apt-cache depends nginx
apt-cache rdepends nginx
dpkgO dpkg é a ferramenta de baixo nível. Use quando:
.deb local e quiser instalá-lo (mas leia a advertência na Seção 4).O dpkg não resolve dependências. Se um .deb precisar de bibliotecas que não estão instaladas, a instalação falhará.
Sobre os exemplos: as saídas desta seção foram capturadas no Ubuntu 22.04 (jammy) — daí URLs e versões com esse codename. No Ubuntu 24.04 (noble) e no Debian 13 os comandos são idênticos; apenas as versões dos pacotes mudam.
apt — O Front-End ModernoSubcomandos mais úteis:
| Subcomando | Descrição |
|---|---|
apt update |
Atualiza a lista de pacotes disponíveis nos repositórios |
apt upgrade |
Atualiza todos os pacotes instalados para as versões mais recentes |
apt full-upgrade |
Atualiza permitindo remover pacotes obsoletos, se necessário |
apt install <pkg> |
Instala um pacote e suas dependências |
apt remove <pkg> |
Remove o pacote, mas mantém os arquivos de configuração |
apt purge <pkg> |
Remove o pacote e seus arquivos de configuração |
apt autoremove |
Remove pacotes que foram instalados automaticamente e não são mais necessários |
apt search <termo> |
Pesquisa pacotes nos repositórios |
apt show <pkg> |
Exibe informações detalhadas de um pacote |
apt list --installed |
Lista todos os pacotes instalados |
Exemplo real com saída comentada:
# Atualizar a lista de pacotes e instalar o htop
$ sudo apt update && sudo apt install -y htop
# Saída (resumida):
# Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
# ...
# The following NEW packages will be installed:
# htop
# 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
# Need to get 114 kB of archives.
# After this operation, 350 kB of additional disk space will be used.
# Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 htop amd64 3.0.5-7build2 [114 kB]
# Fetched 114 kB in 1s (150 kB/s)
# Selecting previously unselected package htop.
# Preparing to unpack .../htop_3.0.5-7build2_amd64.deb ...
# Unpacking htop (3.0.5-7build2) ...
# Setting up htop (3.0.5-7build2) ...
# Processing triggers for man-db (2.10.2-1) ...
# O -y evita a confirmação interativa; útil em scripts, mas use com cautela no terminal
Boas práticas:
apt update antes de apt install ou apt upgrade.apt full-upgrade apenas quando estiver ciente de que pacotes podem ser removidos.apt purge em vez de apt remove quando quiser eliminar completamente um pacote e seus rastros de configuração.apt-get — O Front-End TradicionalA sintaxe é idêntica à do apt para os comandos básicos. As diferenças estão em opções avançadas e na saída.
| Subcomando/Opção | Descrição |
|---|---|
apt-get update |
Atualiza a lista de pacotes |
apt-get upgrade |
Atualiza pacotes sem remover nenhum |
apt-get dist-upgrade |
Equivalente ao apt full-upgrade |
apt-get install <pkg> |
Instala pacote |
apt-get remove <pkg> |
Remove pacote (mantém configurações) |
apt-get purge <pkg> |
Remove pacote e configurações |
apt-get clean |
Limpa o cache de .deb baixados (/var/cache/apt/archives/) |
apt-get autoclean |
Limpa apenas versões antigas do cache |
apt-get autoremove |
Remove dependências órfãs |
apt-get --simulate install <pkg> |
Simula a instalação sem executar (dry-run) |
Exemplo com dry-run:
# Simular a instalação do vim sem realmente instalar
$ sudo apt-get --simulate install vim
# Saída:
# NOTE: This is only a simulation!
# apt-get needs root privileges for real execution.
# Keep also in mind that locking is deactivated,
# so don't depend on the relevance to the real current situation!
# Inst vim (2:8.2.3995-1ubuntu2.22 Ubuntu:22.04/jammy [amd64])
# Conf vim (2:8.2.3995-1ubuntu2.22 Ubuntu:22.04/jammy [amd64])
# Útil para verificar o que será alterado antes de confirmar
apt-cache — Consultas ao Cache| Subcomando | Descrição |
|---|---|
apt-cache search <termo> |
Pesquisa pacotes por nome/descrição |
apt-cache show <pkg> |
Exibe metadados completos do pacote |
apt-cache policy <pkg> |
Mostra versões disponíveis e prioridade de repositórios |
apt-cache depends <pkg> |
Lista dependências do pacote |
apt-cache rdepends <pkg> |
Lista pacotes que dependem deste (dependências reversas) |
apt-cache pkgnames |
Lista todos os nomes de pacotes conhecidos |
Exemplo real:
# Verificar de qual repositório viria o pacote nginx e qual versão
$ apt-cache policy nginx
# Saída:
# nginx:
# Installed: (none) # <-- não está instalado
# Candidate: 1.18.0-6ubuntu14.4
# Version table:
# 1.18.0-6ubuntu14.4 500
# 500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
# 1.18.0-6ubuntu14 500
# 500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
# "Candidate" é a versão que seria instalada por padrão
# "500" é a prioridade do repositório (pinning)
Sobre as prioridades (pinning): o número à esquerda de cada repositório é a prioridade APT. Por padrão, repositórios recebem prioridade 500, a versão atualmente instalada recebe 100, e versões do release alvo (quando configurado via
APT::Default-Release) recebem 990. É possível alterar essas prioridades criando arquivos em/etc/apt/preferences.d/— útil, por exemplo, para impedir que um PPA sobrescreva pacotes oficiais ou para fixar um pacote em uma versão específica. Consulteman apt_preferencespara a sintaxe completa.
apt-mark — Gerenciamento de Estado dos Pacotes| Subcomando | Descrição |
|---|---|
apt-mark showauto |
Lista pacotes marcados como auto-instalados (dependências) |
apt-mark showmanual |
Lista pacotes marcados como manualmente instalados |
apt-mark auto <pkg> |
Marca pacote como auto-instalado |
apt-mark manual <pkg> |
Marca pacote como manualmente instalado |
apt-mark hold <pkg> |
Bloqueia o pacote para não ser atualizado |
apt-mark unhold <pkg> |
Desbloqueia o pacote |
apt-mark showhold |
Lista pacotes bloqueados |
Exemplo real:
# Evitar que o kernel seja atualizado automaticamente
$ sudo apt-mark hold linux-image-generic
# Saída:
# linux-image-generic set on hold.
# Verificar pacotes bloqueados
$ apt-mark showhold
# linux-image-generic
# Desbloquear quando quiser atualizar
$ sudo apt-mark unhold linux-image-generic
Dica: pacotes marcados como
autopodem ser removidos porapt autoremove. Se um pacote importante estiver sendo removido indevidamente, marque-o comomanual.
apt-add-repository — Adicionar Repositórios e PPAsEste comando é um wrapper do pacote software-properties-common. Ele edita arquivos em /etc/apt/sources.list.d/ e, em alguns casos, gerencia chaves GPG (embora o método moderno seja diferente — veja a seção 5).
| Subcomando | Descrição |
|---|---|
apt-add-repository <ppa> |
Adiciona um PPA do Launchpad |
apt-add-repository --remove <ppa> |
Remove um PPA |
apt-add-repository "deb <url> <suite> <component>" |
Adiciona repositório genérico |
Exemplo:
# Adicionar o PPA do PHP de Ondřej Surý (muito usado em servidores)
$ sudo apt-add-repository ppa:ondrej/php -y
# Saída:
# Repository: 'deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main'
# ...
# Hit:1 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy InRelease
# O -y aceita automaticamente; sem ele, o apt-add-repository exibe
# a descrição do PPA e aguarda um Enter de confirmação
Atenção: PPAs são mantidos por terceiros, sem o processo de revisão dos repositórios oficiais. Em ambientes de produção, avalie a reputação do mantenedor antes de adicionar.
dpkg — A Camada Inferior| Opção | Descrição |
|---|---|
dpkg -i <pacote.deb> |
Instala um pacote .deb local |
dpkg -r <pkg> |
Remove um pacote (mantém configurações) |
dpkg -P <pkg> |
Remove um pacote e suas configurações (purge) |
dpkg -l [padrão] |
Lista pacotes instalados (suporta globbing: dpkg -l 'nginx*') |
dpkg -L <pkg> |
Lista todos os arquivos instalados por um pacote |
dpkg -S <caminho> |
Descobre a qual pacote pertence um arquivo |
dpkg -s <pkg> |
Exibe o status de um pacote instalado |
dpkg --configure -a |
Reconfigura todos os pacotes desconfigurados (útil após falha) |
dpkg --get-selections |
Lista todos os pacotes e seu estado (install, deinstall, hold) |
dpkg --set-selections |
Define o estado de pacotes (usado com --get-selections para backup) |
Exemplo 1 — Instalar um .deb local (com advertência):
# Instalar um pacote .deb baixado manualmente
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
# Se houver dependências não satisfeitas, o dpkg reportará erro:
# dpkg: dependency problems prevent configuration of google-chrome-stable:
# google-chrome-stable depends on libu2f-udev; however:
# Package libu2f-udev is not installed.
# CORREÇÃO: use apt para resolver as dependências automaticamente
$ sudo apt install -f
# ou, melhor ainda, instale o .deb diretamente com apt:
$ sudo apt install ./google-chrome-stable_current_amd64.deb
Advertência crítica: nunca instale
.debde fontes não confiáveis comdpkg -i— pacotes.debexecutam scripts de pré/pós-instalação como root. Sempre prefiraapt install ./pacote.deb, que além de resolver dependências, mantém o pacote sob o controle do APT para futuras atualizações.
Exemplo 2 — Descobrir a qual pacote pertence um arquivo:
# Qual pacote instalou o binário /usr/bin/nginx?
$ dpkg -S /usr/bin/nginx
# Saída:
# nginx-core: /usr/bin/nginx
# Qual pacote instalou uma biblioteca específica?
$ dpkg -S /lib/x86_64-linux-gnu/libc.so.6
# libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6
Exemplo 3 — Listar pacotes instalados:
# Listar todos os pacotes nginx* instalados
$ dpkg -l 'nginx*'
# Saída:
# Desired=Unknown/Install/Remove/Purge/Hold
# | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
# |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
# ||/ Name Version Architecture Description
# +++-==============-==============-============-=================================
# ii nginx 1.18.0-6ubuntu amd64 small, powerful, scalable web/proxy server
# ii nginx-common 1.18.0-6ubuntu all small, powerful, scalable web/proxy server
# ii nginx-core 1.18.0-6ubuntu amd64 nginx web/proxy server (core version)
# "ii" significa: Desired=Install, Status=Installed (estado saudável)
Exemplo 4 — Reparar pacotes em estado inconsistente:
# Após uma queda de energia durante apt upgrade, alguns pacotes podem ficar
# em estado "half-configured" ou "half-installed"
$ sudo dpkg --configure -a
# Isso retoma a configuração de todos os pacotes que ficaram pendentes
apt-key (DEPRECADO)O comando apt-key está deprecado desde o APT 2.1.8 (2021) — presente, mas ativamente desencorajado, até o Debian 12 e o Ubuntu 24.04; o Debian 13 já o removeu. O motivo é de segurança: quando uma chave GPG é adicionada ao chaveiro global (/etc/apt/trusted.gpg ou /etc/apt/trusted.gpg.d/), ela passa a ser confiável para assinar pacotes de qualquer repositório. Isso viola o princípio do menor privilégio.
A abordagem correta é:
/etc/apt/keyrings/ (ou /usr/share/keyrings/)..list do repositório usando a opção signed-by=.apt-keyVamos adicionar o repositório oficial do Docker como exemplo:
# 1. Criar o diretório para chaves, se não existir
$ sudo mkdir -p /etc/apt/keyrings
# 2. Baixar a chave GPG do repositório Docker
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 3. Ajustar permissões para que o usuário `_apt` consiga ler a chave
# (o APT baixa arquivos com esse usuário de privilégio reduzido)
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 4. Adicionar o repositório, referenciando a chave com signed-by
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. Atualizar a lista de pacotes
$ sudo apt update
# 6. Instalar o pacote
$ sudo apt install docker-ce
Anatomia da linha do repositório:
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu jammy stable
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^
# URL do repositório suite componente
A chave em
/etc/apt/keyrings/docker.gpgsó será usada para validar pacotes deste repositório específico. Outros repositórios não serão afetados, mesmo que a chave seja comprometida. Este é exatamente o procedimento aplicado no tutorial Instalação do Docker Engine — lá o arquivo fica em/usr/share/keyrings/, caminho igualmente válido (a convenção recomenda/etc/apt/keyrings/para chaves gerenciadas pelo administrador).
| Tarefa | Comando Recomendado | Alternativa / Nota |
|---|---|---|
| Atualizar lista de pacotes | sudo apt update |
sudo apt-get update (scripts) |
| Atualizar todos os pacotes | sudo apt upgrade |
sudo apt full-upgrade (se permitir remoções) |
| Listar pacotes com atualização disponível | apt list --upgradable |
Requer apt update executado antes |
| Pesquisar pacote por nome | apt search <nome> |
apt-cache search <nome> |
| Ver informações de um pacote | apt show <pkg> |
apt-cache show <pkg> |
| Instalar pacote | sudo apt install <pkg> |
sudo apt-get install <pkg> |
| Instalar versão específica | sudo apt install <pkg>=<versão> |
Use apt-cache policy <pkg> para listar versões disponíveis |
Instalar .deb manualmente |
sudo apt install ./pacote.deb |
Alternativa: sudo dpkg -i pacote.deb seguido de sudo apt install -f para resolver dependências (Seção 4.6) |
| Remover pacote (mantém config) | sudo apt remove <pkg> |
sudo apt-get remove <pkg> |
| Remover pacote e configurações | sudo apt purge <pkg> |
sudo dpkg -P <pkg> |
| Bloquear atualização de pacote | sudo apt-mark hold <pkg> |
echo "<pkg> hold" \| sudo dpkg --set-selections |
| Desbloquear pacote | sudo apt-mark unhold <pkg> |
|
| Adicionar PPA | sudo apt-add-repository ppa:<nome> |
Editar manualmente /etc/apt/sources.list.d/ + chave GPG |
| Adicionar repositório externo | Método signed-by (Seção 5) |
Evite apt-key add |
| Reparar dependências quebradas | sudo apt install -f |
sudo apt-get -f install |
| Descobrir pacote de um arquivo | dpkg -S /caminho/arquivo |
apt-file search /caminho/arquivo (precisa instalar apt-file) |
| Listar arquivos de um pacote | dpkg -L <pkg> |
apt-file list <pkg> |
| Listar pacotes instalados | dpkg -l |
apt list --installed |
| Verificar estado de um pacote | dpkg -s <pkg> |
apt show <pkg> |
| Reconfigurar pacotes pendentes | sudo dpkg --configure -a |
Usado após falhas de instalação |
Limpar cache de .deb |
sudo apt clean |
sudo apt-get clean |
| Remover dependências órfãs | sudo apt autoremove |
sudo apt-get autoremove |
Os repositórios oficiais do Debian/Ubuntu já assinam seus pacotes com GPG, e o APT verifica automaticamente. No entanto, para auditoria adicional:
debsums: Verifica a integridade dos arquivos instalados comparando com os hashes MD5 registrados no pacote.# Instalar
$ sudo apt install debsums
# Verificar todos os pacotes instalados
$ sudo debsums -sa
# -s: mostra apenas arquivos com problemas
# -a: verifica todos os pacotes (não apenas os que possuem hashes)
dpkg-sig: Ferramenta para assinar e verificar assinaturas em pacotes .deb (mais usada em repositórios internos corporativos).Sempre teste mudanças significativas antes de aplicá-las:
# Simular upgrade completo
$ sudo apt-get --simulate upgrade
# ou
$ sudo apt-get -s upgrade
# Simular instalação
$ sudo apt-get --dry-run install <pkg>
# Simular operação do dpkg
$ sudo dpkg --no-act -i pacote.deb
# ou
$ sudo dpkg -i --no-act pacote.deb
Nota: o
aptmoderno também suporta--dry-run, mas prefiraapt-getcom--simulateem scripts por garantia de estabilidade da saída.
# Limpar cache de pacotes baixados (libera espaço em disco)
$ sudo apt clean
# Remover versões antigas do cache, mantendo apenas a mais recente
$ sudo apt autoclean
# Remover pacotes que não são mais necessários
$ sudo apt autoremove
# Para encontrar bibliotecas órfãs, veja a Seção 7.4
# Instalar o deborphan
$ sudo apt install deborphan
# Listar pacotes órfãos (nenhum pacote instalado depende deles)
$ sudo deborphan
# Remover todos os pacotes órfãos (use com cuidado!)
$ sudo apt remove $(deborphan)
No Ubuntu (e disponível também no Debian), o pacote unattended-upgrades aplica atualizações de segurança automaticamente, sem intervenção manual:
# Instalar (já vem pré-instalado na maioria das instalações Ubuntu)
$ sudo apt install unattended-upgrades
# Verificar/habilitar a configuração interativa
$ sudo dpkg-reconfigure unattended-upgrades
# A configuração detalhada fica em:
# /etc/apt/apt.conf.d/50unattended-upgrades (o que atualizar)
# /etc/apt/apt.conf.d/20auto-upgrades (frequência)
Dica: em servidores, combine
unattended-upgradescomapt-mark holdpara pacotes críticos que não devem ser atualizados sem supervisão.
Cenário clássico após queda de energia ou encerramento forçado durante uma instalação:
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a'
to correct the problem.
Solução: siga a própria mensagem — sudo dpkg --configure -a retoma a configuração dos pacotes pendentes. Em seguida, rode sudo apt install -f para reparar eventuais dependências quebradas.
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1234 (apt)
Diagnóstico antes de qualquer ação:
# Verificar qual processo detém o lock
$ sudo lsof /var/lib/dpkg/lock-frontend
$ ps aux | grep -E 'apt|dpkg'
apt, apt-get ou unattended-upgrades em execução: aguarde — remover o lock com outro processo ativo pode corromper o banco de dados.$ sudo rm /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
$ sudo dpkg --configure -a
rc (resíduo de configuração)Pacotes removidos com apt remove (sem purge) permanecem no banco com estado rc — removidos, mas com arquivos de configuração residuais:
# Listar pacotes em estado rc
$ dpkg -l | awk '/^rc/ {print $2}'
# Limpar todos de uma vez
$ sudo apt purge $(dpkg -l | awk '/^rc/ {print $2}')
Causas mais comuns, em ordem:
apt update desatualizado ou nunca executado → rode sudo apt update.universe/multiverse no Ubuntu) → verifique o sources.list.apt search <termo>.sudo dpkg --add-architecture i386 && sudo apt update.┌─────────────────────────────────────────┐
│ Camada de Usuário (Interativa) │
│ apt, apt-add-repository │
├─────────────────────────────────────────┤
│ Camada de Scripts (Estável) │
│ apt-get, apt-cache, apt-mark │
├─────────────────────────────────────────┤
│ Camada Inferior (Banco de Dados) │
│ dpkg │
├─────────────────────────────────────────┤
│ Banco de Dados Local │
│ /var/lib/dpkg/status │
└─────────────────────────────────────────┘
Nota final: o ecossistema APT é robusto e maduro, mas a evolução para o
aptmoderno, o abandono doapt-keye a adoção do formato deb822 para fontes refletem uma mudança de paradigma em direção à segurança e à usabilidade. Mantenha-se atualizado com as notas de release do Debian e Ubuntu, pois práticas consideradas padrão há poucos anos (comoapt-key add) agora são ativamente desencorajadas.
DNF, YUM e RPM: Gerenciamento de Pacotes no RHEL e Derivados — o guia irmão para a família Red Hat (nesta wiki)
Debian — APT User's Guide e man apt(8) — referência oficial da camada superior
Debian Wiki — dpkg e man dpkg(1) — a camada inferior
Debian Wiki — DebianRepository/UseThirdParty — o método signed-by e os motivos da deprecação do apt-key
Ubuntu Server — Automatic updates — unattended-upgrades
Instalação do Docker Engine no Debian, Oracle Linux e Ubuntu — o método signed-by aplicado na prática (nesta wiki)
Automatizando a Instalação do Docker com Ansible — repositórios no formato deb822 via deb822_repository (nesta wiki)