В нашем университете мы можем установить практически любой пакет ubuntu, какой захотим, но мы сами не являемся суперпользователями (нам нужно запросить установку пакетов).
С некоторыми библиотеками не всегда легко узнать, установлен ли пакет или нет. Есть ли простой способ / команда, чтобы проверить это?
Я всегда просто использую это из командной строки:
dpkg -l | grep mysql
, так что вышеприведенное просит dpkg перечислить все установленные пакеты, а затем я grep только для тех, в имени которых есть mysql.
Еще один вариант, использующий aptitude на этот раз:
aptitude show <package>
Завершение Tab также работает здесь.
Вы можете использовать dselect. Он обеспечивает доступ не только для чтения.
Кроме того, dpkg -s <package name>
предоставляет много деталей, связанных с пакетом. Например, "
userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games
Вы можете использовать dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$
в скриптах, поскольку он возвращает код выхода 1, если <package>
не установлен, и 0, если <package>
установлен.
Более простое решение:
Теперь есть команда apt list
, которая выводит список установленных пакетов. Вы также можете выполнить поиск определенного пакета с помощью
apt list <package>
См. man apt
для получения дополнительной информации.
Пример использования определенного значения как 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
Или делайте что хотите с в ваших сценариях
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.
Необходимо проверить состояние, распечатанное 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.