Как проверить, установлен ли пакет на моем сервере?

174

Я недавно установил Ubuntu Server Edition 13.10 (Saucy Salamander). Но я столкнулся с небольшой проблемой.

В конце установки он запрашивает несколько дополнительных пакетов, хотите ли вы их или нет, таких как сервер OpenSSH и хост виртуальной машины. Вот что я смотрю на:

Введите описание изображения здесь

Теперь моя проблема в том, что я не могу вспомнить, если я установил флажок «хост виртуальной машины». Как я могу проверить, есть ли на моем сервере соответствующие пакеты?

Какие пакеты поставляются с хостом виртуальной машины?

D.Zou
источник
1
$ apt-cache policy <package-name>, Например$ apt-cache policy dillo
Daniel

Ответы:

230

Вы хотите знать обо всех командах dpkg с опциями? Прочитайте ссылку ниже.

15 команд dpkg для управления Linux-серверами на основе Debian

Чтобы просмотреть все установленные пакеты

Здесь "less" - это простой текстовый ридер, используемый для прокрутки списка пакетов в новом буфере, который открывается в существующем окне терминала. Список не будет смешан с другими командами терминала и выводом. Нажмите «q», чтобы вернуться в окно терминала. Смотрите "man less" для большей информации.

dpkg -l | less

Чтобы проверить, установлен ли пакет или нет:

dpkg -l {package_name}
dpkg -l vlc

Проверить, установлен пакет или нет (например, vlc). Если установлено, запустите пакет:

dpkg -l | grep vlc

Показать место, где установлен пакет. «-S» (заглавная S) означает «поиск»

sudo dpkg -S {package_name}
sudo dpkg -S skype

Чтобы использовать Grep для поиска:

dpkg -l | grep {keywords}
dpkg -l | grep pdf
Бабин Лонстон
источник
1
Какая разница между этим и dpkg-query -l "имя_пакета"
heypaleblue
4
Не зависите от кода выхода dpkg -l packagename, так как он может вернуться с кодом выхода 0, даже если пакет не установлен полностью - см. Github.com/bitrise-io/bitrise/issues/433
Виктор Бенеи,
dpkg -l | cut -d " " -f 3 | grep "^vlc"чтобы показать все имена пакетов, которые начинаются сvlc
анатолий techtonik
К вашему сведению, это не работает для метапакетов, поскольку они не связаны напрямую с dpkg. Ваш ответ действительно отвечает на вопрос, как спросили все же.
Мталексан
34

использование dpkg

Эта команда является менеджером пакетов Debian.

Вы можете перечислить все установленные пакеты с

dpkg -l

Вы можете увидеть детали для конкретного пакета с

dpkg -p packagename

И чтобы узнать, установлен ли он, используйте

dpkg -s packagename | grep Status

Вы можете узнать, какой пакет содержит программное обеспечение, которое вы хотите с

apt-cache search name*  

В вашем случае вы должны использовать эту команду для поиска имени пакета, который вы хотите

apt-cache search virtual machine host 
onurbekiroglu
источник
29

apt -qq list PACKAGE также может использоваться для проверки, установлен ли ПАКЕТ.

Если установлено, оно напечатает что-то вроде ( [installed]в конце строки):

$ apt -qq list awscli
awscli/stable,now 1.4.2-1 all [installed]

Если не установлено, вывод будет:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all
Виктор Беней
источник
1
Вы можете поставить звездочку в конце имени пакета для подстановочного знака.
Брэннон
3
Вы также можете использовать параметр --installed для этой команды, чтобы ограничить количество совпадений, которые фактически установлены.
Мталексан
2
Для чего -qq? Кажется, что он работает одинаково без него, и этого параметра нет в руководствеman apt
Габриэль Стейплс
3
@GabrielStaples Похоже, apt listкоманда еще не полностью задокументирована. Некоторое быстрое тестирование 16.04 показывает, что -qэто синоним --quietопции. Первое -qпредотвращает печать слова «Готово». Второй также предотвращает печать «Listing ...».
Энтони Геогеган
14

Я нашел способ проверить установку пакета с помощью команды dpkg-query и без каналов.

Я искал такое решение, когда писал задачу для сборника игр.

Итак, вы можете сделать что-то вроде этого:

/usr/bin/dpkg-query --show --showformat='${db:Status-Status}\n' '<your package name>'

Это просто еще один способ сделать это.

DenKoren
источник
трубы в ansible могут быть использованы с shellмодулем.
sjas
4

Я пишу новый ответ как Tasksel «имена задач» не отображаются в dpkgили aptзапросов. Это означает, что другие ответы являются неполными (или неправильными).

«Не могу вспомнить, если я установил флажок« хост виртуальной машины »..»

Проверьте, есть ли звездочка по имени после повторного запуска sudo tasksel.
(или « я », если работает tasksel --list-tasks).

Если вы не видите этого, то вы , вероятно , не имеют «tasksel мета-пакет » установлен.


"... Как я могу проверить, есть ли на моем сервере соответствующие пакеты?"

Если вы хотите узнать, что установлено в метапакете tasksel Host:

tasksel --list-tasks

(в твоем случае tasksel --list-tasks | grep virtдостаточно)

Это дает правильное имя задачи и указание на то, установлена ​​ли она.

В вашем случае это тасксел зовут virt-host.


"Какие пакеты поставляются с хостом виртуальной машины?"

В последней команде найдите имя задачи tasksel.
Это необходимо для следующей команды:

tasksel --task-packages virt-host

В этом списке перечислены отдельные метапакеты Tasksel (обозначенные «^»), которые составляют имя.
В твоем случае это virt-host^.

Как только вы найдете правильное мета-имя, вы можете использовать apt:

 apt show virt-host^ | grep "Package:"

(или apt-cache show ...если apt showне работает.)

Это покажет все пакеты, составляющие данный метапакет.

Затем:

 dpkg -l {each individual pkg name listed above}

Это сообщит вам, был ли установлен / удален отдельный пакет (отмеченный 2-й буквой: статус «i» означает установленный). Сделайте это для всех пакетов, перечисленных в пакете task / meta.

Это должно ответить на оригинальные вопросы.

Примечание: /usr/share/tasksel/descs/ubuntu-tasks.desc также содержит описания метапакетов Tasksel. Если вы: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descон покажет правильное имя метапакета APT. (В твоем случае это так ubuntu-virt-server). Вы также можете использовать aptкоманды с этим мета-именем.

Если вы хотите удалить пакеты tasksel, это немного повредит. Пожалуйста, обратитесь к https://askubuntu.com/a/88897/169878 или к любым другим ответам.

Обратите внимание, что пакеты «meta» apt не совпадают с именами пакетов Tasksel. Пожалуйста, обратитесь к странице сообщества Tasksel для получения дополнительной информации.

bshea
источник
1
На оба вопроса ответили правильно. Если вы отрицаете, укажите причину или скажите, почему это не так.
bshea
3

Используйте tasksel ( sudo apt-get install taskselесли у вас его еще нет) и запустите tasksel --list-tasks.

tasksel распечатает список задач, и iрядом с каждой установленной задачей будет uрядом с каждой задачей, которая не установлена.

Если вы хотите установить задачу, используйте tasksel install <task>. Имя задачи , которую вы ищете virt-host.

Пункты выбора программного обеспечения называются «задачами».

Блейк Р
источник
спасибо, что сообщили мне название задачи, это была одна из моих проблем, я не был уверен, какой пакет искать.
Д.Зоу
2

Если кому-то интересно, я создал небольшой скрипт, с помощью которого вы можете автоматически устанавливать его из списка пакетов или приложений или просто проверить, установлены ли они уже:

#!/bin/bash
apt -qq list YOUR_LIST_GOES_HERE | grep -v "installed" | awk -F/ '{print $1}' > /root/list.txt
packages=$(cat /root/list.txt)
grep -q '[^[:space:]]' < /root/list.txt
CHECK_LIST=$?
if [[ $CHECK_LIST -eq 1 ]]; then
echo "Your packages are already installed"
else
echo "Installing packages"
apt-get  install -y $packages
fi

Надеюсь, это кому-нибудь поможет.

Клаудио Таккогна
источник
2

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

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

apt list <package>

Смотрите man aptдля получения дополнительной информации. Если вы не знаете точного имени пакета, вы можете использовать его, apt searchа затем часть его, чтобы увидеть список связанных пакетов.

sk8forether
источник