Package management is one of Linux's greatest advantages over other operating systems. Instead of hunting down software on websites and dealing with dependencies manually, Linux distributions provide centralized repositories and powerful package managers that handle everything automatically.
A package is a pre-compiled software bundle that includes:
Different Linux distributions use different package managers:
| Distribution | Package Manager | Package Format | Commands | |--------------|----------------|----------------|----------| | Ubuntu/Debian | APT | .deb | apt, apt-get, dpkg | | CentOS/RHEL 8+ | DNF | .rpm | dnf | | CentOS/RHEL 7- | YUM | .rpm | yum | | Fedora | DNF | .rpm | dnf | | Arch Linux | Pacman | .pkg.tar.xz | pacman | | openSUSE | Zypper | .rpm | zypper | | Alpine Linux | APK | .apk | apk |
# Update package index
sudo apt update
# Upgrade all packages
sudo apt upgrade
# Upgrade with distribution updates
sudo apt full-upgrade
# Install a package
sudo apt install package_name
sudo apt install vim git curl
# Remove a package (keep config files)
sudo apt remove package_name
# Remove package and config files
sudo apt purge package_name
# Remove automatically installed dependencies
sudo apt autoremove
# Search for packages
apt search keyword
apt search "web server"
# Show package information
apt show package_name
apt show nginx
# List installed packages
apt list --installed
apt list --installed | grep python
# List upgradable packages
apt list --upgradable
# Install specific version
sudo apt install package_name=version
sudo apt install nginx=1.18.0-6ubuntu14
# Hold package from updates
sudo apt-mark hold package_name
sudo apt-mark unhold package_name
# Install from local .deb file
sudo dpkg -i package.deb
sudo apt install -f # Fix dependencies if needed
# Download package without installing
apt download package_name
# Show package dependencies
apt depends package_name
apt rdepends package_name # Reverse dependencies
# Simulate installation (dry run)
sudo apt install --dry-run package_name
# Fix broken packages
sudo apt --fix-broken install
# Add repository
sudo add-apt-repository ppa:repository/name
sudo add-apt-repository "deb http://example.com/repo stable main"
# Remove repository
sudo add-apt-repository --remove ppa:repository/name
# Edit sources manually
sudo nano /etc/apt/sources.list
sudo nano /etc/apt/sources.list.d/additional.list
# Add GPG key for repository
wget -qO - https://example.com/gpg.key | sudo apt-key add -
curl -fsSL https://example.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/example.gpg
# APT configuration files
/etc/apt/apt.conf.d/
/etc/apt/preferences.d/
/etc/apt/sources.list
/etc/apt/sources.list.d/
# Common configuration options
echo 'APT::Install-Recommends "false";' | sudo tee /etc/apt/apt.conf.d/01norecommends
echo 'APT::Install-Suggests "false";' | sudo tee /etc/apt/apt.conf.d/01nosuggests
# Update package cache
sudo dnf check-update
# Update all packages
sudo dnf update
sudo dnf upgrade # Alias for update
# Install packages
sudo dnf install package_name
sudo dnf install vim git curl
# Remove packages
sudo dnf remove package_name
# Search for packages
dnf search keyword
dnf search "web server"
# Show package information
dnf info package_name
# List installed packages
dnf list installed
dnf list installed | grep python
# List available packages
dnf list available
# Show package dependencies
dnf deplist package_name
# Install from local RPM file
sudo dnf install ./package.rpm
sudo rpm -ivh package.rpm # Alternative using rpm directly
# Downgrade package
sudo dnf downgrade package_name
# Reinstall package
sudo dnf reinstall package_name
# Show command history
dnf history
dnf history info 5 # Details of transaction 5
sudo dnf history undo 5 # Undo transaction 5
# Group operations
dnf grouplist
sudo dnf groupinstall "Development Tools"
sudo dnf groupremove "Development Tools"
# Repository management
sudo dnf config-manager --add-repo https://example.com/repo
sudo dnf config-manager --set-enabled repository_name
sudo dnf config-manager --set-disabled repository_name
# Basic YUM commands (similar to DNF)
sudo yum update
sudo yum install package_name
sudo yum remove package_name
yum search keyword
yum info package_name
yum list installed
# YUM-specific features
yum whatprovides */filename
yum clean all
sudo yum groupinstall "Development tools"
# Update package database
sudo pacman -Sy
# Update all packages
sudo pacman -Syu
# Install packages
sudo pacman -S package_name
sudo pacman -S vim git curl
# Remove package (keep dependencies)
sudo pacman -R package_name
# Remove package and dependencies
sudo pacman -Rs package_name
# Remove package, dependencies, and config files
sudo pacman -Rns package_name
# Search for packages
pacman -Ss keyword
# Search installed packages
pacman -Qs keyword
# Show package information
pacman -Si package_name # Repository package
pacman -Qi package_name # Installed package
# List installed packages
pacman -Q
pacman -Qe # Explicitly installed
pacman -Qd # Dependencies only
# Install from local package
sudo pacman -U package.pkg.tar.xz
# Download package without installing
sudo pacman -Sw package_name
# List package files
pacman -Ql package_name
# Find which package owns a file
pacman -Qo /path/to/file
# Check for orphaned packages
pacman -Qdt
sudo pacman -Rs $(pacman -Qtdq) # Remove orphans
# Clear package cache
sudo pacman -Sc
# Force reinstall
sudo pacman -S --force package_name
# Install AUR helper (yay)
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
# Using yay (AUR helper)
yay -S aur_package_name
yay -Syu # Update system and AUR packages
yay -Ss keyword # Search AUR
# Update repositories
sudo zypper refresh
# Update system
sudo zypper update
# Install packages
sudo zypper install package_name
# Search packages
zypper search keyword
# Show package info
zypper info package_name
# Remove packages
sudo zypper remove package_name
# Add repository
sudo zypper addrepo https://example.com/repo repo_name
# Update package index
sudo apk update
# Upgrade packages
sudo apk upgrade
# Install packages
sudo apk add package_name
# Remove packages
sudo apk del package_name
# Search packages
apk search keyword
# Show package info
apk info package_name
# List installed packages
apk info -a
# Install snapd
sudo apt install snapd # Ubuntu/Debian
sudo dnf install snapd # Fedora
# Install snap package
sudo snap install package_name
# List installed snaps
snap list
# Update snaps
sudo snap refresh
# Remove snap
sudo snap remove package_name
# Search snaps
snap find keyword
# Show snap info
snap info package_name
# Install Flatpak
sudo apt install flatpak # Ubuntu/Debian
sudo dnf install flatpak # Fedora
# Add Flathub repository
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Install application
flatpak install flathub app.id
# List installed applications
flatpak list
# Update applications
flatpak update
# Remove application
flatpak uninstall app.id
# Search applications
flatpak search keyword
# Download AppImage
wget https://example.com/app.AppImage
# Make executable
chmod +x app.AppImage
# Run AppImage
./app.AppImage
# Integrate with system (optional)
sudo apt install appimaged # Ubuntu
# Install pip
sudo apt install python3-pip # Ubuntu/Debian
sudo dnf install python3-pip # Fedora
# Install package
pip3 install package_name
pip3 install requests numpy pandas
# Install from requirements file
pip3 install -r requirements.txt
# Upgrade package
pip3 install --upgrade package_name
# List installed packages
pip3 list
# Show package info
pip3 show package_name
# Uninstall package
pip3 uninstall package_name
# Create requirements file
pip3 freeze > requirements.txt
# Install Node.js and npm
sudo apt install nodejs npm # Ubuntu/Debian
sudo dnf install nodejs npm # Fedora
# Install package globally
sudo npm install -g package_name
# Install package locally
npm install package_name
# Install from package.json
npm install
# Update packages
npm update
# List installed packages
npm list -g --depth=0 # Global
npm list # Local
# Uninstall package
npm uninstall package_name
# Install Ruby
sudo apt install ruby-full # Ubuntu/Debian
sudo dnf install ruby # Fedora
# Install gem
gem install package_name
sudo gem install package_name # System-wide
# List installed gems
gem list
# Update gem
gem update package_name
# Uninstall gem
gem uninstall package_name
# Always update before installing
sudo apt update && sudo apt install package_name
# Verify package signatures
sudo apt-key fingerprint
gpg --verify package.sig package.tar.gz
# Only use trusted repositories
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID
# Regularly update security patches
sudo apt update && sudo apt upgrade
sudo dnf update --security
# Regular maintenance routine (Ubuntu/Debian)
sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo apt autoclean
# Check for broken packages
sudo apt check
sudo dpkg --audit
# Fix broken dependencies
sudo apt install -f
sudo dpkg --configure -a
# Hold package from updates (APT)
sudo apt-mark hold package_name
sudo apt-mark showhold
sudo apt-mark unhold package_name
# Pin package version
echo "package_name hold" | sudo dpkg --set-selections
# Fix broken packages
sudo apt --fix-broken install
sudo dpkg --configure -a
# Clear package cache
sudo apt clean
sudo apt autoclean
# Reset package database
sudo rm /var/lib/apt/lists/* -vf
sudo apt update
# Force package installation
sudo apt install --fix-missing package_name
sudo dpkg -i --force-depends package.deb
# Clear DNF cache
sudo dnf clean all
# Fix RPM database
sudo rpm --rebuilddb
# Force reinstall
sudo dnf reinstall package_name
# Skip broken packages
sudo dnf update --skip-broken
# Use virtual environments (Python)
python3 -m venv myenv
source myenv/bin/activate
pip install package_name
# Use containers
docker run -it ubuntu:latest
sudo snap install package_name # Isolated snap packages
# Use alternative versions
sudo apt install python3.8 python3.9 # Multiple Python versions
sudo update-alternatives --config python3
# Install packaging tools
sudo apt install build-essential devscripts debhelper
# Create package structure
mkdir mypackage-1.0
cd mypackage-1.0
mkdir DEBIAN
# Create control file
cat > DEBIAN/control << EOF
Package: mypackage
Version: 1.0
Section: utils
Priority: optional
Architecture: all
Maintainer: Your Name <email@example.com>
Description: My custom package
A longer description of what this package does.
EOF
# Build package
dpkg-deb --build mypackage-1.0
# Install RPM build tools
sudo dnf install rpm-build rpmlint
# Create build environment
rpmdev-setuptree
# Create spec file
cd ~/rpmbuild/SPECS
rpmdev-newspec mypackage
# Build RPM
rpmbuild -ba mypackage.spec
# Create repository directory
mkdir ~/myrepo
cd ~/myrepo
# Copy packages
cp *.deb .
# Create package index
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
# Add to sources.list
echo "deb [trusted=yes] file:///home/user/myrepo ./" | sudo tee /etc/apt/sources.list.d/local.list
# Enable automatic updates (Ubuntu)
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
# Configure automatic updates
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# DNF automatic updates
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
#!/bin/bash
# Package installation script
PACKAGES="vim git curl htop tree"
# Detect package manager
if command -v apt &> /dev/null; then
sudo apt update
sudo apt install -y $PACKAGES
elif command -v dnf &> /dev/null; then
sudo dnf install -y $PACKAGES
elif command -v pacman &> /dev/null; then
sudo pacman -S --noconfirm $PACKAGES
else
echo "Unsupported package manager"
exit 1
fi
echo "Package installation completed"
# Update package database
sudo apt update # or sudo dnf check-update
# Install development tools
sudo apt install build-essential git vim # Ubuntu
sudo dnf groupinstall "Development Tools" # Fedora
# Search for text editors
apt search editor | head -10
dnf search editor | head -10
# Show package information
apt show vim
dnf info vim
# List installed packages containing "lib"
apt list --installed | grep lib | head -10
dnf list installed | grep lib | head -10
# Add a PPA (Ubuntu only)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
# Install Python 3.9
sudo apt install python3.9
# Remove the PPA
sudo add-apt-repository --remove ppa:deadsnakes/ppa
# Install snap (if not already installed)
sudo apt install snapd
# Install a snap package
sudo snap install code --classic
# List installed snaps
snap list
# Install Flatpak and an application
sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gimp.GIMP
#!/bin/bash
# check_updates.sh
if command -v apt &> /dev/null; then
sudo apt update >/dev/null 2>&1
UPDATES=$(apt list --upgradable 2>/dev/null | wc -l)
echo "Available updates: $((UPDATES-1))"
elif command -v dnf &> /dev/null; then
UPDATES=$(dnf check-update -q 2>/dev/null | wc -l)
echo "Available updates: $UPDATES"
fi
#!/bin/bash
# cleanup_system.sh
echo "Starting system cleanup..."
if command -v apt &> /dev/null; then
sudo apt autoremove -y
sudo apt autoclean
echo "APT cleanup completed"
elif command -v dnf &> /dev/null; then
sudo dnf autoremove -y
sudo dnf clean all
echo "DNF cleanup completed"
fi
# Clean snap cache
if command -v snap &> /dev/null; then
sudo snap set system refresh.retain=2
echo "Snap cleanup configured"
fi
echo "System cleanup completed"
sudo apt update # Update package index
sudo apt upgrade # Upgrade packages
sudo apt install pkg # Install package
sudo apt remove pkg # Remove package
sudo apt search keyword # Search packages
apt show pkg # Show package info
apt list --installed # List installed packages
sudo dnf update # Update packages
sudo dnf install pkg # Install package
sudo dnf remove pkg # Remove package
dnf search keyword # Search packages
dnf info pkg # Show package info
dnf list installed # List installed packages
sudo pacman -Syu # Update system
sudo pacman -S pkg # Install package
sudo pacman -Rs pkg # Remove package + deps
pacman -Ss keyword # Search packages
pacman -Si pkg # Show package info
pacman -Q # List installed packages
- Learn your distribution's package manager thoroughly
Package management is fundamental to Linux system administration. Master these tools, and you'll be able to efficiently maintain and customize any Linux system, whether it's a personal desktop or a production server.
---
This is Part 7 of our comprehensive Linux mastery series.
Previous: Text Processing Tools - Master grep, sed, and awk for text manipulation
Next: User & Group Management - Learn user administration and access control
Intermediate Skills:
Ready for User Management? Continue with user administration to control system access and security!
- Linux Permissions & Security
---
Final topic: Understanding the Linux file system hierarchy - learn how directories are organized and what each system directory contains.