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
มีแพ็คเกจ Python 3 ที่ติดตั้งไว้แล้วซึ่งเรียกว่าapt
ใน Ubuntu 18.04 ซึ่งแสดงถึงอินเทอร์เฟซ Python apt!
สคริปต์ที่ตรวจสอบว่ามีการติดตั้งแพคเกจและติดตั้งหรือไม่หากไม่สามารถดูได้ที่: วิธีการติดตั้งแพคเกจโดยใช้ python-apt API
นี่คือสำเนาสำหรับการอ้างอิง:
#!/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 หรือไม่