Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Как узнать, какие пакеты занимают место

Сразу к делу: топ самых больших установленных пакетов показывает команда expac -H M '%m\t%n' | sort -rh | head -20 после установки expac (pacman -S expac). Размер одного пакета смотрит pacman -Qi <имя> в поле Installed Size. Если ставить ничего не хочется, подойдёт однострочник на awk. А когда место съедают не пакеты, а логи и кэши, на помощь приходит ncdu /.

Куда уходит место на диске?

Прежде чем искать виноватых, пойми, где вообще живёт место. Быстрая проверка: df -h покажет заполненность разделов, а du -xhd1 / выведет размеры каталогов первого уровня.

  • /usr: файлы установленных пакетов, бинарники, библиотеки, документация. Именно этот объём считает pacman.
  • /var/cache/pacman/pkg: скачанные архивы пакетов. Здесь копятся все версии, которые ты когда-либо ставил, пока их не почистишь. Про чистку кэша рассказано в статье «Чистка кэша пакетов paccache».
  • /var/lib: базы pacman, состояние системы, логи сервисов.
  • /home: твои файлы, ~/.cache, flatpak, docker, snap.

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

Как узнать размер одного пакета?

pacman -Qi показывает подробную информацию о пакете, включая размер:

pacman -Qi firefox

В выводе ищи поле Installed Size (на русской локали оно называется «Установленный размер»). Это размер распакованных файлов на диске, а не размер скачанного архива. Архив сжат, поэтому весит меньше.

Размер до установки смотрит pacman -Si <имя>. Там есть поля Download Size и Installed Size. Проверяй их перед установкой тяжёлого софта, чтобы не удивиться потом.

Полный разбор команд pacman есть в статье «pacman от А до Я: команды».

Как найти самые большие установленные пакеты?

pacman -Qi без аргументов вываливает информацию по всем пакетам сразу, читать её нереально. Для этого есть expac, утилита, которая выводит данные из базы pacman в удобном формате.

pacman -S expac

Топ-20 самых больших пакетов по размеру на диске:

expac '%m %n' | sort -rh | head -20

%m выводит размер в байтах, %n имя пакета. sort -rh сортирует по убыванию, head -20 оставляет первые двадцать строк.

Числа в байтах неудобно читать. Добавь флаг -H M, чтобы expac сам перевёл размеры в мегабайты:

expac -H M '%m\t%n' | sort -rh | head -20

Вывод станет примерно таким:

1130.37M xonotic-data
599.63M wine
502.84M yandex-browser

-H M задаёт формат человекочитаемых размеров, \t вставляет табуляцию между размером и именем.

Важно: expac показывает размер только самого пакета, без зависимостей. И это размер установленных файлов, а не кэша. Кэш считается отдельно: du -sh /var/cache/pacman/pkg.

Отдельно expac умеет показывать размер скачивания. Флаг -S заставляет его работать с синхронизационными базами, а %k выводит размер архива:

expac -S -H M '%k\t%n' | sort -rh | head -20

Разница между %k и %m это разница между сжатым архивом и распакованными файлами.

expac читает те же базы, что и pacman: /var/lib/pacman/local для установленных пакетов и /var/lib/pacman/sync для репозиториев. Где именно лежат базы и что в них хранится, разобрано в статье «Базы pacman: где лежат».

Хочешь весь список, а не топ-20? Убери head -20 и сохрани вывод в файл:

expac -H M '%m\t%n' | sort -rh > packages.txt

Как обойтись без expac?

Если ставить лишние утилиты не хочется, тот же результат даёт однострочник на awk. Он разбирает вывод pacman -Qi и сортирует размеры:

LC_ALL=C.UTF-8 pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | LC_ALL=C.UTF-8 sort -h | tail -20

LC_ALL=C.UTF-8 в начале заставляет pacman выводить поля на английском, чтобы awk понимал, что искать. Это работает на любой локали. sort -h понимает суффиксы KiB, MiB и GiB, поэтому сортирует размеры правильно. Самые большие пакеты окажутся в конце списка.

На системе с тысячей пакетов однострочник работает пару секунд. Это нормально, pacman перебирает базу целиком.

Как посчитать размер пакета вместе с зависимостями?

expac показывает размер одного пакета. А сколько места занимает программа со всеми зависимостями? Собери список зависимостей через %D и прогони по нему expac:

for p in $(expac '%D' firefox); do expac -H M '%m %n' "$p"; done | sort -rh

expac '%D' firefox выводит список зависимостей пакета. Дальше цикл печатает размер каждой из них, а sort -rh сортирует по убыванию.

Если нужна точная сумма, выводи размеры в байтах и сложи их awk:

for p in $(expac '%D' firefox); do expac '%m %n' "$p"; done | awk '{s+=$1} END {printf "%.0f MiB\n", s/1048576}'

Учти: в список попадут и опциональные зависимости, которые можно не ставить. Они только раздувают сумму.

Как почистить кэш pacman?

Кэш pacman растёт незаметно. Каждое обновление добавляет в /var/cache/pacman/pkg новые архивы, а старые версии остаются. Посмотри, сколько места он занимает:

du -sh /var/cache/pacman/pkg

Если там гигабайты, пора чистить. Стандартный инструмент paccache входит в пакет pacman-contrib:

pacman -S pacman-contrib
paccache -rk1

-rk1 оставляет по одной последней версии каждого пакета и удаляет остальные. Флаг -r значит remove, -k1 количество хранимых версий. Для полной зачистки кэша:

paccache -ruk0

-u включает режим uninstalled: удаляются архивы пакетов, которых уже нет в системе. -k0 не оставляет ни одной версии. После этой команды в кэше останутся только архивы установленных пакетов.

Если нужна конкретная старая версия пакета, не спеши чистить всё подряд. Из кэша можно поставить любую сохранённую версию, как это сделать, рассказано в статье «Установка конкретной версии из кэша».

Есть и грубый способ: pacman -Sc удалит из кэша всё, что не установлено. Но он не оставляет запасных версий, поэтому paccache предпочтительнее.

Как найти самые большие файлы и каталоги?

Пакеты найдены, но место всё равно куда-то девается. Тогда ищи большие файлы напрямую. Размеры каталогов первого уровня:

du -xhd1 / | sort -rh | head -20

-x не выходит за пределы файловой системы, -h человекочитаемые размеры, -d1 глубина один уровень. Так ты увидишь, какой каталог раздулся сильнее всего.

Отдельные файлы больше гигабайта ищет find:

find / -xdev -type f -size +1G -exec ls -lh {} \; 2>/dev/null

-xdev снова ограничивает поиск одной файловой системой, -size +1G файлы больше гигабайта, 2>/dev/null прячет ошибки доступа к чужим каталогам.

Что занимает место вне пакетов?

Пакеты не единственный пожиратель диска. Логи, кэши браузеров, старые ядра, docker-образы, flatpak: всё это pacman не видит. Чтобы найти таких «невидимок», используй ncdu, интерактивный анализатор диска:

pacman -S ncdu
ncdu /

Откроется экран со списком каталогов, отсортированных по размеру. Стрелками ходишь по дереву, d удаляет выбранное, ? показывает справку. Запусти ncdu / и сразу увидишь, что на самом деле забивает диск.

Логи journald тоже умеют разрастаться. Проверь:

journalctl --disk-usage

Если журнал съел сотни мегабайт, ограничь его:

journalctl --vacuum-size=200M

Старые ядра копятся в /boot и /usr/lib/modules при каждом обновлении. Как их чистить, рассказано в статье «Чистка старых ядер».

На btrfs место съедают снапшоты. snapper list покажет их список, удаление лишних вернёт гигабайты.

Если корневой раздел заполняется регулярно, почитай статью «Корневой раздел заполняется».

Как освободить место, удаляя большие пакеты?

Когда топ-20 готов, посмотри, что из списка тебе реально не нужно. Обычно это игры, тяжёлые приложения, пакеты с лишними локалями и документацией.

Перед удалением проверь, что уйдёт вместе с пакетом:

pacman -Rns имя-пакета

Флаг -R удаляет пакет, -s подтягивает зависимости, которые больше никому не нужны, -n убирает конфиги. Сначала pacman покажет список того, что собирается удалить. Прочитай его внимательно: вместе с пакетом могут уйти зависимости, которые ты ставил осознанно. Как отличить лишние зависимости от нужных, рассказано в статье «Зависимости: опциональные и лишние».

Посмотреть список удаляемого без самого удаления можно так:

pacman -Rns --print имя-пакета

--print выводит, что было бы удалено, и ничего не трогает. Удобно для проверки перед решительным шагом.

Ещё один источник мусора: осиротевшие пакеты, которые остались после удаления программ.

pacman -Qtdq | pacman -Rns -

Эта команда удаляет все пакеты, которые не нужны ни одному установленному приложению. Перед запуском тоже посмотри список.

Что делать, если место заканчивается постоянно?

Если диск забивается снова и снова, одного раза мало. Заведи привычку проверять систему по плану.

  1. df -h покажет, какой раздел в красной зоне.
  2. ncdu / найдёт, что растёт быстрее всего.
  3. journalctl --vacuum-size=200M подрежет логи.
  4. paccache -rk1 оставит в кэше только свежие версии.
  5. pacman -Qtdq | pacman -Rns - уберёт сирот.
  6. Старые ядра чисти раз в пару месяцев.

Регулярная проверка по этому списку занимает пару минут и избавляет от сюрпризов. Большинство проблем с местом решаются этими командами, а не удалением любимых программ.

Частые вопросы

Почему размер в pacman -Qi не совпадает с размером файла в кэше?

Installed Size это размер распакованных файлов на диске. Архив в /var/cache/pacman/pkg сжат (zst), поэтому весит меньше. Разница может быть в разы.

expac показывает размер вместе с зависимостями?

Нет, только сам пакет. Если хочешь узнать, сколько места занимает программа со всеми зависимостями, сложи размеры вручную или посмотри на pacgraph.

Что такое pacgraph и нужен ли он?

pacgraph рисует граф зависимостей пакетов с размерами. Выглядит красиво, но для поиска больших пакетов избыточен: expac решает задачу одной строкой. Ставь pacgraph только если хочется наглядной картинки.

Почему сумма размеров пакетов не совпадает с du -sh /usr?

Потому что expac суммирует размеры файлов каждого пакета, а файлы бывают общими. Жёсткие ссылки: один и тот же файл числится в нескольких пакетах, а на диске занимает одно место. На btrfs к этому добавляется сжатие и reflinks. Поэтому реально занятое место почти всегда меньше суммы из expac.

Как часто проверять размеры пакетов?

Регулярно не нужно. Достаточно запускать expac, когда место заканчивается или перед установкой тяжёлого софта.

Полезные ресурсы

Заключение

Чтобы узнать, какие пакеты занимают место, достаточно одной команды: expac -H M '%m\t%n' | sort -rh | head -20. Размер одного пакета смотрит pacman -Qi, а без дополнительных утилит справится однострочник на awk. Помни, что пакеты не единственный источник проблем: кэш pacman чистится paccache, а всё остальное ищет ncdu /. Удаляй большие пакеты через pacman -Rns, предварительно проверив список удаляемого.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max