Skip to content

Linux Package Management Guide

Package management is essential for installing, updating, and maintaining software on Linux systems. This guide covers the major package managers across different distributions.


Overview: Package Managers by Distribution

Distribution Package Manager Package Format Example
Debian/Ubuntu apt, dpkg .deb apt install nginx
RHEL/CentOS 8+ dnf .rpm dnf install httpd
RHEL/CentOS 7 yum .rpm yum install httpd
Fedora dnf .rpm dnf install package
Arch Linux pacman .pkg.tar.zst pacman -S package
openSUSE zypper .rpm zypper install package
Alpine Linux apk .apk apk add package

APT - Debian/Ubuntu Package Management

Basic APT Commands

# Update package index
sudo apt update

# Upgrade all packages
sudo apt upgrade

# Full upgrade (may remove packages)
sudo apt full-upgrade

# Install package
sudo apt install packagename

# Remove package
sudo apt remove packagename

# Remove package and config files
sudo apt purge packagename

# Remove unnecessary packages
sudo apt autoremove

# Search for packages
apt search keyword

# Show package information
apt show packagename

Advanced APT Usage

# Install specific version
sudo apt install packagename=version

# Install without recommends
sudo apt install --no-install-recommends packagename

# Download package without installing
apt download packagename

# Simulate installation (dry run)
apt install -s packagename

# Fix broken dependencies
sudo apt --fix-broken install

# Clean package cache
sudo apt clean
sudo apt autoclean

# List installed packages
apt list --installed

# List upgradable packages
apt list --upgradable

# Show package dependencies
apt depends packagename

# Show reverse dependencies
apt rdepends packagename

Managing Repositories

# Add repository (Ubuntu)
sudo add-apt-repository ppa:repo/name
sudo apt update

# Remove repository
sudo add-apt-repository --remove ppa:repo/name

# Edit sources list
sudo nano /etc/apt/sources.list

# Add repository key
wget -qO - https://repo.example.com/key.gpg | sudo apt-key add -

# List repositories
grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*

dpkg - Low-Level Package Management

# Install .deb file
sudo dpkg -i package.deb

# Remove package
sudo dpkg -r packagename

# List all installed packages
dpkg -l

# Search installed packages
dpkg -l | grep pattern

# Show package contents
dpkg -L packagename

# Find which package owns a file
dpkg -S /path/to/file

# Extract .deb without installing
dpkg-deb -x package.deb output-dir/

YUM/DNF - RHEL/CentOS/Fedora

Basic DNF Commands

# Update package database
sudo dnf check-update

# Upgrade all packages
sudo dnf upgrade

# Install package
sudo dnf install packagename

# Remove package
sudo dnf remove packagename

# Search packages
dnf search keyword

# Show package info
dnf info packagename

# List installed packages
dnf list installed

# List available packages
dnf list available

# Clean cache
sudo dnf clean all

Advanced DNF Usage

# Install package group
sudo dnf group install "Development Tools"

# List groups
dnf group list

# Show group info
dnf group info "System Tools"

# Install specific version
sudo dnf install packagename-version

# Downgrade package
sudo dnf downgrade packagename

# Show history
dnf history

# Undo last transaction
sudo dnf history undo last

# Reinstall package
sudo dnf reinstall packagename

# Check for updates
dnf check-update

# Update specific package
sudo dnf update packagename

YUM Commands (CentOS 7 and earlier)

# Update system
sudo yum update

# Install package
sudo yum install packagename

# Remove package
sudo yum remove packagename

# Search packages
yum search keyword

# List installed
yum list installed

# Show package info
yum info packagename

# Install group
sudo yum groupinstall "Development Tools"

# List groups
yum grouplist

# Clean cache
sudo yum clean all

Managing Repositories (RHEL/CentOS)

# List enabled repositories
dnf repolist
yum repolist

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

# Enable repository
sudo dnf config-manager --set-enabled reponame

# Disable repository
sudo dnf config-manager --set-disabled reponame

# Install EPEL repository
sudo dnf install epel-release  # RHEL 8/CentOS 8
sudo yum install epel-release  # CentOS 7

# Edit repo files
sudo vi /etc/yum.repos.d/reponame.repo

RPM - Low-Level Package Management

# Install .rpm file
sudo rpm -ivh package.rpm

# Upgrade package
sudo rpm -Uvh package.rpm

# Remove package
sudo rpm -e packagename

# Query installed packages
rpm -qa

# Query package info
rpm -qi packagename

# List package files
rpm -ql packagename

# Find which package owns file
rpm -qf /path/to/file

# Verify package
rpm -V packagename

Pacman - Arch Linux

Basic Pacman Commands

# Sync and update system
sudo pacman -Syu

# Install package
sudo pacman -S packagename

# Remove package
sudo pacman -R packagename

# Remove package and dependencies
sudo pacman -Rs packagename

# Search remote packages
pacman -Ss keyword

# Search local packages
pacman -Qs keyword

# Show package info
pacman -Si packagename

# List installed packages
pacman -Q

# List explicitly installed
pacman -Qe

# Clean package cache
sudo pacman -Sc

Advanced Pacman Usage

# Install local package
sudo pacman -U package.pkg.tar.zst

# Download without installing
sudo pacman -Sw packagename

# List package files
pacman -Ql packagename

# Find owner of file
pacman -Qo /path/to/file

# Check for orphaned packages
pacman -Qtdq

# Remove orphans
sudo pacman -Rs $(pacman -Qtdq)

# Force refresh package database
sudo pacman -Syy

# List AUR helpers
# yay, paru (install separately)

Snap - Universal Packages

Basic Snap Commands

# Install snap
sudo apt install snapd  # Debian/Ubuntu
sudo dnf install snapd  # Fedora

# Find snaps
snap find keyword

# Install snap
sudo snap install packagename

# Install from channel
sudo snap install packagename --channel=edge

# List installed snaps
snap list

# Update snap
sudo snap refresh packagename

# Update all snaps
sudo snap refresh

# Remove snap
sudo snap remove packagename

# Show snap info
snap info packagename

# Revert to previous version
sudo snap revert packagename

Flatpak - Universal Packages

Basic Flatpak Commands

# Install Flatpak
sudo apt install flatpak

# Add Flathub repository
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# Search applications
flatpak search keyword

# Install application
flatpak install flathub app.id

# List installed
flatpak list

# Run application
flatpak run app.id

# Update applications
flatpak update

# Uninstall application
flatpak uninstall app.id

# Remove unused runtimes
flatpak uninstall --unused

Common Package Management Tasks

System Updates

# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y

# RHEL/CentOS/Fedora
sudo dnf upgrade -y

# Arch Linux
sudo pacman -Syu

# Full system upgrade with cleanup
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y

Installing Development Tools

# Debian/Ubuntu
sudo apt install build-essential

# RHEL/CentOS/Fedora
sudo dnf groupinstall "Development Tools"

# Arch Linux
sudo pacman -S base-devel

Managing Dependencies

# Show dependencies
apt depends packagename    # Debian/Ubuntu
dnf repoquery --requires packagename  # RHEL/Fedora
pacman -Si packagename | grep Depends  # Arch

# Show what depends on package
apt rdepends packagename
dnf repoquery --whatrequires packagename

# Fix broken dependencies
sudo apt --fix-broken install  # Debian/Ubuntu
sudo dnf check  # RHEL/Fedora

Package Information

# Package details
apt show packagename       # Debian/Ubuntu
dnf info packagename       # RHEL/Fedora
pacman -Si packagename     # Arch

# Package changelog
apt changelog packagename  # Debian/Ubuntu
dnf changelog packagename  # RHEL/Fedora

# List package files
dpkg -L packagename        # Debian/Ubuntu
rpm -ql packagename        # RHEL/Fedora
pacman -Ql packagename     # Arch

Best Practices

Regular Maintenance

# Weekly update routine
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

# Clean package cache
sudo apt clean      # Debian/Ubuntu
sudo dnf clean all  # RHEL/Fedora
sudo pacman -Sc     # Arch

# Check for security updates
sudo apt list --upgradable | grep security
sudo dnf updateinfo list security

Before Major Changes

# Simulate installation
apt install -s packagename
dnf install --assumeno packagename

# Create system snapshot (if using Btrfs/LVM)
sudo snapper create -d "Before package upgrade"

# List package files before installing
apt-file list packagename
dnf repoquery -l packagename

Troubleshooting

# Fix broken packages
sudo apt --fix-broken install
sudo dpkg --configure -a

# Rebuild package cache
sudo apt clean && sudo apt update

# Check package integrity
sudo debsums -c       # Debian/Ubuntu
rpm -Va               # RHEL/Fedora
pacman -Qk           # Arch

# Force reinstall
sudo apt install --reinstall packagename
sudo dnf reinstall packagename
sudo pacman -S packagename

Quick Reference

Essential Commands by Distribution

# Debian/Ubuntu (APT)
sudo apt update              # Update package list
sudo apt upgrade             # Upgrade packages
sudo apt install pkg         # Install package
sudo apt remove pkg          # Remove package
apt search keyword           # Search packages

# RHEL/CentOS/Fedora (DNF/YUM)
sudo dnf check-update        # Check for updates
sudo dnf upgrade             # Upgrade packages
sudo dnf install pkg         # Install package
sudo dnf remove pkg          # Remove package
dnf search keyword           # Search packages

# Arch Linux (Pacman)
sudo pacman -Syu             # Update system
sudo pacman -S pkg           # Install package
sudo pacman -R pkg           # Remove package
pacman -Ss keyword           # Search packages