Respostas:
De acordo com este tópico :
Para listar pacotes instalados:
dpkg --list | wc --lines
Para ver se um pacote está instalado:
dpkg --list | grep package
dpkg -l | grep -c '^ii'
Existem variantes sutis, como dpkg -l | grep -c '^?i'
se você deseja incluir pacotes instalados, mas cuja remoção você solicitou. Outra maneira é
aptitude search '~i' |wc -l
Você pode até cutucar diretamente no banco de dados dpkg:
sh -c 'set /var/lib/dpkg/info/*; echo $#'
Este inclui pacotes que não estão instalados, mas que têm arquivos de configuração restantes; você pode listá-las com dpkg -l | grep '^rc'
.
O que eu tenho usado é:
dpkg --get-selections | wc --lines
Isso fornecerá o número de pacotes instalados.
Se você deseja descobrir se um pacote específico está instalado, use:
dpkg --get-selections | grep <package>
Acredito que isso resolverá a reclamação de Gilles sobre a inclusão de outros pacotes não instalados .
Se você deseja uma contagem exata de pacotes, não deve contar as linhas de cabeçalho emitidas por dpkg-query -l
, portanto, você precisa de um padrão para corresponder às linhas que começam com ii
. O one-liner a seguir fornece o número de linhas começando com ii
e, portanto, o número de pacotes instalados:
dpkg-query -l | grep "^ii" | wc -l
Isso dá a mesma saída que
dpkg --get-selections | grep "[[:space:]]install" | wc -l
O padrão grep no segundo comando ignora as linhas que contêm a sequência "deinstall" na saída de dpkg --get-selections
.
Por exemplo, você pode fazer isso:
dpkg-query -l | nl | tail -1 | awk '{print $1}'
nl | tail -1 | awk '{print $1}'
relatará o número de linhas em sua entrada (exceto, se não houver entrada, não dirá nada em vez de gerar relatórios 0
) - mas por que você recomendaria esse kludge quando outras respostas já estão sendo usadas wc -l
?
rc
(desinstalado, mas com os arquivos de configuração restantes)) em sua contagem.