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


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.