Lệnh dnf: cài đặt, cập nhật, gỡ bỏ gói và khác biệt với yum

Môi trường thử nghiệmHọ RHELAlmaLinux 9.8Tài khoản rootKiểm tra ngày 2026-10-28
Lệnh quản lý góidnfVị trí/usr/bin/dnf

Lệnh dnf là lệnh quản lý gói trên Linux họ RHEL, dùng để tìm kiếm, cài đặt, cập nhật và gỡ bỏ gói. Trên AlmaLinux 9, dù gõ yum thì cùng một chương trình vẫn được chạy. Trên máy chủ AlmaLinux 9, chúng tôi đã thực sự chạy search, info, provides và history, rồi xác nhận qua đầu ra xem mỗi lệnh tìm gói search, info, provides tra cứu ở đâu, cùng nhật ký thao tác được ghi lại trong history.

Chúng tôi không chạy các lệnh làm thay đổi hệ thống như cài đặt, gỡ bỏ, cập nhật. Hoạt động của chúng được xác nhận qua tài liệu chính thức của DNF và nhật ký thao tác còn lưu trên máy chủ.

1️⃣ Quan hệ giữa lệnh dnf và yum

Rất dễ cho rằng gõ yum sẽ chạy yum cũ, nhưng trên AlmaLinux 9, cả yum và dnf đều là liên kết trỏ tới cùng một tệp thực thi 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

Khác biệt giữa yum và dnf chỉ là tên bạn gõ; gõ bên nào thì lệnh con và tùy chọn cũng như nhau. Đầu ra khi chạy search htop bằng yum và bằng dnf cũng giống hệt nhau.

Theo tài liệu chính thức của DNF [Changes in DNF CLI compared to YUM], update và upgrade có cùng hoạt động, và tài liệu khuyên dùng upgrade.

Trên các bản phân phối cũ không có dnf, bạn vẫn dùng lệnh yum như trước. Tên các lệnh con trong bài này như install, search, history cũng giống trong yum.

2️⃣ Tra cứu gói bằng lệnh dnf: search, info, provides

Khi không biết chính xác tên gói của chương trình muốn cài, hãy tìm bằng search kèm một từ. search tìm từ đó trong tên và phần tóm tắt (Summary) của gói, rồi đưa gói có tên trùng khớp chính xác lên đầu.

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 chỉ có đúng một gói trùng tên chính xác, nên kết quả chỉ có một dòng dưới [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

Với từ xuất hiện trong nhiều gói như wget, kết quả được chia thành ba nhóm: trùng tên chính xác, có trong cả tên và tóm tắt, và chỉ có trong tên.

search không xem câu mô tả (Description), nên không phù hợp để tìm từ chỉ có trong mô tả. Khi đó, hãy thêm tùy chọn [--all] để mở rộng phạm vi tìm đến cả mô tả và URL.

Khi đã biết tên gói, hãy dùng info để xem phiên bản, kích thước và gói đến từ kho lưu trữ nào.

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 chưa được cài hiện trong info htop dưới [Available Packages] với phiên bản 3.3.0, kho lưu trữ epel. htop là gói chỉ có trong kho epel, nên nếu chạy lại search mà bỏ epel thì không có kết quả nào.

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 đã cài hiện dưới [Installed Packages]. Repository là @System, còn kho lưu trữ đã tải về khi cài được ghi là appstream ở dòng [From repo].

Ngược lại, khi chỉ biết tên tệp mà không biết nó nằm trong gói nào, hãy đưa đường dẫn tệp cho 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

Kết quả tìm /usr/bin/tree gồm hai nhóm: phía gói tree đã cài (@System) và phía kho lưu trữ (baseos). Filename dưới [Matched from] là đường dẫn thực sự khớp. Nếu chỉ ghi tên tệp mà không có đường dẫn, dnf sẽ thêm /usr/bin/ và /usr/sbin/ vào trước rồi tìm lại, nếu vẫn không thấy thì kết thúc bằng lỗi bên dưới.

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.

Thông báo lỗi gợi ý ghi đường dẫn đầy đủ hoặc thêm ký tự đại diện [*/] vào trước. Ba lệnh nhận đầu vào gì và tìm ở đâu có thể so sánh lần lượt trong sơ đồ bên dưới.

🧭 Nơi ba lệnh tìm gói tra cứu
Sơ đồ giải thích
🔍 Lệnh
$ dnf search htopinfo htopprovides /usr/bin/tree
① Đầu vàohtopMột từhtopTên gói/usr/bin/treeĐường dẫn tệp
➜
② Nơi tra cứuTên và tóm tắt (Summary) của góiTìm mọi gói chứa từ đó trong toàn bộ kho lưu trữ.Siêu dữ liệu của một góiHiển thị riêng phần đã cài và phần có thể cài.Danh sách tệp mà gói cung cấpTìm ngược gói chứa tệp ở đường dẫn đó.
➜
③ Đầu raDanh sách gói khớphtop.x86_64 : Interactive process viewerPhiên bản, kích thước, kho lưu trữ, mô tảVersion 3.3.0, Size 198 k, Repository epelGói chứa tệptree-1.8.0-10.el9.x86_64, @System, baseos
search tìm từ trong tên và tóm tắt của gói, rồi hiển thị danh sách bắt đầu từ gói trùng tên chính xác.
info hiển thị phiên bản, kích thước và kho lưu trữ nguồn của một gói. Gói đã cài sẽ hiện @System ở ô Repository.
provides tìm ngược gói từ đường dẫn tệp. Phía đã cài (@System) và phía kho lưu trữ (baseos) được hiển thị riêng.

3️⃣ Cài đặt, gỡ bỏ, cập nhật gói: install, remove, upgrade

Gói tìm được thì cài bằng install. dnf cài một lần không chỉ gói được chỉ định mà cả các gói phụ thuộc mà gói đó cần.

dnf install htop

Theo tài liệu chính thức, dnf hiển thị danh sách gói sẽ cài (tóm tắt giao dịch) rồi hỏi có tiếp tục không; thêm [-y] thì tiến hành mà không hỏi.

Các gói phụ thuộc cần cài kèm có thể kiểm tra trước bằng 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)

Chỉ thêm [--requires] thì chỉ hiện tên các thư viện mà htop yêu cầu. Thư viện đó nằm trong gói nào thì kiểm tra bằng lệnh tiếp theo.

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

Thêm [--resolve] thì kết quả đổi thành tên các gói cung cấp thư viện đó. Trong số này, hwloc-libs không có trên máy chủ thử nghiệm, nên sẽ được cài kèm khi cài htop.

remove gỡ gói được chỉ định cùng các gói phụ thuộc vào gói đó, và với thiết lập mặc định còn gỡ luôn các gói phụ thuộc không còn cần nữa.

dnf remove htop

Dù chỉ gỡ htop, các gói phụ thuộc mà không gói nào khác cần, như hwloc-libs được cài vì htop, cũng bị gỡ theo.

Những gói trước đây được cài làm gói phụ thuộc nhưng giờ không gói nào cần nữa sẽ được autoremove gỡ bỏ. Hãy kiểm tra trước danh sách sẽ bị gỡ bằng 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

Trên máy chủ thử nghiệm, danh sách có 6 gói, và autoremove gỡ cả 6 gói này một lần.

Để kiểm tra gói đã cài có phiên bản mới hay chưa, hãy dùng check-update. Nếu thêm tên gói, chỉ gói đó được kiểm tra.

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

Lệnh ở trên với libavif và libdav1d kết thúc với mã thoát 100 vì cả hai đều có phiên bản mới. check-update kết thúc với 100 khi có bản cập nhật, 0 khi không có, 1 khi gặp lỗi, nên có thể dùng làm điều kiện rẽ nhánh trong script.

Thêm tên gói vào list thì phiên bản đã cài và phiên bản mới trong kho lưu trữ hiện cùng nhau. Với updateinfo list, bạn kiểm tra được bản cập nhật đó thuộc thông báo (advisory) nào.

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

Với libavif, bản đã cài 0.11.1-5.el9 hiện dưới [Installed Packages], còn bản 1.1.1-3.el9 trong kho lưu trữ hiện riêng dưới [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

Phiên bản mới đó là bản cập nhật thuộc thông báo bugfix FEDORA-EPEL-2026-d611eab94a. Bản cập nhật bảo mật hiện ở cùng vị trí kèm mức độ và Sec., như [Moderate/Sec.].

Cập nhật được thực hiện bằng upgrade. upgrade chỉ cài phiên bản mới trong phạm vi các phụ thuộc khớp nhau, nên phiên bản thấy trong check-update có thể không được cài đúng như vậy.

dnf upgrade libavif

Nếu thêm tên gói, chỉ gói đó và các gói phụ thuộc cần thiết được nâng lên phiên bản mới.

dnf upgrade

Nếu bỏ tên, đối tượng là toàn bộ gói đã cài. Trình tự hiển thị tóm tắt giao dịch rồi hỏi có tiếp tục không giống như install, và giao dịch đã chạy được ghi lại trong history kèm số.

4️⃣ Danh sách kho lưu trữ của lệnh dnf: repolist

Nơi search và install tìm gói là kho lưu trữ (repository). repolist hiển thị id và tên của các kho lưu trữ đang bật.

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

Rất dễ cho rằng kho lưu trữ không có trong danh sách là không có trên máy chủ, nhưng đầu ra mặc định của repolist chỉ hiện các kho đang bật. Thêm [--all] thì cả các kho đang tắt cũng được hiển thị kèm cột status. Trên máy chủ thử nghiệm, cả ba kho CRB của AlmaLinux 9 đều là 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

Số gói, địa chỉ mirror, thời gian hết hạn siêu dữ liệu và vị trí tệp cấu hình của một kho lưu trữ được kiểm tra bằng 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

Với repoinfo baseos, số gói là 3.458, và siêu dữ liệu được đặt để kiểm tra lại mỗi 86.400 giây (một ngày). Tệp .repo ở dòng [Repo-filename] là tệp cấu hình của kho lưu trữ này. Các tùy chọn [--set-enabled] và [--set-disabled] để bật và tắt kho lưu trữ được dùng cùng lệnh config-manager của dnf-plugins-core.

5️⃣ Lịch sử thao tác và hoàn tác của lệnh dnf: history

Sau nhiều lần cài và gỡ, rất khó lần lại đã thay đổi gì và khi nào, nhưng dnf đánh số cho mỗi giao dịch (transaction) và ghi vào history. Nếu thêm tên gói, chỉ các giao dịch đã thay đổi gói đó được hiện ra.

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

Đầu ra được lọc bằng tmux chỉ còn một dòng của giao dịch số 51 đã cài tmux. Khoảng số được viết bằng hai dấu chấm như [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

Con số ở cột [Altered] là số gói đã thay đổi. Cuối dòng số 50 có kèm [EE], nghĩa là giao dịch đã xong nhưng có đầu ra cảnh báo hoặc lỗi.

Dòng lệnh, các gói đã thay đổi và mã kết quả của một giao dịch được kiểm tra bằng 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

Mở số 51 ra thì thấy [Command Line] vẫn giữ nguyên lệnh đã chạy install -y tmux. [Packages Altered] ghi tmux đã cài và kho lưu trữ @baseos, còn [Return-Code] ghi Success. Nếu bỏ số, giao dịch gần nhất sẽ hiện ra.

Nếu cài nhầm, hãy thêm số giao dịch vào history undo để chạy thao tác ngược lại của giao dịch đó. rollback đưa trạng thái gói về ngay sau giao dịch được chỉ định.

dnf history undo 51

Giao dịch 51 là cài tmux, nên undo 51 trở thành giao dịch ngược lại gỡ tmux.

dnf history rollback 50

rollback 50 hoàn tác mọi giao dịch chạy sau 50 cho đến giao dịch cuối cùng, nên kết quả có thể khác với undo 51 chỉ gỡ tmux.

Theo tài liệu chính thức, nếu có gói không thể hoàn tác, undo và rollback kết thúc mà không thay đổi gì. Dù những thay đổi làm trực tiếp bằng rpm không có trong nhật ký, lệnh cũng không dừng lại vì lỗi.

🔲 Trình mô phỏng lệnh dnf

Trong trình mô phỏng bên dưới, bạn có thể tự gõ các lệnh search, info, provides, repolist, history để xem đầu ra. Gõ bằng yum cũng cho kết quả như nhau.

Trình mô phỏng lệnh dnfdnf 4.14.0
[root@server work]#
Dùng phím ↑↓ trên bàn phím để gọi lại các lệnh đã gõ trước đó.

🔢 FAQ & nội dung đề xuất

Đó là thời điểm bản sao cục bộ của siêu dữ liệu kho lưu trữ được kiểm tra lần cuối. Theo tài liệu chính thức, khi quá thời gian metadata_expire đặt cho từng kho, siêu dữ liệu sẽ được tải lại. Các lệnh không nhất thiết cần thông tin mới nhất như search và provides vẫn dùng bản sao cục bộ dù đã hết hạn. Thêm [--refresh] thì buộc tải lại, còn [-C] chỉ dùng bộ nhớ đệm.

Khi thử nhập lệnh không tồn tại như foo, lỗi [No such command] hiện ra kèm gợi ý thử cài plugin theo dạng [dnf install dnf-command(tên)]. Đó là vì một số lệnh con được thêm vào bởi các gói plugin như dnf-plugins-core. Nếu là gõ nhầm, hãy xem danh sách lệnh bằng [dnf --help].

rpm -q chỉ đọc cơ sở dữ liệu gói đã cài trên máy chủ (RPMDB) và hiển thị phiên bản của gói đó; nếu không có thì trả lời [package htop is not installed]. dnf list --installed hiển thị cùng cơ sở dữ liệu đó kèm thêm thông tin kho lưu trữ, nên bên cạnh gói đã cài có ghi kho lưu trữ nguồn (@epel). Nếu dùng dnf list không có [--installed], các phiên bản mới trong kho lưu trữ cũng được hiển thị cùng.

🧭 Nội dung đề xuất về lệnh quản lý gói 6 bài viết · 2 tài liệu tham khảo
🗂️ Lệnh quản lý gói
📄 Khái niệm YUM và các lệnh cơ bản 📄 Lệnh dnf 📄 Lệnh yum-config-manager 📄 Khác biệt RPM · YUM
📄 Lệnh apt · apt-get 📄 Cài đặt snapd

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 8   +   10   =