Wie überprüfe ich, ob ein Paket auf meinem Server installiert ist?

174

Ich habe vor kurzem Ubuntu Server Edition 13.10 (Saucy Salamander) installiert. Aber ich bin auf ein Problem gestoßen.

Am Ende der Installation werden Sie nach mehreren zusätzlichen Paketen gefragt, ob Sie diese möchten oder nicht, z. B. OpenSSH-Server und Host der virtuellen Maschine. Folgendes schaue ich mir an:

Geben Sie hier eine Bildbeschreibung ein

Mein Problem ist nun, dass ich mich nicht erinnern kann, ob ich das Kontrollkästchen "Host der virtuellen Maschine" aktiviert habe. Wie überprüfe ich, ob mein Server die entsprechenden Pakete hat?

Welche Pakete sind im Host der virtuellen Maschine enthalten?

D.Zou
quelle
1
$ apt-cache policy <package-name>ZB$ apt-cache policy dillo
Daniel

Antworten:

230

Möchten Sie alle dpkg-Befehle mit Optionen kennenlernen? Lesen Sie den folgenden Link.

15 dpkg-Befehle zum Verwalten von Debian-basierten Linux-Servern

So listen Sie alle installierten Pakete auf

Hier ist "less" ein einfacher Textleser, mit dem Sie durch die Liste der Pakete in einem neuen Puffer scrollen können, der im vorhandenen Terminalfenster geöffnet wird. Die Liste wird nicht mit anderen Terminalbefehlen gemischt und ausgegeben. Drücken Sie 'q', um zur Eingabeaufforderung des Terminals zurückzukehren. Siehe "Mann weniger" für weitere Informationen.

dpkg -l | less

So überprüfen Sie, ob ein Paket installiert ist:

dpkg -l {package_name}
dpkg -l vlc

So prüfen Sie, ob das Paket installiert ist oder nicht (z. B. vlc). Falls installiert, starten Sie das Paket:

dpkg -l | grep vlc

Zeigen Sie den Speicherort an, an dem das Paket installiert ist. Das "-S" (Hauptstadt S) steht für "Suche"

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

So verwenden Sie Grep zum Suchen:

dpkg -l | grep {keywords}
dpkg -l | grep pdf
Babin Lonston
quelle
1
Was ist der Unterschied zwischen diesem und dpkg-query -l "Paketname"
heypaleblue
4
Nicht auf dem Exit - Code abhängen dpkg -l packagename, wie es mit einem 0 Exit - Code selbst wenn das Paket nicht vollständig installiert zurückkehren könnte - siehe: github.com/bitrise-io/bitrise/issues/433
Viktor Benei
dpkg -l | cut -d " " -f 3 | grep "^vlc"um alle Paketnamen vlc
anzuzeigen
Zu Ihrer Information, dies funktioniert nicht für Metapakete, da sie nicht direkt mit einem dpkg korrelieren. Ihre Antwort beantwortet jedoch die gestellte Frage.
Mtalexan
34

Verwenden dpkg

Dieser Befehl ist der Debian-Paketmanager.

Sie können alle installierten Pakete mit auflisten

dpkg -l

Sie können Details für ein bestimmtes Paket mit anzeigen

dpkg -p packagename

Und um zu erfahren, ob es installiert ist, verwenden Sie

dpkg -s packagename | grep Status

Sie können lernen, welches Paket die gewünschte Software enthält

apt-cache search name*  

In Ihrem Fall sollten Sie diesen Befehl verwenden, um den gewünschten Paketnamen zu suchen

apt-cache search virtual machine host 
onurbekiroglu
quelle
29

apt -qq list PACKAGE kann auch verwendet werden, um zu überprüfen, ob das PAKET installiert ist.

Wenn installiert, gibt es so etwas wie (mit [installed]am Ende der Zeile) aus:

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

Wenn nicht installiert, wird folgende Ausgabe ausgegeben:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all
Viktor Benei
quelle
1
Sie können am Ende des Paketnamens einen Stern für einen Platzhalter setzen.
Brannon
3
Sie können für diesen Befehl auch die Option --installed verwenden, um die Anzahl der tatsächlich installierten Übereinstimmungen zu beschränken.
Mtalexan
2
Wofür ist das -qq? Es scheint identisch zu funktionieren, und diese Option ist nicht im Handbuchman apt
Gabriel Staples
3
@ GabrielStaples Es sieht so aus, als ob der apt listBefehl noch nicht vollständig dokumentiert ist. Einige schnelle Tests am 16.04 scheinen darauf hinzudeuten, dass dies -qein Synonym für --quietOption ist. Das erste -qverhindert, dass das Wort "Fertig" gedruckt wird. Die zweite verhindert auch, dass "Listing ..." gedruckt wird.
Anthony Geoghegan
14

Ich habe eine Möglichkeit gefunden, die Paketinstallation nur mit dem Befehl dpkg-query und ohne Pipes zu überprüfen.

Ich habe nach einer solchen Lösung gesucht, als ich eine Aufgabe für ein lesbares Spielbuch geschrieben habe.

Also kannst du so etwas machen:

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

Dies ist nur ein anderer Weg, um die Sache zu tun.

DenKoren
quelle
Rohre in ansible kann mit verwendet werden shellModul.
Sjas
4

Ich schreibe eine neue Antwort, da Tasksel 'Aufgabennamen' NICHT in dpkgoder aptAbfragen angezeigt wird . Das heißt, die anderen Antworten sind unvollständig (oder falsch).

"Ich kann mich nicht erinnern, ob ich das Kontrollkästchen" Host der virtuellen Maschine "aktiviert habe."

Überprüfen Sie nach dem erneuten Ausführen, ob ein Sternchen neben dem Namen vorhanden ist sudo tasksel.
(oder ein ' i ' wenn läuft tasksel --list-tasks).

Wenn Sie dies nicht sehen, ist das 'tasksel - Metapaket' wahrscheinlich nicht installiert.


"..Wie überprüfe ich, ob mein Server die entsprechenden Pakete hat?"

Wenn Sie herausfinden möchten, was unter dem Metapaket Virtual Machine Host tasksel installiert ist, gehen Sie wie folgt vor:

tasksel --list-tasks

(in deinem fall tasksel --list-tasks | grep virtreicht das)

Dies gibt die richtige Aufgabe Namen und eine Angabe darüber, ob es installiert ist.

In Ihrem Fall lautet dieser Tasksel-Name virt-host.


"Welche Pakete sind im Host der virtuellen Maschine enthalten?"

Suchen Sie im letzten Befehl den Tasknamen tasksel.
Dies wird für den nächsten Befehl benötigt:

tasksel --task-packages virt-host

Dies listet das einzelne Tasksel-Metapaket (gekennzeichnet durch das angehängte '^') auf, aus dem der Name besteht.
In deinem Fall ist es virt-host^.

Sobald Sie den richtigen Metanamen gefunden haben, können Sie apt verwenden:

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

(oder apt-cache show ...wenn apt shownicht funktioniert.)

Daraufhin werden alle Pakete angezeigt, aus denen das angegebene Metapaket besteht.

Dann:

 dpkg -l {each individual pkg name listed above}

Dies teilt Ihnen mit, ob das einzelne Paket installiert / deinstalliert wurde (mit dem 2. Buchstaben: "i" bedeutet "installiert"). Tun Sie dies für alle Pakete, die unter dem Paket task / meta aufgeführt sind.

Dies sollte die ursprünglichen Fragen beantworten.

Anmerkung: /usr/share/tasksel/descs/ubuntu-tasks.desc enthält auch Beschreibungen der Tasksel-Metapakete. Wenn Sie: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descEs wird der richtige APT-Metapaketname angezeigt. (In deinem Fall ist das ubuntu-virt-server). Sie können auch aptBefehle mit diesem Metanamen verwenden.

Wenn Sie Tasksel-Pakete entfernen möchten, gerät dies etwas ins Unkraut. Bitte konsultieren Sie https://askubuntu.com/a/88897/169878 oder eine beliebige Anzahl anderer Antworten.

Bitte beachten Sie, dass "Meta" -Pakete nicht mit den Tasksel-Paketnamen übereinstimmen. Weitere Informationen finden Sie auf der Tasksel-Community-Seite .

bshea
quelle
1
Beide Fragen werden richtig beantwortet. Wenn Sie dagegen stimmen, geben Sie einen Grund an oder sagen Sie mir, warum dies nicht der Fall ist.
bshea
3

Verwenden Sie tasksel ( sudo apt-get install taskselfalls Sie es noch nicht haben) und führen Sie es aus tasksel --list-tasks.

tasksel druckt eine Liste der Aufgaben aus, und ineben jeder installierten Aufgabe und uneben jeder nicht installierten Aufgabe befindet sich eine.

Wenn Sie den Task installieren möchten, verwenden Sie tasksel install <task>. Der Name der gesuchten Aufgabe lautet virt-host.

Die Software-Auswahlelemente werden als "Aufgaben" bezeichnet.

Blake R
quelle
Vielen Dank, dass Sie mir den Namen der Aufgabe mitgeteilt haben. Dies war eines meiner Probleme. Wir waren uns nicht sicher, nach welchem ​​Paket wir suchen sollten.
D.Zou
2

Wenn jemand interessiert ist, habe ich ein kleines Skript erstellt, mit dem Sie automatisch aus einer Liste von Paketen oder Anwendungen installieren oder einfach überprüfen können, ob sie bereits installiert sind:

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

Hoffe es hilft jemandem.

Claudio Taccogna
quelle
2

Einfachere Lösung:

Es gibt jetzt einen apt listBefehl, der installierte Pakete auflistet. Sie können auch mit nach einem bestimmten Paket suchen

apt list <package>

Siehe man aptfür weitere Informationen. Wenn Sie den genauen Paketnamen nicht kennen, können Sie einen apt searchTeil davon verwenden, um eine Liste verwandter Pakete anzuzeigen.

sk8forether
quelle