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 |
|
|
(automatic) |
Upgrade all |
|
|
|
Install |
|
|
|
Remove |
|
|
|
Remove + deps |
|
|
|
Search |
|
|
|
Info |
|
|
|
File owner |
|
|
|
List files |
|
|
|
Clean cache |
|
|
|
Quick Reference
| Task | Command |
|---|---|
Arch: Full upgrade |
|
Arch: Search + install |
|
Arch: Remove orphans |
|
Arch: AUR install |
|
Debian: Update + upgrade |
|
Debian: Install local deb |
|
Debian: Fix broken |
|
RHEL: Full upgrade |
|
RHEL: Install group |
|
RHEL: Module install |
|