sudo apt-get remove ^k3bइसके बजाय उपयोग करें । जब आप पैकेज स्थापित या हटाते हैं, *तो अक्सर खतरनाक होता है और शायद ही कभी इसकी आवश्यकता होती है। यदि आप उपयोग करते हैं *, तो आपको इसे उद्धृत करना चाहिए, लेकिन यह इसे अधिक सुरक्षित नहीं बनाता है, क्योंकि इसका इरादा आप की तुलना में कहीं अधिक संकुल का चयन करने का तरीका है aptऔर apt-getइसका अर्थ है कि व्याख्या करना और पथनाम विस्तार का प्रभाव नहीं ।
- यहां तक कि के सुरक्षित उपयोग करता
* हैं अक्सर अनावश्यक ।
- असुरक्षित उपयोग क्रूर हैं । हटाने से
k3b*हर पैकेज को हटा दिया जाता है जिसमें k3 कहीं भी उसका नाम हो (और हर पैकेज जो ऐसे पैकेज पर निर्भर करता है)। यह एक टाइपो नहीं k3है, जिसमें पर्याप्त है, यहां तक कि बिना भी b, क्योंकि b*इसका मतलब है "शून्य या अधिक bएस।"
आप समाप्त हो जाता है aptया apt-getके साथ install, removeया purgeकार्रवाई, प्रत्येक अनुवर्ती तर्क पहला है 1 एक व्यक्ति पैकेज के नाम के रूप में व्याख्या की। यदि उस सटीक नाम वाला पैकेज मौजूद है, तो इसके लिए कार्रवाई की जाती है।
अगर ऐसी कोई पैकेज है, aptऔर apt-getतर्क आम के किसी भी शामिल करता है, तो जाँच करेगा नियमित अभिव्यक्ति अक्षरों से परे 2 . , ?, +,* , |, \[, ^, या$ । यदि नहीं, तो यह हो गया है - कोई पैकेज नहीं मिला।
यह तो है उन अक्षर शामिल है, तो यह एक नियमित अभिव्यक्ति के रूप में इलाज और के खिलाफ मिलान किया जाता है किसी भी भाग किसी भी पैकेज नाम की। यह पूरे नाम से मेल नहीं खाता है। जैसा कि दूसरों ने कहा है, *एक नियमित अभिव्यक्ति *में एक ग्लोब की तरह एक ही चीज का मतलब नहीं है । ?या तो नहीं है। एक नियमित अभिव्यक्ति में:
*पिछले आइटम को किसी भी समय प्रदर्शित करने की अनुमति देता है - केवल एक बार या बिल्कुल नहीं - केवल एक बार के बजाय।
?पिछले आइटम को वैकल्पिक बनाता है - यह क्या है, यह इसे शून्य या एक बार प्रदर्शित करने की अनुमति देता है।
apt-get (8) ( man apt-get) कहता है:
यदि कोई पैकेज दी गई अभिव्यक्ति से मेल नहीं खाता है और अभिव्यक्ति में ',', '?' या '*' तब इसे POSIX नियमित अभिव्यक्ति माना जाता है, और इसे डेटाबेस में सभी पैकेज नामों पर लागू किया जाता है। किसी भी मैच को तब स्थापित किया जाता है (या हटाया जाता है)। ध्यान दें कि मैचिंग 'लो * के विकल्प द्वारा की जाती है।' कैसे-लो 'और' निम्नतम 'से मेल खाता है। यदि यह अवांछित है, तो '^' या '$' वर्ण के साथ नियमित अभिव्यक्ति को एंकर करें, या अधिक विशिष्ट नियमित अभिव्यक्ति बनाएं।
मैनपेज केवल उल्लेख है ., ?और *है, लेकिन यह अधूरा है , के रूप में +, |, [, ^, और $भी जाने के लिए पर्याप्त हैं apt-getया aptएक नियमित अभिव्यक्ति के रूप में पैटर्न की व्याख्या। 3
यद्यपि आप किसी भी वर्ण के किसी भी संख्या के साथ मेल कर सकते हैं .*- न केवल - बल्कि आपको* इसकी आवश्यकता है यदि यह आपकी नियमित अभिव्यक्ति के बीच में दिखाई देगा । क्योंकि पैटर्न पैकेज के किसी भी नाम के विकल्प के साथ मेल खाता है, यह पैटर्न के अंत (या शुरुआत) में व्यर्थ है।
मैनपेज का उल्लेख है ^और$ । ये (विशेष रूप से ^) के साथ उपयोग के लिए सुरक्षित, कुशल पैटर्न लेखन के लिए महत्वपूर्ण हैं install, removeया purgeमें कार्रवाई aptया apt-get।
^पूरे स्ट्रिंग की शुरुआत के लिए एक नियमित अभिव्यक्ति लंगर । ^k3bउन सभी पैकेजों का चयन करता है जिनके नाम से शुरू होता है k3b।
$पूरे स्ट्रिंग के अंत तक एक नियमित अभिव्यक्ति लंगर । k3b$उन सभी पैकेजों का चयन करेगा जिनके नाम के साथ समाप्त होता है k3b।
इसलिए आप संकुल को सुरक्षित रूप से हटाने के लिए इस कमांड का उपयोग कर सकते हैं:
sudo apt-get remove ^k3b
अंत में, आपके द्वारा बताए गए विशिष्ट मामले में, आप दोनों नामों को स्वयं पास कर सकते हैं:
sudo apt-get remove k3b k3b-data
तब आप इस सारी जटिलता से बच जाते हैं! (हालांकि इसके साथ ^उपयोग करने के बाद एंकरिंग करना सरल है।) या ब्रेस विस्तार का उपयोग करें , जो आपके शेल को उपरोक्त कमांड में विस्तारित करता है:
sudo apt-get remove k3b{,-data}
1 इस के लिए दो अपवाद हैं: (क) कुछ विकल्प (जैसे, -f, --purge) पहचाने जाते हैं, और (ख) कुछ विराम चिह्न पर प्रदर्शित होने के पात्रों अंत एक तर्क है कि अन्यथा कार्रवाई करने के लिए किया जा सकता है एक पैकेज के नाम के लिया जाएगा की जो किया जाता है उसे बदलने के लिए उपयोग किया जाता है (उदाहरण के लिए, पैकेज के बजाय कार्य कोsudo apt install ubuntu-desktop^ स्थापित करता है , और जब अंत में प्रकट होता है)।^
2 अन्य नियमित अभिव्यक्ति रूपक मौजूद हैं। उदाहरण के लिए, \नियमित रूप से और आमतौर पर इस्तेमाल होने वाली सभी बोलियों द्वारा समर्थित है। ., ?, +, *, |, [, ^, और $सिर्फ अक्षरों से परे अपार्ट डेवलपर्स के लिए रेगुलर एक्सप्रेशन के रूप में व्याख्या ट्रिगर करेगा फैसला किया जा करने के लिए होता है (नाम एक सटीक पैकेज के रूप में संकल्प के बाद विफल हो गई है)।
3 यह सत्यापित करने का सबसे आसान तरीका -sऊपर वर्णित विकल्प का उपयोग करके इस तरह के पैटर्न के साथ स्थापना या हटाने का अनुकरण करना है। उदाहरण के लिए, रनिंग apt -s install ^virtualboxशो जिसमें sudo apt install ^virtualboxहर पैकेज को स्थापित करने के प्रयास का प्रभाव होता है, पैकेज मैनेजर को पता होता है कि किसका नाम किसके साथ शुरू होता है virtualbox। हालांकि, इस व्यवहार को स्रोत कोड की जांच करके भी सत्यापित किया जा सकता है । में CacheSetHelper::PackageFromRegExफ़ंक्शन की जाँच करें cacheset.cc।