Гайд: Как сохранить вывод команды rpm -qa в файл: сортировка, фильтрация и гайд для Linux
Команда rpm -qa — это стандартный и мощный инструмент в дистрибутивах Linux на базе RPM (RHEL, CentOS, Fedora, AlmaLinux, Rocky Linux, Oracle Linux и др.) для получения списка всех установленных пакетов.
Ниже представлен подробный гайд по использованию этой команды с сохранением результата в файл, включая базовые и продвинутые сценарии.
1. Базовая команда сохранения в файл
Чтобы сохранить список всех установленных пакетов в текстовый файл, используйте оператор перенаправления вывода >:
rpm -qa > installed_packages.txt
Как это работает:
rpm— менеджер пакетов.-q(query) — режим запроса информации.-a(all) — применить запрос ко всем установленным пакетам.>— оператор перенаправления. Он берет стандартный вывод (stdout) команды и записывает его в файл.
Важно:
если файл installed_packages.txt уже существует, он будет полностью перезаписан.
2. Добавление в существующий файл (без перезаписи)
Если вы хотите добавить список пакетов в конец уже существующего файла (например, в лог), используйте двойной оператор >>:
rpm -qa >> installed_packages.txt
3. Продвинутые и полезные варианты
А. Сортировка списка по алфавиту
Стандартный вывод rpm -qa может быть неупорядоченным.
Чтобы получить аккуратный отсортированный список, используйте конвейер (|) с командой sort:
rpm -qa | sort > packages_sorted.txt
Б. Сохранение с указанием текущей даты в имени файла
Это очень удобно для создания регулярных бэкапов или аудитов системы, чтобы файлы не перезаписывали друг друга:
rpm -qa > packages_$(date +%Y-%m-%d_%H-%M).txt
Результат:
файл с именем вроде packages_2023-10-25_14-30.txt.
В. Форматированный вывод (с версиями, релизами и архитектурой)
По умолчанию rpm -qa выводит имя, версию и релиз.
Если вам нужен строгий формат (например, для миграции на другой сервер), используйте параметр --qf (или --queryformat):
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' > packages_detailed.txt
Пример строки в файле: bash-5.1.8-2.el9.x86_64
Г. Фильтрация и сохранение (поиск конкретного ПО)
Если вам нужно сохранить в файл только пакеты, связанные с определенной программой (например, nginx или kernel), используйте grep:
rpm -qa | grep -i "nginx" > nginx_packages.txt
(Ключ -i делает поиск нечувствительным к регистру).
4. Работа с правами доступа (sudo)
Сама по себе команда rpm -qa не требует прав суперпользователя (root), так как база данных RPM доступна для чтения всем пользователям.
Однако, если вы пытаетесь сохранить файл в защищенную директорию (например, /root/ или /etc/), вам понадобится sudo:
sudo rpm -qa > /root/all_packages.txt
Важное замечание:
В Bash перенаправление > выполняется правами текущего пользователя, а не через sudo. Поэтому вышеуказанная команда может выдать ошибку "Permission denied".
Правильный способ сохранить файл в защищенную директорию:
sudo sh -c 'rpm -qa > /root/all_packages.txt'
Или использовать tee:
rpm -qa | sudo tee /root/all_packages.txt > /dev/null
5. Как проверить и проанализировать полученный файл
После создания файла вы можете использовать следующие команды для работы с ним:
Посмотреть первые 10 строк:
head installed_packages.txt
Посмотреть последние 10 строк:
tail installed_packages.txt
Просматривать файл с возможностью прокрутки (постранично):
less installed_packages.txt
(Для выхода нажмите клавишу q)
Подсчитать общее количество установленных пакетов:
rpm -qa | wc -l
(Или wc -l installed_packages.txt, если файл уже создан)
6. Современная альтернатива (для Fedora, RHEL 8/9, AlmaLinux, Rocky)
Если в вашей системе используется современный менеджер пакетов dnf, вы также можете получить аналогичный (а иногда и более читаемый) список с помощью:
dnf repoquery --installed > dnf_packages.txt
Или просто:
dnf list installed > dnf_packages.txt
Этот метод также покажет репозиторий, из которого был установлен пакет, что бывает полезно при аудите.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.