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पारंपरिक डेबियन पैकेजिंग फ्रंट-एंड, डेसेलेक्ट (1) के साथ संयोजन में उपयोग किया जाता है। dselect-upgrade उपलब्ध संकुल के स्थिति क्षेत्र में dselect (1) द्वारा किए गए परिवर्तनों का अनुसरण करता है, और उस स्थिति को महसूस करने के लिए आवश्यक क्रिया करता है (उदाहरण के लिए, पुराने को हटाने और नए पैकेजों की स्थापना)।
यह सभी देखें:
उबंटू 19.10 पर परीक्षण किया गया।
अजगर का aptपैकेज
एक पूर्व-स्थापित पायथन 3 पैकेज है जिसे aptउबंटू 18.04 में बुलाया गया है जो पायथन एप्ट इंटरफेस को उजागर करता है!
एक स्क्रिप्ट जो चेक करती है कि क्या पैकेज स्थापित है और इसे स्थापित किया गया है यदि नहीं देखा जा सकता है: अजगर-एप एपीआई का उपयोग करके पैकेज कैसे स्थापित करें
यहाँ संदर्भ के लिए एक प्रति है:
#!/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इसके बजाय है
देखें: यदि कोई प्रोग्राम बैश स्क्रिप्ट से मौजूद है तो मैं कैसे जांच सकता हूं?