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
.
$ 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]
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…
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”.