dpkg -s
sử dụng chương trình với cài đặt tự động
Tôi thích dpkg -s
vì nó thoát với trạng thái 1
nếu bất kỳ gói nào không được cài đặt, giúp dễ dàng tự động hóa:
pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
man dpkg
không may ghi lại trạng thái thoát, nhưng tôi nghĩ nó nên an toàn một cách hợp lý để dựa vào nó:
-s, --status package-name...
Report status of specified package.
Một điều cần lưu ý là chạy:
sudo apt remove <package-name>
không nhất thiết phải xóa tất cả các tệp ngay lập tức đối với một số gói (nhưng đối với các gói khác, không biết tại sao?) và chỉ đánh dấu gói để xóa.
Ở trạng thái này, gói dường như vẫn có thể sử dụng được và vì các tệp của nó vẫn còn, nhưng nó được đánh dấu để xóa sau này.
Ví dụ: nếu bạn chạy:
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
sau đó:
hai echo $?
đầu ra đầu tiên 0
, chỉ đầu ra thứ ba1
đầu ra cho lần đầu tiên dpkg -s certbot
chứa:
Status: deinstall ok installed
trong khi người thứ hai nói:
Status: deinstall ok config-files
và nó chỉ biến mất sau khi thanh trừng:
dpkg-query: package 'certbot' is not installed and no information is available
tập tin /etc/logrotate.d/certbot
vẫn còn trong hệ thống sau apt remove
, nhưng không phải sau đó --purge
.
Tuy nhiên, tập tin /usr/lib/python3/dist-packages/certbot/reporter.py
vẫn có mặt ngay cả sau đó --purge
.
Tôi không hiểu tại sao, nhưng với hello
gói thứ hai dpkg
sau apt remove
đó cho thấy gói đó đã bị xóa mà không có --purge
:
dpkg-query: package 'hello' is not installed and no information is available
Các tài liệu cũng rất không rõ ràng, ví dụ:
sudo apt dselect-upgrade
đã không xóa certbot
khi được đánh dấu là deinstall
, mặc dù man apt-get
dường như chỉ ra rằng:
dselect-upgrade
được sử dụng cùng với giao diện đóng gói Debian truyền thống, dselect (1). nâng cấp DSelect theo các thay đổi được thực hiện bởi dselect (1) đối với trường Trạng thái của các gói có sẵn và thực hiện các hành động cần thiết để nhận ra trạng thái đó (ví dụ: loại bỏ gói cũ và cài đặt gói mới).
Xem thêm:
Đã thử nghiệm trên Ubuntu 19.10.
apt
Gói Python
Có một gói Python 3 được cài đặt sẵn có tên apt
trong Ubuntu 18.04, cho thấy giao diện Python apt!
Tập lệnh kiểm tra xem một gói đã được cài đặt và cài đặt chưa nếu không thể xem tại: Cách cài đặt gói bằng API python-apt
Đây là một bản sao để tham khảo:
#!/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))
Kiểm tra xem một thực thi là trong PATH
thay thế
Xem: Làm cách nào để kiểm tra xem chương trình có tồn tại từ tập lệnh Bash không?