अप्रयुक्त पैकेज निकालें


62

मैंने अपने फेडोरा 17 पर कुछ आरपीएम पैकेज स्थापित किए हैं। कुछ पैकेजों पर बहुत अधिक निर्भरता थी। मैंने कुछ पैकेज निकाले हैं, लेकिन मैं यूम रिमूव के साथ अप्रयुक्त निर्भरता को दूर करना भूल गया हूं।

अब मैं कैसे कर सकता हूं?


क्या आपने yumमैनपेज देखा : linux.die.net/man/8/yum ?
लिनक्स

1
का डुप्लिकेट: unix.stackexchange.com/questions/23330/…
maxschlepzig

जवाबों:


39

यह आसान नहीं है। आप "एक फ़ाइल जो मेरे द्वारा हटाए गए कुछ" के लिए आवश्यक थी, के बीच अंतर कैसे करते हैं "" एक ऐसी फाइल जिसे किसी और चीज की आवश्यकता नहीं है जो मुझे वास्तव में चाहिए "?

आप अपने पैकेज पर निर्भरता ग्राफ में "लीफ नोड्स" को सूचीबद्ध करने के लिए पैकेज package-cleanupसे कमांड का उपयोग कर सकते हैं yum-utils। ये ऐसे पैकेज हैं जिन्हें किसी और चीज को प्रभावित किए बिना हटाया जा सकता है:

$ package-cleanup --leaves

यह "पुस्तकालयों" की एक सूची तैयार करेगा, जिस पर और कुछ भी निर्भर नहीं करता है। ज्यादातर मामलों में आप इन पैकेजों को सुरक्षित रूप से निकाल सकते हैं। यदि आप --allकमांड लाइन में जोड़ते हैं :

$ package-cleanup --leaves --all

आपको ऐसे पैकेज मिलेंगे, जिन्हें लाइब्रेरी नहीं माना जाता है, लेकिन यह सूची इतनी लंबी होने वाली है कि यह उपयोगी नहीं होगी।


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

101

यदि आप किसी पैकेज को yum installकहते हैं pdftk, तो यह बहुत सारी निर्भरता में खींच जाएगा:

Installed:
  pdftk.x86_64 0:1.44-10.fc18

Dependency Installed:
  bouncycastle.noarch 0:1.46-6.fc18     
  itext-core.noarch 0:2.1.7-14.fc18     
  libgcj.x86_64 0:4.7.2-8.fc18          
  bouncycastle-mail.noarch 0:1.46-6.fc18
  java-1.5.0-gcj.x86_64 0:1.5.0.0-40.fc18
  sinjdoc.x86_64 0:0.5-13.fc18
  bouncycastle-tsp.noarch 0:1.46-5.fc18
  java_cup.noarch 1:0.11a-10.fc18
  itext.x86_64 0:2.1.7-14.fc18   
  javamail.noarch 0:1.4.3-12.fc18

Complete!

yum remove pdftk केवल उस पैकेज को हटा देगा और सभी निर्भरताएँ नहीं।

लेकिन आप सभी 'लेनदेन' को देख सकते हैं (इंस्टॉल, हटाएं आदि):

$ sudo yum history list pdftk
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------  
    88 | install pdftk            | 2012-12-14 13:35 | Install        |   11   

और फिर आप उस लेनदेन को पूर्ववत कर सकते हैं:

$ sudo yum history undo 88
Undoing transaction 88, from Fri Dec 14 13:35:34 2012
    Dep-Install bouncycastle-1.46-6.fc18.noarch       @fedora
    Dep-Install bouncycastle-mail-1.46-6.fc18.noarch  @fedora
    Dep-Install bouncycastle-tsp-1.46-5.fc18.noarch   @fedora
    Dep-Install itext-2.1.7-14.fc18.x86_64            @fedora
    Dep-Install itext-core-2.1.7-14.fc18.noarch       @fedora
    Dep-Install java-1.5.0-gcj-1.5.0.0-40.fc18.x86_64 @fedora
    Dep-Install java_cup-1:0.11a-10.fc18.noarch       @fedora
    Dep-Install javamail-1.4.3-12.fc18.noarch         @fedora
    Dep-Install libgcj-4.7.2-8.fc18.x86_64            @fedora
    Install     pdftk-1.44-10.fc18.x86_64             @fedora
    Dep-Install sinjdoc-0.5-13.fc18.x86_64            @fedora
    ...
    Complete!

14
+1 भयानक समाधान और करने में बहुत आसान। मैंने कभी नहीं सुना yum history। धन्यवाद!
स्टीफन लासिवस्की

8
और क्या होगा अगर 89 java_cup या libgcj पर निर्भर करता है?
वर्नरसीडी

2
क्या यह एक स्वीकृत उत्तर नहीं होना चाहिए?
Celdor

61

फेडोरा 18 से शुरू, आप बस इस कमांड का उपयोग कर सकते हैं

yum autoremove

या

yum remove --setopt=clean_requirements_on_remove=1

आप विशिष्ट पैकेज के साथ ऑटोरेमोव कमांड भी लागू कर सकते हैं

yum autoremove <package>

जो उस स्थापित पैकेज से अनावश्यक निर्भरता को हटा देगा। autoremoveबहुत अधिक है, remove --setopt=clean_requirements_on_remove=1लेकिन कुछ कारणों से, अभी भी अनिर्दिष्ट है।


5
कमांड yum remove --setopt=clean_requirements_on_remove=1मेरे लिए सेंटोस में काम करता है
बीएमडब्ल्यू

मेरे लिए package-cleanup --leaves && yum autoremoveलिबेरवर्बिस को हटा दिया और इसलिए इंटरनेट-रेडियो-स्ट्रीमिंग "इसेस" एप्लिकेशन को मर दिया - शायद इसलिए कि यह रेपो में नहीं है और मुझे इसे संकलित करना था।
नकीलोन

कमांड yum autoremoveCentOS 7.6 पर भी काम करता है।
स्क्रूटरी

yum autoremove 4 पुराने कर्नेल को CentOS 7 पर हटाने में विफल रहता है
user1133275

5

मैंने एक कदम आगे बढ़ते हुए लार्क्स जवाब दिया।

$ package-cleanup -q --leaves | xargs -l1 yum -y remove 

यह उन सभी आश्रितताओं को पकड़ लेता है जिन्हें किसी और चीज को प्रभावित किए बिना हटाया जा सकता है और फिर उन्हें हटा दिया जाता है। एक के बाद एक करके बेहतर होता जा रहा है।

"-q" कुछ सिस्टम पर उपयोगी है जो "सेटिंग यम" प्रिंट करते हैं अन्यथा, इस आदेश को यम को हटाने के लिए। और यही आप चाहते नहीं हैं।


2
package-cleanupमेरी मशीन पर आउटपुट "यम सेट अप", जिसके परिणामस्वरूप यम ने खुद को हटा दिया। मैं अब यह पता लगाने की कोशिश कर रहा हूं कि इसे कैसे सुलझाया जाए।
पॉल लामर्ट्स्मा

@PaLLammertsma -qपैकेज-क्लीनअप में केवल विकल्प जोड़ें । यह मेरे साथ भी हुआ:
एलाहाद

1
package-cleanup -q --leaves | xargs -r -l1 yum -y removeचुपचाप xargs छोड़ देंगे अगर पैकेज-सफाई आउटपुट खाली है, तो स्वचालित स्क्रिप्ट जैसे ansible, chef, कठपुतली, योनि के लिए उपयोगी है
Ilya Sheershoff

यह उत्तर है।
xCovelus

1

के साथ नए Fedoras में dnf, आप के dnf repoquery --unneededलिए एक प्रतिस्थापन के रूप में उपयोग कर सकते हैं package-cleanup --leaves

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