Polecenie dnf: instalacja, aktualizacja i usuwanie pakietów oraz różnice względem yum

Środowisko testoweRodzina RHELAlmaLinux 9.8konto rootSprawdzono 2026-10-28
Polecenia pakietówdnfLokalizacja/usr/bin/dnf

Polecenie dnf to polecenie do zarządzania pakietami, którym w dystrybucjach Linuksa z rodziny RHEL wyszukujesz, instalujesz, aktualizujesz i usuwasz pakiety. W AlmaLinux 9 wpisanie yum uruchamia ten sam program. Na serwerze AlmaLinux 9 faktycznie uruchomiono search, info, provides i history, a w wynikach sprawdzono, gdzie szukają pakietów search, info i provides oraz jakie zapisy operacji zostają w history.

Poleceń zmieniających system, takich jak instalacja, usuwanie i aktualizacja, nie uruchamiano. Ich działanie sprawdzono w oficjalnej dokumentacji DNF i w historii operacji zapisanej wcześniej na serwerze.

1️⃣ Związek polecenia dnf z yum

Łatwo założyć, że wpisanie yum uruchamia stary yum, ale w AlmaLinux 9 yum i dnf to dowiązania do tego samego pliku wykonywalnego 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

Jedyna różnica między yum a dnf to wpisywana nazwa; niezależnie od tego, której użyjesz, podpolecenia i opcje są te same. Wynik search htop uruchomionego osobno przez yum i przez dnf też był identyczny.

Według oficjalnej dokumentacji DNF [Changes in DNF CLI compared to YUM] update i upgrade działają tak samo, a dokumentacja zaleca upgrade.

W starszych dystrybucjach bez dnf używasz polecenia yum tak jak dotąd. Nazwy podpoleceń z tego artykułu, takie jak install, search i history, są w yum takie same.

2️⃣ Wyszukiwanie pakietów poleceniem dnf: search, info, provides

Jeśli nie znasz dokładnej nazwy pakietu programu, który chcesz zainstalować, szukaj poleceniem search z jednym słowem. search szuka słowa w nazwach i podsumowaniach (Summary) pakietów, a pakiet o dokładnie pasującej nazwie umieszcza na samej górze.

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

Dla htop istniał tylko jeden pakiet o dokładnie tej nazwie, więc wynik skończył się na jednym wierszu pod [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

Słowo występujące w wielu pakietach, takie jak wget, pojawiło się w trzech grupach: dokładnie ta sama nazwa, słowo w nazwie i w podsumowaniu oraz słowo tylko w nazwie.

search nie przegląda opisu (Description), więc nie nadaje się do szukania słowa, które jest tylko w opisie. Wtedy dodaj opcję [--all], aby rozszerzyć wyszukiwanie także na opis i URL.

Gdy znasz już nazwę pakietu, poleceniem info sprawdzisz wersję, rozmiar i to, z którego repozytorium pochodzi.

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).

Jeszcze niezainstalowany htop pojawia się w info htop pod [Available Packages] z wersją 3.3.0 i repozytorium epel. htop jest tylko w repozytorium epel, więc jeśli ponownie uruchomisz search bez epel, nic się nie pojawi.

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.

Zainstalowany już wget pojawił się pod [Installed Packages]. Repository miało wartość @System, a repozytorium, z którego pobrano go przy instalacji, było zapisane jako appstream w wierszu [From repo].

Odwrotnie, gdy znasz tylko nazwę pliku i nie wiesz, w którym pakiecie się znajduje, podaj ścieżkę pliku poleceniu 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

Wyszukiwanie /usr/bin/tree dało dwie grupy dla pakietu tree: stronę zainstalowaną (@System) i stronę repozytorium (baseos). Filename pod [Matched from] to ścieżka, która faktycznie pasowała. Jeśli podasz samą nazwę pliku bez ścieżki, dnf doda przed nią /usr/bin/ i /usr/sbin/ i poszuka ponownie, a jeśli nadal nic nie znajdzie, zakończy się poniższym błędem.

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.

Komunikat błędu radzi podać pełną ścieżkę albo dodać na początku symbol wieloznaczny [*/]. Co każde z trzech poleceń przyjmuje i gdzie szuka, możesz porównać krok po kroku na diagramie poniżej.

🧭 Gdzie zaglądają trzy polecenia do wyszukiwania pakietów
Diagram objaśniający
🔍 Polecenie
$ dnf search htopinfo htopprovides /usr/bin/tree
① Dane wejściowehtopJedno słowohtopNazwa pakietu/usr/bin/treeŚcieżka pliku
➜
② Gdzie szukaNazwa i podsumowanie (Summary) pakietuZnajduje we wszystkich repozytoriach każdy pakiet zawierający to słowo.Metadane jednego pakietuPokazuje osobno to, co zainstalowane, i to, co można zainstalować.Lista plików dostarczanych przez pakietOdnajduje wstecz pakiet zawierający plik o tej ścieżce.
➜
③ WynikLista pasujących pakietówhtop.x86_64 : Interactive process viewerWersja, rozmiar, repozytorium, opisVersion 3.3.0, Size 198 k, Repository epelPakiet zawierający pliktree-1.8.0-10.el9.x86_64, @System, baseos
search szuka słowa w nazwach i podsumowaniach pakietów i wyświetla listę, zaczynając od dokładnie pasujących nazw.
info wyświetla wersję, rozmiar i repozytorium pochodzenia jednego pakietu. Przy zainstalowanych pakietach w polu Repository widnieje @System.
provides odnajduje pakiet wstecz na podstawie ścieżki pliku. Strona zainstalowana (@System) i strona repozytorium (baseos) pojawiają się osobno.

3️⃣ Instalacja, usuwanie i aktualizacja pakietów: install, remove, upgrade

Znaleziony pakiet instalujesz poleceniem install. dnf instaluje za jednym razem nie tylko wskazany pakiet, ale też pakiety zależne, których on potrzebuje.

dnf install htop

Według oficjalnej dokumentacji dnf wyświetla listę pakietów do zainstalowania (podsumowanie transakcji) i pyta, czy kontynuować; z [-y] przechodzi dalej bez pytania.

Pakiety zależne potrzebne przy instalacji możesz sprawdzić wcześniej poleceniem 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)

Z samym [--requires] pojawiają się tylko nazwy bibliotek, których wymaga htop. W którym pakiecie są te biblioteki, sprawdzisz następującym poleceniem.

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

Po dodaniu [--resolve] wynik zmienia się na nazwy pakietów dostarczających te biblioteki. Spośród nich hwloc-libs nie było na serwerze testowym, więc zostanie zainstalowany razem z htop.

remove usuwa wskazany pakiet razem z pakietami, które od niego zależą, a przy domyślnych ustawieniach usuwa też pakiety zależne, które przestały być potrzebne.

dnf remove htop

Nawet gdy usuniesz tylko htop, razem z nim znikną pakiety zależne, których nie potrzebuje żaden inny pakiet, jak hwloc-libs zainstalowany z powodu htop.

Pakiety zainstalowane kiedyś jako zależności, których teraz nie potrzebuje już żaden pakiet, usuwa autoremove. Listę tego, co zostanie usunięte, sprawdź najpierw poleceniem 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

Na serwerze testowym lista zawierała 6 pakietów, a autoremove usuwa te 6 za jednym razem.

Czy dla zainstalowanych pakietów wyszła nowa wersja, sprawdzasz poleceniem check-update. Gdy dodasz nazwę pakietu, sprawdzi tylko ten pakiet.

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

Powyższe polecenie z libavif i libdav1d zakończyło się kodem wyjścia 100, bo oba pakiety miały nową wersję. check-update kończy się kodem 100, gdy są aktualizacje, 0, gdy ich nie ma, i 1 przy błędzie, więc możesz używać go jako warunku w skryptach.

Gdy dodasz nazwę pakietu do list, zobaczysz razem wersję zainstalowaną i nową wersję z repozytorium. Poleceniem updateinfo list sprawdzisz, któremu biuletynowi (advisory) odpowiada ta aktualizacja.

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

Dla libavif zainstalowana wersja 0.11.1-5.el9 pojawiła się pod [Installed Packages], a wersja 1.1.1-3.el9 z repozytorium osobno pod [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

Ta nowa wersja była aktualizacją z biuletynu bugfix FEDORA-EPEL-2026-d611eab94a. Przy aktualizacjach bezpieczeństwa w tym samym miejscu pojawia się poziom ważności z dopiskiem Sec., na przykład [Moderate/Sec.].

Aktualizację uruchamiasz poleceniem upgrade. upgrade instaluje nowe wersje tylko w zakresie, na jaki pozwalają zależności, więc wersja widoczna w check-update może nie zostać zainstalowana dokładnie w tej postaci.

dnf upgrade libavif

Gdy dodasz nazwę pakietu, do nowej wersji zostaną podniesione tylko ten pakiet i potrzebne pakiety zależne.

dnf upgrade

Gdy pominiesz nazwę, celem są wszystkie zainstalowane pakiety. Przebieg, czyli wyświetlenie podsumowania transakcji i pytanie o kontynuację, jest taki sam jak przy install, a wykonana transakcja zostaje zapisana z numerem w history.

4️⃣ Lista repozytoriów w poleceniu dnf: repolist

Miejscem, w którym search i install szukają pakietów, jest repozytorium (repository). repolist wyświetla id i nazwy obecnie włączonych repozytoriów.

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

Łatwo założyć, że repozytorium spoza listy nie istnieje na serwerze, ale domyślny wynik repolist pokazuje tylko włączone repozytoria. Z [--all] wyświetla też wyłączone, razem z kolumną status. Na serwerze testowym wszystkie trzy repozytoria CRB z AlmaLinux 9 miały stan 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

Liczbę pakietów, adres mirrora, czas wygaśnięcia metadanych i położenie pliku konfiguracyjnego jednego repozytorium sprawdzasz poleceniem 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

W repoinfo baseos pojawiło się 3458 pakietów, a metadane były ustawione na ponowne sprawdzanie co 86 400 sekund (jeden dzień). Plik .repo z wiersza [Repo-filename] to plik konfiguracyjny tego repozytorium. Opcji [--set-enabled] i [--set-disabled], które włączają i wyłączają repozytoria, używa się z poleceniem config-manager z dnf-plugins-core.

5️⃣ Historia operacji i cofanie zmian w poleceniu dnf: history

Po wielu instalacjach i usunięciach trudno śledzić, co i kiedy zmieniono, ale dnf nadaje każdej transakcji (transaction) numer i zapisuje ją w history. Gdy dodasz nazwę pakietu, pojawią się tylko transakcje, które zmieniły ten pakiet.

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

W wyniku zawężonym do tmux został tylko jeden wiersz: transakcja 51, która zainstalowała tmux. Zakres numerów zapisuje się z dwiema kropkami, na przykład [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

Liczba w kolumnie [Altered] to liczba zmienionych pakietów. Na końcu wiersza 50 pojawiło się [EE], co oznacza, że transakcja się zakończyła, ale w wyjściu były ostrzeżenia lub błędy.

Wiersz poleceń, zmienione pakiety i kod wyniku jednej transakcji sprawdzisz poleceniem 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

Po otwarciu transakcji 51 w [Command Line] widniało dokładnie uruchomione polecenie install -y tmux. W [Packages Altered] zapisano zainstalowany tmux i repozytorium @baseos, a w [Return-Code] wartość Success. Gdy pominiesz numer, pojawi się najnowsza transakcja.

Jeśli zainstalujesz coś przez pomyłkę, podaj numer transakcji poleceniu history undo, aby wykonać operację odwrotną do tej transakcji. rollback przywraca stan pakietów do chwili tuż po wskazanej transakcji.

dnf history undo 51

Transakcja 51 była instalacją tmux, więc undo 51 staje się odwrotną transakcją, która usuwa tmux.

dnf history rollback 50

rollback 50 cofa wszystkie transakcje wykonane po 50, aż do ostatniej, więc wynik może być inny niż przy undo 51, które usuwa tylko tmux.

Według oficjalnej dokumentacji, jeśli jest pakiet, którego nie da się cofnąć, undo i rollback kończą działanie bez żadnych zmian. Nawet jeśli zmian wprowadzonych bezpośrednio przez rpm nie ma w historii, nie zatrzymują się z błędem.

🔲 Symulator polecenia dnf

W symulatorze poniżej możesz samodzielnie wpisać polecenia search, info, provides, repolist i history i zobaczyć wynik. Wpisanie ich z yum daje ten sam rezultat.

Symulator polecenia dnfdnf 4.14.0
[root@server work]#
Klawiszami ↑↓ przywołasz wcześniej wpisane polecenia.

🔢 FAQ & polecane treści

To chwila, w której ostatnio sprawdzono lokalną kopię metadanych repozytorium. Według oficjalnej dokumentacji jest ona pobierana ponownie, gdy minie czas metadata_expire ustawiony dla każdego repozytorium. Polecenia, które nie muszą mieć najnowszych informacji, takie jak search i provides, używają kopii lokalnej nawet po jej wygaśnięciu. Z [--refresh] dane są pobierane ponownie na siłę, a [-C] używa tylko pamięci podręcznej.

Po wpisaniu nieistniejącego polecenia, takiego jak foo, pojawił się błąd [No such command] wraz z podpowiedzią, by zainstalować wtyczkę w postaci [dnf install dnf-command(nazwa)]. Dzieje się tak, bo część podpoleceń dodają pakiety wtyczek, takie jak dnf-plugins-core. Jeśli to literówka, sprawdź listę poleceń przez [dnf --help].

rpm -q czyta tylko bazę danych zainstalowanych pakietów na serwerze (RPMDB) i wyświetla wersję pakietu, a jeśli go nie ma, odpowiada [package htop is not installed]. dnf list --installed dodaje do tej samej bazy informacje o repozytoriach, więc obok zainstalowanego pakietu widać repozytorium, z którego pochodzi (@epel). Jeśli użyjesz dnf list bez [--installed], zobaczysz też nowe wersje z repozytoriów.

🧭 Polecane treści o poleceniach pakietów 6 wpisów · 2 źródła
🗂️ Polecenia pakietów
📄 YUM: pojęcie i podstawowe polecenia 📄 Polecenie dnf 📄 Polecenie yum-config-manager 📄 Różnice między RPM a YUM
📄 Polecenia apt · apt-get 📄 Instalacja snapd

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 9   +   4   =