Як перевірити, чи встановлений пакет на моєму сервері?


174

Нещодавно я встановив версію Ubuntu Server 13.10 (Saucy Salamander). Але я зіткнувся з невеликою проблемою.

Наприкінці інсталяції він запитує кілька додаткових пакетів, хочете ви їх чи ні, як, наприклад, сервер OpenSSH та хост віртуальної машини. Ось що я дивлюсь:

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

Тепер моя проблема полягає в тому, що я не можу згадати, чи встановив прапорець "хост віртуальної машини". Як перевірити, чи є у мого сервера відповідні пакети?

Які пакунки поставляються з хостом віртуальної машини?


1
$ apt-cache policy <package-name>, наприклад$ apt-cache policy dillo
Даніель

Відповіді:


230

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

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

Список усіх встановлених пакетів

Тут "менше" - це простий читач тексту, який використовується для прокрутки списку пакетів у новому буфері, який відкриється у існуючому вікні терміналу. Список не буде змішуватися з іншими командами та вихідними терміналами. Натисніть "q", щоб повернутися до підказки терміналу. Див. "Чоловік менше" для отримання додаткової інформації.

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 "
ім'ям пакета

4
Чи не залежить від вихідного коду dpkg -l packagename, так як він може повернутися з кодом 0 на виході , навіть якщо пакет не повністю встановлений - см: github.com/bitrise-io/bitrise/issues/433
Віктор Benei

dpkg -l | cut -d " " -f 3 | grep "^vlc"показати всі назви пакетів, які починаються зvlc
anatoly techtonik

FYI, це не працює для мета-пакетів, оскільки вони не співвідносяться безпосередньо з dpkg. Ваша відповідь дає відповідь на запитання, як було задано.
mtalexan

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 для цієї команди для обмеження відповідностей, які фактично встановлені.
mtalexan

2
Для чого -qq? Здається, без нього працює однаково, і цього варіанту немає в посібникуman apt
Габріель Штаплес

3
@GabrielStaples Схоже, apt listкоманда ще не повністю задокументована. Деякі швидкі тестування 16.04, схоже, вказують на те, що -qце синонім --quietваріанту. Перший -qзапобігає друкуванню слова "Готово". Друга також не дозволяє друкувати "Лістинг ...".
Ентоні Геоґеган

14

Я знайшов спосіб перевірити наявність пакету за допомогою команди dpkg-query та без труб.

Я шукав таке рішення під час написання завдання для ансибільної книжки.

Отже, ви можете зробити щось подібне:

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

Це лише ще один спосіб зробити це.


труби в ансібі можна використовувати з shellмодулем.
sjas

4

Я пишу нову відповідь, оскільки Tasksel "Імена завдань" НЕ відображається в запитах dpkgі не aptзапитується. Значення інших відповідей є неповними (або неправильними).

"Не можу пригадати, якщо я встановив прапорець" хост віртуальної машини "."

Перевірте, чи є зірочка за назвою після повторного запуску sudo tasksel.
(або " я ", якщо працює tasksel --list-tasks).

Якщо ви цього не бачите, у вас, ймовірно , не встановлений мета-пакет завдань.


"..Як перевірити, чи є у мого сервера відповідні пакети?"

Якщо ви хочете дізнатися, що встановлено в мета-пакеті Virtual Machine Host tasksel:

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}

Це дозволить вам повідомити, чи встановлено / видалено окремий пакет (відмічено другою літерою: статус "я" встановлений). Зробіть це для всіх пакетів, перелічених у пакеті завдання / мета.

Це повинно відповісти на початкові запитання.

Бічна примітка: /usr/share/tasksel/descs/ubuntu-tasks.desc також містить описи метапакетів Tasksel. Якщо ви: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descвін покаже правильну назву мета-пакету APT. (У вашому випадку це так ubuntu-virt-server). Ви також можете використовувати aptкоманди з цим мета-іменем.

Якщо ви хочете видалити пакети із завданнями, це потрапляє в бур’яни трохи. Будь ласка, зверніться до 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.

Елементи вибору програмного забезпечення називаються "завданнями".


дякую, що сказали мені назву завдання, це була одна з моїх проблем, не знав, який пакет шукати.
D.Zou

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.