คู่มือฉบับย่อสำหรับ DNF Package Manager

เผยแพร่แล้ว: 2020-06-06

DNF เป็นระบบจัดการแพ็คเกจเริ่มต้นบนลีนุกซ์รุ่นที่ใช้ RPM ส่วนใหญ่ในขณะนี้

DNF ดาวน์โหลดแพ็กเกจจากที่เก็บ ติดตั้ง ถอนการติดตั้ง และอัพเดตแพ็กเกจ ดำเนินการแก้ไขปัญหาการพึ่งพาอัตโนมัติสำหรับแพ็คเกจที่คุณกำลังติดตั้ง อัพเดต หรือลบและติดตั้งแพ็คเกจทั้งหมดที่จำเป็นเพื่อให้เป็นไปตามข้อกำหนดการพึ่งพา

บน Fedora มันเป็นตัวจัดการแพ็คเกจเริ่มต้นตั้งแต่ Fedora 22 สำหรับ RHEL 8.x ตอนนี้มันเป็นตัวจัดการแพ็คเกจเริ่มต้น

DNF ให้การจัดการแพ็คเกจที่ปลอดภัยโดยเปิดใช้งานการตรวจสอบลายเซ็น GPG บนแพ็คเกจที่ลงนาม GPG DNF จะไม่ติดตั้งแพ็คเกจใด ๆ ที่ไม่ได้ลงนามด้วยคีย์ที่ถูกต้องสำหรับที่เก็บนั้น

สำหรับความเข้ากันได้ย้อนหลัง RHEL 8.x มีคำสั่ง YUM ด้วย แม้ว่าจะเป็นลิงก์ไปยัง DNF

ทำไมต้อง DNF?

DNF หรือ Danified YUM คือ YUM รุ่นต่อไป เมื่อเปรียบเทียบกับ YUM แล้ว DNF มีการใช้หน่วยความจำที่ดีกว่า การจัดการการพึ่งพาที่ได้รับการปรับปรุง และความสามารถในการเรียกใช้โดยใช้ทั้ง Python 2 และ Python 3

การจัดการแพ็คเกจด้วย DNF

คุณต้องมีสิทธิ์ superuser เพื่อใช้คำสั่ง DNF เพื่อติดตั้ง อัพเดต หรือลบแพ็คเกจ ต่อไปนี้เป็นชุดคำสั่ง DNF ที่ใช้บ่อยโดยผู้ดูแลระบบ

ค้นหาแพ็คเกจ

หากต้องการค้นหาแพ็คเกจที่ติดตั้งหรือพร้อมใช้งานในที่เก็บทั้งหมด ให้ ใช้

 $ sudo dnf search <em>package_name</em>

ตัวอย่างการค้นหาแพ็คเกจ Nmap:

 $ sudo dnf search nmap
 Last metadata expiration check: 0:05:14 ago on Tue 02 Jun 2020 08:38:09 PM UTC. ==================================== Name Exactly Matched: nmap ===================================== nmap.x86_64 : Network exploration tool and security scanner =================================== Name & Summary Matched: nmap ==================================== nmap-ncat.x86_64 : Nmap's Netcat replacement

รายการแพ็คเกจ

หากต้องการดูรายการแพ็คเกจที่ติดตั้งและพร้อมใช้งานทั้งหมด:

 $ sudo dnf list all
 Installed Packages GConf2.x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-tui.x86_64 1:1.22.8-4.el8 ...

ในการแสดงรายการแพ็คเกจที่ติดตั้งทั้งหมด:

$ sudo dnf list installed

 Installed Packages NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-tui.x86_64 1:1.22.8-4.el8 @anaconda PackageKit.x86_64 1.1.12-4.el8 @AppStream PackageKit-glib.x86_64 1.1.12-4.el8 @AppStream WALinuxAgent.noarch 2.2.38-1.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms abattis-cantarell-fonts.noarch 0.0.25-4.el8 @AppStream acl.x86_64 2.2.53-1.el8 @anaconda ...

ในการแสดงรายการแพ็คเกจที่มีทั้งหมด:

 $ sudo dnf list available
 Last metadata expiration check: 1:15:10 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Available Packages CUnit.i686 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms CUnit.x86_64 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms CUnit-devel.i686 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms CUnit-devel.x86_64 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms ...

ตัวอย่างเช่น หากต้องการแสดงรายการแพ็คเกจ MySQL ทั้งหมดที่มีอยู่:

 $ sudo dnf list available "mysql*"
 Last metadata expiration check: 1:17:04 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Available Packages mysql.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-common.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-devel.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-errmsg.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-libs.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-server.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-test.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms

แสดงข้อมูลแพ็คเกจ

ในการแสดงข้อมูลเกี่ยวกับแพ็คเกจ:

 $ sudo dnf info <em>package_name </em>

ตัวอย่างเช่น หากต้องการแสดงข้อมูลเกี่ยวกับเซิร์ฟเวอร์ httpd:

 $ sudo dnf info httpd
 Last metadata expiration check: 0:15:04 ago on Mon 01 Jun 2020 11:23:11 PM UTC. Available Packages Name : httpd Version : 2.4.37 Release : 21.module+el8.2.0+5008+cca404a3 Architecture : x86_64 Size : 1.4 M Source : httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.src.rpm Repository : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Summary : Apache HTTP Server URL : https://httpd.apache.org/ License : ASL 2.0 Description : The Apache HTTP Server is a powerful, efficient, and extensible : web server.

การติดตั้งแพ็คเกจ

การติดตั้งแพ็คเกจเดียว

ในการติดตั้งแพ็คเกจเดียวและการพึ่งพาที่ไม่ได้ติดตั้งทั้งหมด:

 $ sudo dnf install package_name

ตัวอย่างเช่น ในการติดตั้ง Nginx:

 $ sudo dnf install nginx
 Dependencies resolved. =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: nginx x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k Installing dependencies: gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k jbigkit-libs x86_64 2.1-14.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 55 k ..

สิ่งนี้จะติดตั้ง Nginx และข้อกำหนดการพึ่งพาที่ไม่ได้ติดตั้งทั้งหมด

การติดตั้งหลายแพ็คเกจ

คุณยังสามารถติดตั้งหลายแพ็คเกจโดยเพิ่มชื่อแพ็คเกจในคำสั่งนี้ ตัวอย่างเช่น หากต้องการติดตั้งเซิร์ฟเวอร์ Nginx, PHP & MySQL ให้ป้อน:

 $ sudo dnf install nginx php mysql-server
 Dependencies resolved. =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: mysql-server x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms 22 M nginx x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k php x86_64 7.2.24-1.module+el8.2.0+4601+7c76a223 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.5 M Installing dependencies: apr x86_64 1.6.3-9.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 125 k apr-util x86_64 1.6.1-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 105 k gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k httpd x86_64 2.4.37-21.module+el8.2.0+5008+cca404a3 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.4 M httpd-filesystem noarch 2.4.37-21.module+el8.2.0+5008+cca404a3 ...

การติดตั้งแพ็คเกจด้วยชื่อไฟล์ไบนารี

หากคุณทราบชื่อไฟล์ไบนารีที่จะติดตั้ง แต่ไม่ทราบชื่อแพ็คเกจ นั่นก็เพียงพอที่จะติดตั้งแพ็คเกจที่เกี่ยวข้องได้

ตัวอย่างเช่น หากคุณป้อน:

 $ sudo dnf install /usr/sbin/named
 Last metadata expiration check: 1:21:25 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Dependencies resolved. ===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Installing: bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M Transaction Summary ===================================================================================================== Install 1 Package Total download size: 2.1 M Installed size: 4.5 M Is this ok [y/N]:

DNF ค้นหาและพบแพ็คเกจที่มีชื่อ /usr/sbin/ และแจ้งให้คุณติดตั้ง

ค้นหาแพ็คเกจที่เป็นเจ้าของไฟล์

หากคุณทราบชื่อไฟล์และต้องการค้นหาแพ็คเกจที่ให้บริการ (ติดตั้งหรือไม่) ให้ใช้:

 $ sudo dnf provides <em>file_name</em>

ตัวอย่างเช่น หากต้องการค้นหาว่าแพ็กเกจใดระบุชื่อ ไบนารีสำหรับเซิร์ฟเวอร์ DNS จะใช้:

 $ sudo dnf provides named
 Last metadata expiration check: 1:27:30 ago on Mon 01 Jun 2020 11:23:11 PM UTC. bind-32:9.11.4-16.P2.el8.x86_64 : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) : server Repo : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Matched from: Filename : /usr/sbin/named

การลบแพ็คเกจ

ในการลบแพ็คเกจ:

 sudo dnf remove <em>package_name</em>

แต่โปรดระวัง DNF ไม่สามารถลบแพ็คเกจโดยไม่ลบแพ็คเกจที่ขึ้นอยู่กับมันด้วย หากต้องการลบแพ็คเกจ nmap ให้ใช้:

 $ sudo dnf remove nmap Dependencies resolved. ===================================================================================================== Package Architecture Version Repository Size ===================================================================================================== Removing: nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M Transaction Summary ===================================================================================================== Remove 1 Package Freed space: 24 M Is this ok [y/N]:

การจัดการกลุ่มแพ็คเกจ

กลุ่มแพ็คเกจคือชุดของแพ็คเกจที่เกี่ยวข้องอย่างใกล้ชิดและให้บริการตามวัตถุประสงค์ทั่วไป การติดตั้งกลุ่มแพ็คเกจจะติดตั้งชุดของแพ็คเกจ ซึ่งช่วยประหยัดเวลาได้มาก

แสดงรายการกลุ่มแพ็คเกจทั้งหมด

ในการแสดงรายการกลุ่มแพ็คเกจทั้งหมด:

 $ sudo dnf group list
 Available Environment Groups: Server with GUI Server Workstation Custom Operating System Virtualization Host Installed Environment Groups: Minimal Install Installed Groups: Security Tools Container Management Available Groups: Legacy UNIX Compatibility Development Tools Scientific Support .NET Core Development Graphical Administration Tools Headless Management RPM Development Tools Network Servers System Tools Smart Card Support

แสดงรายการแพ็คเกจทั้งหมดในกลุ่ม

ในการแสดงรายการแพ็คเกจทั้งหมดในกลุ่ม:

 $ sudo dnf group info <em>package_name</em>

ตัวอย่างเช่น หากต้องการดูแพ็คเกจในกลุ่ม Security Tools:

 $ sudo dnf group info “security tools”
Group: Security Tools Description: Security tools for integrity and trust verification. Default Packages: scap-security-guide Optional Packages: aide hmaccalc openscap openscap-engine-sce openscap-utils scap-security-guide-doc scap-workbench tpm-quote-tools tpm-tools tpm2-tools trousers

การติดตั้งกลุ่มแพ็คเกจ

การติดตั้งกลุ่มจะติดตั้งแพ็คเกจทั้งหมดในกลุ่ม ในการติดตั้งกลุ่มแพ็คเกจให้ใช้:

 sudo dnf group install <em>package_group_name</em>

ตัวอย่างเช่น ในการติดตั้งกลุ่ม "เซิร์ฟเวอร์เครือข่าย":

 $ sudo dnf group install “Network Servers”
 Last metadata expiration check: 1:40:14 ago on Wed 03 Jun 2020 05:53:11 PM UTC. Dependencies resolved. =========================================================================================== Package Architecture Version Repository Size =========================================================================================== Installing Groups: Network Servers Transaction Summary =========================================================================================== Is this ok [y/N]:

การลบกลุ่มแพ็คเกจ

ในการลบกลุ่มแพ็คเกจ:

 sudo dnf remove <em>package_name</em>

ดังนั้น หากต้องการลบกลุ่มแพ็คเกจ "Security Tools":

 $ sudo dnf group remove "security tools"
 Dependencies resolved. ===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Removing: scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M Removing unused dependencies: GConf2 x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 6.3 M libxslt x86_64 1.1.32-4.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 734 k openscap x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 58 M openscap-scanner x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 137 k xml-common noarch 0.6.3-50.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 78 k Removing Groups: Security Tools Transaction Summary ===================================================================================================== Remove 6 Packages Freed space: 247 M Is this ok [y/N]: 

กำลังปรับปรุงแพ็คเกจ

อัพเดทแพ็คเกจทั้งหมด

ในการอัปเดตแพ็คเกจทั้งหมดและการพึ่งพาคุณสามารถใช้:

 $ sudo dnf upgrade
 Last metadata expiration check: 1:09:31 ago on Tue 02 Jun 2020 08:38:09 PM UTC. Dependencies resolved. Nothing to do. Complete!

ซึ่งจะติดตั้งการอัปเดตทั้งหมดที่สามารถติดตั้งได้ ทั้งการ อัปเกรด dnf และการอัปเดต dnf มีผลเหมือนกัน แต่แนะนำให้อัปเกรด dnf

การอัปเดตแพ็คเกจเดียว

หากต้องการอัพเดตแพ็คเกจเดียว ให้รัน:

 $ sudo dnf upgrade package_name

ตัวอย่างเช่น หากต้องการอัพเดตแพ็คเกจไพธอน:

 $ sudo dnf upgrade python

บทสรุป

การเรียนรู้ DNF สามารถให้รางวัลได้เนื่องจากมักเป็นวิธีที่เร็วที่สุดในการดำเนินงานด้านการดูแลระบบ หากสนใจที่จะเรียนรู้ RHEL 8 คุณสามารถดูหลักสูตร Udemy นี้