DNF Reference

DNF (Dandified YUM) is the default package manager for RHEL 8+, Fedora, and derivatives.

Basic Operations

Install Packages

# Single package
sudo dnf install vim

# Multiple packages
sudo dnf install vim tmux htop

# Install without confirmation
sudo dnf install -y package

# Install specific version
sudo dnf install package-1.2.3

Remove Packages

# Remove package
sudo dnf remove package

# Remove with dependencies
sudo dnf autoremove package

Update System

# Check for updates
dnf check-update

# Upgrade all packages
sudo dnf upgrade

# Upgrade specific package
sudo dnf upgrade package

# Upgrade with refresh
sudo dnf upgrade --refresh

Querying Packages

Search Packages

# Search by name/summary
dnf search term

# Search all fields
dnf search all term

Package Information

# Package details
dnf info package

# List files in package
dnf repoquery -l package

# Find which package provides file
dnf provides /usr/bin/vim

# List package dependencies
dnf repoquery --requires package

# What depends on package
dnf repoquery --whatrequires package

List Packages

# All installed
dnf list installed

# Available
dnf list available

# Updates available
dnf list updates

# Recently installed
dnf history list

Package Groups

List Groups

# List all groups
dnf group list

# Include hidden groups
dnf group list --hidden

Install/Remove Groups

# Install group
sudo dnf group install "Development Tools"

# Remove group
sudo dnf group remove "Development Tools"

# Group info
dnf group info "Development Tools"

Repository Management

List Repositories

# Enabled repos
dnf repolist

# All repos
dnf repolist all

Enable/Disable Repos

# Disable repo
sudo dnf config-manager --set-disabled repo-name

# Enable repo
sudo dnf config-manager --set-enabled repo-name

# Enable for single command
sudo dnf install package --enablerepo=repo-name

Add Repository

# Add repo from URL
sudo dnf config-manager --add-repo https://example.com/repo.repo

# Add repo from file
sudo vim /etc/yum.repos.d/custom.repo

Repository file format:

[repo-name]
name=Repository Description
baseurl=https://example.com/repo/$releasever/$basearch
enabled=1
gpgcheck=1
gpgkey=https://example.com/RPM-GPG-KEY

Cache Management

Clean Cache

# Clean all
sudo dnf clean all

# Clean specific
sudo dnf clean packages    # Downloaded packages
sudo dnf clean metadata    # Repository metadata
sudo dnf clean dbcache     # Cache files

Cache Directory

# View cache size
du -sh /var/cache/dnf/

# Rebuild cache
sudo dnf makecache

History and Rollback

View History

# List transactions
dnf history

# Transaction details
dnf history info 5

# Packages from transaction
dnf history info 5 | grep -E "Install|Upgrade|Remove"

Undo/Redo Transactions

# Undo last transaction
sudo dnf history undo last

# Undo specific transaction
sudo dnf history undo 5

# Rollback to transaction
sudo dnf history rollback 5

Modules (RHEL 8+)

List Modules

# List all modules
dnf module list

# List specific module
dnf module list nodejs

Enable/Install Modules

# Enable module stream
sudo dnf module enable nodejs:18

# Install module
sudo dnf module install nodejs:18

# Reset module
sudo dnf module reset nodejs

Configuration

dnf.conf

Main config at /etc/dnf/dnf.conf:

[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False

# Performance
max_parallel_downloads=10
fastestmirror=True

# Keep cache
keepcache=True

Exclude Packages

# In /etc/dnf/dnf.conf
excludepkgs=kernel* package-name

Or per-repo in /etc/yum.repos.d/*.repo:

[repo-name]
exclude=package1 package2

Security Updates

Check Security Updates

# List security updates
dnf check-update --security

# List by severity
dnf updateinfo list security --sec-severity=Critical

Apply Security Updates

# Install security updates only
sudo dnf upgrade --security

# Specific severity
sudo dnf upgrade --security --sec-severity=Critical

Security Advisories

# List advisories
dnf updateinfo list

# Advisory details
dnf updateinfo info RHSA-2024:1234

Troubleshooting

Common Issues

# Clear and rebuild cache
sudo dnf clean all
sudo dnf makecache

# Check for broken dependencies
sudo dnf check

# Force reinstall
sudo dnf reinstall package

Lock Issues

# If locked
sudo rm -f /var/run/dnf.pid
sudo rm -f /var/lib/rpm/.rpm.lock

GPG Key Issues

# Import key manually
sudo rpm --import https://example.com/RPM-GPG-KEY

# Skip GPG check (temporary)
sudo dnf install package --nogpgcheck

Useful Aliases

Add to ~/.bashrc:

alias dnfi='sudo dnf install'
alias dnfr='sudo dnf remove'
alias dnfu='sudo dnf upgrade'
alias dnfs='dnf search'
alias dnfp='dnf provides'
alias dnfl='dnf list installed'