Як я можу перевірити, чи встановлено пакет (немає привілеїв суперпользователя)?


56

У нашому університеті ми можемо отримати майже будь-який встановлений пакет ubuntu, який ми хочемо, але ми самі не є суперпользователями (нам потрібно вимагати встановлення пакунків).

З деякими бібліотеками не завжди легко дізнатися, встановлений чи не пакет. Чи є простий спосіб / команда перевірити це?

Відповіді:


56
apt-cache policy <package name>

7
Важливо знати, що він підтримує завершення вкладки у назві пакета. Так що це цілком корисно, навіть коли ви не знаєте точної назви пакета.
Хав'єр Рівера

Сором, який все ще залишається зі статусом 0, навіть якщо пакету немає. dpkg -sвсе ж: askubuntu.com/a/1108801/52975
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

З дружнімapt : apt policy <package name>або apt show <package name>для отримання додаткової інформації.
Пабло А

18

Я завжди просто використовую це з командного рядка:

dpkg -l | grep mysql

тож вище просить dpkg перелічити всі встановлені пакети, і тоді я вітаю лише ті, у яких в імені є mysql.


3
dpkg -l "*mysql*"також працює і не приховує пояснювальні рядки у висновку.
Філіп Вендлер

dpkg -l "*mysql*"(або dpkg -l '*mysql*') також робить спеціальне форматування виводу для розміщення кожного пакета в одному рядку вікна терміналу (grep doesn). І ця форма дозволяє вибирати формат підстановки (префікси чи суфікси) та використовувати взагалі підстановку (порівняно з грепом). Але греп дає приємні забарвлення ..))
встепанюк

7

Ще один варіант, який на цей раз використовує здатність:

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, але я цього не перевіряв). Див. [Сторінку mandpkg ( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ) для подальших "неповних" станів.
Запалювач

1
@Ignitor, хороший момент. Моя відповідь була неправильною. Пакет можна було навіть вийняти, але не очистити. Тому я думаю, що вам доведеться вивчити вихід, щоб перевірити, встановлений чи ні пакет.
jarno

2
Я відредагував відповідь. Тепер він покладається на вихід dpkg-запиту. Я не знаю, наскільки це портативне рішення; наприклад, чи може текст відображатися іншою мовою в якійсь системі?
jarno

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.