अगर डेबियन में पैकेज मौजूद है तो बैश से कैसे चेक करें


12

मैं एक इंस्टॉलेशन बैश स्क्रिप्ट लिखना चाहूंगा, जहां मैं MySQL सर्वर स्थापित करना चाहूंगा।

लिनक्स टकसाल पर मैंने कोड का पालन किया था:

apt-get -y --force-yes install mysql-server-5.6

लेकिन मैंने नया डेबियन 8 स्थापित किया है और कोई नहीं है mysql-server- इसके बजाय वहाँ है mariadb

अगर पैकेज मौजूद है तो मुझे कैसे पता चलेगा?

मुझे सिर्फ इतना पता है dpkg -sकि एक पैकेज स्थापित है या नहीं यह बताना चाहिए।


3
--force-yesसभी सुरक्षा को निष्क्रिय कर देता है, इसलिए आप वास्तव में बिना किसी मरम्मत के अपने सिस्टम को तोड़ सकते हैं। इसके अलावा: --force-yesओवरराइड (निष्क्रिय) -y। जहां बाद वाला विकल्प का विकल्प हो सकता है: एक लंबा रूप -yहै --assume-yes, और यही वह करता है; यह कहकर हाँ कि जब तक यह वास्तव में बदसूरत न हो जाए, मूल तत्वों, बुनियादी बातों, आदि के बीच कहर --force
बरपाने ​​से

परिशिष्ट: आप के लिए --simulateविकल्प में रुचि हो सकती apt-getहै --dry-run, एक करने के लिए , बस मामले में
erch

1
बस स्पष्ट करने के लिए: आप यह पता लगाना चाहते हैं कि क्या पैकेज किसी भी रिपॉजिटरी में है जो /etc/apt/sources.listसही में परिभाषित है ?
wullxz

नोट वहाँ वास्तव में डेबियन 8 में एक mysql सर्वर पैकेज, MariaDB के साथ है: packages.debian.org/jessie/mysql-server
दान Getz

जवाबों:


13

(नीचे उबंटू से है, लेकिन एक ही तकनीक स्पष्ट रूप से डेबियन पर भी काम करती है)

$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Axel Beckert <abe@debian.org>
Architecture: amd64
Version: 4.1.0~20120320gitdb59704-9
Depends: libc6 (>= 2.15), libpam0g (>= 0.99.7.1), libtinfo5
Suggests: iselect (>= 1.4.0-1) | screenie | byobu
Filename: pool/main/s/screen/screen_4.1.0~20120320gitdb59704-9_amd64.deb
Size: 645730
...

यदि पैकेज मौजूद है, तो जानकारी प्रदर्शित की जाएगी। यदि नहीं, तो आप कुछ इस तरह देखेंगे:

$ apt-cache show foobar
N: Unable to locate package foobar
E: No packages found

इसके अतिरिक्त, apt-cacheयदि कोई मिलान पैकेज नहीं मिलता है , तो बाहर निकलने का कोड गैर-शून्य होगा।

अतिरिक्त नोट: यदि आप उपयोग कर रहे हैं apt-cache show packageजहां पैकेज एक आभासी है (जो मौजूद नहीं है, लेकिन उदाहरण के लिए, अन्य पैकेजों द्वारा संदर्भित), तो आपको मिलेगा:

N: Can't select versions from package 'package' as it is purely virtual
N: No packages found

यह exit codeशून्य है (जो मेरी राय में थोड़ा भ्रामक है)


3
सिर्फ इस जवाब को पूरा करने के: आप भी से परिभाषित खजाने को खोज सकते हैं sources.listइस आदेश के साथ: apt-cache search *searchstring*। यह कमांड पैकेजों का विवरण भी खोजेगा और आपको उन पैकेजों को खोजने में मदद कर सकता है, जहां आपको सटीक पैकेज का नाम नहीं पता है।
wullxz

1
@wullxz, केवल apt-cache search ...किसी भी तरह के मैच और ऐप लौटाता है। रिटर्न 0 भले ही कुछ न मिले, जो बैश स्क्रिप्ट में व्यावहारिक नहीं है।
एलेक्सिस विल्के

4

मैं उपयोग करूंगा dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"

यह जांच करेगा कि क्या mysql-serverपैकेज स्थापित है और यदि हां, तो यह इस तथ्य को स्क्रीन पर प्रिंट करता है। एक और अधिक परिष्कृत समाधान, बैश (अप्रयुक्त) में होगा:

function package_exists() {
    return dpkg -l "$1" &> /dev/null
}

तो एक स्क्रिप्ट में कर सकते हैं:

if ! package_exists mysql-server ; then
    echo Please install mysql-server!"
fi

5
मुझे लगता है कि वह जानना चाहता है कि क्या पैकेज मौजूद है या नहीं, अगर यह पहले से ही स्थानीय मशीन पर स्थापित है ...
wullxz

0

एक-लाइनर में:

apt-cache pkgnames | grep -q "\<$your_package_name\>"

0 के साथ बाहर निकलता है अगर यह मौजूद है, तो 1 नहीं।

बोनस: कई पैकेजों के लिए कुशल जांच, फ़ाइल "पैकेज_वे_वैंट" में सूचीबद्ध, प्रति पंक्ति एक, के साथ क्रमबद्ध sort:

apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_wantउन सभी पैकेजों को सूचीबद्ध करता है जो आप चाहते हैं, लेकिन रिपॉजिटरी में मौजूद नहीं हैं।

apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want उन सभी पैकेजों को सूचीबद्ध करता है जो आप चाहते हैं और रिपॉजिटरी में मौजूद हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.