Como saber se um determinado pacote está instalado no Ubuntu? [duplicado]

11

Eu instalei um pacote JDK no meu Ubuntu 14.04 há alguns meses, mas não sei como verificar qual versão ele é.

Então, como faço para descobrir se um pacote está instalado no Ubuntu e qual versão dele está instalada?

    
por Boyka 04.02.2017 / 20:39

4 respostas

8

TL; DR: Para um comando simples (sem | grep ) com saída compacta, você pode usar

  • apt list package , que geralmente é o que você deseja (compare com apt-cache policy package ), ou
  • dpkg-query -W package como uma versão menos desordenada de dpkg -l package .

O comando apt (para apt list package ) está disponível no Ubuntu 14.04 e posterior.

apt list informa se o seu pacote está instalado.

apt list package mostra a versão de um pacote que é ou será instalado, junto com os nomes dos componentes do repositório que o fornecem e a versão. Quando o pacote é instalado, [installed] aparece com destaque no final da linha.

ek@Io:~$ apt list firefox
Listing... Done
firefox/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
N: There is 1 additional version. Please use the '-a' switch to see it

Além de [installed] no final, now na lista de componentes do repositório indica que o pacote está instalado no momento. Isto é o que a saída de apt list parece para um pacote que não é instalado:

ek@Io:~$ apt list dolphin
Listing... Done
dolphin/xenial 4:15.12.3-0ubuntu1 amd64

Às vezes, você verá [installed,automatic] , o que significa que o pacote foi instalado como uma dependência de algum outro pacote. Como era automaticamente instalado em vez de instalado manualmente, ele pode ser removido depois que todos os pacotes que dependem dele são removidos (que é o que o comando apt autoremove faz).

ek@Io:~$ apt list zeitgeist-core
Listing... Done
zeitgeist-core/xenial,now 0.9.16-0ubuntu4 amd64 [installed,automatic]

Você pode usar apt list --installed para mostrar apenas pacotes instalados.

Uma vantagem de ver uma listagem mesmo quando o pacote não está instalado é que você sabe que existe um pacote com o nome que você especificou. Caso contrário, se você soletrar errado por acidente, você pode pensar que o pacote que você significava não está instalado.

ek@Io:~$ apt list firefoz
Listing... Done

Mas se você realmente preferir que nada apareça se você não tiver um pacote, use apt list --installed package :

ek@Io:~$ apt list --installed firefox dolphin
Listing... Done
firefox/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
N: There is 1 additional version. Please use the '-a' switch to see it

A Globbing ajuda você a listar os pacotes cujos nomes você não conhece ou deseja digitar.

Como você acabou de ver, você pode passar vários nomes de pacotes para apt list . A outra coisa que você pode fazer é passar um glob , onde * representa zero ou mais caracteres e ? representa um caractere. Há algumas coisas que você deve ter em mente:

  • Seu shell também expande globs em nomes de arquivos , mas isso não é o que você quer que aconteça aqui, então você deve sempre as cite (em ' ' ou " " , ou com \ ) quando você as passar para apt list .
  • Embora ambas as expressões e expressões regulares suportem as classes de caracteres (por exemplo, [csz]sh corresponde a csh , ssh zsh ), eles não são iguais e * e ? significam coisas diferentes em uma glob do que em uma expressão regular. Isso é importante porque alguns outros comandos usados para obter informações sobre pacotes, como apt-cache policy package , usam expressões regulares em vez de globs. Você deve verificar se um comando usa globs ou expressões regulares antes de confiar em ambos os recursos.
  • Quando você está realmente adicionando e removendo pacotes, você não deve confundir globs com expressões regulares. apt list 'wine*' lista todos os pacotes cujos nomes começam com wine , mas apt remove 'wine*' remove todos os pacotes com win (mesmo sem o e ) em qualquer lugar no nome deles!

Suponha, por exemplo, que eu saiba que o pacote em que estou interessado tenha soap em seu nome e termine em cil , mas é só isso que eu lembro:

ek@Io:~$ apt list '*soap*cil'
Listing... Done
libmono-system-runtime-serialization-formatters-soap4.0-cil/xenial,xenial,now 4.2.1.102+dfsg2-7ubuntu4 all [installed,automatic]

Globbing também é útil quando você faz conhecer o nome completo do pacote em que está interessado, mas não deseja digitá-lo. Ou quando você estiver interessado em vários pacotes que correspondem ao glob:

ek@Io:~$ apt list 'firefox-locale-*'
Listing... Done
firefox-locale-af/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-an/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ar/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-as/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ast/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-az/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-be/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-bg/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-bn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-br/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-bs/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ca/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-cak/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-cs/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-csb/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-cy/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-da/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-de/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-el/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-en/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
firefox-locale-eo/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-es/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-et/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-eu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fa/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fi/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fy/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ga/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gd/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-he/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hi/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hsb/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hy/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-id/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-is/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-it/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ja/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ka/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-kab/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-kk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-km/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-kn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ko/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ku/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-lg/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-lt/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-lv/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mai/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ml/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ms/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nb/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nso/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-oc/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-or/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-pa/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-pl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-pt/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ro/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ru/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-si/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sq/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sv/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sw/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ta/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-te/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-th/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-tr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-uk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-uz/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-vi/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-xh/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-zh-hans/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-zh-hant/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-zu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64

Isso é um monte de pacotes. (Embora não tantos quanto se eu tivesse executado apt list '*' , que lista todos pacotes disponíveis!) Felizmente globs trabalham com --installed também:

ek@Io:~$ apt list --installed 'firefox-locale-*'
Listing... Done
firefox-locale-en/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
N: There is 1 additional version. Please use the '-a' switch to see it

apt list vs. dpkg-query -W

Outro comando que você pode usar é dpkg-query -W package . Isso é semelhante a dpkg -l , mas sua saída é mais simplificada e legível porque somente o nome do pacote e a versão instalada (se houver) são impressos.

dpkg-query -W lista todos os pacotes que o dpkg conhece que correspondem ao nome ou ao padrão de glob que você fornece. Isso inclui pacotes que estão instalados e também pacotes que não estão instalados, mas que são referidos por outro pacote. Você pode dizer quais pacotes estão realmente instalados porque o número / string da versão instalada é impresso à direita do nome. Por exemplo, no meu sistema 16.04:

ek@Io:~$ dpkg-query -W wine-\*
wine-amd64
wine-gecko
wine-gecko2.21:amd64    2.21-0ubuntu1
wine-gecko2.21:i386     2.21-0ubuntu1
wine-i386
wine-mono
wine-mono0.0.8  0.0.8-0ubuntu1

Assim, dos pacotes listados, wine-gecko2.21:amd64 e wine-gecko2.21:i386 (ou seja, wine-gecko2.21 para as arquiteturas amd64 e i386 ) e wine-mono0.0.8 são os que eu atualmente instalei.

dpkg-query -W e apt list saberão sempre sobre os pacotes instalados, sejam ou não fornecidos por qualquer fonte de software atualmente configurada e se são ou não referidos por outros pacotes. No entanto:

  • apt list também conhece pacotes disponíveis a partir de qualquer fonte de software atualmente configurada, mas não sabe sobre pacotes indisponíveis referidos por outros pacotes.
  • dpkg-query -W (como dpkg -l ) não reflete diretamente quais pacotes estão realmente disponíveis, mas conhece os pacotes referenciados por qualquer pacote instalado.

Na mesma máquina:

ek@Io:~$ apt list wine-\*
Listing... Done
wine-development/xenial,xenial 1.9.6-1 all
wine-gecko2.21/xenial,now 2.21-0ubuntu1 amd64 [installed,automatic]
wine-mono0.0.8/xenial,xenial,now 0.0.8-0ubuntu1 all [installed,automatic]

Assim como acontece com dpkg -l , quando você executa dpkg-query -W com o nome de um pacote que você não tem (por exemplo, eu não tenho chocolate-doom instalado), a saída é a mesma de quando você o executa com o nome de um pacote que não existe de todo (por exemplo, devido ao erro ortográfico, como firefoz ):

ek@Io:~$ dpkg-query -W chocolate-doom firefoz
dpkg-query: no packages found matching chocolate-doom
dpkg-query: no packages found matching firefoz

Por outro lado, apt list mostra explicitamente que apenas chocolate-doom existe (mas não está instalado):

ek@Io:~$ apt list chocolate-doom firefoz
Listing... Done
chocolate-doom/xenial 2.2.1-2.1 amd64
    
por Eliah Kagan 05.02.2017 / 17:28
7

Em um terminal, execute dpkg -l | grep <name or pattern> . Por exemplo,

dpkg -l | grep firefox
ii  firefox       51.0.1+build2-0ubuntu0.14.04.2                      amd64 

A coisa ii significa que está instalada. Obviamente, se não houver saída, o pacote não será instalado.

    
por mikewhatever 04.02.2017 / 20:46
6

Se você souber o nome do pacote, use apt-cache policy:

$ apt-cache policy firefox | grep 'Installed:'                                                                           
  Installed: 51.0.1+build2-0ubuntu0.16.04.1
$ apt-cache policy golang | grep 'Installed:'                                                                            
  Installed: (none)

Se você não usar, use dpkg --get-selections | grep 'jdk'

$ dpkg --get-selections | grep 'jdk'
jdk1.8.0-111                    deinstall
openjdk-7-jre-headless:amd64            deinstall
openjdk-8-jdk:amd64             install
openjdk-8-jdk-headless:amd64            install
openjdk-8-jre:amd64             install
openjdk-8-jre-headless:amd64            install
openjdk-9-jre-headless:amd64            deinstall
    
por Sergiy Kolodyazhnyy 04.02.2017 / 20:44
2

Use o comando dpkg , que é o gerenciador de pacotes para o Debian.

>dpkg -s /package name/  

Use o arquivo / var / lib / dpkg / available para descobrir todos os nomes de pacotes disponíveis para você.

Ou você pode usar o seguinte comando (lista todos os pacotes em / var / lib / dpkg / status ):

>dpkg-query -l  

Você também pode tentar corresponder o nome do pacote usando curingas :

>dpkg-query -l 'libc6*'
    
por Boyka 04.02.2017 / 20:47