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

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
Abhinav
источник
Это также доступно как раз 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для получения дополнительной информации.

sk8forether
источник
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.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
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

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

Lahmizzar
источник
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.
SebMa
источник