Сразу к делу: топ самых больших установленных пакетов показывает команда 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
Если ставить лишние утилиты не хочется, тот же результат даёт однострочник на 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 растёт незаметно. Каждое обновление добавляет в /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 -
Эта команда удаляет все пакеты, которые не нужны ни одному установленному приложению. Перед запуском тоже посмотри список.
Если диск забивается снова и снова, одного раза мало. Заведи привычку проверять систему по плану.
df -h покажет, какой раздел в красной зоне.ncdu / найдёт, что растёт быстрее всего.journalctl --vacuum-size=200M подрежет логи.paccache -rk1 оставит в кэше только свежие версии.pacman -Qtdq | pacman -Rns - уберёт сирот.Регулярная проверка по этому списку занимает пару минут и избавляет от сюрпризов. Большинство проблем с местом решаются этими командами, а не удалением любимых программ.
Installed Size это размер распакованных файлов на диске. Архив в /var/cache/pacman/pkg сжат (zst), поэтому весит меньше. Разница может быть в разы.
Нет, только сам пакет. Если хочешь узнать, сколько места занимает программа со всеми зависимостями, сложи размеры вручную или посмотри на pacgraph.
pacgraph рисует граф зависимостей пакетов с размерами. Выглядит красиво, но для поиска больших пакетов избыточен: expac решает задачу одной строкой. Ставь pacgraph только если хочется наглядной картинки.
Потому что expac суммирует размеры файлов каждого пакета, а файлы бывают общими. Жёсткие ссылки: один и тот же файл числится в нескольких пакетах, а на диске занимает одно место. На btrfs к этому добавляется сжатие и reflinks. Поэтому реально занятое место почти всегда меньше суммы из expac.
Регулярно не нужно. Достаточно запускать expac, когда место заканчивается или перед установкой тяжёлого софта.
Чтобы узнать, какие пакеты занимают место, достаточно одной команды: expac -H M '%m\t%n' | sort -rh | head -20. Размер одного пакета смотрит pacman -Qi, а без дополнительных утилит справится однострочник на awk. Помни, что пакеты не единственный источник проблем: кэш pacman чистится paccache, а всё остальное ищет ncdu /. Удаляй большие пакеты через pacman -Rns, предварительно проверив список удаляемого.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии