Как я могу проверить, установлен ли пакет (без привилегий суперпользователя)?


56

В нашем университете мы можем установить практически любой пакет ubuntu, какой захотим, но мы сами не являемся суперпользователями (нам нужно запросить установку пакетов).

С некоторыми библиотеками не всегда легко узнать, установлен ли пакет или нет. Есть ли простой способ / команда, чтобы проверить это?

Ответы:


56
apt-cache policy <package name>

7
Важно знать, что он поддерживает завершение табуляции в имени пакета. Так что это очень полезно, даже если вы не знаете точное название пакета.
— Хавьер Ривера

Позор, который все еще выходит со статусом 0, даже если пакет не присутствует. dpkg -sделает однако: askubuntu.com/a/1108801/52975
— Сиро Сантилли 事件 改造 中心 法轮功 六四 事件

С более дружественнымapt : apt policy <package name>или apt show <package name>для получения дополнительной информации.
— Пабло А

18

Я всегда просто использую это из командной строки:

dpkg -l | grep mysql

поэтому приведенный выше запрос dpkg перечисляет все установленные пакеты, а затем я выполняю grep только для тех, которые имеют mysql в имени.


3
dpkg -l "*mysql*"также работает и не скрывает поясняющие строки в выводе.
— Филипп Вендлер

dpkg -l "*mysql*"(или dpkg -l '*mysql*') также делает специальное форматирование вывода, чтобы соответствовать каждому пакету в одной строке окна терминала (grep не делает). И эта форма позволяет вам выбрать формат подстановочного знака (префиксы или суффиксы), а также использовать ли подстановочные знаки вообще (по сравнению с grep). Но grep дает приятную раскраску ..))
— vstepaniuk

7

Еще один вариант, использующий aptitude на этот раз:

aptitude show <package>

Здесь также работает завершение табуляции.


6

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

Кроме того, dpkg -s <package name>предоставляет много деталей, связанных с пакетом. Например"

userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games

Это также доступно как раз dpkg -s. И наоборот, dpkg-query -lработает так же хорошо, как dpkg -lилиdpkg --list
— belacqua

4

Вы можете использовать dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ в скриптах, так как он возвращает код выхода 1, если <package>он не установлен, и 0, если <package>он установлен.


4
Будьте осторожны : если dpkg -sвозвращается 0, это не обязательно означает, что пакет установлен полностью / правильно . dpkg -sтакже возвращает, 0если пакет в half-configuredили в config-filesсостоянии (и я думаю, также в half-installed, но я не проверял это). Смотрите [man-страницу dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ) для дальнейших «неполных» состояний.
— Воспламенитель

1
@ Игнитор, хорошая мысль. Мой ответ был неверным. Пакет может быть даже удален, но не очищен. Поэтому я думаю, что вы должны изучить вывод, чтобы проверить, установлен ли пакет или нет.
— Ярно

2
Я отредактировал ответ. Теперь он опирается на вывод dpkg-запроса. Я не знаю, насколько портативно это решение; например, может ли текст отображаться на другом языке в какой-либо системе?
— Ярно

2

Более простое решение:

Теперь есть apt listкоманда, которая выводит список установленных пакетов. Вы также можете искать конкретный пакет с

apt list <package>

Смотрите man aptдля получения дополнительной информации.


1
А apt showдля более детальной
— wjandrea

0

dpkg -s программное использование

Мне нравится, dpkg -sкак он выходит со статусом, 1если какой-либо из пакетов не установлен, что облегчает его автоматизацию:

pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
  sudo apt-get install $pkgs
fi

Смотрите также:

Проверено на Ubuntu 18.10.


0

Пример использования определенного значения как var в скриптах оболочки (например test.sh)

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

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

Сделайте его исполняемым и начните с:

test.sh openssh-server

Или делай что хочешь в своих скриптах


0

Вам необходимо проверить статус, напечатанный dpkg -l, например:

$ 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

Здесь и так vimи firefox-esrустановлены, поэтому вы можете набрать:

$ 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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.