Як я можу видалити пакети сиріт у Fedora?


42

Я щойно перейшов з Ubuntu на Fedora14. В Ubuntu ми мали apt-get autoremoveсправу з видаленням сиріт / невикористаних пакетів. Який аналог у Fedora?

Відповіді:


36

package-cleanup --quiet --leavesз пакету yum-utils буде перелічено бібліотечні пакети, на які не покладаються інші пакунки. На жаль, це, як правило, трохи більше. Наприклад, у моїй системі було запропоновано видалити libvirt. Додавання --exclude-binаргументу допомагає. Якщо ви задоволені пропозицією, то для очищення пакунків виконайте:

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

1
Протестовано після встановлення та видалення netbeans-platformта очищення пакунків, перераховано деякі речі, але насправді жодна з раніше встановлених netbeans-platformзалежностей (використовуючи Fedora 17).
maxschlepzig

2
Не працює, як вказував @maxschlepzig
c0da

30

DNF, яка замінює yum, починаючи з Fedora 22, також надає autoremoveпідкоманду, яка моделюється після авторемонту apt-get / yum.

Приклади:

# dnf autoremove

який намагається видалити всі автоматично встановлені та не використовувані пакети залежностей - має бути майже рівнозначним apt-get autoremove.

# dnf autoremove examplepackage

який видаляє примірник упаковки та всі автоматично встановлені (інакше невикористані) залежності.

Ням

Yum має команду autoremove з Fedora 19, і це документально підтверджено з Fedora 20 / RHEL 7.

Використання аналогічно реалізації dnf, наприклад:

# yum autoremove

або

# yum autoremove examplepackage

Зміна поведінки yum removes

Yum підтримує параметр config для зміни поведінки removeпідкоманди за замовчуванням (наприклад, через /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

Коли це встановлено, наступний yum removeтакож намагається видалити автоматично встановлені залежності, якщо вони не потрібні іншим пакетам.

Ви також можете тимчасово протестувати цю опцію через щось на зразок:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

Обхід для старої версії Fedora

(Для версій Fedora, де підкоманда yum autoremove недоступна та / або clean_requirements_on_removeне працює.)

Хоча під час встановлення пакетів встановлені залежності позначаються як такі (здається, відносно нова особливість rpm / yum).

Ви можете знайти непотрібні залежності за допомогою:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

Цей командний рядок натхненний сценарієм fenris02 .

Після огляду tmp(і, можливо, курації) ви можете їх видалити через щось подібне:

# xargs yum remove < tmp

Це дало помилку "Недійсний запит-позначення yumdb 'причина' для встановленого pkg: adobe-release-x86_64-1.0-1.noarch". Що це зараз?
c0da

@ c0da, я думаю, що функція, яка yum записує у свою базу даних "причину" встановлення (наприклад, 'dep' або 'user') для кожного пакету, є відносно новою. Можливо, ваш екземпляр Fedora передував введенню цієї функції таким чином, що у вас є ще (кілька) старих пакетів, встановлених без цього тегу.
maxschlepzig

Я встановив Fedora 18 кілька днів тому. Тому я думаю, що потрібний тег повинен бути там.
c0da

1
@ c0da, можливо "причина" не була записана, оскільки ви встановили пакунок adobe-releaseчерезyum localinstall
maxschlepzig

16

вам потрібно встановити плагін "yum" з "листям":

# yum install yum-plugin-remove-with-leaves.noarch

після встановлення:

# yum remove --remove-leaves package

Щасти!


3
і як запустити його для всіх встановлених додатків?
кн

Здається, це також не дуже надійно: skvidal.wordpress.com/2010/11/09/orphaned-dep-cleanup-in-yum
maxschlepzig

1
RHEL / CentOS / Oracle Linux 6 потрібен yum-plugin-remove-with-leaves.noarchвстановлений для використання пакетpackage-cleanup
Terry Wang,

8
# package-cleanup --orphans >/tmp/junk

відредагуйте /tmp/junkфайл та видаліть у командному рядку перший інформаційний рядок, введіть наступне:

for file in `cat /tmp/junk`
do
  yum remove $file
done

1
Пакет-очищення (1) говорить: '- перелічити встановлені пакети, які недоступні в поточно налаштованих сховищах.' Це не рівнозначно тому, що apt-get autoremoveробить. apt-get (8) говорить: "autoremove використовується для видалення пакетів, які були автоматично встановлені для задоволення залежностей для певного пакету і які більше не потрібні."
maxschlepzig

1
Не працює! Я, мабуть, помилявся раніше. Спасибі @maxschlepzig
c0da

Це працювало для мене, але в CentOS 6.6 він фактично перераховує всі встановлені пакети, а не лише дітей-сиріт.
Гая

4

ПРИМІТКА. Ця відповідь є правильною, але стосується лише RHEL 7+ та Fedora 20+ (де авторемонту додано як нову функцію).

# yum autoremove

Просто підтвердіть, щоб видалити вибрані пакети.


0

Спираючись на відповідь Ларрі Мора :

package-cleanup --orphans | sed '1d' | sed '/^ * /d' | sed '/Loading mirror speeds from cached hostfile/d' | xargs sudo yum remove

(Включає пропуск для найшвидшого дзеркала, якщо вам цікаво.)


0

У Fedora пакет-сирота означає, що жоден кандидат не може повторно оновити його!

  1. Якщо пакети-сироти були створені вами, ви відключите yum.repos.d / some.conf.

    yum distro-sync
    
  2. В інших сиротних пакетах команда може бути небезпечною.

    yum remove $(package-cleanup --orphans)
    

    або просто скористайтеся командою безпеки.

    yum remove name-of-page
    

0

Ще один спосіб не викликати цих проблем - використання транзакцій.

Після установки базової системи при встановленні за допомогою yum вона створює транзакції. Коли ви збираєтесь видалити речі, відкажіть транзакції.

https://docs.fedoraproject.org/en-US/Fedora/24/html/System_Administrators_Guide/sec-DNF-Transaction_History.html

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