Remova pacotes não utilizados


Respostas:


39

Não é fácil. Como você diferencia entre "um arquivo que foi requerido por algo que removi desde então" de "um arquivo que não é requerido por mais nada que eu realmente queira"?

Você pode usar o package-cleanupcomando do yum-utilspacote para listar "nós da folha" no gráfico de dependência do pacote. Estes são os pacotes que podem ser removidos sem afetar mais nada:

$ package-cleanup --leaves

Isso produzirá uma lista de "bibliotecas" das quais nada mais depende. Na maioria dos casos, você pode remover com segurança esses pacotes. Se você adicionar --allà linha de comando:

$ package-cleanup --leaves --all

Você também receberá pacotes que não são considerados bibliotecas, mas essa lista será tão longa que provavelmente não será útil.


9
O APT (o equivalente Debian do Yum) tem uma noção de "pacote instalado automaticamente". Se um pacote não foi solicitado explicitamente, mas apenas recebido como uma dependência, ele será removido automaticamente (com um prompt de confirmação) se todos os pacotes que dependem dele forem removidos. Sem uma indicação desse tipo, na verdade não é fácil.
Gilles 'SO- stop be evil'

101

Se você instalar um pacote com yum install, digamos pdftk, ele puxará muitas dependências:

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 removerá apenas esse pacote e nem todas as dependências.

Mas você pode olhar para todas as 'transações' (instalar, remover etc.):

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

E então você pode desfazer essa transação:

$ 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
Uma solução impressionante e muito fácil de fazer. Eu nunca ouvi falar yum history. Obrigado!
Stefan Lasiewski

8
E se 89 depender de java_cup ou libgcj?
WernerCD

2
Isso não deveria ser uma resposta aceita?
Celdor 07/03

62

A partir do Fedora 18, você pode simplesmente usar este comando

yum autoremove

ou

yum remove --setopt=clean_requirements_on_remove=1

Você também pode aplicar o comando autoremove com pacote específico

yum autoremove <package>

O que removerá dependências desnecessárias desse pacote instalado. autoremoveé muito um alias de, remove --setopt=clean_requirements_on_remove=1mas por algumas razões, ainda não está documentado.


5
comando yum remove --setopt=clean_requirements_on_remove=1funciona para mim no centOS
BMW

Para mim, os package-cleanup --leaves && yum autoremovelibvorbis removidos e, assim, fizeram com que o aplicativo "Ices" de streaming de rádio na Internet morresse - provavelmente porque não está em repositórios e eu tive que compilá-lo.
Nakilon

O comando também yum autoremovefunciona no CentOS 7.6.
scrutari

yum autoremove falha ao remover 4 kernels antigos no CentOS 7
user1133275

6

Eu levei os larsks a dar um passo adiante.

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

Isso agarra todas as dependências que podem ser removidas sem afetar mais nada e as remove. Melhor do que passar por um por um.

"-q" é útil em alguns sistemas que imprimem "Configurando o yum", caso contrário, fazendo com que este comando remova o yum. E não é isso que você quer.


2
package-cleanupproduz "Configurando o yum" na minha máquina, o que resultou na remoção do Yum. Agora estou tentando descobrir como resolver isso.
Paul Lammertsma

@PaulLammertsma basta adicionar uma -qopção à limpeza de pacotes. Isso aconteceu comigo também: D
Ealhad

11
package-cleanup -q --leaves | xargs -r -l1 yum -y removesilenciosamente ignorar xargs se a saída pacote-limpeza está vazio, útil para scripts automatizados como ansible, cozinheiro chefe, fantoche, vagabundo
Ilya Sheershoff

Esta é a resposta.
xCovelus

1

Nos Fedoras mais recentes com dnf, você pode usar dnf repoquery --unneededcomo um substituto para package-cleanup --leaves.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.