Команды dnf для пользователей apt: таблица соответствий
Изучите таблицу соответствий команд apt и dnf для Rocky Linux, AlmaLinux и Fedora. Узнайте, как выполнять установку, обновление и откат транзакций без прямого аналога apt.
Краткий ответ
Переход с apt на dnf — это по большей части смена терминологии. apt install nginx заменяется на dnf install nginx. apt remove nginx заменяется на dnf remove nginx. У apt update нет прямого аналога, так как dnf самостоятельно обновляет метаданные репозиториев, когда кэшированная копия устаревает. Простая часть этого перехода умещается на одном экране. Полезная часть включает четыре операции, которые не имеют прямых соответствий: добавление репозитория, отмена транзакции, установка группы пакетов и настройка автоматических обновлений.
Все приведенные ниже команды предназначены для запуска на вашем сервере. Перед тем как ответить y, внимательно изучите сводку транзакции, которую выводит dnf, особенно при удалении пакетов.
Какие дистрибутивы используют dnf, а какие apt
dnf — это менеджер пакетов в Fedora, Red Hat Enterprise Linux (RHEL) и в дистрибутивах, основанных на RHEL: Rocky Linux, AlmaLinux и CentOS Stream. apt — это менеджер пакетов в Debian и во всех производных от него дистрибутивах, что на VPS почти всегда означает Ubuntu. Третьего варианта не существует. Если в списке образов вашего провайдера есть Rocky Linux или AlmaLinux, вы будете использовать dnf. Если Ubuntu — вы будете использовать apt.
Формат пакетов зависит от используемого инструмента. dnf устанавливает файлы .rpm, а его база данных находится в rpm. apt устанавливает файлы .deb, а его база данных находится в dpkg. Именно поэтому на страницах установки многих вендоров есть отдельные вкладки для каждого семейства, и именно поэтому .deb, загруженный со страницы релиза проекта, бесполезен в Rocky Linux.
Вне зависимости от выбранного семейства, после первого входа в систему выполняются одни и те же действия. Первые десять минут на новом VPS актуальны для обоих случаев. Меняется только команда установки.
Все команды apt и их эквиваленты в dnf
Установка, удаление, поиск и отображение информации. В обеих системах используются практически одинаковые термины.
# apt
sudo apt install nginx
sudo apt remove nginx
apt search nginx
apt show nginx
# dnf
sudo dnf install nginx
sudo dnf remove nginx
dnf search nginx
dnf info nginxapt show — это dnf info. Это единственный глагол в группе, который был переименован, но поведение команд различается, что часто сбивает пользователей с толку. dnf remove также удаляет зависимости, которые больше не требуются другим пакетам, в то время как apt remove оставляет их установленными для последующего apt autoremove. Поэтому удаление одной небольшой утилиты в Rocky Linux может привести к предложению удалить десяток библиотек вместе с ней. Читайте список перед подтверждением.
Обновление метаданных, проверка ожидающих обновлений и обновление системы.
# apt
sudo apt update
apt list --upgradable
sudo apt install --only-upgrade nginx
sudo apt upgrade
# dnf
sudo dnf makecache
dnf check-update
sudo dnf upgrade nginx
sudo dnf upgradeapt update обязательна для apt, так как apt использует любые метаданные, имеющиеся на диске, и может установить версию, которая была удалена из архива несколько месяцев назад. dnf проверяет возраст своего кэша перед каждой транзакцией и самостоятельно загружает свежие метаданные, поэтому sudo dnf makecache используется только для принудительной загрузки прямо сейчас, а не во время следующей установки.
apt разделяет полное обновление системы на две части, а dnf — нет. apt upgrade отказывается удалять любые установленные пакеты, поэтому команда останавливается, если для обновления требуется удаление какого-либо пакета. apt full-upgrade — это версия, которой разрешено удаление. У dnf нет такого ограничения, что означает, что dnf upgrade является эквивалентом apt full-upgrade, а не apt upgrade. dnf update — это старый псевдоним той же команды, который продолжает работать.
Одна деталь важна при написании скриптов: dnf check-update завершается с кодом 100, если есть ожидающие обновления, и с кодом 0, если их нет. apt list --upgradable в обоих случаях завершается с кодом 0, поэтому скриптам приходится анализировать вывод команды.
Список установленных пакетов и поиск того, какому пакету принадлежит файл.
# apt
dpkg -l
dpkg -S /usr/sbin/nginx
dpkg -L nginx
apt-file search /usr/sbin/nginx
# dnf
dnf list --installed
rpm -qf /usr/sbin/nginx
rpm -ql nginx
dnf provides /usr/sbin/nginxПоследняя строка каждого блока отвечает на вопрос, отличный от предыдущих. dpkg -S и rpm -qf ищут только среди уже установленных пакетов, отвечая на вопрос «что добавило этот файл в систему». apt-file search и dnf provides ищут в репозиториях, отвечая на вопрос «что нужно установить, чтобы получить этот файл». apt-file является отдельным пакетом в Ubuntu и требует sudo apt-file update перед первым запуском. dnf provides не требует ничего дополнительного, хотя первый запуск может быть медленным, так как dnf загружает списки файлов репозиториев для получения ответа.
Чтобы вывести список файлов внутри пакета, который вы еще не установили, используйте dnf repoquery -l nginx. В apt это apt-file list nginx.
Автоматическое удаление, очистка кэша, фиксация версии.
# apt
sudo apt autoremove
sudo apt clean
sudo apt-mark hold nginx
apt-mark showhold
sudo apt-mark unhold nginx
# dnf
sudo dnf autoremove
sudo dnf clean all
sudo dnf versionlock add nginx
dnf versionlock list
sudo dnf versionlock delete nginxversionlock не установлен по умолчанию в Rocky Linux или AlmaLinux, поэтому первая из этих строк завершится ошибкой No such command: versionlock на чистой системе. Сначала установите его с помощью sudo dnf install python3-dnf-plugin-versionlock. apt не требует ничего дополнительного для apt-mark hold, так как фиксация версии (hold) является состоянием dpkg, а не плагином.
Где нарушается соответствие: добавление репозитория
Это тот этап, на котором администраторы Ubuntu начинают искать команду, которой не существует. В dnf нет add-apt-repository, как и нет персональных архивов пакетов (PPA). PPA — это сервис, работающий на базе Launchpad, а Launchpad является инфраструктурой Ubuntu. В мире RPM нет аналогов такого хостинга.
Вместо этого dnf использует по одному текстовому файлу на каждый репозиторий в /etc/yum.repos.d/ с расширением .repo.
[docker-ce-stable]
name=Docker CE Stable
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg$releasever и $basearch — это переменные dnf. dnf подставляет номер мажорного релиза и архитектуру процессора во время выполнения, поэтому один и тот же файл работает как в версии 9, так и в версии 10, а также на x86_64 и aarch64.
Большинство поставщиков публикуют такой файл и предлагают скачать его. Официальная инструкция Docker для RHEL и его производных состоит из двух команд:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repoПервая строка нужна, так как config-manager — это плагин, а не часть самого dnf. Если пропустить её, вторая строка завершится с ошибкой No such command: config-manager. Ничто не мешает вам вручную скачать тот же файл .repo с помощью curl в /etc/yum.repos.d/, результат будет идентичным. В Установка Docker на VPS описан аналогичный процесс для Debian, где соответствующий шаг требует создания списка источников и добавления ключа подписи в два разных каталога.
Разница в структуре определяет, где искать причину, если репозиторий работает некорректно. apt хранит определения в /etc/apt/sources.list и /etc/apt/sources.list.d/, а ключи подписи — отдельно в /etc/apt/keyrings/. dnf хранит всё в /etc/yum.repos.d/, а ключ представляет собой URL внутри файла .repo, поэтому для проверки или удаления репозитория достаточно одного файла. Новые версии apt перешли к аналогичному формату deb822, где используется один файл .sources на репозиторий. Если вы уже сталкивались с ошибкой дублирования источников deb822 в Ubuntu, значит, вы уже знакомы с этой стороной работы apt.
EPEL — это репозиторий, который подразумевается в большинстве руководств
Extra Packages for Enterprise Linux (EPEL) — это проект Fedora, который собирает пакеты Fedora для RHEL и его производных. Это наиболее близкий аналог универсального PPA в мире RHEL, и огромное количество руководств исходит из того, что он уже включен. Если dnf install отвечает No match for argument на запрос пакета, который вы видите на официальном сайте проекта, EPEL — это первое, что нужно проверить.
В Rocky Linux и AlmaLinux:
sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release
sudo dnf makecacheCRB — это CodeReady Builder, репозиторий библиотек, который поставляется вместе с дистрибутивом, но не включен по умолчанию. Большинство пакетов EPEL зависят от компонентов из этого репозитория, поэтому включение EPEL без CRB не вызывает ошибку сразу. Она возникает позже, во время установки, в виде неразрешенных зависимостей для пакета, о котором вы ранее не слышали. Сначала включите CRB, и этот класс ошибок исчезнет.
В самом RHEL репозиторий CRB доступен через вашу подписку, а не через config-manager, поэтому для этого шага следуйте официальным инструкциям Red Hat по настройке EPEL. Fedora не нуждается в этих действиях, так как её основной репозиторий уже содержит то, что EPEL переносит из более новых версий. Политика EPEL заключается в том, чтобы никогда не заменять пакеты, поставляемые RHEL, поэтому добавление репозитория не меняет ничего из того, что уже установлено на вашем сервере.
dnf history undo: функция, которой нет в apt
dnf записывает каждую транзакцию и умеет выполнять обратные действия для любой из них.
sudo dnf history
sudo dnf history info 42
sudo dnf history undo 42dnf history выводит нумерованный список транзакций с указанием командной строки, которая их инициировала. undo формирует противоположную транзакцию: установленные в ходе операции пакеты удаляются, а обновленные пакеты возвращаются к предыдущей версии. Это функция, которой больше всего не хватает пользователям apt после перехода на dnf.
У этого механизма есть реальные ограничения, о которых стоит знать до того, как вы начнете на него полагаться. undo может переустановить версию пакета только в том случае, если она все еще доступна в одном из включенных репозиториев. Как только старая сборка удаляется из зеркала, отмена операции завершается ошибкой «не найдено». Откат затрагивает только базу данных пакетов. Файлы конфигурации, перезаписанные при обновлении, остаются измененными, а схема базы данных, которую сервис мигрировал при первом запуске, остается в новом состоянии. dnf возвращает файлы на место, но не восстанавливает ваши данные.
В apt нет прямого аналога. /var/log/apt/history.log записывает все произошедшие события, включая командную строку, но чтение лога не является отменой действий. Восстановление в apt выполняется вручную: запустите apt list -a nginx, чтобы увидеть, какие версии еще хранятся в архиве, затем sudo apt install nginx=<exact version string> для фиксации версии, и добавьте sudo apt-mark hold nginx, чтобы следующее обновление не отменило ваше исправление.
У групп пакетов нет аналога в apt
dnf позволяет установить именованный набор пакетов одной командой.
dnf group list
dnf group info "Development Tools"
sudo dnf group install "Development Tools"В старых руководствах встречается dnf groupinstall "Development Tools". Этот псевдоним работает в dnf 4, но отсутствует в dnf 5, поэтому двухсловный вариант dnf group install — единственный, который работает везде. Используйте его и не тратьте время на раздумья.
В apt нет групп. Ближайший аналог в Debian — метапакет, по сути пустой пакет, единственное содержимое которого — список зависимостей, например build-essential. Практическое различие заключается в процессе удаления: удаление метапакета оставляет его зависимости установленными до тех пор, пока вы не выполните apt autoremove, в то время как dnf group remove удаляет пакеты группы в рамках той же транзакции.
unattended-upgrades и dnf-automatic
Оба семейства дистрибутивов предоставляют инструменты для установки обновлений без участия пользователя. Эти инструменты объединяет только цель, но не реализация.
В Ubuntu и Debian используется пакет unattended-upgrades, который настраивается в /etc/apt/apt.conf.d/50unattended-upgrades. Там вы указываете источники, из которых разрешено загружать пакеты. В Настройке unattended-upgrades в Ubuntu описан этот файл конфигурации и вопрос автоматической перезагрузки.
В Rocky Linux, AlmaLinux и Fedora используется пакет dnf-automatic, а поведение системы определяется включенным systemd-таймером.
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic-install.timer
systemctl list-timers 'dnf-automatic*'dnf-automatic-install.timer загружает и применяет обновления. dnf-automatic-download.timer только загружает их и останавливается, оставляя установку за вами. dnf-automatic-notifyonly.timer только отправляет отчеты. Каждый из этих юнитов переопределяет параметр apply_updates в /etc/dnf/automatic.conf, поэтому выбор таймера важнее, чем настройки в файле конфигурации.
Чтобы ограничить установку только исправлениями безопасности, установите upgrade_type = security в /etc/dnf/automatic.conf. Этот фильтр работает только в том случае, если ваши репозитории публикуют данные об уязвимостях (security errata), поэтому сначала проверьте это с помощью dnf updateinfo list security. Если команда не выводит ничего при наличии доступных обновлений, значит, метаданные отсутствуют, и security не установит вообще ничего.
В Fedora начиная с dnf 5 имя юнита было изменено. Теперь это dnf5-automatic.timer, который считывает тот же файл /etc/dnf/automatic.conf.
Является ли yum всё ещё актуальной командой?
Да, но сама по себе она ничего не делает. В Rocky Linux, AlmaLinux и CentOS Stream /usr/bin/yum представляет собой символическую ссылку, указывающую на dnf. Проверьте свою систему:
ls -l /usr/bin/yum
dnf --versionСтарый синтаксис yum продолжает встречаться в руководствах, так как большая его часть по-прежнему корректно обрабатывается. yum install, yum remove и yum update работают без изменений. От одной привычки стоит отказаться: yum-config-manager всё ещё существует как отдельный бинарный файл в системах с dnf 4, однако dnf config-manager — это написание, используемое в актуальной документации, и именно оно будет работать при переходе системы на dnf 5.
dnf 4 и dnf 5: проверяйте команду перед копированием
dnf 5 — это переписанная версия, в которой изменилось написание ряда команд. В Fedora 41 и более новых версиях он поставляется как dnf. Корпоративные дистрибутивы переходят на него медленнее, поэтому не стоит полагаться только на название дистрибутива. Запустите dnf --version на своем сервере и прочитайте первую строку: именно эта цифра определяет, какой синтаксис из приведенных ниже вам нужен.
Самый наглядный пример — Docker, который публикует разные команды для подключения репозитория для каждой версии. В RHEL и его аналогах с dnf 4:
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repoВ Fedora с dnf 5:
sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repoОдин и тот же поставщик, одна и та же задача, но разные команды. В dnf 5 инструмент config-manager стал работать через подкоманды, поэтому старый флаг --add-repo больше не поддерживается, и вместо подключения репозитория вы получите ошибку использования. Еще одно изменение, с которым вы столкнетесь — включение репозитория: dnf config-manager --set-enabled crb в dnf 4 превращается в dnf config-manager setopt crb.enabled=1 в dnf 5.
Выбор, который действительно имеет значение
Выбор дистрибутива сервера исключительно на основе пакетного менеджера — неверный подход. dnf и apt выполняют одну и ту же работу, а изучение их синтаксиса занимает один вечер. На ваш рабочий год влияет модель выпуска репозиториев. Fedora обновляется быстро, и поддержка конкретного релиза прекращается примерно через тринадцать месяцев после выхода. Это подходит для рабочей станции, но создает сложности для сервера, который вы не хотите переустанавливать. Rocky Linux и AlmaLinux следуют за RHEL, поэтому вы получаете десятилетний цикл поддержки и версии пакетов, которые намеренно остаются неизменными. Ubuntu предлагает оба варианта, и разница между Ubuntu LTS и промежуточными релизами на сервере — это то же самое решение, принимаемое в рамках экосистемы apt.
По состоянию на август 2026 года все эти дистрибутивы являются стандартными образами для VPS. Выберите нужный вам цикл поддержки, а затем изучите десять команд, приведенных выше.
FAQ
Какой аналог команды apt update существует в dnf?
Отдельной команды для этого запускать не нужно. Перед каждой транзакцией dnf проверяет возраст кэшированных метаданных и загружает свежую копию, если срок действия старой истёк. Поэтому dnf install на сервере, к которому вы не обращались месяц, всё равно увидит актуальные пакеты. Команда sudo dnf makecache существует и действительно принудительно запускает загрузку, но её реальное назначение — перенести задержку на удобное для вас время, а не на момент следующей установки. Команда, отвечающая на вопрос «что ожидает обновления», — это dnf check-update, которая соответствует apt list --upgradable и завершается с кодом 100, если обновления доступны.
Существует ли аналог PPA в Rocky Linux или Fedora?
Нет. Репозитории PPA (Personal Package Archives) являются сервисом Launchpad, а Launchpad — это инфраструктура Ubuntu, поэтому для add-apt-repository нет прямого эквивалента. Аналогом в мире RPM является файл .repo в директории /etc/yum.repos.d/, содержащий имя, baseurl и gpgkey. Поставщики ПО публикуют такой файл для вас, а sudo dnf config-manager --add-repo <url> в dnf 4 или sudo dnf config-manager addrepo --from-repofile <url> в dnf 5 загружают его на место. Для получения общего дополнительного ПО обычно используется EPEL, который включается командой sudo dnf config-manager --set-enabled crb, за которой следует sudo dnf install epel-release.
Можно ли отменить обновление dnf, если оно нарушило работу сервера?
Да, в определённых пределах. Запустите sudo dnf history, чтобы найти номер транзакции, sudo dnf history info <id>, чтобы увидеть, что именно она изменила, а затем sudo dnf history undo <id>. Отмена завершится ошибкой, если старая версия пакета больше не присутствует ни в одном из включённых репозиториев, так как dnf не сможет выполнить переустановку. Кроме того, отменяются только изменения самих пакетов. Файл конфигурации, перезаписанный при обновлении, или база данных, мигрировавшая при первом запуске сервиса, останутся в изменённом состоянии. В apt вообще нет эквивалентной команды, есть только запись в /var/log/apt/history.log.
Работает ли yum в Rocky Linux и AlmaLinux?
Он работает, так как /usr/bin/yum является символической ссылкой на dnf. Проверьте это на своей системе с помощью ls -l /usr/bin/yum. Ввод yum install httpd запускает dnf, поэтому старые руководства по большей части остаются актуальными. Пишите новые скрипты и документацию с использованием dnf, так как имя yum оставлено только для совместимости, и отдавайте предпочтение dnf config-manager вместо старого бинарного файла yum-config-manager.
Почему dnf remove хочет удалить так много пакетов?
Потому что dnf удаляет зависимости, которые больше не требуются, в рамках той же транзакции, в то время как apt remove оставляет их установленными, пока вы не запустите apt autoremove отдельно. Поэтому удаление, которое выглядит незначительным в Ubuntu, в Rocky Linux может вывести длинный список. Этот список обычно корректен, но просматривайте его перед подтверждением. Если в списке есть пакет, который вы хотите сохранить, сначала установите его явно, чтобы dnf пометил его как необходимый сам по себе.