dpkg -s penggunaan terprogram dengan instalasi otomatis
Saya suka dpkg -sketika keluar dengan status 1jika salah satu paket tidak diinstal, membuatnya mudah untuk diotomatisasi:
pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
man dpkg sayangnya tidak mendokumentasikan status keluar, tapi saya pikir seharusnya cukup aman untuk mengandalkannya:
-s, --status package-name...
Report status of specified package.
Satu hal yang perlu diperhatikan adalah menjalankan:
sudo apt remove <package-name>
tidak harus langsung menghapus semua file untuk beberapa paket (tetapi untuk yang lain, tidak yakin mengapa?), dan hanya menandai paket untuk dihapus.
Dalam keadaan ini, paket tampaknya masih dapat digunakan, dan karena file-nya masih ada, tetapi ditandai untuk dihapus nanti.
Misalnya jika Anda menjalankan:
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
kemudian:
dua echo $?output pertama 0, hanya yang ketiga output1
output untuk yang pertama dpkg -s certbotberisi:
Status: deinstall ok installed
sedangkan yang kedua mengatakan:
Status: deinstall ok config-files
dan itu hanya hilang setelah pembersihan:
dpkg-query: package 'certbot' is not installed and no information is available
file /etc/logrotate.d/certbotmasih ada di sistem setelah apt remove, tetapi tidak setelah --purge.
Namun, file /usr/lib/python3/dist-packages/certbot/reporter.pytersebut tetap ada bahkan setelahnya --purge.
Saya tidak mengerti mengapa, tetapi dengan hellopaket yang kedua dpkgsetelah apt removemenunjukkan bahwa paket dia telah dihapus tanpa --purge:
dpkg-query: package 'hello' is not installed and no information is available
Dokumentasi juga sangat tidak jelas, misalnya:
sudo apt dselect-upgrade
tidak menghapus certbotketika itu ditandai deinstall, meskipun man apt-gettampaknya menunjukkan bahwa:
dselect-upgradedigunakan bersama dengan front-end packaging tradisional Debian, dselect (1). dselect-upgrade mengikuti perubahan yang dilakukan oleh dselect (1) ke bidang Status paket yang tersedia, dan melakukan tindakan yang diperlukan untuk mewujudkan keadaan itu (misalnya, penghapusan yang lama dan pemasangan paket baru).
Lihat juga:
Diuji pada Ubuntu 19.10.
aptPaket python
Ada paket Python 3 pra-instal yang disebut aptdi Ubuntu 18.04 yang memperlihatkan antarmuka Python apt!
Sebuah skrip yang memeriksa apakah sebuah paket diinstal dan menginstalnya jika tidak dapat dilihat di: Cara menginstal paket menggunakan API python-apt
Berikut ini adalah salinan untuk referensi:
#!/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))
Periksa apakah executable PATHsebagai gantinya
Lihat: Bagaimana saya bisa memeriksa apakah ada program dari skrip Bash?