Видаліть невикористані пакети


62

Я встановив деякий пакет об / хв на своєму Fedora 17. Деякі пакети мали багато залежностей. Я видалив деякі пакунки, але забув видалити невикористані залежності за допомогою yum remove.

Як я можу це зробити зараз?


Ви подивилися на сторінку yum: linux.die.net/man/8/yum ?
Linuxios

Відповіді:


39

Це не легко. Як ви розмежовуєте "файл, який вимагав щось, що я видалив," з "файл, який не вимагає нічого іншого, чого я дійсно хочу"?

Ви можете використовувати package-cleanupкоманду з yum-utilsпакета, щоб перелічити "вузли листя" у вашому графіку залежності пакета. Це пакети, які можна видалити, не зачіпаючи нічого іншого:

$ package-cleanup --leaves

Це створить перелік "бібліотек", від яких більше нічого не залежить. У більшості випадків ви можете безпечно видалити ці пакунки. Якщо ви додасте --allдо командного рядка:

$ package-cleanup --leaves --all

Ви отримаєте пакунки, які також не вважаються бібліотеками, але цей список буде настільки довгим, що він, мабуть, не буде корисним.


9
APT (еквівалент Debian Yum) має поняття "автоматично встановлений пакет". Якщо пакет не був запитаний явно, а лише був залучений як залежність, він буде автоматично видалений (із запитом підтвердження), якщо всі пакети, які залежать від нього, будуть видалені. Без вказівки такого типу це справді непросто.
Жиль

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?
WernerCD

2
Чи не повинно це бути прийнятою відповіддю?
Celdor

61

Починаючи з Fedora 18, ви можете просто використовувати цю команду

yum autoremove

або

yum remove --setopt=clean_requirements_on_remove=1

Ви також можете застосувати команду autoremove з певним пакетом

yum autoremove <package>

Що видалить непотрібні залежності із встановленого пакету. autoremoveє дуже псевдонімом, remove --setopt=clean_requirements_on_remove=1але з деяких причин все ще залишається недокументованим.


5
команда yum remove --setopt=clean_requirements_on_remove=1працює для мене в centOS
BMW

Для мене package-cleanup --leaves && yum autoremoveвидалений libvorbis і так змусив програму "Ices" через Інтернет-радіо померти - ймовірно, тому, що це не в репост і мені довелося його скласти.
Накілон

Command також yum autoremoveпрацює на CentOS 7.6.
scrutari

yum autoremove не вдається видалити 4 старі ядра на CentOS 7
користувач1133275

5

Я взяв відповіді на крок далі.

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

Це захоплює всі залежності, які можна усунути, не зачіпаючи нічого іншого, а потім усуває їх. Краще потім перебирати по черзі.

"-q" корисний у деяких системах, які друкують "Налаштування yum" інакше, змушуючи цю команду видалити yum. І це не те, чого ти хочеш.


2
package-cleanupвиводить "Налаштування yum" на моїй машині, в результаті чого Yum видаляється. Зараз я намагаюся розібратися, як розібратися в цьому.
Пол Ламмертсма

@PaulLammertsma просто додайте -qопцію для очищення пакунків. Це сталося і зі мною: D
Ealhad

1
package-cleanup -q --leaves | xargs -r -l1 yum -y removeбуде мовчки пропускати xargs, якщо вихідний пакет очищення порожній, корисний для автоматизованих сценаріїв, таких як ansible, шеф-кухар, ляльковий, бродячий
Ілля Шершофф

це відповідь.
xCovelus

1

У новіших Fedoras dnf, ви можете використовувати їх dnf repoquery --unneededяк заміну package-cleanup --leaves.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.