Администрирование Linux-серверов

DNF и YUM: установка, обновление и удаление пакетов

Как искать, устанавливать, обновлять и удалять RPM-пакеты через DNF в RHEL, Rocky Linux, AlmaLinux и CentOS Stream.

11 минут
абстрактная иллюстрация управления пакетами Linux-сервера
В RHEL-подобных системах сначала определите выпуск ОС, доступные команды dnf и yum, а также включённые репозитории пакетов. Затем устанавливайте пакет командой dnf install <пакет>, смотрите обновления через dnf check-update, применяйте их через dnf upgrade и удаляйте через dnf remove <пакет>. Перед подтверждением обязательно прочитайте рассчитанный план транзакции, а после операции проверьте не только версию пакета, но и нужную функцию приложения или службы.

DNF — менеджер пакетов для RPM-систем. Он получает индекс пакетов из включённых репозиториев, выбирает совместимые версии и зависимости пакетов, а затем передаёт изменения RPM-стеку в виде одной пакетной транзакции. О самом различии RPM, DEB, APT, YUM и DNF — в статье «Пакеты Linux: DEB, RPM, APT, YUM и DNF».

Не подтверждайте транзакцию автоматически

DNF до выполнения показывает, какие пакеты будут установлены, обновлены и удалены, включая зависимости. На рабочем сервере остановитесь, если план затрагивает критичные компоненты, неожиданно удаляет пакеты или меняет большой набор зависимостей. Отмена на этом этапе безопаснее исправления последствий.

Определите ОС, DNF, YUM и доступные репозитории

Первичная проверка пакетного окружения

Команды просмотра не меняют состав установленной системы. Для установки, обновления и удаления обычно требуются права суперпользователя через sudo.

  1. 1
    Узнайте дистрибутив и основной релиз
    Прочитайте /etc/os-release. Поля ID, VERSION_ID и PRETTY_NAME помогут не переносить команды между разными выпусками.
  2. 2
    Проверьте наличие DNF и YUM
    Проверьте обе команды через command -v. Наличие yum не доказывает, что это старый самостоятельный YUM: в части выпусков это совместимый интерфейс к DNF.
  3. 3
    Посмотрите включённые репозитории
    Выполните dnf repolist --enabled. Список показывает источники, из которых DNF может выбирать пакеты и обновления.
Показывает идентификацию ОС и отдельно версию запущенного ядра. Версия дистрибутива и версия ядра — разные свойства системы.
cat /etc/os-release && uname -r
Показывает доступность команд и сведения о реализации DNF. Если `yum` не найден, не создавайте ссылку вручную: используйте документированный для данного выпуска интерфейс.
command -v dnf; command -v yum; dnf --version
Выводит включённые репозитории. При необходимости `dnf repolist --all` покажет также отключённые источники.
dnf repolist --enabled

Поколение DNF и статус команды yum в охваченных основных релизах

Основной релизОсновной интерфейсПоколение DNFКоманда yum
RHEL 8 и RHEL 9dnfDNF 4Поставляется как совместимый интерфейс на базе DNF.
RHEL 10dnfDNF 4Штатная команда не поставляется; используйте dnf.
Rocky Linux 8 и 9dnfDNF 4Поставляется как совместимый интерфейс к DNF.
Rocky Linux 10dnfDNF 4Штатная команда не поставляется; используйте dnf.
AlmaLinux 8 и 9dnfDNF 4Поставляется как совместимый интерфейс к DNF.
AlmaLinux 10dnfDNF 4Штатная команда не поставляется; используйте dnf.
CentOS Stream 9dnfDNF 4Поставляется как совместимый интерфейс к DNF.
CentOS Stream 10dnfDNF 4Штатная команда не поставляется; используйте dnf.

Статус CentOS

CentOS Linux 7 и CentOS Linux 8 завершили жизненный цикл (EOL); не пытайтесь сделать такую систему поддерживаемой случайной заменой зеркал или репозиториев. CentOS Stream 9 и 10 — поддерживаемые ветви с разными сроками жизненного цикла; актуальный статус и сценарии для существующих серверов разобраны в статье о CentOS Stream и CentOS 7.

Для RHEL доступ к штатному контенту зависит от регистрации, подписки или принятого в организации режима управления контентом через Red Hat Subscription Management. Если штатные репозитории не видны, сначала проверьте регистрацию и назначенный контент, а не подключайте сторонние источники. Начальная настройка RHEL описана в инструкции по установке и регистрации RHEL.

Обновите метаданные и найдите пакет

Получение метаданных, поиск и обновление системы — разные действия. dnf makecache загружает или обновляет локальные метаданные репозиториев, но не устанавливает и не обновляет пакеты. Поиск и просмотр сведений также не меняют систему.

Обновляет локальный кэш метаданных репозиториев. При проблемах с устаревшими метаданными можно сначала выполнить `sudo dnf clean metadata`, а затем повторить команду.
sudo dnf makecache
Ищет пакеты по имени и описанию. Для точного имени удобнее после поиска запросить сведения через `dnf info <пакет>`.
dnf search <строка-поиска>
Показывает сведения о пакете: версию, архитектуру, репозиторий и описание. Установленные и доступные из репозиториев варианты выводятся в разделах `Installed Packages` и `Available Packages` соответственно.
dnf info <пакет>
Раздельно показывает доступный и установленный экземпляры пакета. Чтобы увидеть несколько доступных версий, если это поддерживает поставляемая версия DNF, используйте `dnf list --showduplicates <пакет>`.
dnf list --available <пакет>; dnf list --installed <пакет>

Установите пакет через dnf install и проверьте план

Установка пакета из репозитория

  1. 1
    Уточните имя и источник
    До установки проверьте пакет командами dnf info <пакет> или dnf list --available <пакет>. Убедитесь, что пакет предлагается ожидаемым включённым репозиторием.
  2. 2
    Рассчитайте транзакцию без выполнения
    Запустите sudo dnf install --assumeno <пакет>. DNF разрешит зависимости и выведет план, но откажется от выполнения вместо интерактивного подтверждения.
  3. 3
    Прочитайте список изменений
    Проверьте разделы с устанавливаемыми, обновляемыми и удаляемыми пакетами, размер загрузки и зависимости. Не продолжайте, если состав транзакции не соответствует задаче.
  4. 4
    Выполните установку
    Запустите sudo dnf install <пакет> и подтвердите только проверенный план. После завершения проверьте пакет и функцию приложения.
Документированный способ увидеть расчёт транзакции и не выполнять её. Интерактивный запуск без `--assumeno` также показывает план до вопроса подтверждения.
sudo dnf install --assumeno <пакет>
Устанавливает пакет из включённых репозиториев вместе с необходимыми зависимостями после подтверждения транзакции.
sudo dnf install <пакет>

Локальный RPM-пакет можно передать DNF так: sudo dnf install /путь/к/<файл>.rpm. DNF обработает зависимости через доступные репозитории, если для них есть совместимые пакеты. Используйте только RPM доверенного происхождения; настройка сторонних репозиториев, ключей и политики проверки подписей относится к разделу безопасности.

Проверьте обновления и примените dnf upgrade

Что делают похожие команды DNF

КомандаРезультатМеняет установленные пакеты
dnf makecacheЗагружает или обновляет метаданные репозиториев.Нет
dnf check-updateСравнивает установленные версии с доступными и выводит обновления.Нет
dnf upgrade <пакет>Обновляет указанный пакет и необходимые зависимости по рассчитанной транзакции.Да, после подтверждения
dnf upgradeОбновляет все подходящие установленные пакеты.Да, после подтверждения
dnf updateВ DNF 4 и DNF 5 обычно документирован как алиас upgrade; сверяйте справку целевого выпуска.Да, после подтверждения
Показывает доступные обновления, но не применяет их. В автоматизации код завершения `100` означает, что обновления найдены; `0` — что обновлений нет; `1` — ошибку. Поэтому ненулевой код `100` нельзя трактовать как сбой задания.
dnf check-update
Показывает план обновления одного пакета без выполнения. После проверки уберите `--assumeno`.
sudo dnf upgrade --assumeno <пакет>
Рассчитывает полное обновление установленной системы без выполнения. На рабочем сервере согласуйте крупную транзакцию с регламентом обновления и окном обслуживания.
sudo dnf upgrade --assumeno

Полное обновление требует отдельного планирования

Команда dnf upgrade может затронуть библиотеки, службы и ядро. Пакетная транзакция успешно завершилась — это ещё не подтверждение, что сервер не нуждается в перезагрузке и что приложение продолжит работать. Планирование окна, обновление ядра, проверка перезагрузки и реалистичный откат разобраны в статье об обновлении Linux-сервера.

Удалите пакет, ненужные зависимости и кэш

Удаление пакета через DNF

  1. 1
    Проверьте, что удаляете нужный пакет
    Посмотрите установленный экземпляр: dnf list --installed <пакет> или rpm -q <пакет>. Не путайте имя пакета с именем службы.
  2. 2
    Просмотрите план удаления
    Выполните sudo dnf remove --assumeno <пакет>. Внимательно прочитайте список удаляемых пакетов и зависимостей.
  3. 3
    Подтвердите удаление
    Если план ожидаемый, выполните sudo dnf remove <пакет> и подтвердите транзакцию.
  4. 4
    При необходимости удалите осиротевшие зависимости
    Команда sudo dnf autoremove предлагает автоматически установленные пакеты, которые больше не нужны зависимостям. Её план также нужно прочитать до подтверждения.
Рассчитывает удаление и показывает затрагиваемые зависимости без выполнения.
sudo dnf remove --assumeno <пакет>
Удаляет пакеты, которые DNF считает более не нужными автоматически установленными зависимостями. Поведение зависит от версии DNF, истории установки и конфигурации, поэтому проверяйте план.
sudo dnf autoremove

Удаление RPM не гарантирует удаления конфигурации, пользовательских файлов, баз данных и других данных приложения вне состава пакета. Также не следует считать, что remove всегда одинаково обрабатывает автоматически установленные зависимости: это зависит от конфигурации DNF и конкретной транзакции.

Очищает [кэш пакетов](/baza-znaniy/glossariy/package-cache), включая кэшированные метаданные и пакеты в пределах, определяемых реализацией DNF. Команда не удаляет установленные пакеты. После неё следующая операция может снова загрузить метаданные.
sudo dnf clean all

Проверьте пакет и работоспособность приложения

Обе проверки помогают подтвердить наличие установленного пакета и его версию. Если пакет удалён, `rpm -q` обычно сообщает, что он не установлен, и завершится с ненулевым кодом.
dnf list --installed <пакет>; rpm -q <пакет>
Выводит подробные сведения об установленном RPM: имя, версию, архитектуру, дату установки и описание.
rpm -qi <пакет>

Наличие пакета не равно работоспособности приложения. После установки или обновления проверьте профильную функцию: например, состояние нужной systemd-службы, её журнал, открытый порт либо прикладной запрос. Для служб используйте инструкцию по systemd и systemctl; если служба не запускается — порядок диагностики systemd-службы.

Посмотрите историю DNF и осторожно используйте undo или rollback

Показывает историю транзакций DNF. По идентификатору из первого столбца можно запросить детали конкретной операции.
dnf history
Выводит состав выбранной транзакции: какие пакеты были установлены, обновлены, удалены или понижены.
dnf history info <ID>
Пытается обратить одну указанную транзакцию. Сначала DNF рассчитает новый план — прочитайте его до подтверждения.
sudo dnf history undo <ID>
Пытается отменить транзакции, выполненные после указанной. Это не снимок состояния системы и не замена резервного копирования.
sudo dnf history rollback <ID>

История DNF не гарантирует полный откат

dnf history undo и dnf history rollback формируют новую транзакцию на основе текущего состояния и доступных репозиториев. Операция может не выполниться, если прежние версии пакетов уже недоступны, изменились зависимости или сторонние пакеты. Она не возвращает изменения в конфигурациях, пользовательских данных, базах данных и файлах, которые изменялись вне пакетной транзакции.

Не смешивайте пакеты и репозитории разных основных выпусков или разных дистрибутивов без документированной совместимости. Даже если DNF сумел рассчитать транзакцию, её результат может создать конфликтующие или неподдерживаемые зависимости. Для сообщения «ошибка зависимостей dnf» сначала проверяйте выпуск ОС, включённые источники, доступные версии и план транзакции; подробный порядок разбора приведён в статье «Не устанавливаются пакеты в Linux: блокировки, зависимости и ошибки APT/DNF».

Термины в статье

Зависимость пакета — требование пакета к другому пакету или его версии, без выполнения которого установка, запуск либо корректное обновление ПО невозможны или ограничены.
Индекс пакетов — набор метаданных репозитория, содержащий сведения о версиях, зависимостях, архитектурах и расположении доступных пакетов.
Кэш пакетов — локально сохранённые менеджером пакетов архивы пакетов и, в зависимости от реализации, метаданные репозиториев для повторного использования.
Менеджер пакетов — средство установки, обновления, удаления и учёта программных пакетов; высокоуровневые менеджеры также работают с репозиториями и разрешают зависимости.
Пакетная транзакция — согласованный набор действий по установке, обновлению, удалению и настройке пакетов, формируемый менеджером пакетов в рамках одной команды или задания.
Репозиторий пакетов — структурированный источник пакетов и метаданных, из которого менеджер пакетов получает версии ПО, зависимости, обновления и информацию о подписях.
Системная служба — программный компонент, которым ОС управляет как логической единицей для фонового выполнения задач или предоставления функций программам и пользователям.
Удержание пакета — состояние пакета, запрещающее менеджеру пакетов автоматически устанавливать, обновлять, удалять или менять его версию.
AlmaLinux — корпоративный дистрибутив Linux, поддерживаемый сообществом и AlmaLinux OS Foundation, ориентированный на совместимость с интерфейсами и экосистемой RHEL.
APT — система управления пакетами в Debian-подобных Linux, которая получает пакеты из репозиториев, разрешает зависимости и передаёт установку низкоуровневому менеджеру dpkg.
CentOS Linux — прекращённый свободно доступный дистрибутив Linux, создававшийся из исходных пакетов RHEL и ориентированный на бинарную совместимость с соответствующим выпуском RHEL.
CentOS Stream — дистрибутив Linux с непрерывной поставкой пакетов, формирующих следующую минорную версию Red Hat Enterprise Linux; он расположен между Fedora и RHEL.
DEB-пакет — архивный формат распространения ПО в Debian-совместимых Linux, содержащий файлы программы, метаданные и сведения о зависимостях.
DNF — менеджер пакетов для RPM-дистрибутивов, разрешающий зависимости и выполняющий операции с репозиториями; в современных системах он заменил классический YUM.
EOL — установленная поставщиком дата или стадия завершения жизненного цикла версии ПО либо модели оборудования; её последствия определяются политикой поставщика.
Red Hat Subscription Management — служба и набор средств Red Hat для регистрации RHEL-систем в организации и управления их доступом к репозиториям и контенту по её подпискам.
RHEL — корпоративный дистрибутив Linux от Red Hat с фиксированными основными версиями, сертификационной экосистемой и моделью сопровождения, зависящей от подписки.
Rocky Linux — корпоративный дистрибутив Linux, создаваемый из исходных пакетов экосистемы RHEL и ориентированный на совместимость с RHEL без использования его товарных знаков.
RPM-пакет — файл формата RPM для распространения бинарного ПО или исходного кода. Он содержит метаданные и обычно полезную нагрузку; зависимости и сценарии необязательны.
YUM — менеджер пакетов для RPM-дистрибутивов Linux, который устанавливает, обновляет и удаляет ПО, автоматически разрешая зависимости из репозиториев.

Вопросы по теме

Все вопросы и ответы

Можно ли использовать yum вместо dnf?

Сначала проверьте доступные команды: command -v dnf; command -v yum; dnf --version. Наличие yum не означает, что на сервере используется старый самостоятельный YUM: в указанных выпусках 8 и 9 это совместимый интерфейс к DNF.

Для RHEL 8–9, Rocky Linux 8–9 и AlmaLinux 8–9 основным интерфейсом является dnf, а yum доступен для совместимости. В RHEL 10, Rocky Linux 10 и AlmaLinux 10 штатная команда yum не поставляется. В CentOS Stream 9 и 10 также используйте dnf.

Если yum не найден, не создавайте символическую ссылку и не устанавливайте её случайным способом. Используйте интерфейс, документированный для конкретного выпуска ОС: как правило, это dnf.

Отличается ли dnf update от dnf upgrade?

Обычно нет: в DNF 4 и DNF 5 команда dnf update документируется как алиас dnf upgrade. Обе команды меняют установленные пакеты только после подтверждения рассчитанной транзакции. Для целевого выпуска всё же проверьте встроенную справку, прежде чем включать команду в регламент или автоматизацию.

Что делать при ошибке зависимостей DNF?

Ошибка зависимостей не означает, что нужно сразу подключать случайный сторонний репозиторий или принудительно менять пакеты. Сначала определите дистрибутив и основной релиз по /etc/os-release, затем посмотрите включённые источники командой dnf repolist --enabled.

Проверьте, какие версии доступны и установлены: используйте dnf info <пакет>, dnf list --available <пакет> и dnf list --installed <пакет>. Перед изменением системы рассчитайте операцию без выполнения, например sudo dnf install --assumeno <пакет> или sudo dnf upgrade --assumeno <пакет>, и прочитайте список устанавливаемых, обновляемых и удаляемых пакетов.

Не смешивайте репозитории и RPM-пакеты разных основных релизов либо разных дистрибутивов без подтверждённой совместимости. Если штатные репозитории RHEL не видны, сначала проверьте регистрацию, подписку и назначенный контент, а не подключайте сторонние источники.

Удалит ли dnf remove конфигурацию и данные приложения?

Нет, удаление RPM не гарантирует удаления конфигурации, пользовательских файлов, баз данных и других данных приложения вне состава пакета. Перед удалением проверьте план через sudo dnf remove --assumeno <пакет>: он покажет затрагиваемые пакеты и зависимости, но не заменяет проверку данных приложения.

Можно ли полностью откатить обновление через dnf history rollback?

Сначала посмотрите историю командой dnf history и изучите нужную операцию через dnf history info <ID>. Для отмены одной транзакции применяется sudo dnf history undo <ID>, а sudo dnf history rollback <ID> пытается отменить транзакции, выполненные после указанной.

Обе команды рассчитывают новую транзакцию исходя из текущего состояния сервера и доступных репозиториев. Поэтому DNF может не суметь выполнить откат, если прежние версии пакетов больше недоступны, изменились зависимости либо в системе есть сторонние пакеты. Перед подтверждением обязательно проверьте рассчитанный план.

История DNF не возвращает изменения конфигураций, пользовательских данных, баз данных и файлов, изменённых вне пакетной транзакции. Для таких данных требуется отдельная стратегия резервного копирования и восстановления.