Команда dnf: установка, обновление и удаление пакетов и отличия от yum

Тестовая средаСемейство RHELAlmaLinux 9.8Учётная запись rootПроверено 2026-10-28
Команды для пакетовdnfРасположение/usr/bin/dnf

Команда dnf — это команда управления пакетами в Linux семейства RHEL, которая ищет, устанавливает, обновляет и удаляет пакеты. В AlmaLinux 9 при вводе yum запускается та же программа. На сервере AlmaLinux 9 мы на практике выполнили search, info, provides и history и по выводу проверили, где ищет каждая из команд поиска пакетов search, info и provides и какие записи о работе остаются в history.

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

1️⃣ Связь команды dnf и yum

Легко решить, что при вводе yum запускается старый yum, но в AlmaLinux 9 и yum, и dnf — это ссылки на один и тот же исполняемый файл dnf-3.

ls -l /usr/bin/yum /usr/bin/dnf
lrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/dnf -> dnf-3
lrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/yum -> dnf-3

yum и dnf отличаются только вводимым именем: что бы вы ни ввели, подкоманды и параметры одинаковы. Вывод search htop, выполненной через yum и через dnf, тоже полностью совпал.

Согласно официальной документации DNF [Changes in DNF CLI compared to YUM], update и upgrade работают одинаково, и документация рекомендует upgrade.

В старых дистрибутивах без dnf используйте команду yum как и раньше. Имена подкоманд из этой статьи, такие как install, search и history, в yum такие же.

2️⃣ Поиск пакетов командой dnf: search, info, provides

Если вы не знаете точное имя пакета нужной программы, ищите через search с одним словом. search ищет это слово в имени и кратком описании (Summary) пакета и ставит пакет с точно совпадающим именем на первое место.

dnf search htop
Last metadata expiration check: 0:21:53 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: htop ==========================
htop.x86_64 : Interactive process viewer

Для htop есть только один пакет с точно совпадающим именем, поэтому вывод ограничился одной строкой под [Name Exactly Matched].

dnf search wget
Last metadata expiration check: 0:22:35 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: wget ==========================
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols
========================= Name & Summary Matched: wget =========================
perl-HTTP-Tinyish-Wget.noarch : HTTP::Tinyish wget backend
wget2-devel.x86_64 : Libraries and header files needed for using wget2 libraries
wget2-libs.x86_64 : Runtime libraries for GNU Wget2
============================== Name Matched: wget ==============================
wget2.x86_64 : An advanced file and recursive website downloader

Слово, которое встречается во многих пакетах, например wget, выводится тремя группами: точное совпадение имени, совпадение и в имени, и в кратком описании, совпадение только в имени.

search не просматривает текст описания (Description), поэтому не подходит для поиска слова, которое есть только в описании. В этом случае добавьте параметр [--all], чтобы расширить поиск до описания и URL.

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

dnf info htop
Last metadata expiration check: 0:22:37 ago on Wed Oct 28 15:24:31 2026.
Available Packages
Name         : htop
Version      : 3.3.0
Release      : 1.el9
Architecture : x86_64
Size         : 198 k
Source       : htop-3.3.0-1.el9.src.rpm
Repository   : epel
Summary      : Interactive process viewer
URL          : http://hisham.hm/htop/
License      : GPLv2+
Description  : htop is an interactive text-mode process viewer for Linux, similar to
             : top(1).

Ещё не установленный htop в info htop показан под [Available Packages] с версией 3.3.0 и репозиторием epel. htop есть только в репозитории epel, поэтому если повторить search без epel, ничего не найдётся.

dnf info wget
Last metadata expiration check: 0:22:38 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
Name         : wget
Version      : 1.21.1
Release      : 11.el9_8
Architecture : x86_64
Size         : 3.1 M
Source       : wget-1.21.1-11.el9_8.src.rpm
Repository   : @System
From repo    : appstream
Summary      : A utility for retrieving files using the HTTP or FTP protocols
URL          : http://www.gnu.org/software/wget/
License      : GPLv3+
Description  : GNU Wget is a file retrieval utility which can use either the HTTP or
             : FTP protocols. Wget features include the ability to work in the
             : background while you are logged out, recursive retrieval of
             : directories, file name wildcard matching, remote file timestamp
             : storage and comparison, use of Rest with FTP servers and Range with
             : HTTP servers to retrieve files over slow or unstable connections,
             : support for Proxy servers, and configurability.

Уже установленный wget показан под [Installed Packages]. В Repository указано @System, а репозиторий, из которого пакет был получен при установке, записан в строке [From repo] как appstream.

И наоборот: если вы знаете только имя файла и не знаете, в каком пакете он находится, передайте provides путь к файлу.

dnf provides /usr/bin/tree
Last metadata expiration check: 0:22:40 ago on Wed Oct 28 15:24:31 2026.
tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo        : @System
Matched from:
Filename    : /usr/bin/tree

tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo        : baseos
Matched from:
Filename    : /usr/bin/tree

Поиск по /usr/bin/tree дал две группы: со стороны установленного пакета tree (@System) и со стороны репозитория (baseos). Filename под [Matched from] — это путь, который действительно совпал. Если указать только имя файла без пути, dnf добавит перед ним /usr/bin/ и /usr/sbin/ и поищет снова, а если и тогда ничего не найдёт, завершится ошибкой ниже.

dnf provides nosuchfile
Last metadata expiration check: 0:22:41 ago on Wed Oct 28 15:24:31 2026.
Error: No matches found. If searching for a file, try specifying the full path or using a wildcard prefix ("*/") at the beginning.

Сообщение об ошибке предлагает указать полный путь или добавить в начало шаблон [*/]. Что каждая из трёх команд принимает на вход и где ищет, можно последовательно сравнить на схеме ниже.

🧭 Где ищут три команды поиска пакетов
Поясняющая схема
🔍 Команда
$ dnf search htopinfo htopprovides /usr/bin/tree
① Что вводитсяhtopОдно словоhtopИмя пакета/usr/bin/treeПуть к файлу
➜
② Где ищетИмя и краткое описание (Summary) пакетаНаходит все пакеты с этим словом во всех репозиториях.Метаданные одного пакетаВыводит отдельно установленное и доступное для установки.Список файлов, которые предоставляет пакетНаходит пакет, содержащий файл по этому пути.
➜
③ ВыводСписок подходящих пакетовhtop.x86_64 : Interactive process viewerВерсия, размер, репозиторий, описаниеVersion 3.3.0, Size 198 k, Repository epelПакет, содержащий файлtree-1.8.0-10.el9.x86_64, @System, baseos
search ищет слово в имени и кратком описании пакета и выводит список, начиная с точного совпадения имени.
info выводит версию и размер одного пакета, а также репозиторий, из которого он получен. У установленного пакета в поле Repository указано @System.
provides по пути к файлу находит пакет в обратном направлении. Установленные пакеты (@System) и пакеты из репозитория (baseos) выводятся отдельно.

3️⃣ Установка, удаление и обновление пакетов: install, remove, upgrade

Найденный пакет устанавливается через install. dnf за один раз устанавливает не только указанный пакет, но и зависимые пакеты, которые ему нужны.

dnf install htop

Согласно официальной документации, dnf выводит список пакетов для установки (сводку транзакции) и спрашивает, продолжать ли; с [-y] он продолжает без вопроса.

Зависимые пакеты, которые понадобятся при установке, можно заранее проверить через repoquery [--requires].

dnf repoquery --requires htop
Last metadata expiration check: 0:22:59 ago on Wed Oct 28 15:24:31 2026.
libc.so.6(GLIBC_2.34)(64bit)
libcap.so.2()(64bit)
libhwloc.so.15()(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libm.so.6(GLIBC_2.29)(64bit)
libncursesw.so.6()(64bit)
libnl-3.so.200()(64bit)
libnl-3.so.200(libnl_3)(64bit)
libnl-genl-3.so.200()(64bit)
libnl-genl-3.so.200(libnl_3)(64bit)
libtinfo.so.6()(64bit)
rtld(GNU_HASH)

Если добавить только [--requires], выводятся лишь имена библиотек, которые требует htop. В каком пакете находится библиотека, проверяется следующей командой.

dnf repoquery --requires --resolve htop
Last metadata expiration check: 0:23:01 ago on Wed Oct 28 15:24:31 2026.
glibc-0:2.34-283.el9_8.i686
glibc-0:2.34-283.el9_8.x86_64
hwloc-libs-0:2.4.1-6.el9_7.x86_64
libcap-0:2.48-10.el9_8.1.x86_64
libnl3-0:3.11.0-1.el9.x86_64
ncurses-libs-0:6.2-12.20210508.el9.x86_64

С [--resolve] вместо них выводятся имена пакетов, предоставляющих эти библиотеки. Из них hwloc-libs на тестовом сервере нет, поэтому он будет установлен вместе с htop.

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

dnf remove htop

Даже если удалить только htop, вместе с ним удаляются зависимые пакеты, которые не нужны другим пакетам, например hwloc-libs, установленный ради htop.

Пакеты, которые когда-то были установлены как зависимости, но сейчас не нужны ни одному пакету, удаляет autoremove. Список того, что будет удалено, сначала проверьте через list [--autoremove].

dnf list --autoremove
Last metadata expiration check: 0:23:09 ago on Wed Oct 28 15:24:31 2026.
Autoremove Packages
cmake-rpm-macros.noarch            3.31.8-3.el9                       @appstream
grub2-tools-efi.x86_64             1:2.06-126.el9_8.alma.1            @baseos
grub2-tools-extra.x86_64           1:2.06-126.el9_8.alma.1            @baseos
libatomic.x86_64                   11.5.0-14.el9.alma.1               @baseos
libvisual.x86_64                   1:0.4.0-34.el9                     @appstream
libwayland-server.x86_64           1.21.0-1.el9                       @appstream
dnf autoremove

На тестовом сервере в списке оказалось 6 пакетов, и autoremove удаляет эти 6 пакетов за один раз.

Наличие новых версий для установленных пакетов проверяется через check-update. Если указать имя пакета, проверяется только он.

dnf check-update libavif libdav1d
Last metadata expiration check: 0:52:20 ago on Wed Oct 28 15:24:31 2026.

libavif.x86_64                          1.1.1-3.el9                         epel
libdav1d.x86_64                         1.5.4-1.el9                         epel

Команда выше с libavif и libdav1d завершилась с кодом выхода 100, так как для обоих есть новые версии. check-update завершается с кодом 100, если обновления есть, 0, если их нет, и 1 при ошибке, поэтому его можно использовать как условие ветвления в скриптах.

Если указать в list имя пакета, выводятся и установленная версия, и новая версия из репозитория. Через updateinfo list можно проверить, к какому бюллетеню (advisory) относится это обновление.

dnf list libavif
Last metadata expiration check: 0:52:21 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
libavif.x86_64                        0.11.1-5.el9                         @epel
Available Packages
libavif.x86_64                        1.1.1-3.el9                          epel

Для libavif установленная версия 0.11.1-5.el9 показана под [Installed Packages], а версия 1.1.1-3.el9 из репозитория — отдельно под [Available Packages].

dnf updateinfo list libavif
Last metadata expiration check: 0:52:24 ago on Wed Oct 28 15:24:31 2026.
FEDORA-EPEL-2026-d611eab94a bugfix libavif-1.1.1-3.el9.x86_64

Эта новая версия — обновление по бюллетеню bugfix FEDORA-EPEL-2026-d611eab94a. Обновления безопасности выводятся на том же месте с уровнем и пометкой Sec., например [Moderate/Sec.].

Обновление выполняется через upgrade. upgrade устанавливает новые версии только в пределах совместимых зависимостей, поэтому версия, показанная в check-update, не обязательно будет установлена именно в таком виде.

dnf upgrade libavif

Если указать имя пакета, до новой версии обновляются только этот пакет и нужные ему зависимые пакеты.

dnf upgrade

Если имя не указать, обновляются все установленные пакеты. Порядок, при котором выводится сводка транзакции и задаётся вопрос о продолжении, такой же, как у install, а выполненная транзакция остаётся в history под номером.

4️⃣ Список репозиториев команды dnf: repolist

search и install ищут пакеты в репозиториях (repository). repolist выводит id и имена репозиториев, включённых в данный момент.

dnf repolist
repo id             repo name
appstream           AlmaLinux 9 - AppStream
baseos              AlmaLinux 9 - BaseOS
epel                Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
extras              AlmaLinux 9 - Extras
nginx-stable        nginx stable repo
remi-modular        Remi's Modular repository for Enterprise Linux 9 - x86_64
remi-safe           Safe Remi's RPM repository for Enterprise Linux 9 - x86_64

Легко решить, что репозитория, которого нет в списке, нет и на сервере, но вывод repolist по умолчанию показывает только включённые репозитории. С [--all] выводятся и выключенные, вместе со столбцом status. На тестовом сервере все три репозитория CRB в AlmaLinux 9 были disabled.

dnf repolist --all | grep -i crb
crb                           AlmaLinux 9 - CRB                         disabled
crb-debuginfo                 AlmaLinux 9 - CRB - Debug                 disabled
crb-source                    AlmaLinux 9 - CRB - Source                disabled

Число пакетов, адрес зеркала, время устаревания метаданных и расположение файла настроек одного репозитория проверяются через repoinfo.

dnf repoinfo baseos
Last metadata expiration check: 0:22:55 ago on Wed Oct 28 15:24:31 2026.
Repo-id            : baseos
Repo-name          : AlmaLinux 9 - BaseOS
Repo-status        : enabled
Repo-revision      : 1793090609
Repo-updated       : Tue Oct 27 17:43:29 2026
Repo-pkgs          : 3458
Repo-available-pkgs: 3458
Repo-size          : 21 G
Repo-mirrors       : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl       : http://aws.repo.almalinux.org/almalinux/9.8/BaseOS/x86_64/os/ (9 more)
Repo-expire        : 86400 second(s) (last: Wed Oct 28 15:24:26 2026)
Repo-filename      : /etc/yum.repos.d/almalinux-baseos.repo
Total packages: 3458

repoinfo baseos показал 3458 пакетов, а метаданные настроены на повторную проверку каждые 86 400 секунд (сутки). Файл .repo в строке [Repo-filename] — это файл настроек этого репозитория. Параметры [--set-enabled] и [--set-disabled] для включения и выключения репозиториев используются вместе с командой config-manager из dnf-plugins-core.

5️⃣ История операций и откат в команде dnf: history

После многих установок и удалений трудно проследить, что и когда менялось, но dnf нумерует каждую транзакцию (transaction) и записывает её в history. Если указать имя пакета, выводятся только транзакции, изменившие этот пакет.

dnf history list tmux
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    51 | install -y tmux          | 2026-10-15 20:40 | Install        |    1

В выводе, отфильтрованном по tmux, осталась одна строка — транзакция 51, которая установила tmux. Диапазон номеров записывается через две точки, например [50..51].

dnf history list 50..51
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    51 | install -y tmux          | 2026-10-15 20:40 | Install        |    1
    50 | -y -q install mlocate    | 2026-10-07 19:39 | Install        |    1 EE

Число в столбце [Altered] — количество изменённых пакетов. В конце строки 50 стояло [EE]: это значит, что транзакция завершилась, но были предупреждения или ошибки в выводе.

Командную строку, изменённые пакеты и код результата одной транзакции можно проверить через history info.

dnf history info 51
Transaction ID : 51
Begin time     : Thu Oct 15 20:40:51 2026
Begin rpmdb    : d3db9c92a9d0f6ef9a7a1404552bb76e9d56ba7602b1fce73fa5a62170d33c5c
End time       : Thu Oct 15 20:40:51 2026 (0 seconds)
End rpmdb      : a862c33ee6a2f2d0479e4dc2631907dee47591c5b6795551b755c6cd090ac1df
User           : root <root>
Return-Code    : Success
Releasever     : 9
Command Line   : install -y tmux
Persistence    : Persist
Comment        :
Packages Altered:
    Install tmux-3.2a-5.el9.x86_64 @baseos

В транзакции 51 в [Command Line] без изменений сохранилась выполненная команда install -y tmux. В [Packages Altered] указаны установленный tmux и репозиторий @baseos, в [Return-Code] — Success. Если номер не указать, выводится последняя транзакция.

Если пакет установлен по ошибке, передайте history undo номер транзакции, чтобы выполнить действие, обратное этой транзакции. rollback возвращает состояние пакетов к моменту сразу после указанной транзакции.

dnf history undo 51

Транзакция 51 была установкой tmux, поэтому undo 51 становится обратной транзакцией, которая удаляет tmux.

dnf history rollback 50

rollback 50 отменяет все транзакции, выполненные после 50, вплоть до последней, поэтому результат может отличаться от undo 51, который удаляет только tmux.

Согласно официальной документации, если есть пакет, который нельзя вернуть, undo и rollback завершаются, ничего не меняя. Даже если изменений, сделанных напрямую через rpm, нет в истории, эти команды не останавливаются с ошибкой.

🔲 Симулятор команды dnf

В симуляторе ниже можно самостоятельно ввести команды search, info, provides, repolist и history и посмотреть вывод. При вводе через yum результат будет тем же.

Симулятор команды dnfdnf 4.14.0
[root@server work]#
Клавишами ↑↓ можно вызвать ранее введённые команды.

🔢 FAQ & рекомендуемые материалы

Это время последней проверки локальной копии метаданных репозитория. Согласно официальной документации, когда истекает время metadata_expire, заданное для каждого репозитория, метаданные загружаются заново. Команды, которым не обязательно нужны самые свежие данные, например search и provides, используют локальную копию даже после истечения срока. С [--refresh] метаданные принудительно загружаются заново, а [-C] использует только кеш.

При вводе несуществующей команды, например foo, появилась ошибка [No such command] и подсказка установить плагин в виде [dnf install dnf-command(имя)]. Дело в том, что некоторые подкоманды добавляются пакетами плагинов, например dnf-plugins-core. Если это опечатка, проверьте список команд через [dnf --help].

rpm -q читает только базу данных установленных на сервере пакетов (RPMDB) и выводит версию пакета, а если его нет, отвечает [package htop is not installed]. dnf list --installed выводит ту же базу данных с добавлением сведений о репозиториях, поэтому рядом с установленным пакетом указан репозиторий, из которого он получен (@epel). Если использовать dnf list без [--installed], выводятся и новые версии из репозиториев.

🧭 Рекомендуемые материалы: команды для пакетов 6 статей · 2 источника
🗂️ Команды для пакетов
📄 Понятие YUM и основные команды 📄 Команда dnf 📄 Команда yum-config-manager 📄 Разница RPM · YUM
📄 Команды apt · apt-get 📄 Установка snapd

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 9   +   8   =