Удалить неиспользованные пакеты


63

Я установил несколько пакетов rpm на мою Fedora 17. Некоторые пакеты имели много зависимостей. Я удалил некоторые пакеты, но забыл удалить неиспользуемые зависимости с помощью команды yum remove.

Как я могу сделать это сейчас?



Ответы:


39

Это не просто. Как вы различаете «файл, который требовался от того, что я с тех пор удалил», от «файла, который не требуется ни от чего другого, что я действительно хочу»?

Вы можете использовать package-cleanupкоманду из yum-utilsпакета, чтобы вывести «листовые узлы» на графике зависимостей вашего пакета. Это пакеты, которые можно удалить, не затрагивая ничего другого:

$ package-cleanup --leaves

Это создаст список «библиотек», от которых больше ничего не зависит. В большинстве случаев вы можете безопасно удалить эти пакеты. Если вы добавите --allв командную строку:

$ package-cleanup --leaves --all

Вы также получите пакеты, которые не считаются библиотеками, но этот список будет настолько длинным, что, вероятно, он будет бесполезен.


9
APT (эквивалент Yum для Debian) имеет понятие «автоматически установленный пакет». Если пакет не был явно запрошен, а только извлечен как зависимость, он будет автоматически удален (с запросом подтверждения), если все пакеты, которые зависят от него, будут удалены. Без указания этого типа это действительно не легко.
Жиль "ТАК - перестань быть злым"

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

62

Начиная с Fedora 18, вы можете просто использовать эту команду

yum autoremove

или же

yum remove --setopt=clean_requirements_on_remove=1

Вы также можете применить команду автоматического удаления с конкретным пакетом

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" умирает - вероятно, потому что его нет в репозиториях, и мне пришлось его скомпилировать.
Накилон

Команда yum autoremoveработает и на CentOS 7.6.
scrutari

yum autoremove не может удалить 4 старых ядра на CentOS 7
user1133275

6

Я взял ответ жаворонка на шаг дальше.

$ 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, chef, puppet,
vagrant

это ответ.
xCovelus

1

В новых Fedora с dnf, вы можете использовать dnf repoquery --unneededв качестве замены package-cleanup --leaves.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.