dpkg -s
programowe użycie z automatyczną instalacją
Podoba mi się, dpkg -s
gdy kończy pracę ze statusem, 1
jeś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 certbot
zawiera:
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/certbot
jest nadal obecny w systemie po apt remove
, ale nie później --purge
.
Jednak plik /usr/lib/python3/dist-packages/certbot/reporter.py
jest nadal obecny, nawet po --purge
.
Nie rozumiem dlaczego, ale z hello
pakietem drugi dpkg
po apt remove
pokazuje, ż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ął, certbot
gdy został oznaczony jako deinstall
, mimo że man apt-get
wydaje się wskazywać, że:
dselect-upgrade
jest 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.
apt
Pakiet Python
W apt
Ubuntu 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 PATH
zamiast niego znajduje się plik wykonywalny
Zobacz: Jak mogę sprawdzić, czy program istnieje ze skryptu Bash?