Como posso verificar se um pacote está instalado (sem privilégios de superusuário)?

56

Em nossa universidade, podemos instalar praticamente qualquer pacote ubuntu que desejamos, mas não somos superusuários (precisamos solicitar a instalação de pacotes).

Com algumas bibliotecas, nem sempre é fácil saber se o pacote já está instalado ou não. Existe uma maneira / comando simples para verificar isso?

Peter Smit
fonte

Respostas:

56
apt-cache policy <package name>
Oli
fonte
7
É importante saber que ele suporta a conclusão da guia no nome do pacote. Portanto, é bastante útil mesmo quando você não sabe o nome exato do pacote.
Javier Rivera
Pena que ainda saia com o status 0, mesmo que o pacote não esteja presente. dpkg -sno entanto: askubuntu.com/a/1108801/52975
Ciro Santilli Enviado em 11/01
Com mais amigávelapt : apt policy <package name>ou apt show <package name>para mais informações.
Pablo A
18

Eu sempre uso isso na linha de comando:

dpkg -l | grep mysql

então o acima pede ao dpkg para listar todos os pacotes instalados e então eu grep apenas para aqueles que possuem mysql no nome.

Rick
fonte
3
dpkg -l "*mysql*"também funciona e não oculta as linhas explicativas na saída.
Philipp Wendler
dpkg -l "*mysql*"(ou dpkg -l '*mysql*') também faz uma formatação especial da saída para caber em cada pacote em uma linha da janela do terminal (grep não). E este formulário permite que você escolha o formato curinga (prefixos ou sufixos) e se deseja usar curingas (em comparação com grep). Mas grep dá uma coloração agradável ..))
vstepaniuk 22/02
7

Mais uma variante, usando o aptitude desta vez:

aptitude show <package>

A conclusão da guia também funciona aqui.

Alexey Nedilko
fonte
6

Você pode usar o dselect. Ele fornece acesso somente leitura não-su.

Além disso, dpkg -s <package name>fornece muitos detalhes relacionados a um pacote. Por exemplo"

userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games
Abhinav
fonte
Isso também está disponível como justo dpkg -s. E, inversamente, dpkg-query -lfunciona tão bem quanto dpkg -loudpkg --list
Belacqua
4

Você pode usar dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ em scripts, pois retorna o código de saída 1, se <package>não estiver instalado, e 0 se <package>estiver instalado.

jarno
fonte
4
Cuidado : se dpkg -sretornar 0, isso não significa necessariamente que o pacote está totalmente / corretamente instalado. dpkg -stambém retorna 0se o pacote está no estado half-configuredou no config-filesestado (e acho que também está half-installed, mas não verifiquei isso). Veja [a página de manual de dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ) para outros estados "incompletos".
Ignitor
11
@ Ignitor, bom ponto. Minha resposta estava errada. O pacote pode até ser removido, mas não eliminado. Então eu acho que você precisa examinar a saída para verificar se o pacote está instalado ou não.
61314 jarno
2
Eu editei a resposta. Agora ele depende da saída do dpkg-query. Não sei o quão portátil é essa solução; por exemplo, o texto pode ser exibido em outro idioma em algum sistema?
61314 jarno
2

Solução mais simples:

Agora existe um apt listcomando que lista os pacotes instalados. Você também pode procurar um pacote específico com

apt list <package>

Veja man aptpara mais informações.

sk8forether
fonte
11
E apt showpara mais detalhes
wjandrea 25/01
0

Exemplo para usar um valor específico como var em scripts de shell (por exemplo test.sh)

#!/bin/sh
PACKAGE="${1}"
INSTALLED=$(dpkg -l | grep ${PACKAGE} >/dev/null && echo "yes" || echo "no")

echo "${PACKAGE} is installed ... ${INSTALLED}"

Torne-o executável e comece com:

test.sh openssh-server

Ou faça o que quiser nos seus scripts

Lahmizzar
fonte
0

Você precisa verificar o status impresso por dpkg -l, exemplo:

$ dpkg -l firefox-esr vim winff
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
+++-====================================-=======================-=======================-=============================================================================
hi  firefox-esr                          52.9.0esr+build2-0ubunt amd64                   Safe and easy web browser from Mozilla
ii  vim                                  2:8.1.1198-0york0~14.04 amd64                   Vi IMproved - enhanced vi editor
rc  winff                                1.5.3-3                 all                     graphical video and audio batch converter using ffmpeg or avconv

Aqui ambos vime firefox-esrestão instalados, você pode digitar:

$ dpkg -l firefox-esr | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is installed.
$ dpkg -l vim | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is installed.
$ dpkg -l winff | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is NOT installed.
SebMa
fonte