Linux Package Managers: apt, apt-get, yum, dnf, and pacman Explained
Master Linux package managers including apt/apt-get for Debian/Ubuntu, yum/dnf for RHEL/CentOS, pacman for Arch, and building from source with autotools.
Linux Package Managers: apt, apt-get, yum, dnf, and pacman Explained
Package managers simplify software installation, updates, and removal. Each Linux distribution uses different package management systems. Mastering multiple managers is essential for working across different Linux systems.
Debian/Ubuntu: APT (Advanced Package Tool)
apt - Modern Package Management
Modern, user-friendly interface for package management.
# Update package list
sudo apt update
# Upgrade all packages
sudo apt upgrade
# Upgrade with dependency changes
sudo apt full-upgrade
# Install package
sudo apt install nginx
sudo apt install vim git curl
# Install multiple packages
sudo apt install apache2 mysql-server php-fpm
# Remove package (keeps config files)
sudo apt remove nginx
# Remove package completely (removes config)
sudo apt purge nginx
# Search for package
apt search nginx
apt search "web server"
# Show package info
apt show nginx
# Package: nginx
# Version: 1.18.0-6ubuntu14.2
# Description: ...
# List installed packages
apt list --installed
apt list --installed | grep nginx
# Check if package is installed
dpkg -l | grep nginx
# Autoremove unused dependencies
sudo apt autoremove
# Clean download cache
sudo apt clean
sudo apt autoclean
# Update and upgrade (shortcuts)
sudo apt update && sudo apt upgrade -y
# -y: automatically answer yes to promptsapt-get - Traditional Package Tool
Older, still widely-used package tool (apt is recommended for interactive use).
# Update package list
sudo apt-get update
# Install package
sudo apt-get install nodejs
# Install specific version
sudo apt-get install nodejs=12.0.0-1
# Remove package
sudo apt-get remove python3-pip
# Remove with dependencies
sudo apt-get autoremove python3-pip
# Upgrade packages
sudo apt-get upgrade
# Full upgrade (can remove packages)
sudo apt-get dist-upgrade
# Search package
apt-cache search python | grep web
# Show package dependencies
apt-cache depends nginx
# Show reverse dependencies (what depends on this)
apt-cache rdepends libssl-dev
# Clean package cache
sudo apt-get clean
sudo apt-get autoclean
# Use apt-get in scripts
apt-get install -y package # Non-interactive
apt-get install -qq package # Quiet modedpkg - Debian Package Manager
Low-level tool for managing .deb packages.
# Install local .deb file
sudo dpkg -i package.deb
# List installed packages
dpkg -l
dpkg -l | grep nginx
# Show package info
dpkg -s nginx
# List files in package
dpkg -L nginx
# /usr/sbin/nginx
# /usr/share/man/man8/nginx.8.gz
# ...
# List contents of .deb file
dpkg -c package.deb
# Remove package
sudo dpkg -r nginx
# Remove with config
sudo dpkg -P nginx
# Fix broken dependencies
sudo apt --fix-broken install
# Reconfigure package
sudo dpkg-reconfigure nginxAdding Personal Package Archives (PPA)
# Add PPA
sudo add-apt-repository ppa:user/ppa-name
# Example: Add Node.js PPA
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt update
sudo apt install nodejs
# Remove PPA
sudo add-apt-repository --remove ppa:user/ppa-name
# List PPAs
ls /etc/apt/sources.list.d/
# View all repositories
cat /etc/apt/sources.list
cat /etc/apt/sources.list.d/*.listRHEL/CentOS: YUM and DNF
yum - Yellowdog Updater Modified
Package manager for RHEL, CentOS, Fedora (legacy).
# Update all packages
sudo yum update
# Update specific package
sudo yum update nginx
# Install package
sudo yum install nginx
sudo yum install gcc make
# Remove package
sudo yum remove nginx
# Search package
yum search nginx
yum search "web server"
# Show package info
yum info nginx
# List installed packages
yum list installed
yum list installed | grep nginx
# Check available updates
yum check-update
# Clean cache
sudo yum clean all
sudo yum clean packages
# Install from group
sudo yum groupinstall "Development Tools"
# List groups
yum grouplist
# Install from local file
sudo yum install ./package.rpm
# Downgrade package
sudo yum downgrade nginxdnf - Dandified YUM
Modern replacement for yum (recommended for Fedora 22+, CentOS 8+).
# Update packages
sudo dnf upgrade
# Install package
sudo dnf install httpd
# Remove package
sudo dnf remove httpd
# Search package
dnf search nginx
# Show info
dnf info nginx
# List installed
dnf list installed
# Clean cache
sudo dnf clean all
# Install group
sudo dnf group install "Development Tools"
# List available groups
dnf group list
# Auto-remove dependencies
sudo dnf autoremove
# Install local RPM
sudo dnf install ./package.rpm
# Enable/disable repositories
sudo dnf config-manager --enable fedora-debuginfo
sudo dnf config-manager --disable fedora-debuginforpm - RPM Package Manager
Low-level tool for managing .rpm packages.
# Install RPM package
sudo rpm -i package.rpm
# Install with verbose output
sudo rpm -iv package.rpm
# Install allowing overwrites
sudo rpm -i --force package.rpm
# List installed packages
rpm -qa
rpm -qa | grep nginx
# Show package info
rpm -qi nginx
# List package contents
rpm -ql nginx
# Extract RPM without installing
rpm2cpio package.rpm | cpio -idmv
# Remove package
sudo rpm -e nginx
# Verify package integrity
rpm -V nginx
# Query file owner
rpm -qf /usr/bin/nginx
# nginx-1.18.0Arch Linux: Pacman
# Synchronize package database
sudo pacman -Sy
# Update all packages
sudo pacman -Syuu
# Install package
sudo pacman -S vim git
# Install multiple packages
sudo pacman -S nginx mysql php
# Remove package
sudo pacman -R vim
# Remove with dependencies
sudo pacman -Rs vim
# Search repository
pacman -Ss nginx
# Search installed
pacman -Qs nginx
# Show package info
pacman -Si nginx
# List package contents
pacman -Ql nginx
# List explicitly installed packages
pacman -Qe
# Clean cache
sudo pacman -Sc
sudo pacman -Scc # Remove all cache
# Install group
sudo pacman -S base-devel
# List groups
pacman -Sg
# Query file owner
pacman -Qo /usr/bin/nginxBuilding from Source
autotools (./configure, make, make install)
# Download source
wget https://example.com/package-1.0.tar.gz
tar -xzf package-1.0.tar.gz
cd package-1.0
# Configure build
./configure
./configure --help # See options
# Common configure options
./configure --prefix=/usr/local
./configure --prefix=$HOME/local
./configure --enable-shared --disable-static
# Compile
make -j4 # Use 4 cores
# Install
sudo make install
# Uninstall
sudo make uninstall
# Clean build
make clean
make distclean
# Full installation example
wget https://nginx.org/download/nginx-1.21.0.tar.gz
tar -xzf nginx-1.21.0.tar.gz
cd nginx-1.21.0
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--enable-http_ssl_module \
--enable-http_v2_module
make -j$(nproc)
sudo make installCMake
# Download and extract source
git clone https://github.com/project/repo.git
cd repo
# Create build directory
mkdir build && cd build
# Configure with CMake
cmake ..
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
# Build
make -j4
# Install
sudo make install
# View available options
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_SOMETHING=ON ..Working with Package Repositories
Repository Configuration
# Add repository (Ubuntu)
sudo add-apt-repository universe
sudo apt update
# Add custom repository
sudo nano /etc/apt/sources.list
# deb http://ppa.launchpad.net/user/ppa/ubuntu focal main
# deb-src http://ppa.launchpad.net/user/ppa/ubuntu focal main
# Add GPG key for repository
wget -qO - https://example.com/key.gpg | sudo apt-key add -
# List repositories
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/
# Enable/disable repository
sudo sed -i 's/^# deb/deb/' /etc/apt/sources.list.d/ppa.listVersion Management
Multiple Package Versions
# Install specific version (apt)
sudo apt install python3=3.8.5-1
# List available versions
apt-cache policy python3
# Downgrade package
sudo apt install python3=3.8.5-1
# Pin package version (apt)
echo "python3 hold" | sudo dpkg --set-selections
apt-mark hold python3
# Unpin package
echo "python3 install" | sudo dpkg --set-selections
apt-mark unhold python3
# View held packages
apt-mark showholdDependency Management
Understanding Dependencies
# Show package dependencies
apt-cache depends nginx
# Depends: libnginx-mod-http-geoip2
# Depends: libnginx-mod-http-image-filter
# Depends: nginx-common
# Show reverse dependencies
apt-cache rdepends libssl-dev
# Shows packages that depend on libssl-dev
# Check for broken dependencies
sudo apt check
# Fix broken dependencies
sudo apt --fix-broken install
sudo apt --fix-missing installPractical Package Management
Update All Systems
#!/bin/bash
# Update all packages script
case $DISTRO in
debian|ubuntu)
sudo apt update
sudo apt upgrade -y
;;
rhel|centos)
sudo yum update -y
;;
fedora)
sudo dnf upgrade -y
;;
arch)
sudo pacman -Syuu --noconfirm
;;
esacCreate Package List
# Export installed packages
apt list --installed > packages.txt
# Import packages on new system
xargs sudo apt install < packages.txt
# For RPM-based
rpm -qa > packages.txt
xargs yum install < packages.txtAutomate Security Updates
# Enable automatic updates (Ubuntu)
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# Check configuration
cat /etc/apt/apt.conf.d/50unattended-upgradesTroubleshooting Package Issues
Fix Broken Packages
# Fix broken dependencies
sudo apt --fix-broken install
# Clean cache
sudo apt clean
sudo apt autoclean
# Remove orphaned packages
sudo apt autoremove
# Force package configuration
sudo dpkg --configure -a
# Clear package locks
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
# Reconfigure after major failure
sudo apt update && sudo apt upgradeBest Practices
- Keep Systems Updated - Regularly apply security patches
- Understand Dependencies - Before removing packages
- Use Package Managers - Avoid installing from unknown sources
- Verify Packages - Check checksums and signatures
- Test First - Update dev/test systems before production
- Document Changes - Track what packages you've installed
- Automate Updates - Use unattended-upgrades for security
- Clean Caches - Regularly remove old packages
- Use Repositories - Prefer official over PPAs when possible
- Backup Before Major Changes - Before system-wide upgrades
Summary
Package managers are essential for Linux administration:
- apt/apt-get for Debian-based systems
- yum/dnf for RHEL-based systems
- pacman for Arch Linux
- dpkg/rpm for low-level package control
- Building from source for maximum control
- Proper management ensures stability and security
Master your distribution's package manager for efficient system administration.