Nicht verwendete Pakete entfernen


62

Ich habe ein RPM-Paket auf meinem Fedora 17 installiert. Einige Pakete hatten viele Abhängigkeiten. Ich habe einige Pakete entfernt, aber ich habe vergessen, nicht verwendete Abhängigkeiten mit yum remove zu entfernen.

Wie kann ich das jetzt machen?


Haben Sie sich die yumManpage angesehen: linux.die.net/man/8/yum ?
Linuxios

Antworten:


39

Es ist nicht einfach. Wie kann man zwischen "einer Datei, die von etwas benötigt wurde, das ich seitdem entfernt habe" und "einer Datei, die von nichts anderem benötigt wird, was ich wirklich möchte" unterscheiden?

Mit dem package-cleanupBefehl aus dem yum-utilsPaket können Sie "Blattknoten" in Ihrem Paketabhängigkeitsdiagramm auflisten. Dies sind Pakete, die entfernt werden können, ohne dass dies Auswirkungen auf andere Elemente hat:

$ package-cleanup --leaves

Dies wird eine Liste von "Bibliotheken" erzeugen, von denen nichts anderes abhängt. In den meisten Fällen können Sie diese Pakete sicher entfernen. Wenn Sie --allzur Befehlszeile hinzufügen :

$ package-cleanup --leaves --all

Sie erhalten auch Pakete, die nicht als Bibliotheken betrachtet werden, aber diese Liste wird so lang sein, dass sie wahrscheinlich nicht nützlich sein wird.


9
APT (das Debian-Äquivalent von Yum) hat den Begriff "automatisch installiertes Paket". Wenn ein Paket nicht explizit angefordert, sondern nur als Abhängigkeit abgerufen wurde, wird es automatisch (mit einer Bestätigungsaufforderung) entfernt, wenn alle davon abhängigen Pakete entfernt werden. Ohne einen Hinweis dieser Art ist es in der Tat nicht einfach.
Gilles 'SO - hör auf, böse zu sein'

101

Wenn Sie ein Paket mit installieren yum install, sagen wir pdftk, wird es in einer Menge von Abhängigkeiten ziehen:

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 entfernt nur dieses Paket und nicht alle Abhängigkeiten.

Sie können sich aber alle 'Transaktionen' ansehen (installieren, entfernen usw.):

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

Und dann können Sie diese Transaktion rückgängig machen:

$ 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 Super Lösung und sehr einfach zu tun. Ich habe noch nie davon gehört yum history. Vielen Dank!
Stefan Lasiewski

8
Und was ist, wenn 89 von java_cup oder libgcj abhängt?
WernerCD

2
Sollte das nicht eine akzeptierte Antwort sein?
Celdor

61

Ab Fedora 18 können Sie einfach diesen Befehl verwenden

yum autoremove

oder

yum remove --setopt=clean_requirements_on_remove=1

Sie können den Befehl autoremove auch mit einem bestimmten Paket anwenden

yum autoremove <package>

Dadurch werden nicht benötigte Abhängigkeiten aus dem installierten Paket entfernt. autoremoveist sehr ein Pseudonym von, ist remove --setopt=clean_requirements_on_remove=1aber aus bestimmten Gründen immer noch undokumentiert.


5
Befehl yum remove --setopt=clean_requirements_on_remove=1funktioniert für mich in CentOS
BMW

Für mich ist die package-cleanup --leaves && yum autoremoveentfernte libvorbis und damit die Internet-Radio-Streaming "Ices" -Anwendung gestorben - wahrscheinlich, weil sie nicht in Repos ist und ich sie kompilieren musste.
Nakilon

Command yum autoremovefunktioniert auch unter CentOS 7.6.
scrutari

yum autoremove schlägt fehl, 4 alte Kernel unter CentOS 7 zu entfernen
user1133275

5

Ich nahm Larsks Antwort einen Schritt weiter.

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

Dadurch werden alle Abhängigkeiten erfasst, die entfernt werden können, ohne dass sich dies auf etwas anderes auswirkt. Anschließend werden sie entfernt. Besser als eins nach dem anderen durchzugehen.

"-q" ist auf einigen Systemen nützlich, die andernfalls "yum einrichten" ausgeben, wodurch dieser Befehl yum entfernt. Und das ist nicht was du willst.


2
package-cleanupgibt "Yum einrichten" auf meinem Computer aus, was dazu führte, dass Yum sich selbst entfernte. Ich versuche jetzt herauszufinden, wie ich das klären kann.
Paul Lammertsma

@PaulLammertsma fügt der Paketbereinigung einfach eine -qOption hinzu . Dies ist mir auch passiert: D
Ealhad

1
package-cleanup -q --leaves | xargs -r -l1 yum -y removeÜberspringt stillschweigend xargs, wenn die Ausgabe der Paketbereinigung leer ist. Dies ist nützlich für automatisierte Skripte wie ansible, chef, puppet, vagrant
Ilya Sheershoff

das ist die Antwort.
xCovelus

1

In neueren Fedoras mit dnfkönnen Sie dnf repoquery --unneededals Ersatz für verwenden package-cleanup --leaves.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.