Listar pacotes instalados (Debian)

Antes de vermos as várias formas de listar os pacotes instalados no Debian, é preciso observar que, na maioria das vezes, um pacote dependerá da instalação de outros pacotes. Sendo assim, é muito difícil listar apenas aqueles que nós instalamos ativamente usando o apt.

Usando o próprio apt

$ apt list --installed

Um problema do utilitário apt é que ele não oferece uma interface CLI confiável e faz questão de deixar isso claro emitindo o aviso abaixo quando utilizado, por exemplo, em um pipe:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Como essa mensagem é impressa na saída padrão de erros (STDERR), nós podemos omiti-la redirecionando-a para o dispositivo nulo /dev/null.

Se o redirecionamento:

$ apt list --installed | wc -l

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

342

Com o redirecionamento:

$ apt list --installed 2> /dev/null | wc -l
342

Outro problema que afeta o uso do apt list, principalmente em scripts, é que ele emite a mensagem Listing... pela saída padrão (STDOUT):

$ apt list --installed 2> /dev/null | head -5
Listing...
adduser/unstable,now 3.137 all [installed]
apparmor/unstable,now 3.0.12-1+b2 amd64 [installed,automatic]
apt-listchanges/unstable,now 3.27 all [installed]
apt-utils/unstable,now 2.7.10 amd64 [installed]

Isso exige algum tipo de filtragem extra, como:

$ apt list --installed 2> /dev/null | grep -v 'Listing...' | head -5
adduser/unstable,now 3.137 all [installed]
apparmor/unstable,now 3.0.12-1+b2 amd64 [installed,automatic]
apt-listchanges/unstable,now 3.27 all [installed]
apt-utils/unstable,now 2.7.10 amd64 [installed]
apt/unstable,now 2.7.10 amd64 [installed]

Usando o utilitário dpkg

A opção -l do dpkg lista os pacotes instalados em uma tabela com várias outras informações:

$ dpkg -l

Como o dpkg possui uma interface CLI confiável, nós podemos filtrar as linhas para obter o resultado desejado.

Por exemplo:

$ dpkg -l | awk '$2 ~ /^python/ {print $2}'
python-apt-common
python3
python3-apt
python3-certifi
python3-chardet
python3-charset-normalizer
python3-debconf
python3-debian
python3-debianbts
python3-httplib2
python3-idna
python3-minimal
python3-pkg-resources
python3-pycurl
python3-pyparsing
python3-pysimplesoap
python3-reportbug
python3-requests
python3-six
python3-urllib3
python3.11
python3.11-minimal

Contudo, o dpkg possui uma ferramenta específica para filtrar os dados exibidos nos resultados…

Usando o utilitário dpkg-query

Com o dpkg-query, nós podemos escolher quais campos da tabela deverão ser impressos no terminal.

Por exemplo, para vermos apenas os nomes dos pacotes:

$ dpkg-query -W -f='${Package}\n' | head -5
adduser
apparmor
apt
apt-listchanges
apt-utils

Nota: o comando é longo e difícil de memorizar, mas pode ser facilmente utilizado em scripts ou através de “apelidos”.


Tags: Debian, pacotes, apt, dpkg, dpkg-query