Usuń nieużywane paczki

62

Zainstalowałem jakiś pakiet rpm na mojej Fedorze 17. Niektóre pakiety miały wiele zależności. Usunąłem niektóre pakiety, ale zapomniałem usunąć nieużywane zależności z yum remove.

Jak mogę to teraz zrobić?

Raphael Ahrens
źródło
Czy spojrzałeś na stronę yum: linux.die.net/man/8/yum ?
Linuxios,
1
duplikat: unix.stackexchange.com/questions/23330/…
maxschlepzig,

Odpowiedzi:

39

To nie jest łatwe. Jak odróżnić „plik, który był wymagany od czegoś, co od tego czasu usunąłem” z „pliku, który nie jest wymagany przez nic innego, czego naprawdę chcę”?

Możesz użyć package-cleanuppolecenia z yum-utilspakietu, aby wyświetlić „węzły liści” na wykresie zależności pakietu. Są to pakiety, które można usunąć bez wpływu na nic innego:

$ package-cleanup --leaves

Spowoduje to utworzenie listy „bibliotek”, od których nie zależy nic więcej. W większości przypadków możesz bezpiecznie usunąć te pakiety. Jeśli dodasz --alldo wiersza poleceń:

$ package-cleanup --leaves --all

Dostaniesz również pakiety, które nie są uważane za biblioteki, ale ta lista będzie tak długa, że ​​prawdopodobnie nie będzie przydatna.

Larsks
źródło
9
APT (odpowiednik Yum w Debianie) ma pojęcie „automatycznie zainstalowany pakiet”. Jeśli pakiet nie został wyraźnie zażądany, ale został pobrany tylko jako zależność, zostanie automatycznie usunięty (z monitem o potwierdzenie), jeśli wszystkie pakiety, które od niego zależą, zostaną usunięte. Bez wskazania tego typu to naprawdę nie jest łatwe.
Gilles
101

Jeśli zainstalujesz pakiet yum install, powiedzmy pdftk, spowoduje on wiele zależności:

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 usunie tylko ten pakiet, a nie wszystkie zależności.

Ale możesz spojrzeć na wszystkie „transakcje” (instalacja, usuwanie itp.):

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

Następnie możesz cofnąć tę transakcję:

$ 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!
Twoja mama
źródło
14
+1 Niesamowite rozwiązanie i bardzo łatwe do zrobienia. Nigdy o tym nie słyszałem yum history. Dzięki!
Stefan Lasiewski
8
A jeśli 89 zależy od java_cup lub libgcj?
WernerCD
2
Czy nie powinna to być zaakceptowana odpowiedź?
Celdor
61

Począwszy od Fedory 18, możesz po prostu użyć tego polecenia

yum autoremove

lub

yum remove --setopt=clean_requirements_on_remove=1

Możesz także zastosować polecenie autorove z określonym pakietem

yum autoremove <package>

Co usunie niepotrzebne zależności z zainstalowanego pakietu. autoremovejest w dużej mierze pseudonimem, remove --setopt=clean_requirements_on_remove=1ale z pewnych powodów jest wciąż nieudokumentowane.

Strefa Final
źródło
5
polecenie yum remove --setopt=clean_requirements_on_remove=1działa dla mnie w centOS
BMW
Dla mnie package-cleanup --leaves && yum autoremoveusunięta libvorbis i tak umarła aplikacja do przesyłania strumieniowego radia internetowego „Ices” - prawdopodobnie dlatego, że nie ma jej w repozytorium i musiałem ją skompilować.
Nakilon,
Command yum autoremovedziała również na CentOS 7.6.
scrutari
yum autorove nie usuwa 4 starych jąder z CentOS 7
1133275,
5

Odpowiedziałem Lararsowi o krok dalej.

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

Pobiera to wszystkie zależności, które można usunąć bez wpływu na nic innego, a następnie usuwa je. Lepiej niż jeden po drugim.

„-q” jest użyteczne w niektórych systemach, które w przeciwnym razie wypisują „Konfigurowanie yum”, powodując usunięcie tego polecenia przez to polecenie. I nie tego chcesz.

jtoscarson
źródło
2
package-cleanupwypisuje „Konfigurowanie yum” na moim komputerze, co spowodowało, że Yum sam się usunął. Teraz próbuję wymyślić, jak to rozwiązać.
Paul Lammertsma
@PaulLammertsma wystarczy dodać -qopcję do czyszczenia pakietu. To samo mi się przydarzyło: D
Ealhad
1
package-cleanup -q --leaves | xargs -r -l1 yum -y removedyskretnie pominąć xargs jeśli wyjście package-cleanup jest pusta, przydatne dla automatycznych skryptów takich jak ansibla, kucharz, marionetka, Vagrant
Ilya Sheershoff
to jest odpowiedź.
xCovelus
1

W nowszych Fedorach z dnfmożesz użyć dnf repoquery --unneededjako zamiennika package-cleanup --leaves.

Thomas Ahle
źródło