dpkg -s
programmatische Nutzung mit automatischer Installation
Ich mag dpkg -s
es, 1
wenn es mit dem Status beendet wird, wenn eines der Pakete nicht installiert ist, was die Automatisierung vereinfacht:
pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
man dpkg
dokumentiert den Exit-Status leider nicht, aber ich denke, es sollte einigermaßen sicher sein, sich darauf zu verlassen:
-s, --status package-name...
Report status of specified package.
Eine Sache zu beachten ist, dass Laufen:
sudo apt remove <package-name>
entfernt nicht unbedingt alle Dateien sofort für einige Pakete (aber für andere, nicht sicher warum?) und markiert nur das Paket zum Entfernen.
In diesem Zustand scheint das Paket weiterhin verwendbar zu sein und da seine Dateien noch vorhanden sind, wird es jedoch zum späteren Entfernen markiert.
Zum Beispiel, wenn Sie ausführen:
pkg=certbot
sudo apt install -y "$pkg"
dpkg -s "$pkg"
echo $?
sudo apt remove -y "$pkg"
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py
sudo apt remove --purge certbot
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py
dann:
die ersten beiden echo $?
geben aus 0
, nur die dritte gibt aus1
Die Ausgabe für die erste dpkg -s certbot
enthält:
Status: deinstall ok installed
während der zweite sagt:
Status: deinstall ok config-files
und es verschwindet erst nach der Säuberung:
dpkg-query: package 'certbot' is not installed and no information is available
Die Datei /etc/logrotate.d/certbot
ist nach apt remove
, aber nicht nach dem System noch vorhanden --purge
.
Die Datei /usr/lib/python3/dist-packages/certbot/reporter.py
ist jedoch auch danach noch vorhanden --purge
.
Ich verstehe nicht warum, aber mit dem hello
Paket zeigt das zweite dpkg
nach apt remove
, dass das Paket bereits entfernt wurde ohne --purge
:
dpkg-query: package 'hello' is not installed and no information is available
Die Dokumentationen sind auch sehr unklar, zB:
sudo apt dselect-upgrade
wurde nicht entfernt, certbot
als es als markiert wurde deinstall
, obwohl dies man apt-get
darauf hinzudeuten scheint:
dselect-upgrade
wird in Verbindung mit dem traditionellen Debian-Verpackungs-Frontend dselect (1) verwendet. dselect-upgrade folgt den Änderungen, die dselect (1) im Feld Status der verfügbaren Pakete vorgenommen hat, und führt die zur Realisierung dieses Status erforderlichen Aktionen aus (z. B. Entfernen alter und Installation neuer Pakete).
Siehe auch:
Getestet unter Ubuntu 19.10.
Python- apt
Paket
apt
In Ubuntu 18.04 gibt es ein vorinstalliertes Python 3-Paket , das eine Python-Apt-Oberfläche verfügbar macht!
Ein Skript, das prüft, ob ein Paket installiert ist, und es installiert, wenn nicht, finden Sie unter: So installieren Sie ein Paket mithilfe der Python-Apt-API
Hier ist eine Kopie als Referenz:
#!/usr/bin/env python
# aptinstall.py
import apt
import sys
pkg_name = "libjs-yui-doc"
cache = apt.cache.Cache()
cache.update()
cache.open()
pkg = cache[pkg_name]
if pkg.is_installed:
print "{pkg_name} already installed".format(pkg_name=pkg_name)
else:
pkg.mark_install()
try:
cache.commit()
except Exception, arg:
print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg))
Überprüfen Sie PATH
stattdessen, ob eine ausführbare Datei vorhanden ist
Siehe: Wie kann ich anhand eines Bash-Skripts überprüfen, ob ein Programm vorhanden ist?