dpkg -s
penggunaan terprogram dengan instalasi otomatis
Saya suka dpkg -s
ketika keluar dengan status 1
jika 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 certbot
berisi:
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/certbot
masih ada di sistem setelah apt remove
, tetapi tidak setelah --purge
.
Namun, file /usr/lib/python3/dist-packages/certbot/reporter.py
tersebut tetap ada bahkan setelahnya --purge
.
Saya tidak mengerti mengapa, tetapi dengan hello
paket yang kedua dpkg
setelah apt remove
menunjukkan 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 certbot
ketika itu ditandai deinstall
, meskipun man apt-get
tampaknya menunjukkan bahwa:
dselect-upgrade
digunakan 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.
apt
Paket python
Ada paket Python 3 pra-instal yang disebut apt
di 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 PATH
sebagai gantinya
Lihat: Bagaimana saya bisa memeriksa apakah ada program dari skrip Bash?