Все об Arch Linux

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

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 перестанет быть страшной процедурой.

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



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

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

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

Комментарии

Загрузка…

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

Telegram Max