Как удалить старые пакеты, установленные pacman в Arch Linux?

51

Я недавно установил Arch Linux и обнаружил, что довольно быстро поглощаю много памяти. По какой-то причине я уже использовал 17 ГБ всего за 2 недели. У меня не установлено много программного обеспечения, поэтому я считаю, что все старые пакеты где-то поддерживаются.

Чтобы поддержать это, я заметил, что если я установил пакет, удалите этот пакет, а затем переустановите его, чтобы pacman просто распаковывал и переустанавливал программное обеспечение без необходимости его повторной загрузки.

После того, как я установил свою базовую систему, перед дополнительным программным обеспечением я использовал около 2 ГБ или около того С тех пор я только установил Matlab, Skype, Wine и несколько других небольших программ. Конечно, я также установил недостающие библиотеки и тому подобное, но не почти на 15 ГБ.

Я здесь совершенно не прав или Arch никогда не удаляет старые пакеты при загрузке / обновлении до новых версий?

Если так, как я могу удалить эти неиспользованные пакеты?

Также при удалении установленных пакетов я использую pacman -R ...

sherrellbc
источник
1
Вероятно, хорошей идеей будет установить paccache как обычную работу cronили systemdработу.
Sparhawk

Ответы:

59

Нет, pacman не удаляет старые пакеты из вашего кеша ( /var/cache/pacman/pkg), поэтому со временем он может заполниться.

Вы можете использовать два подхода к очистке кэша: один грубый, с помощью pacman -Sc:

-c, --clean
Удалить пакеты, которые больше не установлены из кэша, а также неиспользуемые в настоящее время базы данных синхронизации, чтобы освободить дисковое пространство. Когда pacman загружает пакеты, он сохраняет их в каталоге кеша. Кроме того, базы данных сохраняются для каждой синхронизируемой БД, с которой вы загружаете, и не удаляются, даже если они удаляются из файла конфигурации pacman.conf (5). Используйте один ключ --clean для удаления только тех пакетов, которые больше не установлены; используйте два, чтобы удалить все файлы из кэша. В обоих случаях у вас будет возможность «да» или «нет» для удаления пакетов и / или неиспользуемых загруженных баз данных.

Или, для более детального подхода, вы можете использовать одну из утилит, поставляемых с pacman-contrib paccache:

paccache - это гибкая утилита для очистки кэша pacman, которая имеет множество опций, помогающих контролировать, сколько и что удаляется из любого каталога, содержащего tar-архивы пакетов pacman.

По умолчанию paccacheудаляются все кроме трех последних версий установленного пакета, но вы можете изменить этот номер с помощью -k, --keepпереключателя. Существует также -d, --dryrunпереключатель для предварительного просмотра ваших изменений. Смотрите paccache --helpдля всех переключателей.

В пакете pacman-contrib есть несколько утилит, помогающих управлять пакетами. Стоит взглянуть на них все и получить представление о том, как они работают и могут значительно упростить запуск Arch. Вы можете увидеть полный список с:

pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin/ {print $NF}'
jasonwryan
источник
jasonwryan сказал это :) Также будьте очень осторожны с двойным --cleanпереключателем: он запрещает легко возвращаться к рабочему пакету в случае возникновения проблем с последней версией (например, новый пакет опирается на более старую версию lib или Python; то же самое с аппаратным и последним ядро). Я считаю, что установка кэша pacman в другом месте, чем /гораздо лучшее решение (просто укажите путь в /etc/pacman.conf ).
tuk0z
2
Если у вас его нет, paccacheвы можете получить его, установив pacman-contribпакет.
Пфренссен
+1, но я предлагаю $ pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin\/./ {print $NF}'избежать пустой строки в результатах? ;-)
Cbhihe
Уэлп, это rm -rf /var/cache/pacman/pkgбыло не то, что нужно было сделать
Post Self
соответствующая страница ArchWiki: wiki.archlinux.org/index.php/pacman#Cleaning_the_package_cache
wxyz
13

Кэш вашего пакета находится в /var/cache/pacman/pkg/.

ПРИМЕЧАНИЕ: pacman пакеты были обновлены в 2018 году и дополнительно требуют установки pacman-contribдля использования скриптов / инструментов, как paccacheописано ниже.

Делать:

paccache -d

Чтобы сделать -dryrunи посмотреть, что запуск этой утилиты может удалить при следующем:

paccache -r

Удалить кэшированные пакеты. 17gbs звучит круто. Убедитесь, что у вас нет убегающих журналов. Делать:

du -h /var/log

Или даже просто:

du -h /var

Для более общего представления о том, что происходит.

mikeserv
источник
7

pacman -Sccделает то, что вы просите, но это не рекомендуется. Из вики

Также возможно полностью очистить папку кеша с помощью pacman -Scc , но это считается плохой практикой, так как, в дополнение к вышесказанному, она также предотвращает переустановку пакета непосредственно из папки кеша в случае необходимости, что вынуждает перезагружать это. Вы никогда не должны использовать его, если нет острой необходимости в дополнительном дисковом пространстве.

Кроме того, когда я удаляю пакеты, я предпочитаю использовать pacman -Rnsc, поскольку он также удаляет зависимости пакетов, а также пакеты, которые зависят от этого. Как всегда, внимательно прочитайте, какие пакеты удаляются, поскольку вы очень легко можете оставить нашу систему в непригодном для использования состоянии.

aprad046
источник
Это круто - так это эквивалентно rm /var/cache/pacman/pkg/*тогда? Или - это как минимум по умолчанию, наверное. Я давно переместил свой pkg-кеш /tmpна большинство машин и позволил squidобрабатывать один центральный кеш на маршрутизаторе. Не так просто, как pacman -Sccесли бы.
mikeserv
@mikeserv Центральный кэш пакетов Pacman на вашем роутере? Как вы это настроили, мне нравится его звучание, поскольку у меня есть и настольный компьютер Arch, и ноутбук.
Северно
6

Я настоятельно рекомендую использовать paccacheвместо pacman -Sc. Существует даже очень эффективный флаг для выборочного удаления версий неустановленных пакетов -u. Флаги, которые paccacheя рекомендую (как часть paccache v5.0.2):

  • -d, --dryrun: выполнить пробный прогон, только найти подходящие пакеты
  • -r, --remove: удалить пакеты-кандидаты
  • -u, --uninstalled: только целевые неустановленные пакеты
  • -k, --keep <num>: держать «num» каждого пакета в кэше (по умолчанию: 3)

Пример: проверка оставшихся версий кэша удаленных пакетов

paccache -dvuk0
strpeter
источник
1
Как это добавляет к существующим ответам, кроме распечатки вариантов?
Джейсонвриан
Если вы удалили много неиспользуемых больших пакетов, вы хотите удалить их из кэша pacman. Это возможно с флагом -uиз paccache. Примерами больших пакетов являются, например, Gnome, KDE или Texlive, чтобы дать вам идею.
strpeter
1
Да, я знаком с флагом. Моя точка зрения заключается в том, что добавление дополнительных флагов к ответу не меняет того факта, что оно просто повторяет то, что уже здесь.
Джейсонвриан
-kфлаг был новым для меня , и не очень хорошо объяснено в диалоговом окне справки, поэтому его использование здесь было полезно.
HLK