विभिन्न एपीटी पैकेज हटाने के आदेश कैसे भिन्न होते हैं?


17

इन आदेशों में क्या अंतर है?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove

जवाबों:


24

शीघ्र जवाब

  • remove इसके नाम पर संकुल का नाम रखा गया।
  • autoremoveसभी स्वचालित रूप से स्थापित किए गए पैकेजों की स्थापना करता है जिनकी अब आवश्यकता नहीं है। इसके बाद पैकेज के नामों को सूचीबद्ध करना गलत है autoremove; उनकी उपेक्षा की जाएगी (और सभी योग्य पैकेज हटा दिए जाएंगे), जो कि शायद आपका इरादा नहीं है।
  • --purgeसंकुल के साथ जुड़े सिस्टमव्यापी विन्यास फाइल को हटाने के साथ ही हटा दिया जाता है। यह एक कमांड के साथ होना चाहिए, जैसे कि removeया autoremove--purgeझंडा एक आदेश की कार्रवाई को संशोधित करता है; यह अपने आप कार्य नहीं करता है।
  • purgeका मतलब वही है --purge removeजो (जैसा है वही remove --purge)। purgeदो बार कहना गलत है ; दूसरे purgeको एक पैकेज के नाम के रूप में व्याख्या की purgeजाती है, जो कि संभवत: वह नहीं है जो आप चाहते हैं।

पूरा जवाब

यह समझने के लिए कि वे आदेश क्या करते हैं और वे कैसे भिन्न हैं, यह दो अवधारणाओं को समझने में मदद करता है (और शायद आवश्यक भी है):

  1. मैन्युअल रूप से स्थापित और स्वचालित रूप से स्थापित संकुल के बीच का अंतर
  2. एक पैकेज की पैकेज फ़ाइलों और इसके कॉन्फ़िगरेशन फ़ाइलों के बीच का अंतर

मैन्युअल रूप से स्थापित बनाम स्वचालित रूप से स्थापित

एक स्थापित पैकेज या तो मैन्युअल रूप से या स्वचालित रूप से स्थापित है।

जब आप स्थापना के लिए एक पैकेज निर्दिष्ट करते हैं, और यह स्थापित होता है, तो यह मैन्युअल रूप से स्थापित होता है।

लेकिन अन्य पैकेज भी स्थापित किए जा सकते हैं। अधिकांश पैकेजों में निर्भरताएं होती हैं - अन्य पैकेज जिन्हें स्थापित किया जाना चाहिए, उन पैकेजों के अनुसार काम करने के लिए। जब आप एक पैकेज स्थापित करते हैं, तो उसकी निर्भरताएं (यानी, उस पर निर्भर अन्य पैकेज) स्थापित होती हैं, केवल उन लोगों को छोड़कर जो पहले स्थापित किए गए थे।

जब एक पैकेज आपके द्वारा स्थापित किए जाने के लिए निर्दिष्ट नहीं किया जाता है, लेकिन इसके बजाय आपको स्थापित किए गए पैकेज की निर्भरता के रूप में स्थापित किया जाता है, तो यह स्वचालित रूप से स्थापित होता है।

कृपया ध्यान दें कि जब आपके पास दो पैकेज स्थापित हैं और उनमें से एक दूसरे की निर्भरता है, तो इसका मतलब यह नहीं है कि निर्भरता स्वचालित रूप से स्थापित है। यह भी संभव है कि निर्भरता मैन्युअल रूप से स्थापित की गई थी (यानी, आपके द्वारा निर्दिष्ट, उदाहरण के लिए, उस पैकेज के रूप में एक ही समय में या उस पर निर्भर होने से पहले स्थापित)।

आखिरकार:

  • यदि आप पहले से स्थापित पैकेज को मैन्युअल रूप से स्थापित करने का प्रयास करते हैं, तो यह स्थापित रहता है। लेकिन अगर यह स्वचालित रूप से स्थापित किया गया था, तो एक बदलाव किया जाता है - मैन्युअल रूप से स्थापित करने की कोशिश करना इसे मैन्युअल रूप से स्थापित के रूप में चिह्नित करेगा।
  • आप किसी भी पैकेज को मैन्युअल रूप से या स्वचालित रूप से स्थापित ( apt-markकमांड के साथ ) चिह्नित कर सकते हैं , इससे कोई फर्क नहीं पड़ता कि कैसे या किन परिस्थितियों में वे वास्तव में स्थापित थे।
  • आपके उबंटू सिस्टम के साथ प्रीइंस्टॉल्ड आने वाले पैकेज स्वचालित रूप से स्थापित नहीं होते हैं; उनमें से कुछ स्वचालित रूप से इंस्टॉल किए गए चिह्नित आते हैं और अन्य मैन्युअल रूप से इंस्टॉल किए गए चिह्नित आते हैं। यह मैन्युअल रूप से और स्वचालित रूप से स्थापित संकुल के बीच अंतर करने के पीछे के तर्क को संतुष्ट करना है - यह विचार कि कुछ पैकेज केवल दूसरों की सेवा में आवश्यक हैं।

आमतौर पर, प्रत्येक स्वचालित रूप से स्थापित पैकेज के लिए आपके पास कम से कम एक मैन्युअल रूप से स्थापित पैकेज होगा जो उस पर निर्भर करता है (और जिसके कारण यह स्वचालित रूप से स्थापित हो जाता है)। हालाँकि, यदि आप तब स्वचालित रूप से स्थापित पैकेज पर निर्भर सभी मैन्युअल रूप से स्थापित पैकेजों को हटा देते हैं, तो स्वचालित रूप से स्थापित पैकेज आवश्यक नहीं होगा, लेकिन फिर भी स्थापित किया जाएगा।

apt-get autoremove स्वचालित रूप से स्थापित संकुल को हटाता है जो अब उनके आधार पर कोई भी मैन्युअल रूप से संस्थापित संकुल नहीं है।

पैकेज फ़ाइलें और कॉन्फ़िगरेशन फ़ाइलें

एक पैकेज उन फ़ाइलों को प्रदान करता है जो होने का इरादा रखते हैं, और बने रहने के लिए, हर सिस्टम पर वही होता है जहां उस पैकेज का संस्करण स्थापित होता है। ऐसी फाइलें इंस्टॉल किए गए कार्यक्रमों के लिए निष्पादनयोग्य, संसाधन, प्रलेखन और अन्य "संपत्ति" प्रदान करती हैं। हम आमतौर पर इन "फाइलों" को कहते हैं जो एक पैकेज प्रदान करता है।

लेकिन एक पैकेज अन्य फाइलें भी प्रदान करता है, जिनका उद्देश्य (संभवतः) बदला जाना है। इन्हें ग्लोबल (या सिस्टमवाइड) कॉन्फ़िगरेशन फाइल कहा जाता है। वे लगभग हमेशा /etcनिर्देशिका में स्थापित होते हैं , और स्थापित कार्यक्रमों के व्यवहार को बदलने के लिए वे स्वचालित रूप से और मैन्युअल रूप से संशोधित हो सकते हैं। उदाहरण के लिए, sudoकॉन्फ़िगरेशन फ़ाइल /etc/sudoersऔर अधिक कॉन्फ़िगरेशन फ़ाइलों के लिए निर्देशिका है /etc/sudoers.d। वह फ़ाइल, और उस निर्देशिका में जोड़ी गई कोई भी फ़ाइल, निर्दिष्ट करती sudoहै कि किस तरीके से उपयोग करने की अनुमति है।

आमतौर पर यह वांछित है कि पैकेज की स्थापना रद्द करना और फिर इसे वापस स्थापित करने के तरीके से व्यवहार में बदलाव नहीं करना चाहिए (जब तक कि इसकी पैकेज फाइलें भ्रष्ट नहीं थीं और इसलिए आपने इसे पुनः स्थापित किया है, निश्चित रूप से)। इसलिए, आमतौर पर जब एक पैकेज की स्थापना रद्द की जाती है, तो इसकी पैकेज फाइलें हटा दी जाती हैं, लेकिन इसकी सिस्टमवाइड कॉन्फ़िगरेशन फाइलें अनछुई रह जाती हैं।

जब आप किसी पैकेज को यह निर्दिष्ट किए बिना अनइंस्टॉल कर देते हैं कि इसकी सिस्टीम कॉन्फ़िगरेशन फाइल भी डिलीट होने वाली हैं, तो उसे पैकेज को "रिमूव करना" कहा जाता है।

यदि आप पैकेज को अनइंस्टॉल करते समय पैकेज के सिस्टमिफ़ाइज्ड विन्यास फाइल को हटाना चाहते हैं, तो इसे पैकेज को "पर्जिंग" कहा जाता है।

apt-get removeएक पैकेज निकाल देंगे; यही है, यह पैकेज की स्थापना रद्द कर देगा लेकिन इसकी सिस्टमव्यापी कॉन्फ़िगरेशन फ़ाइलों को छोड़ देगा।

apt-get purgeएक पैकेज शुद्ध करेगा; यही है, यह पैकेज को अनइंस्टॉल करेगा और इसकी सिस्टीम कॉन्फ़िगरेशन फाइल को डिलीट करना भी सुनिश्चित करेगा।

संकुल को शुद्ध करने का दूसरा तरीका --purgeध्वज का उपयोग करना है । यह नहीं बताता apt-getकि क्या करना है; इसके बजाय, यह संशोधित करता है कि क्या शर्तें (या "कमांड") जैसे removeइसे करने के लिए कहें। --purgeझंडा किसी भी पैकेज uninstallations पैकेज (रों) की स्थापना रद्द किए जाने के लिए प्रणाली में विन्यास फाइल का विलोपन के साथ किया जाना होता है। दूसरे शब्दों में, --purgeध्वज निष्कासन को पर्स में बदल देता है।

--purgeजब हमारे पास purgeकमान है तो हमारे पास झंडा क्यों है ? सब के बाद, के sudo apt-get --purge remove packagenameबराबर नहीं है sudo apt-get purge packagename। वे बराबर हैं। जहां --purgeकाम आता है, जब आप इसके अलावा अन्य कमांड के व्यवहार को संशोधित करना चाहते हैं remove

उदाहरण के लिए, मान लें कि आप स्वचालित रूप से इंस्टॉल किए गए संकुल को अनइंस्टॉल करना चाहते हैं जिनकी अब आवश्यकता नहीं है (क्योंकि उनके आधार पर मैन्युअल रूप से स्थापित पैकेज नहीं हैं), लेकिन आप इन स्वचालित रूप से स्थापित संकुल को हटाना नहीं चाहते हैं, आप हटाना भी चाहते हैं उनकी व्यवस्थित विन्यास फाइल। तब आप चला सकते हैं:

sudo apt-get --purge autoremove

आइए एक और उपयोग पर विचार करें --purge। एक झंडा कहा जाता है --reinstall, जो इंस्टॉलेशन में इंस्टॉलेशन को बदल देता है। यह कहना है कि, आम तौर पर, जब आप पहले से स्थापित पैकेज को स्थापित करने का प्रयास करते हैं, तो या तो कुछ भी नहीं होगा, या (यदि पैकेज स्वचालित रूप से स्थापित है) पैकेज मैन्युअल रूप से स्थापित किया जाएगा। लेकिन --reinstallझंडे के साथ , पहले से स्थापित पैकेज को स्थापित करने के कारण इसे हटा दिया जाता है और फिर वापस स्थापित किया जाता है :

sudo apt-get --reinstall install packagename

लेकिन मान लें कि आप जिस पैकेज को पुनः स्थापित कर रहे हैं, उसके सिस्टीम विन्यास फाइल को हटाना चाहते हैं। यह कुछ सामान्य है; जब कोई पैकेज काम नहीं कर रहा होता है और आपको पता नहीं होता है, तो आप इसे पुनः स्थापित करने का प्रयास कर सकते हैं, और इसकी कॉन्फ़िगरेशन फ़ाइलों को भी हटा सकते हैं ताकि इसका कॉन्फ़िगरेशन डिफ़ॉल्ट पर रीसेट हो जाए। इसे प्राप्त करने के लिए, आप चला सकते हैं:

sudo apt-get --purge --reinstall install packagename

--reinstallपुनर्स्थापना में बदल जाता है अधिष्ठापन (यानी, हटाने स्थापना के बाद), और --purgeशुद्धिकरण में पुनर्स्थापना के हटाने हिस्सा बदल जाता है।

आपके उदाहरणों का व्यवहार

अब यह स्पष्ट होना चाहिए कि आपके प्रत्येक उदाहरण के apt-getआदेश क्या करते हैं:

  • sudo apt-get autoremove --purge packagenames

    यह पर्स स्वचालित रूप से उन पैकेजों को स्थापित करता है जिनके पास अब कोई भी मैन्युअल रूप से स्थापित पैकेज नहीं हैं जो उन पर निर्भर करते हैं। यही है, यह उन पैकेजों को अनइंस्टॉल करता है (जो उनकी पैकेज फ़ाइलों को हटाने पर जोर देता है), और यह उनके सिस्टमफाइ किए गए कॉन्फ़िगरेशन फ़ाइलों को भी हटा देता है।

    यहाँ, packagenamesकुछ नहीं करता है। विशेष रूप से, यदि आप केवल उन पैकेजों को हटाने का इरादा रखते हैं जिनके नाम वहां सूचीबद्ध हैं, तो यह आपके व्यवहार का उद्देश्य नहीं होगा।

  • sudo apt-get remove --purge packagenames

    यह शुद्ध करता है packagenames; यह मानते हुए packagenamesकि पैकेज नामों की एक व्हाट्सएप से अलग सूची है, यह उन सभी को शुद्ध करेगा। यही है, यह उन्हें अनइंस्टॉल करेगा (जो अपनी पैकेज फ़ाइलों को हटाने के लिए मजबूर करता है), और उनकी सिस्टमव्यापी कॉन्फ़िगरेशन फ़ाइलों को भी हटा देगा।

    यदि सूचीबद्ध किसी भी पैकेज को packagenamesस्थापित नहीं किया गया है, तो सूची में इसकी उपस्थिति का कोई प्रभाव नहीं पड़ेगा (सिवाय इसके कि आपको सूचित किया जाएगा कि यह स्थापित नहीं था)। यदि आप उन पैकेज नामों को सूचीबद्ध करते हैं जो किसी भी वास्तविक पैकेज का नाम नहीं हैं, तो कमांड एक त्रुटि के साथ विफल हो जाएगी ।unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    यदि आप purgeउस कमांड में से किसी एक को हटाते हैं , तो यह पिछले वाले के बराबर होगा। जैसा कि यह खड़ा है, यह नामक एक पैकेज को शुद्ध करने की कोशिश करता है purge, और इसमें सूचीबद्ध पैकेजों को शुद्ध करने के लिए भी packagenames। चूंकि purgeकिसी भी पैकेज का नाम नहीं है, यह एक त्रुटि संदेश के साथ विफल हो जाएगा।

  • sudo apt-get remove packagenames

    यह सूचीबद्ध पैकेजों को हटा packagenamesदेता है, जो उनकी पैकेज फ़ाइलों को हटाने पर जोर देता है। यह उनके सिस्टमवाइड कॉन्फ़िगरेशन फाइल को डिलीट नहीं करता है (क्योंकि यह केवल एक रिमूवल है, न कि पर्ज)।

  • sudo apt-get autoremove

    यह अनइंस्टॉल स्वचालित रूप से उन संकुल को स्थापित करता है जिनके पास अब कोई भी मैन्युअल रूप से स्थापित संकुल नहीं है जो उन पर निर्भर करता है। यह उनकी पैकेज फ़ाइलों को हटाने जरूरत पर जोर देता है, लेकिन नहीं उनके प्रणाली में विन्यास फाइल (यह है कि, यह एक हटाने नहीं बल्कि एक पर्ज है)।

उपयोग कैसे करें के बारे में अधिक जानकारी के लिए apt-get, मैं इसके मैनुअल पेज की सिफारिश करता हूं । अधिक सामान्य जानकारी के लिए, यह मार्गदर्शिका देखें ।

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