Package Managers

Package management across distributions - pacman (Arch), apt (Debian/Ubuntu), dnf (RHEL/Fedora).

pacman Basics (Arch Linux)

# Update package database + upgrade
sudo pacman -Syu

# Install package
sudo pacman -S nginx

# Install multiple packages
sudo pacman -S nginx redis postgresql

# Remove package (keep deps)
sudo pacman -R nginx

# Remove package + unused deps
sudo pacman -Rs nginx

# Remove package + deps + config
sudo pacman -Rns nginx

# Search packages
pacman -Ss nginx                    # Remote search
pacman -Qs nginx                    # Local search (installed)

# Package info
pacman -Si nginx                    # Remote info
pacman -Qi nginx                    # Local info (installed)
pacman -Ql nginx                    # List files owned by package

MUSCLE MEMORY: pacman -Syu before installing anything. Fresh database = fewer conflicts.

pacman Queries

# What package owns a file?
pacman -Qo /usr/bin/vim

# List all installed packages
pacman -Q
pacman -Q | wc -l                   # Count

# Explicitly installed (not deps)
pacman -Qe
pacman -Qe | wc -l

# Installed as deps only
pacman -Qd

# Orphaned packages (deps no longer needed)
pacman -Qtd

# Foreign packages (AUR, manual)
pacman -Qm

# Native packages (official repos)
pacman -Qn

# Recently installed
pacman -Q --sort=installdate | tail -20

# Package changelog/install reason
pacman -Qi nginx | grep -E "^(Install Reason|Install Date)"

# Files that would be installed
pacman -Fl nginx

POWER MOVE: pacman -Qtdq | sudo pacman -Rns - removes all orphans.

pacman Cache Management

# Cache location
ls /var/cache/pacman/pkg/ | head

# Cache size
du -sh /var/cache/pacman/pkg/

# Clean cache (keep 3 versions)
sudo paccache -r

# Clean cache (keep 1 version)
sudo paccache -rk1

# Remove all cached packages (not installed)
sudo paccache -ruk0

# Clear ALL cache (dangerous)
sudo pacman -Scc

# Downgrade package from cache
sudo pacman -U /var/cache/pacman/pkg/nginx-1.24.0-1-x86_64.pkg.tar.zst

BEST PRACTICE: Run paccache -r weekly via systemd timer.

pacman Mirrors

# Edit mirrorlist
sudo vim /etc/pacman.d/mirrorlist

# Generate optimal mirrorlist (reflector)
sudo pacman -S reflector
sudo reflector --country US --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

# Test mirror speed
curl -s -w '%{time_total}\n' -o /dev/null https://mirror.example.com/archlinux/core/os/x86_64/core.db

# Rank mirrors by speed
rankmirrors -n 6 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist

pacman Hooks & Troubleshooting

# View hooks
ls /usr/share/libalpm/hooks/
ls /etc/pacman.d/hooks/

# Check for package conflicts
pacman -Qkk                         # Verify all packages

# Check single package integrity
pacman -Qkk nginx

# Fix corrupted database
sudo rm /var/lib/pacman/db.lck      # Remove lock
sudo pacman -Syy                    # Force refresh

# View transaction log
cat /var/log/pacman.log | tail -50
grep "installed\|upgraded\|removed" /var/log/pacman.log | tail -20

# Reinstall all packages (nuclear option)
sudo pacman -Qqn | sudo pacman -S -

GOTCHA: If db.lck exists after crash, check ps aux | grep pacman first.

yay (AUR Helper)

# Install yay (first time)
git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin && makepkg -si

# Search AUR
yay -Ss package-name

# Install from AUR
yay -S google-chrome

# Update all (repos + AUR)
yay -Syu

# Update AUR only
yay -Sua

# Show AUR package info
yay -Si aur-package

# Clean build cache
yay -Sc

# List AUR packages
yay -Qm

SECURITY: Review PKGBUILD before installing AUR packages.

apt Basics (Debian/Ubuntu)

# Update package index
sudo apt update

# Upgrade packages
sudo apt upgrade                    # Safe upgrade
sudo apt full-upgrade               # May remove packages

# Update + upgrade
sudo apt update && sudo apt upgrade -y

# Install package
sudo apt install nginx

# Install specific version
sudo apt install nginx=1.18.0-0ubuntu1

# Remove package
sudo apt remove nginx               # Keep config
sudo apt purge nginx                # Remove config

# Remove unused deps
sudo apt autoremove

# Search packages
apt search nginx
apt-cache search nginx              # Older syntax

# Package info
apt show nginx
apt-cache show nginx

MUSCLE MEMORY: sudo apt update before apt install. Stale index = 404 errors.

apt Queries

# List installed packages
apt list --installed
dpkg -l                             # Lower level
dpkg -l | wc -l                     # Count

# What package owns a file?
dpkg -S /usr/bin/vim

# List files in package
dpkg -L nginx

# Show package dependencies
apt depends nginx
apt-cache depends nginx

# Reverse deps (what needs this)
apt rdepends nginx

# Show available versions
apt-cache policy nginx

# List upgradable packages
apt list --upgradable

# Hold/pin package version
sudo apt-mark hold nginx
sudo apt-mark unhold nginx
apt-mark showhold

apt Cache & Sources

# Cache location
ls /var/cache/apt/archives/

# Cache size
du -sh /var/cache/apt/archives/

# Clean downloaded packages
sudo apt clean                      # All cached
sudo apt autoclean                  # Obsolete only

# Sources list
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/

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

# Add key (deprecated method)
curl -fsSL https://example.com/key.gpg | sudo apt-key add -

# Add key (new method)
curl -fsSL https://example.com/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg
echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/repo stable main" | sudo tee /etc/apt/sources.list.d/example.list

GOTCHA: apt-key is deprecated. Use /etc/apt/keyrings/ for new repos.

dpkg Low-Level Operations

# Install local .deb file
sudo dpkg -i package.deb
sudo apt install -f                 # Fix deps after

# Or better (handles deps)
sudo apt install ./package.deb

# Remove package
sudo dpkg -r nginx
sudo dpkg -P nginx                  # Purge (remove config)

# List package contents (not installed)
dpkg -c package.deb

# Extract without installing
dpkg -x package.deb /tmp/extract/

# Reconfigure package
sudo dpkg-reconfigure tzdata
sudo dpkg-reconfigure locales

# Check package integrity
sudo debsums nginx

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

dnf Basics (RHEL/Fedora)

# Update package index + upgrade
sudo dnf upgrade                    # Combined operation
sudo dnf upgrade --refresh          # Force refresh

# Install package
sudo dnf install nginx

# Install local RPM
sudo dnf install ./package.rpm

# Remove package
sudo dnf remove nginx

# Remove unused deps
sudo dnf autoremove

# Search packages
dnf search nginx
dnf search all "web server"         # Search desc too

# Package info
dnf info nginx
dnf info --installed nginx

# List installed
dnf list installed
dnf list installed | wc -l

# Check for updates
dnf check-update

MUSCLE MEMORY: dnf upgrade updates index AND upgrades in one command.

dnf Queries

# What package owns a file?
dnf provides /usr/bin/vim
rpm -qf /usr/bin/vim                # Lower level

# List files in package
rpm -ql nginx
dnf repoquery -l nginx              # Not installed yet

# Show package dependencies
dnf repoquery --requires nginx
dnf repoquery --whatrequires nginx  # Reverse deps

# Show available versions
dnf --showduplicates list nginx

# List recently installed
dnf history list
dnf history info 15                 # Transaction details

# Undo transaction
sudo dnf history undo 15

# Version lock
sudo dnf install 'dnf-command(versionlock)'
sudo dnf versionlock add nginx
sudo dnf versionlock list
sudo dnf versionlock delete nginx

dnf Repositories

# List repos
dnf repolist
dnf repolist all                    # Include disabled

# Enable/disable repo
sudo dnf config-manager --enable repo-name
sudo dnf config-manager --disable repo-name

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

# Repo files location
ls /etc/yum.repos.d/

# EPEL (RHEL/Rocky/Alma)
sudo dnf install epel-release

# RPM Fusion (Fedora)
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

# Clean cache
sudo dnf clean all
sudo dnf makecache                  # Rebuild

dnf Groups & Modules

# List groups
dnf group list
dnf group list --hidden

# Group info
dnf group info "Development Tools"

# Install group
sudo dnf group install "Development Tools"
sudo dnf group install --with-optional "Development Tools"

# Remove group
sudo dnf group remove "Development Tools"

# Modules (RHEL 8+)
dnf module list
dnf module list nginx

# Enable module stream
sudo dnf module enable nginx:1.20

# Install from module
sudo dnf module install nginx:1.20/common

# Reset module
sudo dnf module reset nginx

Cross-Platform Comparison

Task pacman apt dnf

Update index

pacman -Sy

apt update

(automatic)

Upgrade all

pacman -Syu

apt upgrade

dnf upgrade

Install

pacman -S pkg

apt install pkg

dnf install pkg

Remove

pacman -R pkg

apt remove pkg

dnf remove pkg

Remove + deps

pacman -Rs pkg

apt autoremove

dnf autoremove

Search

pacman -Ss term

apt search term

dnf search term

Info

pacman -Si pkg

apt show pkg

dnf info pkg

File owner

pacman -Qo file

dpkg -S file

dnf provides file

List files

pacman -Ql pkg

dpkg -L pkg

rpm -ql pkg

Clean cache

paccache -r

apt clean

dnf clean all

Quick Reference

Task Command

Arch: Full upgrade

sudo pacman -Syu

Arch: Search + install

pacman -Ss nginx && sudo pacman -S nginx

Arch: Remove orphans

pacman -Qtdq | sudo pacman -Rns -

Arch: AUR install

yay -S aur-package

Debian: Update + upgrade

sudo apt update && sudo apt upgrade -y

Debian: Install local deb

sudo apt install ./package.deb

Debian: Fix broken

sudo apt --fix-broken install

RHEL: Full upgrade

sudo dnf upgrade --refresh

RHEL: Install group

sudo dnf group install "Development Tools"

RHEL: Module install

sudo dnf module install nginx:1.20