Comment puis-je vérifier si un paquet est installé (pas de privilèges de superutilisateur)?

56

Dans notre université, nous pouvons installer presque tous les paquets ubuntu que nous voulons, mais nous ne sommes pas nous-mêmes des super-utilisateurs (nous devons demander que des paquets soient installés).

Avec certaines bibliothèques, il n'est pas toujours facile de savoir si le paquet est déjà installé ou non. Y at-il un moyen simple / commande pour vérifier cela?

Peter Smit
la source

Réponses:

56
apt-cache policy <package name>
Oli
la source
7
Il est important de savoir qu'il prend en charge la complétion par tabulation dans le nom du package. C'est donc très utile même lorsque vous ne connaissez pas le nom exact du paquet.
Javier Rivera
Honte qui existe toujours avec le statut 0 même si le package n'est pas présent. dpkg -sfait cependant: askubuntu.com/a/1108801/52975
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Avec plus convivialapt : apt policy <package name>ou apt show <package name>pour plus d'informations.
Pablo Un
18

Je l'utilise toujours depuis la ligne de commande:

dpkg -l | grep mysql

Donc, ce qui précède demande à dpkg de lister tous les paquets installés, puis de grep uniquement pour ceux qui ont mysql dans le nom.

Meule
la source
3
dpkg -l "*mysql*"fonctionne également et ne masque pas les lignes explicatives dans la sortie.
Philipp Wendler
dpkg -l "*mysql*"(ou dpkg -l '*mysql*') effectue également un formatage spécial de la sortie pour qu'il s'adapte à chaque paquet sur une ligne de la fenêtre du terminal (grep non). Et ce formulaire vous permet de choisir le format des caractères génériques (préfixes ou suffixes) et de choisir d’utiliser des caractères génériques (par rapport à grep). Mais grep donne une belle coloration ..))
vstepaniuk Le
7

Encore une variante, en utilisant aptitude cette fois-ci:

aptitude show <package>

La complétion par tabulation fonctionne ici aussi.

Alexey Nedilko
la source
6

Vous pouvez utiliser dselect. Il fournit un accès en lecture seule non-su.

En outre, dpkg -s <package name>fournit beaucoup de détails liés à un paquet. Par exemple"

userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games
Abhinav
la source
Ceci est également disponible en tant que juste dpkg -s. Et inversement, dpkg-query -lfonctionne aussi bien dpkg -lou oudpkg --list
belacqua
4

Vous pouvez utiliser dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ dans les scripts, car il renvoie le code de sortie 1, si le <package>n'est pas installé, et 0 si le <package>est installé.

Jarno
la source
4
Attention : si vous dpkg -sretournez 0, cela ne signifie pas nécessairement que le paquet est complètement / correctement installé. dpkg -sretourne également 0si le paquet est dans half-configuredou dans l' config-filesétat (et je suppose aussi dans half-installed, mais je n'ai pas vérifié cela). Voir [la page de manuel de dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ) pour d'autres états "incomplets".
Ignitor
1
@ Ignitor, bon point. Ma réponse était fausse. Le paquet pourrait même être retiré, mais pas purgé. Je pense donc que vous devez examiner la sortie pour vérifier si le paquet est installé ou non.
Jarno
2
J'ai édité la réponse. Maintenant, il repose sur la sortie de dpkg-query. Je ne sais pas à quel point cette solution est portable. Par exemple, le texte peut-il être affiché dans une autre langue dans un système donné?
jarno
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.

sk8forether
la source
1
Et apt showpour plus de détails
wjandrea
0

dpkg -s utilisation programmatique

J'aime le dpkg -sstatut avec les statuts 1si l'un des paquetages n'est pas installé, ce qui facilite son automatisation:

pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
  sudo apt-get install $pkgs
fi

Voir également:

Testé sur Ubuntu 18.10.

Ciro Santilli 改造 中心 六四 事件
la source
0

Exemple d'utilisation d'une valeur spécifique en tant que var dans des scripts de shell (par exemple test.sh)

#!/bin/sh
PACKAGE="${1}"
INSTALLED=$(dpkg -l | grep ${PACKAGE} >/dev/null && echo "yes" || echo "no")

echo "${PACKAGE} is installed ... ${INSTALLED}"

Rendez-le exécutable et commencez par:

test.sh openssh-server

Ou faites ce que vous voulez dans vos scripts

Lahmizzar
la source
0

Vous devez vérifier le statut imprimé par dpkg -lexemple:

$ 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

Ici les deux vimet firefox-esrsont installés, vous pouvez donc taper:

$ 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.
SebMa
la source