Come posso verificare se un pacchetto è installato sul mio server?


174

Di recente ho installato Ubuntu Server edizione 13.10 (Saucy Salamander). Ma ho riscontrato un po 'di problemi.

Alla fine dell'installazione, ti chiedono diversi pacchetti aggiuntivi se li desideri o meno, come il server OpenSSH e l'host della macchina virtuale. Ecco cosa sto guardando:

Inserisci qui la descrizione dell'immagine

Ora, il mio problema è che non ricordo se ho selezionato la casella di controllo "host della macchina virtuale". Come posso verificare se il mio server ha i pacchetti corrispondenti?

Quali pacchetti vengono forniti con l'host della macchina virtuale?


1
$ apt-cache policy <package-name>, ad es$ apt-cache policy dillo
Daniel

Risposte:


230

Stai cercando di conoscere tutti i comandi di dpkg con le opzioni? Leggi dal seguente link.

15 comandi dpkg per gestire i server Linux basati su Debian

Per elencare tutti i pacchetti installati

Qui "less" è un semplice lettore di testo utilizzato per scorrere l'elenco dei pacchetti in un nuovo buffer che si apre nella finestra del terminale esistente. L'elenco non verrà miscelato con altri comandi e output del terminale. Premi 'q' per tornare al prompt del terminale. Vedi "man less" per maggiori informazioni.

dpkg -l | less

Per verificare se un pacchetto è installato o meno:

dpkg -l {package_name}
dpkg -l vlc

Per verificare se il pacchetto è installato o meno (ad esempio, vlc). Se installato, avvia il pacchetto:

dpkg -l | grep vlc

Mostra la posizione in cui è installato il pacchetto. "-S" (S maiuscola) sta per "ricerca"

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

Per utilizzare Grep per la ricerca:

dpkg -l | grep {keywords}
dpkg -l | grep pdf

1
Qual è la differenza tra questo e dpkg-query -l "nomepacchetto"
heypaleblue

4
Non dipendere dal codice di uscita di dpkg -l packagename, poiché potrebbe restituire un codice di uscita 0 anche se il pacchetto non è completamente installato - vedere: github.com/bitrise-io/bitrise/issues/433
Viktor Benei,

dpkg -l | cut -d " " -f 3 | grep "^vlc"per mostrare tutti i nomi di pacchetto che iniziano convlc
anatoly techtonik,

Cordiali saluti, questo non funziona per i meta-pacchetti poiché non sono direttamente correlati a un dpkg. La tua risposta risponde alla domanda come richiesto però.
mtalexan,

34

Uso dpkg

Questo comando è il gestore pacchetti debian.

Puoi elencare tutti i pacchetti installati con

dpkg -l

Puoi vedere i dettagli di un pacchetto specifico con

dpkg -p packagename

E per sapere se è installato, usa

dpkg -s packagename | grep Status

Puoi sapere quale pacchetto contiene il software che desideri

apt-cache search name*  

Nel tuo caso dovresti usare questo comando per cercare il nome del pacchetto che desideri

apt-cache search virtual machine host 

29

apt -qq list PACKAGE può anche essere usato per verificare se il PACCHETTO è installato.

Se installato stamperà qualcosa di simile (con [installed]alla fine della riga):

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

Se non installato, l'output sarà:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all

1
È possibile inserire una stella alla fine del nome del pacchetto per un carattere jolly.
Brannon,

3
È inoltre possibile utilizzare l'opzione --installed per quel comando per limitare le corrispondenze effettivamente installate.
mtalexan,

2
A cosa serve -qq? Sembra funzionare in modo identico senza di essa, e questa opzione non è nel manualeman apt
Gabriel Staples

3
@GabrielStaples Sembra che il apt listcomando non sia ancora completamente documentato. Alcuni test rapidi su 16.04 sembrano indicare che -qè sinonimo di --quietopzione. Il primo -qimpedisce la stampa della parola "Fine". Il secondo impedisce anche la stampa di "Elenco ...".
Anthony Geoghegan,

14

Ho trovato un modo per verificare l'installazione del pacchetto con il solo comando dpkg-query e senza pipe.

Ho cercato tale soluzione mentre scrivevo un'attività per il playbook di risposta.

Quindi, puoi fare qualcosa del genere:

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

Questo è solo un altro modo di fare la cosa.


i tubi in ansible possono essere utilizzati con il shellmodulo.
sjas,

4

Sto scrivendo una nuova risposta poiché i " Nomi delle attività" di Tasksel NON vengono visualizzati dpkgo aptinterrogati. Significa che le altre risposte sono incomplete (o sbagliate).

"Non ricordo se ho selezionato la casella di controllo" host macchina virtuale "."

Controlla se esiste un asterisco in base al nome dopo la riesecuzione sudo tasksel.
(o una " i " se in esecuzione tasksel --list-tasks).

Se non lo vedi, probabilmente non hai installato il " meta-pacchetto " taskel.


"..Come posso verificare se il mio server ha i pacchetti corrispondenti?"

Se vuoi scoprire cosa è installato nel meta-pacchetto taskel dell'host di macchine virtuali:

tasksel --list-tasks

(nel tuo caso tasksel --list-tasks | grep virtè abbastanza)

Ciò fornisce il nome corretto dell'attività e un'indicazione se è installato.

Nel tuo caso questo nome taskel è virt-host.


"Quali pacchetti vengono forniti con l'host della macchina virtuale?"

Dall'ultimo comando, trova il nome dell'attività taskel.
Questo è necessario per il prossimo comando:

tasksel --task-packages virt-host

Questo elenca il singolo meta-pacchetto Tasksel (indicato da '^' allegato) che compongono il nome.
Nel tuo caso lo è virt-host^.

Una volta trovato il meta-nome corretto puoi usare apt:

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

(o apt-cache show ...se apt shownon funziona.)

Questo mostrerà tutti i pacchetti che compongono il meta pacchetto indicato.

Poi:

 dpkg -l {each individual pkg name listed above}

Questo ti dirà se il singolo pacchetto è installato / disinstallato (indicato dalla seconda lettera: lo stato 'i' significa installato). Fallo per tutti i pacchetti elencati sotto il task / meta pacchetto.

Questo dovrebbe rispondere alle domande originali.

Nota a margine: /usr/share/tasksel/descs/ubuntu-tasks.desc contiene anche descrizioni di meta-pacchetti Tasksel. Se: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descmostrerà il nome del meta-pacchetto APT corretto. (Nel tuo caso questo è ubuntu-virt-server). Puoi anche usare i aptcomandi con questo meta-nome.

Se si desidera rimuovere i pacchetti taskel, questo entra un po 'nelle erbacce. Si prega di consultare https://askubuntu.com/a/88897/169878 o qualsiasi altro numero di risposte là fuori.

Si noti che i pacchetti "meta" apt non corrispondono ai nomi dei pacchetti Tasksel. Per ulteriori informazioni, consultare la pagina della community di Tasksel .


1
Ad entrambe le domande viene data una risposta corretta. Se declassate, date una ragione o ditemi perché non lo sono.
bshea,

3

Usa taskel ( sudo apt-get install taskselse non lo hai già) ed esegui tasksel --list-tasks.

taskel stamperà un elenco di attività e ci sarà una iaccanto a ciascuna attività installata e una uaccanto a ciascuna attività che non è installata.

Se si desidera installare l'attività, utilizzare tasksel install <task>. Il nome dell'attività che stai cercando è virt-host.

Le voci di selezione del software sono chiamate "attività".


grazie per avermi detto il nome dell'attività, che era uno dei miei problemi, non ero sicuro di quale pacchetto cercare.
D.Zou,

2

Se qualcuno è interessato, ho creato un piccolo script con il quale puoi installarlo automaticamente da un elenco di pacchetti o applicazioni o semplicemente controllare se sono già installati:

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

Spero che aiuti qualcuno.


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. Se non si conosce il nome esatto del pacchetto, è possibile utilizzare apt searchseguito da una parte di esso per visualizzare un elenco di pacchetti correlati.

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.