Comment vérifier si un paquet est installé sur mon serveur?

175

J'ai récemment installé Ubuntu Server edition 13.10 (Saucy Salamander). Mais j'ai rencontré un petit problème.

A la fin de l'installation, il vous demande si vous le souhaitez ou non plusieurs packages supplémentaires, tels que le serveur OpenSSH et l'hôte de la machine virtuelle. Voici ce que je regarde:

Entrez la description de l'image ici

Maintenant, mon problème est que je ne me souviens pas si j'ai coché la case "hôte de machine virtuelle". Comment vérifier si mon serveur dispose des packages correspondants?

Quels packages sont fournis avec l'hôte de la machine virtuelle?

D.Zou
la source
1
$ apt-cache policy <package-name>, par exemple$ apt-cache policy dillo
Daniel

Réponses:

231

Souhaitez-vous connaître toutes les commandes dpkg avec options? Ayez une lecture du lien ci-dessous.

15 commandes dpkg pour gérer les serveurs Linux basés sur Debian

Pour lister tous les packages installés

Ici "less" est un simple lecteur de texte utilisé pour faire défiler la liste des paquets dans un nouveau tampon qui s'ouvre dans la fenêtre de terminal existante. La liste ne sera pas mélangée avec d'autres commandes et sorties du terminal. Appuyez sur 'q' pour revenir à l'invite du terminal. Voir "homme moins" pour plus d'informations.

dpkg -l | less

Pour vérifier si un paquet est installé ou non:

dpkg -l {package_name}
dpkg -l vlc

Pour vérifier si le paquet est installé ou non (par exemple, vlc). Si installé, lancez le package:

dpkg -l | grep vlc

Affiche l'emplacement où le paquet est installé. Le "-S" (S majuscule) signifie "recherche"

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

Pour utiliser Grep pour rechercher:

dpkg -l | grep {keywords}
dpkg -l | grep pdf
Babin Lonston
la source
1
Quelle est la différence entre this et dpkg-query -l "packagename"
heypaleblue
4
Ne comptez pas sur le code de sortie de dpkg -l packagename, car il pourrait renvoyer un code de sortie à 0 même si le package n'est pas complètement installé - voir: github.com/bitrise-io/bitrise/issues/433
Viktor Benei
dpkg -l | cut -d " " -f 3 | grep "^vlc"pour afficher tous les noms de paquets commençant parvlc
anatoly techtonik
Pour votre information, cela ne fonctionne pas pour les méta-packages car ils ne sont pas directement corrélés à un dpkg. Votre réponse répond bien à la question posée.
mtalexan
34

Utilisation dpkg

Cette commande est le gestionnaire de paquets Debian.

Vous pouvez lister tous les paquets installés avec

dpkg -l

Vous pouvez voir les détails d'un paquet spécifique avec

dpkg -p packagename

Et pour savoir s’il est installé, utilisez

dpkg -s packagename | grep Status

Vous pouvez apprendre quel paquet contient le logiciel que vous voulez avec

apt-cache search name*  

Dans votre cas, vous devriez utiliser cette commande pour rechercher le nom du paquet que vous voulez

apt-cache search virtual machine host 
onurbekiroglu
la source
29

apt -qq list PACKAGE peut également être utilisé pour vérifier si le PACKAGE est installé.

S'il est installé, il affichera quelque chose comme (avec [installed]au bout de la ligne):

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

Si non installé, le résultat sera:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all
Viktor Benei
la source
1
Vous pouvez mettre une étoile à la fin du nom du paquet pour un caractère générique.
Brannon
3
Vous pouvez également utiliser l'option --installed pour cette commande afin de limiter les correspondances réellement installées.
mtalexan
2
C'est pour quoi -qq? Cela semble fonctionner de manière identique sans cette option, et cette option ne figure pas dans le manuelman apt
Gabriel Staples
3
@ GabrielStaples Il semble que la apt listcommande n'est pas encore complètement documentée. Quelques tests rapides sur 16.04 semblent indiquer que cela -qest synonyme d’ --quietoption. Le premier -qempêche l’impression du mot "Terminé". La seconde empêche également l’impression "Listing ...".
Anthony Geoghegan le
14

J'ai trouvé un moyen de vérifier l'installation du paquet avec juste la commande dpkg-query et pas de pipe.

J'ai cherché une telle solution en écrivant une tâche pour un livre de jeu.

Donc, vous pouvez faire quelque chose comme ça:

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

Ceci est juste une autre façon de faire la chose.

DenKoren
la source
les tuyaux en ansible peuvent être utilisés avec le shellmodule.
Sjas
4

Je vous écris une nouvelle réponse comme tasksel « Les noms de tâches » Ne pas afficher dans dpkgou aptrequêtes. Cela signifie que les autres réponses sont incomplètes (ou erronées).

"Je ne me souviens pas si j'ai coché la case" hôte de machine virtuelle "..."

Vérifiez s'il y a un astérisque portant le nom après la réexécution sudo tasksel.
(ou un ' i ' si en cours d'exécution tasksel --list-tasks).

Si vous ne le voyez pas, le « méta-package tasksel» n'est probablement pas installé.


"..Comment puis-je vérifier si mon serveur dispose des packages correspondants?"

Si vous voulez savoir ce qui est installé dans le méta-package tâche de l'hôte de machine virtuelle:

tasksel --list-tasks

(dans votre cas, tasksel --list-tasks | grep virtc'est assez)

Cela donne le nom de tâche approprié et une indication quant à savoir si elle est installée.

Dans votre cas, ce nom de tâches est virt-host.


"Quels packages sont fournis avec l'hôte de la machine virtuelle?"

Dans la dernière commande, recherchez le nom de la tâche tasksel.
Ceci est nécessaire pour la prochaine commande:

tasksel --task-packages virt-host

Cette liste répertorie les méta-packages Tasksel individuels (indiqués par le caractère '^' ajouté) qui constituent le nom.
Dans votre cas c'est virt-host^.

Une fois que vous avez trouvé le bon méta-nom, vous pouvez utiliser apt:

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

(ou apt-cache show ...si apt showne fonctionne pas.)

Cela montrera tous les paquets composant le méta paquet donné.

Ensuite:

 dpkg -l {each individual pkg name listed above}

Cela vous dira si le paquet individuel est installé / désinstallé (noté par la deuxième lettre: le statut 'i' signifie installé). Faites cela pour tous les paquets listés sous le paquet tâche / méta.

Cela devrait répondre aux questions initiales.

Note latérale: /usr/share/tasksel/descs/ubuntu-tasks.desc contient également des descriptions des méta-packages de Tasksel. Si vous: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descle nom du méta-paquet APT sera affiché. (Dans votre cas c'est ubuntu-virt-server). Vous pouvez également utiliser des aptcommandes avec ce méta-nom.

Si vous souhaitez supprimer des paquets tasksel, cela se mêle un peu aux mauvaises herbes. Veuillez consulter https://askubuntu.com/a/88897/169878 ou un nombre quelconque de réponses sur le sujet.

Veuillez noter que les paquets "meta" apt ne correspondent pas aux noms de paquet Tasksel. Veuillez consulter la page de la communauté Tasksel pour plus d'informations.

bshea
la source
1
Les deux questions reçoivent une réponse correcte. Si vous votez à la baisse, donnez une raison ou dites-moi pourquoi ils ne le sont pas.
bshea
3

Utilisez tasksel ( sudo apt-get install taskselsi vous ne l'avez pas déjà) et lancez tasksel --list-tasks.

tasksel imprimera une liste des tâches. Il y aura ensuite un icôté de chaque tâche installée et un ucôté de chaque tâche non installée.

Si vous souhaitez installer la tâche, utilisez tasksel install <task>. Le nom de la tâche que vous recherchez est virt-host.

Les éléments de sélection de logiciels sont appelés "tâches".

Blake R
la source
merci de m'avoir dit le nom de la tâche, c'était l'un de mes problèmes, je ne savais pas quel paquet chercher.
D.Zou
2

Si quelqu'un est intéressé, j'ai créé un petit script avec lequel vous pouvez installer automatiquement à partir d'une liste de paquetages ou d'applications ou simplement vérifier s'ils sont déjà installés:

#!/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

J'espère que ça aide quelqu'un.

Claudio Taccogna
la source
2

Solution plus simple:

Il existe maintenant une apt listcommande qui répertorie les packages installés. Vous pouvez également rechercher un package spécifique avec

apt list <package>

Voir man aptpour plus d'informations. Si vous ne connaissez pas le nom exact du package, vous pouvez utiliser apt searchsuivi d'une partie de celui-ci pour afficher une liste des packages associés.

sk8forether
la source