dpkg -s programowe użycie z automatyczną instalacją
Podoba mi się, dpkg -sgdy kończy pracę ze statusem, 1jeśli którykolwiek z pakietów nie jest zainstalowany, co ułatwia automatyzację:
pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
man dpkg nie dokumentuje niestety statusu wyjścia, ale myślę, że należy na nim polegać:
-s, --status package-name...
Report status of specified package.
Należy zauważyć, że bieganie:
sudo apt remove <package-name>
niekoniecznie natychmiast usuwa wszystkie pliki dla niektórych pakietów (ale robi to dla innych, nie wiesz dlaczego?) i po prostu zaznacza pakiet do usunięcia.
W tym stanie pakiet wydaje się być nadal użyteczny, a ponieważ jego pliki są nadal obecne, ale jest oznaczony do późniejszego usunięcia.
Na przykład, jeśli uruchomisz:
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
następnie:
pierwsze dwa echo $?wyjścia 0, tylko trzeci1
wynik pierwszego dpkg -s certbotzawiera:
Status: deinstall ok installed
podczas gdy drugi mówi:
Status: deinstall ok config-files
i znika dopiero po wyczyszczeniu:
dpkg-query: package 'certbot' is not installed and no information is available
plik /etc/logrotate.d/certbotjest nadal obecny w systemie po apt remove, ale nie później --purge.
Jednak plik /usr/lib/python3/dist-packages/certbot/reporter.pyjest nadal obecny, nawet po --purge.
Nie rozumiem dlaczego, ale z hellopakietem drugi dpkgpo apt removepokazuje, że pakiet został już usunięty bez --purge:
dpkg-query: package 'hello' is not installed and no information is available
Dokumentacje są również bardzo niejasne, np .:
sudo apt dselect-upgrade
nie usunął, certbotgdy został oznaczony jako deinstall, mimo że man apt-getwydaje się wskazywać, że:
dselect-upgradejest używany w połączeniu z tradycyjnym interfejsem Debiana, dselect (1). dselect-upgrade śledzi zmiany wprowadzone przez dselect (1) w polu Status dostępnych pakietów i wykonuje działania niezbędne do realizacji tego stanu (na przykład usunięcie starych i instalacja nowych pakietów).
Zobacz też:
Testowane na Ubuntu 19.10.
aptPakiet Python
W aptUbuntu 18.04 znajduje się preinstalowany pakiet Python 3, który udostępnia interfejs apt Python!
Skrypt sprawdzający, czy pakiet jest zainstalowany i instaluje go, jeśli nie, można go zobaczyć pod adresem: Jak zainstalować pakiet za pomocą interfejsu API python-apt
Oto kopia w celach informacyjnych:
#!/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))
Sprawdź, czy PATHzamiast niego znajduje się plik wykonywalny
Zobacz: Jak mogę sprawdzić, czy program istnieje ze skryptu Bash?