Как узнать, установлен ли конкретный пакет на ubuntu? [Дубликат]

9

Я установил пакет JDK на Ubuntu 14.04 несколько месяцев назад, но я не знаю, как проверить, какая версия.

Итак, как мне найти, установлен ли пакет на Ubuntu и какая версия его установлена?

    
задан Boyka 04.02.2017 в 19:39
источник

4 ответа

4

TL; DR: Для простой команды (нет | grep ) с компактным выходом вы можете использовать

  • apt list package , который обычно вы хотите (сравните с apt-cache policy package ), или
  • dpkg-query -W package как менее загроможденная версия dpkg -l package .

Доступна команда apt (для apt list package ) в Ubuntu 14.04 и более поздних версиях.

apt list сообщает вам, установлен ли ваш пакет.

apt list package показывает версию пакета, который будет установлен или будет установлен, вместе с именами компонентов репозитория, которые предоставляют его и версию. Когда пакет установлен, [installed] отображается заметно в конце строки.

[email protected]:~$ 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

В дополнение к [installed] в конце now в списке компонентов репозитория указывает, что пакет в настоящее время установлен. Это то, что вы видите apt list для пакета, установленного не :

[email protected]:~$ apt list dolphin
Listing... Done
dolphin/xenial 4:15.12.3-0ubuntu1 amd64

Иногда вы увидите [installed,automatic] , что означает, что пакет был установлен как зависимость от другого пакета. Так как это было автоматически, а не вручную, оно может быть удалено после удаления всех пакетов, зависящих от него (что делает команда apt autoremove ).

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

Вы можете использовать apt list --installed для отображения установленных только пакетов.

Одним из преимуществ просмотра списка, даже если пакет не установлен, является то, что вы знаете, что есть пакет указанного вами имени. В противном случае, если вы ошиблись неправильно, вы можете подумать, что пакет означает не установлен.

[email protected]:~$ apt list firefoz
Listing... Done

Но если вы действительно предпочитаете, чтобы ничего отображалось, если у вас нет пакета, используйте apt list --installed package :

[email protected]:~$ 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

Globbing помогает вам перечислять пакеты, имена которых вы не знаете или хотите ввести.

Как вы только что видели, вы можете передать несколько имен пакетов в apt list . Другая вещь, которую вы можете сделать, - это передать glob , где * представляет ноль или более символы и ? - один символ. Следует иметь в виду несколько вещей:

  • Ваша оболочка также расширяет globs в именах файлов , но это not , что вы хотите здесь сделать, поэтому вы должны всегда цитируйте их ' ' или " " или \ ), когда вы передаете их apt list .
  • Хотя оба globs и регулярные выражения поддерживают классы символов (например, [csz]sh соответствует csh , ssh zsh ), они не совпадают, а * и ? означают разные вещи в глобусе, чем в регулярном выражении. Это важно, потому что некоторые другие команды, используемые для получения информации о пакетах, например apt-cache policy package , используют регулярные выражения, а не глобусы. Вы должны проверить, использует ли команда globs или регулярные выражения до полагаясь на любую функцию.
  • Когда вы фактически добавляете и удаляете пакеты, вы не должны смешивать глобы с регулярными выражениями. apt list 'wine*' перечисляет все пакеты, имена которых начинаются с wine , но apt remove 'wine*' удаляет все пакеты с win (даже без e ) в любом месте своего имени!

Предположим, например, что я знаю, что пакет, который мне интересен, имеет soap в его имени где-то и заканчивается на cil , но это все, что я помню:

[email protected]:~$ 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]

Глобулизация также удобна, когда вы do знаете полное имя интересующего вас пакета, но не хотите вводить его. Или когда вас интересуют несколько пакетов, которые соответствуют glob:

[email protected]:~$ 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

Это много пакетов. (Хотя не так много, как если бы я запускал apt list '*' , в котором перечислены доступные все пакеты!). К счастью, globs также работает с --installed :

[email protected]:~$ 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 против dpkg-query -W

Другая команда, которую вы можете использовать, - dpkg-query -W package . Это похоже на dpkg -l , но его результат более упорядочен и читабельен, поскольку печатаются только имя пакета и установленная версия (если есть).

dpkg-query -W перечисляет все пакеты dpkg знает о том, что соответствует имени или шаблону glob, который вы ему даете. Это включает в себя пакеты, которые установлены, а также пакеты, которые не установлены, но которые упомянуты другим пакетом. Вы можете узнать, какие пакеты фактически установлены, потому что номер / строка установленной версии напечатана справа от имени. Например, в моей системе 16.04:

[email protected]:~$ 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

Таким образом, из перечисленных пакетов wine-gecko2.21:amd64 и wine-gecko2.21:i386 (т.е. wine-gecko2.21 для amd64 и i386 архитектур) и wine-mono0.0.8 являются теми, которые я сейчас установил.

dpkg-query -W и apt list будут всегда знать об установленных пакетах, независимо от того, предоставляются ли они любым сконфигурированным источником программного обеспечения или нет ли они другими пакетами. Однако:

  • apt list также знает о пакетах, доступных из любого сконфигурированного источника программного обеспечения, но не знает о недоступных пакетах, на которые ссылаются другие пакеты.
  • dpkg-query -W (например, dpkg -l ) напрямую не отражает то, какие пакеты действительно доступны, но знает о пакетах, на которые ссылается любой установленный пакет.

На той же машине:

[email protected]:~$ 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]

Как и в случае dpkg -l , при запуске dpkg-query -W с именем пакета, который у вас нет (например, у меня нет chocolate-doom ), результат такой же, как при его запуске с именем пакета, который вообще не существует (например, из-за неправильной орфографии, например firefoz ):

[email protected]:~$ dpkg-query -W chocolate-doom firefoz
dpkg-query: no packages found matching chocolate-doom
dpkg-query: no packages found matching firefoz

Напротив, apt list явно показывает, что существует только chocolate-doom (но не установлено):

[email protected]:~$ apt list chocolate-doom firefoz
Listing... Done
chocolate-doom/xenial 2.2.1-2.1 amd64
    
ответ дан Eliah Kagan 05.02.2017 в 16:28
источник
7

В терминале запустите dpkg -l | grep <name or pattern> . Например,

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

Значение ii означает, что оно установлено. Очевидно, что если выход отсутствует, пакет не устанавливается.

    
ответ дан mikewhatever 04.02.2017 в 19:46
6

Если вы знаете имя пакета, используйте политику apt-cache :

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

Если вы этого не сделаете, используйте 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
    
ответ дан Sergiy Kolodyazhnyy 04.02.2017 в 19:44
2

Используйте команду dpkg , которая является диспетчером пакетов для Debian.

>dpkg -s /package name/  

Используйте файл / var / lib / dpkg / available , чтобы узнать все доступные вам имена пакетов.

Или вы можете использовать следующую команду (он перечисляет все пакеты в / var / lib / dpkg / status ):

>dpkg-query -l  

Вы также можете попытаться совместить имя пакета с помощью wild cards :

>dpkg-query -l 'libc6*'
    
ответ дан Boyka 04.02.2017 в 19:47