Ubuntu offers multiple package management systems for installing software. Each has its own advantages and use cases. This guide covers APT, Snap, Flatpak, and other installation methods comprehensively.
graph TD
A[Ubuntu Software Installation] --> B[APT]
A --> C[Snap]
A --> D[Flatpak]
A --> E[AppImage]
A --> F[DEB Packages]
A --> G[Source Code]
B --> B1[System Packages]
B --> B2[PPAs]
B --> B3[.deb files]
C --> C1[Universal Packages]
C --> C2[Sandboxed Apps]
C --> C3[Auto Updates]
D --> D1[Cross-distro]
D --> D2[Sandboxed]
D --> D3[Runtime Libraries]
E --> E1[Portable Apps]
E --> E2[No Installation]
E --> E3[Self-contained]
Feature | APT | Snap | Flatpak | AppImage |
---|---|---|---|---|
Security | System-level | Sandboxed | Sandboxed | Varies |
Updates | Manual/Automatic | Automatic | Manual | Manual |
Size | Small | Large | Medium | Large |
Performance | Fast | Slower startup | Medium | Fast |
Permissions | Full system | Confined | Confined | Varies |
APT (Advanced Package Tool) is the default package manager for Ubuntu, handling .deb packages and system libraries.
# Update package lists
sudo apt update
# Upgrade installed packages
sudo apt upgrade
# Full system upgrade
sudo apt full-upgrade
# Install package
sudo apt install package-name
# Install multiple packages
sudo apt install package1 package2 package3
# Remove package
sudo apt remove package-name
# Remove package and configuration files
sudo apt purge package-name
# Remove orphaned packages
sudo apt autoremove
# Clean package cache
sudo apt autoclean
sudo apt clean
# Search for packages
apt search keyword
# Show package information
apt show package-name
# List installed packages
apt list --installed
# List upgradable packages
apt list --upgradable
# Check if package is installed
dpkg -l | grep package-name
# Show package dependencies
apt depends package-name
# Show reverse dependencies
apt rdepends package-name
# List repositories
grep -rhE ^deb /etc/apt/sources.list*
# Add repository key
wget -qO - https://example.com/key.gpg | sudo apt-key add -
# Add repository (modern method)
curl -fsSL https://example.com/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/example.gpg
echo "deb [signed-by=/usr/share/keyrings/example.gpg] https://example.com/repo stable main" | sudo tee /etc/apt/sources.list.d/example.list
# Update after adding repository
sudo apt update
# Build essentials
sudo apt install build-essential
# Programming languages
sudo apt install python3 python3-pip
sudo apt install nodejs npm
sudo apt install openjdk-17-jdk
sudo apt install golang-go
sudo apt install rust-all
# Version control
sudo apt install git subversion
# Text editors
sudo apt install vim neovim emacs
sudo apt install code # May need Microsoft repository
# Media players
sudo apt install vlc audacious rhythmbox
# Graphics editors
sudo apt install gimp inkscape blender
# Image viewers
sudo apt install eog gwenview
# Video editing
sudo apt install kdenlive openshot
# File managers
sudo apt install nautilus dolphin thunar
# Archive tools
sudo apt install p7zip-full unrar
# System monitoring
sudo apt install htop btop neofetch
# Network tools
sudo apt install curl wget nmap
Snap packages are containerized software packages that work across Linux distributions. They include all dependencies and run in sandboxed environments.
# List installed snaps
snap list
# Search for snaps
snap find keyword
# Install snap
sudo snap install package-name
# Install from specific channel
sudo snap install package-name --channel=stable
sudo snap install package-name --beta
sudo snap install package-name --edge
# Update all snaps
sudo snap refresh
# Update specific snap
sudo snap refresh package-name
# Remove snap
sudo snap remove package-name
# Show snap information
snap info package-name
# Channels explained:
# stable - Production-ready releases
# candidate - Release candidates
# beta - Beta releases
# edge - Development builds
# Install from specific channel
sudo snap install code --classic --channel=stable
sudo snap install discord --beta
# Development
sudo snap install code --classic
sudo snap install intellij-idea-ultimate --classic
sudo snap install atom --classic
sudo snap install sublime-text --classic
# Media
sudo snap install vlc
sudo snap install spotify
sudo snap install discord
# Productivity
sudo snap install firefox
sudo snap install chromium
sudo snap install slack --classic
sudo snap install teams
# Graphics
sudo snap install gimp
sudo snap install inkscape
sudo snap install blender --classic
# View snap connections
snap connections package-name
# Connect interface
sudo snap connect package-name:interface
# Disconnect interface
sudo snap disconnect package-name:interface
# View snap services
snap services
# Start/stop snap service
sudo snap start package-name.service
sudo snap stop package-name.service
# Install Flatpak
sudo apt install flatpak
# Add Flathub repository
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Install GNOME Software Flatpak plugin
sudo apt install gnome-software-plugin-flatpak
# Restart system (recommended)
sudo reboot
# Search for applications
flatpak search keyword
# Install application
flatpak install flathub application-id
# List installed applications
flatpak list
# Update all applications
flatpak update
# Update specific application
flatpak update application-id
# Remove application
flatpak uninstall application-id
# Show application information
flatpak info application-id
# Run application
flatpak run application-id
# Browsers
flatpak install flathub org.mozilla.firefox
flatpak install flathub com.google.Chrome
# Development
flatpak install flathub com.visualstudio.code
flatpak install flathub org.gnome.Builder
# Media
flatpak install flathub org.videolan.VLC
flatpak install flathub com.spotify.Client
# Graphics
flatpak install flathub org.gimp.GIMP
flatpak install flathub org.inkscape.Inkscape
# Office
flatpak install flathub org.libreoffice.LibreOffice
flatpak install flathub com.github.johnfactotum.Foliate
# List remotes
flatpak remotes
# Add remote repository
flatpak remote-add --if-not-exists remotename https://repo-url
# Remove remote repository
flatpak remote-delete remotename
# Clean up unused runtimes
flatpak uninstall --unused
# Show repository information
flatpak remote-info flathub application-id
AppImages are portable application packages that don’t require installation. They contain the application and all its dependencies.
# Download AppImage
wget https://example.com/app.AppImage
# Make executable
chmod +x app.AppImage
# Run application
./app.AppImage
# Integrate with system (optional)
./app.AppImage --appimage-integrate
# Remove integration
./app.AppImage --appimage-remove
# AppImageLauncher (GUI manager)
sudo add-apt-repository ppa:appimagelauncher-team/stable
sudo apt update
sudo apt install appimagelauncher
# AppImagePool (store-like interface)
flatpak install flathub io.github.prateekmedia.appimagepool
# Launch Ubuntu Software
gnome-software
# Or from command line
ubuntu-software
# Features:
# - Browse categories
# - Install/remove packages
# - Automatic updates
# - Reviews and ratings
# Install Synaptic
sudo apt install synaptic
# Launch
sudo synaptic
# Features:
# - Advanced package management
# - Repository management
# - Package information
# - Dependency resolution
# Install AppCenter
sudo apt install appcenter
# Alternative: GNOME Software
sudo apt install gnome-software
# Install build tools
sudo apt install build-essential
sudo apt install cmake
sudo apt install autotools-dev
sudo apt install pkg-config
# Install common dependencies
sudo apt install libssl-dev
sudo apt install libcurl4-openssl-dev
sudo apt install zlib1g-dev
# Download source code
wget https://example.com/source.tar.gz
tar -xzf source.tar.gz
cd source-directory
# Configure build
./configure --prefix=/usr/local
# Or with CMake
mkdir build && cd build
cmake ..
# Compile
make -j$(nproc)
# Install
sudo make install
# Or using checkinstall (creates .deb package)
sudo apt install checkinstall
sudo checkinstall
# Using pip
pip3 install package-name
# User installation (recommended)
pip3 install --user package-name
# Virtual environment (best practice)
python3 -m venv myenv
source myenv/bin/activate
pip install package-name
# Global installation
sudo npm install -g package-name
# Local installation
npm install package-name
# Using Yarn
npm install -g yarn
yarn global add package-name
PPAs are user-contributed repositories that provide newer or additional software not available in official Ubuntu repositories.
# Add PPA
sudo add-apt-repository ppa:user/ppa-name
sudo apt update
# Remove PPA
sudo add-apt-repository --remove ppa:user/ppa-name
sudo apt update
# List PPAs
grep -rhE ^deb.*ppa /etc/apt/sources.list*
# Purge PPA packages
sudo ppa-purge ppa:user/ppa-name
# Graphics drivers
sudo add-apt-repository ppa:graphics-drivers/ppa
# LibreOffice
sudo add-apt-repository ppa:libreoffice/ppa
# Git (latest version)
sudo add-apt-repository ppa:git-core/ppa
# OBS Studio
sudo add-apt-repository ppa:obsproject/obs-studio
# Wine
sudo add-apt-repository ppa:wine/wine-builds
graph TD
A[Need Software?] --> B{Type of Software?}
B -->|System Tool| C[Use APT]
B -->|Desktop App| D{Security Important?}
B -->|Development Tool| E{Need Latest Version?}
D -->|Yes| F[Use Flatpak/Snap]
D -->|No| G[Use APT/PPA]
E -->|Yes| H[Use Snap/Source]
E -->|No| C
C --> I[sudo apt install]
F --> J[flatpak install]
G --> K[Add PPA + APT]
H --> L[Compile from source]
# Problem: Broken packages
sudo apt --fix-broken install
sudo dpkg --configure -a
# Problem: Lock file exists
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
# Problem: GPG key errors
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY-ID
# Problem: Repository not found
sudo apt update 2>&1 | grep -E "Failed to fetch|404"
# Remove problematic repositories from /etc/apt/sources.list.d/
# Problem: Snap not connecting
sudo snap connect app-name:interface-name
# Problem: Snap not starting
snap logs app-name
# Problem: Permission issues
sudo snap refresh --devmode app-name
# Problem: Interface not available
snap interface interface-name
# Problem: Runtime missing
flatpak install flathub org.freedesktop.Platform//22.08
# Problem: Permission issues
flatpak override --user --filesystem=home app-id
# Problem: Application won't start
flatpak run --verbose app-id
#!/bin/bash
# install-essentials.sh
set -e
echo "Updating system..."
sudo apt update && sudo apt upgrade -y
echo "Installing essential packages..."
sudo apt install -y \
curl \
wget \
git \
vim \
htop \
tree \
unzip \
software-properties-common \
apt-transport-https \
ca-certificates \
gnupg \
lsb-release
echo "Installing development tools..."
sudo apt install -y \
build-essential \
python3-pip \
nodejs \
npm
echo "Installing media codecs..."
sudo apt install -y ubuntu-restricted-extras
echo "Installing Flatpak..."
sudo apt install -y flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
echo "Installing Snap applications..."
sudo snap install code --classic
sudo snap install discord
sudo snap install vlc
echo "Installation complete!"
# Export installed packages
dpkg --get-selections > installed-packages.txt
snap list > installed-snaps.txt
flatpak list > installed-flatpaks.txt
# Install from package list
sudo dpkg --set-selections < installed-packages.txt
sudo apt dselect-upgrade
# Verify package signatures
apt-key list
# Check package integrity
debsums package-name
# Verify Snap publisher
snap info package-name | grep publisher
# Check repository signatures
apt-key fingerprint
# Add trusted keys properly
curl -fsSL https://example.com/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/example.gpg
# Avoid apt-key add (deprecated)
# Use gpg --dearmor instead
# Check cache size
du -sh /var/cache/apt/archives/
# Clean cache
sudo apt autoclean # Remove old package files
sudo apt clean # Remove all package files
# Configure cache limit
echo 'APT::Cache-Limit "100000000";' | sudo tee /etc/apt/apt.conf.d/70cache-limit
# Enable parallel downloads for APT
echo 'APT::Acquire::Max-Workers "4";' | sudo tee /etc/apt/apt.conf.d/99parallel
# Configure fastest mirror
sudo apt install apt-fast
# Weekly maintenance script
#!/bin/bash
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
sudo apt autoclean
sudo snap refresh
flatpak update -y
After mastering software installation:
Ubuntu’s multiple package management systems provide flexibility for different use cases:
Use Case | Recommended Method | Example |
---|---|---|
System tools | APT | sudo apt install htop |
Desktop apps | Snap/Flatpak | snap install discord |
Development | Language managers | npm install -g package |
Portable tools | AppImage | Download and run |
Latest versions | PPA + APT | Add PPA, then APT install |
Understanding these different approaches allows you to choose the best installation method for each situation while maintaining system security and performance.