Ubuntu / Consultar pacotes instalados com apt e dpkg-query

No Ubuntu, use apt list --installed para consultar uma lista legível de pacotes Deb instalados. Use dpkg-query para conferir o estado de um pacote, descobrir a qual pacote um arquivo pertence ou produzir dados estruturados; uma entrada no banco de dados, sozinha, não comprova que o pacote esteja instalado.

Liste os pacotes Deb instalados

APT (Advanced Package Tool) é o conjunto de ferramentas que gerencia pacotes Deb; dpkg mantém os registros locais de instalação. A consulta abaixo mostra nomes, versões, arquiteturas e indicações de estado. Não exige sudo nem instala ou remove pacotes.

apt list --installed

Para percorrer uma lista longa, use less e pressione q para sair. A segunda linha é uma alternativa para procurar nomes que começam com nginx; as aspas impedem que o shell expanda o padrão antes do APT.

apt list --installed | less
apt list --installed 'nginx*'

A interface de apt é voltada ao uso interativo e sua apresentação pode mudar entre versões. Em scripts, prefira uma saída explícita do dpkg-query. Como -W também pode listar registros de pacotes removidos, o exemplo abaixo filtra o campo de estado para manter somente installed:

dpkg-query -W -f='${db:Status-Status}\t${binary:Package}\t${Version}\t${Architecture}\n' \
  | awk -F '\t' '$1=="installed" {print $2 "\t" $3 "\t" $4}' \
  | LC_ALL=C sort

A saída contém três colunas separadas por tabulação: nome, versão e arquitetura. As aspas simples preservam os campos ${...} para o dpkg, e o awk usa a primeira coluna apenas como filtro. Esse inventário exclui estados como config-files e unpacked; não é uma verificação de integridade do software.

Confira se um pacote está instalado

Quando souber o nome exato

O nome nginx é um exemplo; substitua-o pelo pacote real. dpkg-query -s mostra seu registro local. Leia o campo Status: um pacote normalmente instalado apresenta Status: install ok installed.

dpkg-query -s nginx

Para imprimir apenas o status atual de forma compacta, solicite o campo de status diretamente.

dpkg-query -W -f='${db:Status-Status}\n' nginx

O estado de instalação esperado é installed. Um registro com somente configurações restantes pode retornar config-files e a consulta ainda terminar com sucesso. Portanto, num script, confira o estado retornado e o código de saída; código zero significa que a consulta funcionou, não que o pacote está instalado. Ausência do pacote ou erro na consulta produz código diferente de zero.

Quando quiser procurar nomes semelhantes

dpkg-query -l aceita padrões curinga de shell. Coloque o padrão entre aspas para que o shell não o expanda antes que dpkg-query o receba.

dpkg-query -l 'nginx*'

As três posições iniciais de dpkg-query -l indicam ação desejada, estado atual e erro. Em ii , as duas primeiras letras indicam seleção para instalação e estado instalado; a terceira posição vazia significa ausência de erro registrado. Nem toda linha da lista representa um pacote instalado.

Código Significado
ii Selecionado para instalação e atualmente instalado; confira também a terceira posição de erro.
rc Selecionado para remoção; restam arquivos de configuração. Não conte como instalado.
iU Selecionado para instalação e desempacotado, mas a configuração ainda não foi concluída.
Status em maiúsculas Uma letra maiúscula de estado ou erro, como H, U, F ou R, exige investigar o estado detalhado e os registros do gerenciador.

Consulte a versão instalada e a candidata

Veja a versão registrada

Confira primeiro o estado de curl com a consulta de estado anterior, adaptando o nome. O comando abaixo imprime nome e versão do registro; sem essa conferência, uma versão preservada em um registro removido pode ser confundida com software atualmente instalado.

dpkg-query -W -f='${binary:Package}\t${Version}\n' curl

binary:Package acrescenta a arquitetura quando necessário para desambiguar, como em pacotes Multi-Arch: same ou de arquitetura estrangeira. A coluna Architecture continua útil no inventário. Não compare versões Debian apenas pela ordem alfabética: a ordenação acima serve para estabilizar as linhas por nome.

Compare a versão instalada com a candidata

apt-cache policy curl

Em apt-cache policy, Installed indica a versão instalada e Candidate a candidata escolhida pela política do APT, considerando prioridades e índices disponíveis. Ela pode coincidir com a instalada ou não existir; não é necessariamente a maior versão publicada em qualquer repositório.

O cache pode estar desatualizado. Se precisar atualizar os índices, execute sudo apt update e examine eventuais falhas de rede, origem ou assinatura antes de confiar no resultado. Esse comando atualiza metadados e acessa a rede; não atualiza os pacotes instalados. Consulte a referência oficial de apt-cache para interpretar a seleção.

Descubra os arquivos de um pacote

Liste os arquivos registrados

dpkg-query -L nginx

dpkg-query -L lista arquivos registrados para o pacote, não todos os arquivos que a aplicação criou depois. Logs, caches, uploads, bancos de dados e arquivos de scripts de manutenção podem ficar fora da lista. A consulta também não comprova que o conteúdo de cada arquivo permaneça íntegro.

Encontre o pacote responsável por um arquivo

dpkg-query -S /usr/bin/curl

Se o caminho for um link simbólico, consulte tanto o link quanto o destino. Execute primeiro readlink -f abaixo e confirme que retornou, sem erro, um caminho não vazio. Só então faça a segunda consulta; os caminhos de Python são exemplos e podem variar.

readlink -f /usr/bin/python3
dpkg-query -S "$(readlink -f /usr/bin/python3)"

dpkg-query -S pesquisa os registros locais de caminhos; não pesquisa todo o catálogo de pacotes disponíveis para download. Um programa instalado manualmente pode não ter registro no dpkg. Para procurar arquivos de pacotes do repositório que você ainda não instalou, use apt-file, com o índice correspondente preparado.

Separe pacotes marcados como manuais e automáticos

APT registra marcas de instalação manual e automática. As consultas showmanual e showauto não alteram essas marcas; o manual oficial de apt-mark explica seu significado.

apt-mark showmanual
apt-mark showauto

showmanual não é uma lista exclusiva do que uma pessoa instalou depois. Metapacotes e componentes marcados pela imagem inicial também podem aparecer. A marca não revela, sozinha, quem instalou o pacote, por qual meio ou para qual finalidade.

Uma dependência automática que deixou de ser necessária pode ser proposta para autoremove. O comando abaixo apenas simula a operação com --dry-run: não remove os candidatos. Leia a lista inteira e confirme serviços, metapacotes e dependências antes de considerar uma remoção real.

sudo apt autoremove --dry-run

Salve e compare um inventário

Para comparar servidores ou momentos diferentes, salve nome, versão e arquitetura em um arquivo TSV, isto é, separado por tabulações. O exemplo usa Bash: pipefail faz a cadeia indicar erro se uma etapa falhar, e set -C recusa sobrescrever um arquivo regular existente. As opções ficam limitadas ao subshell entre parênteses.

(
  set -o pipefail
  set -C
  dpkg-query -W -f='${db:Status-Status}\t${binary:Package}\t${Version}\t${Architecture}\n' \
    | awk -F '\t' '$1=="installed" {print $2 "\t" $3 "\t" $4}' \
    | LC_ALL=C sort > installed-packages.tsv
)

Execute no diretório de destino desejado e use um nome novo para cada captura. Se o arquivo já existir, escolha outro nome; não force a sobrescrita do inventário anterior. Confira imediatamente echo $?, que deve retornar zero, e leia o arquivo. Mesmo com pipefail, uma falha pode deixar um arquivo vazio ou parcial; não o trate como um inventário válido nem como prova de que nenhum pacote existe.

Guarde duas capturas válidas como installed-packages-before.tsv e installed-packages-after.tsv, ou substitua os nomes abaixo pelos arquivos reais. Compare usando a mesma seleção de campos e ordenação:

diff -u installed-packages-before.tsv installed-packages-after.tsv

Sem diferenças, diff não imprime mudanças e termina com código 0; código 1 indica diferenças, e 2 indica problema na comparação. Nas linhas de mudança, - pertence ao arquivo anterior e + ao posterior. Uma troca de versão normalmente aparece como remoção e inclusão de linha.

O TSV registra um estado, mas não é um backup nem um comando de restauração. Outra versão do Ubuntu pode não oferecer os mesmos pacotes. Guarde separadamente configurações de repositórios e PPAs (Personal Package Archives), marcas APT, pacotes Snap, configurações locais e dados das aplicações. Compare servidores com funções e arquiteturas conhecidas para interpretar diferenças.

Consulte os pacotes Snap separadamente

apt e dpkg-query consultam pacotes Deb. Em instalações com snapd disponível e funcionando, consulte os aplicativos Snap separadamente:

snap list

snap list mostra os snaps e suas revisões correntes; snap list --all também inclui revisões antigas ainda instaladas, que podem estar desabilitadas. A documentação oficial de introdução ao Snap descreve a consulta. Um inventário completo pode exigir ainda Flatpak, contêineres, gerenciadores de linguagens e programas instalados manualmente.

Resumo de comandos por tarefa

Tarefa Comando recomendado
Pacotes Deb instalados apt list --installed
Campos estruturados do registro dpkg-query -W -f='formato'
Estado de um pacote específico dpkg-query -s PACOTE
Versões instalada e candidata apt-cache policy PACOTE
Arquivos registrados de um pacote dpkg-query -L PACOTE
Pacote responsável por um caminho dpkg-query -S CAMINHO
Pacotes marcados como manuais apt-mark showmanual
Snaps instalados snap list

PACOTE, CAMINHO e formato são marcadores a substituir. A consulta -W da tabela não filtra o estado por si só; para um inventário somente de instalados, use o filtro completo apresentado acima.

Cuidados ao interpretar os resultados

  • Uma busca por trecho de nome pode encontrar vários pacotes. Com o nome exato, confira o estado e o resultado da consulta, não apenas a existência de uma linha.
  • Tanto -l quanto -W podem incluir registros removidos ou incompletos; leia o estado e mantenha o filtro installed quando esse for o objetivo.
  • Um pacote instalado não garante serviço em execução ou funcionando. Confira separadamente a unidade real com systemctl status, quando a instalação usar systemd.
  • Antes de remover um pacote, examine dependências, metapacotes e funções do sistema; um estado inesperado deve ser investigado antes de excluir arquivos ou forçar mudanças.

Referências oficiais