dpkg -s
программное использование с автоматической установкой
Мне нравится, dpkg -s
как он выходит со статусом, 1
если какой-либо из пакетов не установлен, что позволяет легко автоматизировать:
pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
man dpkg
К сожалению, не документирует статус выхода, но я думаю, что на него следует полагаться в достаточной степени:
-s, --status package-name...
Report status of specified package.
Стоит отметить, что работает:
sudo apt remove <package-name>
не обязательно сразу удаляет все файлы для некоторых пакетов (но делает для других, не уверен почему?), а просто помечает пакет для удаления.
В этом состоянии пакет, по-видимому, все еще пригоден для использования, и поскольку его файлы все еще присутствуют, но он помечен для удаления позже.
Например, если вы запустите:
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
затем:
первые два echo $?
выхода 0
, только третий выводит1
вывод для первого dpkg -s certbot
содержит:
Status: deinstall ok installed
в то время как второй говорит:
Status: deinstall ok config-files
и он исчезает только после чистки:
dpkg-query: package 'certbot' is not installed and no information is available
файл /etc/logrotate.d/certbot
все еще присутствует в системе после apt remove
, но не после --purge
.
Тем не менее, файл /usr/lib/python3/dist-packages/certbot/reporter.py
все еще присутствует даже после --purge
.
Я не понимаю, почему, но с hello
пакетом второй dpkg
после apt remove
показывает, что он уже был удален без --purge
:
dpkg-query: package 'hello' is not installed and no information is available
Документация также очень неясна, например:
sudo apt dselect-upgrade
не удаляется, certbot
когда он помечен как deinstall
, хотя, man apt-get
кажется, указывает, что:
dselect-upgrade
используется в сочетании с традиционной оболочкой Debian, dselect (1). dselect-upgrade следует изменениям, внесенным dselect (1) в поле «Состояние» доступных пакетов, и выполняет действия, необходимые для реализации этого состояния (например, удаление старых и установка новых пакетов).
Смотрите также:
Проверено на Ubuntu 19.10.
apt
Пакет Python
В apt
Ubuntu 18.04 есть предустановленный пакет Python 3, который предоставляет интерфейс Python apt!
Сценарий, который проверяет, установлен ли пакет, и устанавливает его, если его нет, по адресу: Как установить пакет с помощью API python-apt
Вот копия для справки:
#!/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))
Проверьте, находится ли исполняемый файл PATH
вместо
Смотрите: Как я могу проверить, существует ли программа из Bash-скрипта?