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


174

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

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

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

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

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


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 

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>'

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


трубы в 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 для получения дополнительной информации.


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а затем часть его, чтобы увидеть список связанных пакетов.

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