"ऑटोरेमोव" का उपयोग करके अप्रयुक्त निर्भरता को हटाना


25

मैंने सोचा कि apt-get autoremoveबिना किसी तर्क के चल रहा है, सिस्टम पर छोड़ी गई सभी अप्रयुक्त निर्भरता को हटा देता है, जबकि रनिंग apt-get autoremove xxxxxx और इसके अप्रयुक्त निर्भरता को हटा देता है।

हालाँकि मुझे अन्यथा पता चला। रनिंग apt-get autoremove xxxन केवल xxx और इसके अप्रयुक्त निर्भरता को हटाता है, बल्कि अन्य सभी अप्रयुक्त निर्भरता को भी हटाता है।

मैंने तब apt-get remove --auto-remove xxxयह सोचकर दौड़ने की कोशिश की कि यह केवल xxx और इसकी अप्रयुक्त निर्भरता को हटा देगा। मेरे आश्चर्य के लिए, इसने xxx, इसकी अप्रयुक्त निर्भरता और अन्य सभी अप्रयुक्त निर्भरताएं भी हटा दीं।

यह मुझे दो संबंधित प्रश्नों की ओर ले जाता है।

(१) क्या यह आज्ञाओं का अभिप्राय है?

(२) क्या अन्य अप्रयुक्त निर्भरताओं को हटाए बिना xxx और उसकी अप्रयुक्त निर्भरता को हटाने का एक आसान तरीका है?

(ऐसा प्रतीत होता है कि aptitude removeयह भी इसी तरह से व्यवहार करता है।)

जवाबों:


21

Http://packages.ubuntu.com/source/maverick/aptcmdline/apt-get.cc पर स्रोत टारबॉल से फ़ाइल में देखकर , मैं देख सकता हूं कि यह एक तर्क है जो सेटिंग को सक्षम करता है।--auto-removeAPT::Get::AutomaticRemove

कमांड autoremoveऔर removeदोनों फ़ंक्शन को कॉल करते हैं DoInstall

कमांड "ऑटोरेमोव" APT::Get::AutomaticRemoveभी सेट करता है और इसलिए यह वैसा ही काम करता है --auto-remove

DoAutomaticRemoveफ़ंक्शन में देखते हुए , यह स्पष्ट रूप से दिखाई देता है कि APT::Get::AutomaticRemoveसेटिंग को सक्षम करना ( --auto-removeऔर autoremoveऐसा करता है) सभी स्थापित पैकेजों के माध्यम से एप्ट लूपिंग का कारण बनता है और हटाने के लिए अप्रयुक्त पैकेजों को चिह्नित करता है।

से main():

CommandLine::Args Args[] = {
   // ... stripped to save space
   {0,"auto-remove","APT::Get::AutomaticRemove",0},
   // ...
}
CommandLine::Dispatch Cmds[] = { // ...
                                {"remove",&DoInstall},
                                {"purge",&DoInstall},
                                {"autoremove",&DoInstall},
                                // ...
}
// ...
// Parse the command line and initialize the package library
CommandLine CmdL(Args,_config);

से DoInstall():

 unsigned short fallback = MOD_INSTALL;
   if (strcasecmp(CmdL.FileList[0],"remove") == 0)
      fallback = MOD_REMOVE;
   else if (strcasecmp(CmdL.FileList[0], "purge") == 0)
   {
      _config->Set("APT::Get::Purge", true);
      fallback = MOD_REMOVE;
   }
   else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0)
   {
      _config->Set("APT::Get::AutomaticRemove", "true");
      fallback = MOD_REMOVE;
   }

फ़ंक्शन से DoAutomaticRemove:

   bool doAutoRemove = _config->FindB("APT::Get::AutomaticRemove", false);
   // ...
   // look over the cache to see what can be removed
   for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) {
       if (doAutoRemove) {
       if(Pkg.CurrentVer() != 0 && 
          Pkg->CurrentState != pkgCache::State::ConfigFiles)
          Cache->MarkDelete(Pkg, purgePkgs);
       else
          Cache->MarkKeep(Pkg, false, false);
   }
   }

मैं नहीं बोल सकता कि यह इरादा है या नहीं, आप एक बग भर सकते हैं / launchpad.net पर एक प्रश्न पूछ सकते हैं ।


फिलहाल, पैकेज को डिलीट करने से रोकना संभव नहीं है apt-get autoremove। यदि आप पैकेज रखना चाहते हैं, तो चलाएँ apt-get -s autoremove, संकुल को सूची से कॉपी करें और उस सूची से संकुल हटा दें जिसे आप रखना चाहते हैं। अंत में, उन पैकेजों को हटा दें: sudo apt-get purge [packages-to-be-removed](शुद्ध विन्यास फाइल को हटा देता है, यदि कोई हो)


क्या आप सिर्फ xxx और उसके अप्रयुक्त निर्भरता को हटाने की सलाह देते हैं? कृपया मेरे सीखने के उत्तर में इसे शामिल करें, धन्यवाद!

1
आप ऑटोरेमोव से पैकेजों को बाहर नहीं कर सकते हैं, यदि आप पैकेजों को ऑटो-हटाए जाने से रखना चाहते हैं, तो उन्हें साथ निकालें apt-get purgeया apt-get remove
लेकेनस्टाइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.