Come posso verificare se è installato un pacchetto (senza privilegi di superutente)?


56

Nella nostra università possiamo ottenere quasi tutti i pacchetti Ubuntu che vogliamo, ma non siamo noi stessi dei superutenti (dobbiamo richiedere l'installazione dei pacchetti).

Con alcune librerie non è sempre facile sapere se il pacchetto è già installato o meno. C'è un modo / comando semplice per controllare questo?

Risposte:


56
apt-cache policy <package name>

7
È importante sapere che supporta il completamento della scheda nel nome del pacchetto. Quindi è abbastanza utile anche quando non si conosce il nome esatto del pacchetto.
Javier Rivera,

Peccato che esca ancora con lo stato 0 anche se il pacchetto non è presente. dpkg -sfa comunque: askubuntu.com/a/1108801/52975
Ciro Santilli 11 改造 中心 法轮功 六四 事件

Con più amichevoleapt : apt policy <package name>o apt show <package name>per maggiori informazioni.
Pablo A

18

Lo uso sempre dalla riga di comando:

dpkg -l | grep mysql

quindi quanto sopra chiede a dpkg di elencare tutti i pacchetti installati e quindi grep solo per quelli che hanno mysql nel nome.


3
dpkg -l "*mysql*"funziona anche e non nasconde le righe esplicative nell'output.
Philipp Wendler,

dpkg -l "*mysql*"(o dpkg -l '*mysql*') effettua anche una formattazione speciale dell'output per adattarsi a ciascun pacchetto su una riga della finestra del terminale (grep no). E questo modulo consente di scegliere il formato jolly (prefissi o suffissi) e se utilizzare affatto i jolly (rispetto a grep). Ma grep dà una bella colorazione ..))
vstepaniuk il

7

Un'altra variante, usando aptitude questa volta:

aptitude show <package>

Il completamento della scheda funziona anche qui.


6

Puoi usare dselect. Fornisce accesso non di sola lettura.

Inoltre, dpkg -s <package name>fornisce molti dettagli relativi a un pacchetto. Per esempio"

userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games

Questo è disponibile anche come solo dpkg -s. E viceversa, dpkg-query -lfunziona altrettanto bene dpkg -lodpkg --list
belacqua,

4

È possibile utilizzare dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ negli script, poiché restituisce il codice di uscita 1, se <package>non è installato e 0 se <package>è installato.


4
Fai attenzione : se dpkg -srestituisce 0, non significa necessariamente che il pacchetto sia installato completamente / correttamente . dpkg -srestituisce anche 0se il pacchetto è in half-configuredo nello config-filesstato (e immagino anche in half-installed, ma non ho verificato quello). Vedi [la pagina man di dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ) per ulteriori stati "incompleti".
Accenditore,

1
@Ignitor, buon punto. La mia risposta era sbagliata Il pacchetto potrebbe anche essere rimosso, ma non eliminato. Quindi penso che devi esaminare l'output per verificare se il pacchetto è installato o meno.
jarno,

2
Ho modificato la risposta. Ora si basa sull'output di dpkg-query. Non so quanto sia portatile questa soluzione; ad esempio, il testo può essere visualizzato in un'altra lingua in un sistema?
jarno,

2

Soluzione più semplice:

Ora c'è un apt listcomando che elenca i pacchetti installati. Puoi anche cercare un pacchetto specifico con

apt list <package>

Vedi man aptper maggiori informazioni.


1
E apt showper maggiori dettagli
wjandrea, il

0

dpkg -s utilizzo programmatico

Mi piace dpkg -sin quanto esce con lo stato 1se uno dei pacchetti non è installato, facilitando l'automazione:

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

Guarda anche:

Testato su Ubuntu 18.10.


0

Esempio di utilizzo di un valore specifico come var negli script di shell (ad es. test.sh)

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

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

Renderlo eseguibile e iniziare con:

test.sh openssh-server

O fai quello che vuoi con i tuoi script


0

È necessario controllare lo stato stampato da dpkg -l, ad esempio:

$ 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

Qui entrambi vime firefox-esrsono installati, quindi è possibile digitare:

$ 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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.