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 หรือไม่