Резервная копия списка пакетов в Arch Linux делается двумя командами: pacman -Qeq > pkgs.txt сохраняет явно установленные пакеты из официальных репозиториев, а pacman -Qmq > aur-pkgs.txt — пакеты из AUR. На чистой системе всё восстанавливается одной командой pacman -S - < pkgs.txt и отдельной сборкой AUR-пакетов. Разница между -Qq и -Qe простая: -Qq выводит имена всех установленных пакетов, а -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 включает зависимости. При восстановлении pacman и так подтянет их автоматически, поэтому хранить их в списке бессмысленно. Хуже того: в списке окажутся пакеты-сироты, которые остались после удаления программ. При восстановлении они вернутся на место и будут висеть мёртвым грузом.
Ещё нюанс: -Qq не отличает официальные пакеты от AUR. Восстановить такой список одной командой не выйдет — pacman просто не найдёт AUR-пакеты в репозиториях и остановится с ошибкой.
Пакеты из AUR живут только в твоей системе. Их нет в официальных репозиториях, поэтому pacman -S их не найдёт. Если не сохранить список отдельно, после переустановки придётся вспоминать, что ты ставил из AUR. Поэтому pacman -Qmq всегда сохраняй в отдельный файл.
pacman -Qtt показывает пакеты-сироты: те, что не нужны ни одной программе в системе. Среди них попадаются и явно установленные пакеты, от которых ты давно отказался. Перед созданием бэкапа полезно прогнать этот список:
pacman -Qtt
Если увидишь знакомые имена — удали их через pacman -Rns, и только потом сохраняй список. Так в бэкап не попадут пакеты, которые ты всё равно не используешь.
Флаг -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 — системные конфиги;С таким набором систему можно воспроизвести за полчаса: свежая установка, список пакетов, конфиги на место. Копию /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 — это минимальный набор, из которого система соберётся целиком.
Ошибка «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 -Qeq и pacman -Qmq — две команды, которые превращают твою систему в воспроизводимый набор текстовых файлов. Официальные пакеты восстанавливаются одной строкой pacman -S - < pkgs.txt, AUR — через yay -S - < aur-pkgs.txt. Добавь к спискам копию /etc и dotfiles — и переустановка Arch Linux перестанет быть страшной процедурой.
Главное правило простое: храни списки вне машины и обновляй их регулярно. Тогда любая поломка диска, переезд на новое железо или чистая установка превращаются в рутину на полчаса, а не в неделю восстановления по памяти.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии