pacman -Qe и -Qq: экспорт списка пакетов
Резервная копия списка пакетов в Arch Linux делается двумя командами: pacman -Qeq > pkgs.txt сохраняет явно установленные пакеты из официальных репозиториев, а pacman -Qmq > aur-pkgs.txt: пакеты из AUR. На чистой системе всё восстанавливается одной командой pacman -S - < pkgs.txt и отдельной сборкой AUR-пакетов. Разница между -Qq и -Qe простая: -Qq выводит имена всех установленных пакетов, а -Qe только те, что ты поставил явно.
Чем отличаются pacman -Qq и pacman -Qe?
Обе команды работают с локальной базой pacman, но отвечают на разные вопросы.
pacman -Qq это список всех установленных пакетов, только имена, по одному в строке. Сюда входят и зависимости, которые pacman поставил автоматически. Такой список длинный и для резервной копии не годится: при восстановлении получишь кучу лишнего, а часть пакетов может быть уже не нужна.
pacman -Qe это явно установленные пакеты, в человеческом формате: имя и версия в колонках. Это те пакеты, которые ты сам выбрал при установке. Зависимости сюда не попадают.
pacman -Qeq это то же самое, но только имена, без версий. Вот это и есть полезная резервная копия.
pacman -Qmq это иностранные пакеты, только имена. «Иностранные» значит не из официальных репозиториев: AUR, ручная сборка из PKGBUILD, локальные пакеты. Этот список критичен, потому что из официальных репозиториев такие пакеты не восстановить.
Посмотри на вывод вживую:
pacman -Qq | head -5 # имена всех пакетов
pacman -Qe | head -5 # имя и версия, колонками
pacman -Qeq | head -5 # только имена явных пакетов
pacman -Qmq | head -5 # только имена AUR-пакетов
Разница видна сразу: -Qe печатает две колонки, а с флагом -q остаются голые имена. Именно голые имена нужны для восстановления, версии pacman подберёт сам.
Полный набор флагов разобран в статье «pacman от А до Я: команды».
Почему -Qq не подходит для бэкапа
Список -Qq включает зависимости. При восстановлении pacman и так подтянет их автоматически, поэтому хранить их в списке бессмысленно. Хуже того: в списке окажутся пакеты-сироты, которые остались после удаления программ. При восстановлении они вернутся на место и будут висеть мёртвым грузом.
Ещё нюанс: -Qq не отличает официальные пакеты от AUR. Восстановить такой список одной командой не выйдет, pacman просто не найдёт AUR-пакеты в репозиториях и остановится с ошибкой.
Зачем нужен отдельный список для AUR
Пакеты из AUR живут только в твоей системе. Их нет в официальных репозиториях, поэтому pacman -S их не найдёт. Если не сохранить список отдельно, после переустановки придётся вспоминать, что ты ставил из AUR. Поэтому pacman -Qmq всегда сохраняй в отдельный файл.
Причём тут -Qtt
pacman -Qtt показывает пакеты-сироты: те, что не нужны ни одной программе в системе. Среди них попадаются и явно установленные пакеты, от которых ты давно отказался. Перед созданием бэкапа полезно прогнать этот список:
pacman -Qtt
Если увидишь знакомые имена, удали их через pacman -Rns, и только потом сохраняй список. Так в бэкап не попадут пакеты, которые ты всё равно не используешь.
Как отличить официальные пакеты от AUR
Флаг -m в -Qm означает «foreign», пакеты, которых нет в официальных репозиториях. Обратный флаг -n показывает только родные пакеты из репозиториев Arch:
pacman -Qnq # только официальные пакеты
pacman -Qmq # только AUR и локальные сборки
Вместе они покрывают всю систему без пересечений. Поэтому бэкап из двух файлов (-Qeq и -Qmq) не теряет ни одного пакета: официальные восстанавливаются через pacman, AUR через yay или makepkg.
Как сделать резервную копию списка пакетов?
Две команды, два файла:
pacman -Qeq > pkgs.txt
pacman -Qmq > aur-pkgs.txt
Проверь результат:
wc -l pkgs.txt aur-pkgs.txt
Файлы маленькие, сотни строк. Храни их вне машины: в Git-репозитории, в облаке, на флешке. Список пакетов бесполезен, если он лежит на диске, который сломался.
Обновляй бэкап после каждой заметной установки или удаления. Пара команд занимает секунду, а свежий список залог того, что восстановление пройдёт без сюрпризов.
Как восстановить пакеты на чистой системе?
После установки Arch Linux и подключения интернета выполни:
pacman -Syu
pacman -S - < pkgs.txt
Первая команда обновляет базу пакетов и саму систему, вторая читает список из стандартного ввода. Знак - вместо имени пакета говорит pacman читать список из stdin. Он установит все явные пакеты из официальных репозиториев вместе с зависимостями.
Если в списке есть опечатка или пакет удалили из репозитория, pacman остановится с ошибкой «target not found» и укажет имя. Это хороший сигнал: ты сразу узнаешь о проблеме, а не получишь полуустановленную систему. Поправь имя в файле и запусти команду снова.
Теперь AUR:
yay -S - < aur-pkgs.txt
yay умеет читать список из stdin так же, как pacman. Он сам соберёт пакеты из AUR и подтянет недостающие зависимости. Если yay не установлен, поставь его первым делом или собирай каждый пакет через makepkg -si вручную.
Точные версии пакетов список не хранит: -Qeq сохраняет только имена. Если нужна конкретная версия, бери её из кеша pacman или из архива, об этом рассказано в статьях «Установка конкретной версии из кеша» и «Arch Linux Archive: откат пакетов».
Как найти пакеты, которых не хватает системе?
Список пригодится не только при полной переустановке. Если система частично потеряла пакеты или ты переносишь окружение на другую машину, сравни списки:
comm -23 pkgs.txt <(pacman -Qq)
comm -23 выводит строки, которые есть только в первом файле: пакеты из бэкапа, которых нет в текущей системе. Оба списка отсортированы, поэтому comm работает корректно. Дальше просто установи найденное:
pacman -S - < <(comm -23 pkgs.txt <(pacman -Qq))
Обратная проверка: что есть в системе, но нет в бэкапе:
comm -13 pkgs.txt <(pacman -Qq)
Так ты увидишь пакеты, установленные после последнего сохранения списка.
Как проверить список перед восстановлением?
Перед тем как скормить список pacman, убедись, что он в порядке. Три быстрые проверки:
wc -l pkgs.txt # размер списка
sort pkgs.txt | uniq -d # дубликаты, если есть
grep -E "[^a-z0-9@+._-]" pkgs.txt # подозрительные символы
Дубликаты pacman переживёт, но лучше убрать их заранее. Подозрительные символы в именах это признак битого файла: например, если список редактировали в Windows и туда попали символы переноса строки \r. Такой мусор pacman примет за имя пакета и остановится с ошибкой.
Если восстанавливаешь пакеты на живой системе, добавь флаг --needed, pacman пропустит уже установленные пакеты и не будет переустанавливать их без причины:
pacman -S --needed - < pkgs.txt
Это удобно при переносе окружения на вторую машину: часть пакетов уже стоит, и pacman не трогает лишнего.
Что ещё включить в резервную копию системы?
Список пакетов восстанавливает только программы. Конфиги он не трогает: настройки живут в /etc и в домашнем каталоге. Полноценный план восстановления выглядит так:
pacman -Qeq > pkgs.txt: официальные пакеты;pacman -Qmq > aur-pkgs.txt: AUR;- копия
/etc: системные конфиги; - dotfiles из домашнего каталога: настройки программ.
С таким набором систему можно воспроизвести за полчаса: свежая установка, список пакетов, конфиги на место. Копию /etc удобно делать через tar или rsync, а dotfiles держать в Git-репозитории, история изменений сохранится сама. Подробный разбор переноса окружения в статье «Миграция с другой Arch-системы».
Кстати, pacman -Qtt покажет пакеты-сироты, которые не нужны ни одной программе. Перед созданием бэкапа полезно прогнать этот список и почистить систему, тогда и список пакетов будет чище.
Как автоматизировать бэкап
Ручной запуск двух команд легко забыть. Поставь простой systemd-таймер, который раз в неделю сохраняет списки в домашний каталог:
mkdir -p ~/.backup/pacman
pacman -Qeq > ~/.backup/pacman/pkgs.txt
pacman -Qmq > ~/.backup/pacman/aur-pkgs.txt
Три строки в скрипте, таймер на неделю, и списки всегда свежие. Дальше синхронизируй каталог ~/.backup с облаком или Git-репозиторием, и бэкап переживёт даже полную потерю диска.
Частые вопросы
Нужно ли сохранять список зависимостей?
Нет. Зависимости pacman подтянет автоматически при установке явных пакетов. Список -Qeq это минимальный набор, из которого система соберётся целиком.
Что делать, если pacman не нашёл пакет из списка?
Ошибка «target not found» означает опечатку в имени или удаление пакета из репозитория. Проверь имя, поправь файл и запусти установку снова. Ошибка на раннем этапе это плюс: ты узнаёшь о проблеме сразу, а не после перезагрузки.
Чем восстановление из списка отличается от переустановки всех пакетов?
Переустановка всех пакетов перезаписывает файлы поверх текущей системы и чинит сломанные программы. Восстановление из списка ставит пакеты на чистую установку. Первое: ремонт, второе: сборка заново.
Можно ли восстановить точные версии пакетов?
Список хранит только имена. Точные версии достаются из кеша pacman (/var/cache/pacman/pkg) или из Arch Linux Archive. Ссылки на разборы выше.
Что делать, если список потерян?
Собери его заново из кеша pacman: каждая папка в /var/cache/pacman/pkg хранит установленные пакеты, а каталог /var/lib/pacman/local информацию о каждом пакете. Из последнего список восстанавливается командой ls /var/lib/pacman/local | grep -v ALPM. Список будет не таким чистым, как -Qeq, но лучше, чем ничего.
Полезные ресурсы
- Pacman/Tips and tricks (ArchWiki): раздел о резервном копировании и восстановлении списков пакетов.
- Pacman (ArchWiki): полная документация по командам пакетного менеджера.
Заключение
pacman -Qeq и pacman -Qmq это две команды, которые превращают твою систему в воспроизводимый набор текстовых файлов. Официальные пакеты восстанавливаются одной строкой pacman -S - < pkgs.txt, AUR через yay -S - < aur-pkgs.txt. Добавь к спискам копию /etc и dotfiles, и переустановка Arch Linux перестанет быть страшной процедурой.
Главное правило простое: храни списки вне машины и обновляй их регулярно. Тогда любая поломка диска, переезд на новое железо или чистая установка превращаются в рутину на полчаса, а не в неделю восстановления по памяти.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии