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

При вводе по крайней мере одной буквы то нажмите Tab, Вы будете видеть список всех исполняемых программ, имя которых начинается с той буквы. Это называют завершением или автоматическим заполнением.

Можно перечислить все исполняемые программы с этим отрывком оболочки:

( IFS=':'; set -f;
  for dir in $PATH; do
    for x in $dir/*; do echo $x; done
  done )

Это перечисляет все исполняемые программы, которые Вы имеете, который может быть более общим, чем, что Вы предназначаете “всеми приложениями”. Вы будете также видеть много команд, которые предназначаются, чтобы быть названными другими командами и редко вызываются непосредственно пользователями. Список приложений, которые предназначаются, чтобы быть вызванными от GUI, доступен через *.desktop файлы под /usr/share/applications. Следующая команда отобразит их (Вы найдете крошки как %u, %c и так далее, указывая на то, что обычно ожидают виды аргументов команда; они описаны в спецификации формата файла на рабочем столе).

grep -Proh '(?<=^Exec=).*' /usr/share/applications

Можно получить лучшее ощущение того, какие приложения Вы установили путем списка пакетов, которые Вы имеете: dpkg -l под Debian, Ubuntu и производными; rpm -ql под Red Hat, Fedora, SuSE и дериватизируют; …

66
13.07.2014, 13:49
5 ответов

Это не легко. Как Вы дифференцируетесь между "файлом, который требовался чем-то, что я с тех пор удалил" из "файла, который не требуется ничем больше, что я действительно хочу"?

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

$ package-cleanup --leaves

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

$ package-cleanup --leaves --all

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

39
27.01.2020, 19:31
  • 1
    APT (Debian, эквивалентный из Конфетки), имеет понятие “автоматически установленного пакета”. Если пакет явно не требовали, но только сдержался как зависимость, он будет автоматически удален (с подсказкой подтверждения), если пакеты, которые зависят от него, будут все удалены. Без признака этого типа это действительно не легко. –  Gilles 'SO- stop being evil' 07.06.2012, 02:53

Если Вы устанавливаете пакет с 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!
105
27.01.2020, 19:31
  • 1
    +1 Потрясающее решение и очень легкий сделать. Я никогда не слышал о yum history.Спасибо! –  Stefan Lasiewski 14.05.2014, 23:24
  • 2
    И что, если 89 зависит от java_cup или libgcj? –  WernerCD 24.05.2016, 15:28
  • 3
    Разве это не должно быть принятым ответом? –  Celdor 07.03.2018, 13:00

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

yum autoremove

или

yum remove --setopt=clean_requirements_on_remove=1

Можно также подать заявку, автоудаляют команду с определенным пакетом

yum autoremove <package>

Который удалит ненужные зависимости из того установленного пакета. autoremove в значительной степени псевдоним remove --setopt=clean_requirements_on_remove=1 но по некоторым причинам, все еще не документировано.

66
27.01.2020, 19:31
  • 1
    yum remove --setopt=clean_requirements_on_remove=1 работы для меня в centOS –  BMW 13.07.2014, 12:57

Я отвел larsks на один шаг дальше.

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

Это захватывает все зависимости, которые можно удалить, не затрагивая ничего другого, а затем удаляет их. Лучше пройти один за другим.

"-q" полезно на некоторых системах, которые печатают "Setting yum" иначе, заставляя эту команду удалять "yum". И это не то, чего вы хотите.

7
27.01.2020, 19:31

В более новых Fedoras с dnf вы можете использовать dnf repoquery --unneeded в качестве замены для ] пакет-очистка --leaves .

2
27.01.2020, 19:31

Теги

Похожие вопросы