How to Install Software on Linux
Learn how to install software on Linux using apt, dnf, pacman, Flatpak, Snap, and AppImage — with clear guidance on when to use each method.
Before you start
- ▸A running Linux installation with a user account that has sudo privileges
- ▸An active internet connection for downloading packages
- ▸A terminal emulator (Bash or any POSIX-compatible shell)
Linux gives you several ways to install software, and each method exists for good reason. Your distro's native package manager is almost always the right first choice — it's fast, well-integrated, and keeps everything updated in one pass. But Flatpak, Snap, and AppImage each fill real gaps, especially when you need a newer version of an app, a proprietary title, or a portable binary that runs anywhere. This guide walks through all six approaches, explains when to reach for each, and shows you how to verify your installs.
Native Package Managers
Every major distro ships a package manager that handles dependencies, updates, and removal automatically. Start here unless you have a specific reason not to.
apt — Debian, Ubuntu, and derivatives
apt is the front-end used on Debian, Ubuntu, Linux Mint, and Pop!_OS. Always run an update before installing so apt resolves the latest available versions.
sudo apt update
sudo apt install package-name
To search for a package before installing:
apt search keyword
To remove a package and its configuration files:
sudo apt purge package-name
sudo apt autoremove
When to use it: Any software available in the official Debian/Ubuntu repositories. Versions may lag upstream by months, which is intentional — stability is prioritised.
dnf — Fedora, RHEL 8+, Rocky, AlmaLinux
dnf replaced yum as the default package manager for the Red Hat family. The syntax is intuitive and similar to apt.
sudo dnf install package-name
dnf search keyword
sudo dnf remove package-name
On Fedora, the RPM Fusion repositories provide software that can't ship in the main repo (codecs, NVIDIA drivers, etc.). Enable them once:
sudo dnf install \
https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
pacman — Arch Linux and derivatives (Manjaro, EndeavourOS)
pacman is minimal and fast. Flags replace subcommands: -S syncs (installs), -R removes, -Q queries locally.
sudo pacman -Syu package-name
The -u flag upgrades all installed packages at the same time — on Arch you must keep the system updated before installing new packages to avoid dependency conflicts.
sudo pacman -Rs package-name
The AUR (Arch User Repository) extends pacman's reach dramatically. Use an AUR helper like paru or yay — it wraps pacman and builds AUR packages automatically:
# Install paru (do this once, as your normal user, NOT root)
git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -si
paru -S aur-package-name
Flatpak — Universal Packages with Sandboxing
Flatpak bundles an app with its runtime dependencies into a sandboxed container. You get a newer app version than your distro repo might offer, with reasonable isolation from the rest of the system. Flathub is the main repository.
Install Flatpak support
# Debian/Ubuntu
sudo apt install flatpak
# Fedora (already installed on Fedora Workstation)
sudo dnf install flatpak
# Arch
sudo pacman -S flatpak
Add the Flathub remote (do this once per user or system-wide with --system):
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
Install, run, and remove apps
flatpak install flathub com.spotify.Client
flatpak run com.spotify.Client
flatpak uninstall com.spotify.Client
Update all Flatpaks in one command:
flatpak update
When to use it: Proprietary apps (Spotify, Slack, Discord), apps that need a newer version than your repo provides, or when you want to contain an app's file-system access. Note that Flatpaks on Wayland work well today — most major apps ship with Wayland support in their Flatpak manifest.
Snap — Canonical's Sandboxed Format
Snaps are managed by snapd, a background daemon. They auto-update silently and ship as self-contained images. The Snap Store is the primary source.
Install snapd
Ubuntu ships snapd by default. On other distros:
# Debian
sudo apt install snapd
sudo systemctl enable --now snapd.socket
# Fedora
sudo dnf install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap # classic snap support
# Arch (from AUR via paru)
paru -S snapd
sudo systemctl enable --now snapd.socket
Install and manage snaps
sudo snap install package-name
sudo snap install code --classic # some apps need --classic (no sandbox)
sudo snap remove package-name
snap list # show installed snaps
When to use it: When a vendor only ships a Snap (e.g., some Canonical or enterprise tools), or for applications that need --classic confinement like VS Code. Be aware that snap startup times are typically slower than native packages due to image mounting, and all snaps pull updates from Canonical's servers regardless of distro.
AppImage — Portable Single-File Executables
An AppImage is a single executable file — download it, make it executable, run it. Nothing is installed to your system. This is popular with developers distributing bleeding-edge builds.
chmod +x YourApp-x86_64.AppImage
./YourApp-x86_64.AppImage
On some minimal systems you may need FUSE:
# Debian/Ubuntu
sudo apt install libfuse2
# Fedora
sudo dnf install fuse-libs
# Arch
sudo pacman -S fuse2
To integrate an AppImage into your desktop launcher, use AppImageLauncher (available as a package on Debian/Ubuntu or via the project's GitHub releases). It registers AppImages with your desktop environment and handles updates for apps that support it.
When to use it: Testing pre-release software, running a single binary without touching system packages, or distributing an app that must run across distros. AppImages have no automatic update mechanism by default — check the app's site manually.
Choosing the Right Method
| Method | Best for | Auto-updates | Sandboxed |
|---|---|---|---|
| apt / dnf / pacman | Most software, system tools | Yes (manual trigger) | No |
| Flatpak | Desktop apps, newer versions | Yes (flatpak update) | Yes |
| Snap | Vendor-distributed apps | Automatic | Mostly |
| AppImage | Portable / one-off binaries | No (app-dependent) | No |
Verifying an Install
After installing, confirm the binary is on your PATH and check its version:
which package-name
package-name --version
For native packages, confirm what is actually installed:
# Debian/Ubuntu
dpkg -l package-name
# Fedora/RHEL
rpm -q package-name
# Arch
pacman -Qi package-name
Troubleshooting
"Package not found" errors
On apt, run sudo apt update first — stale cache is the most common cause. On Fedora, double-check that RPM Fusion is enabled for non-free software. On Arch, the package may only exist in the AUR; search aur.archlinux.org and use your AUR helper.
Broken dependencies
# Debian/Ubuntu — fix broken installs
sudo apt --fix-broken install
# Fedora — check for dependency issues
sudo dnf check
# Arch — force refresh all package databases
sudo pacman -Syyu
AppImage won't launch
The most common cause on modern distros (Ubuntu 22.04+, Fedora 37+) is a missing FUSE 2 library. Install libfuse2 as shown above. If the AppImage still fails, run it from a terminal to read the error output directly.
Flatpak app can't access files
Flatpak's sandbox blocks access to arbitrary paths. Use flatpak override to grant access, or install the Flatseal GUI tool for managing permissions visually:
sudo flatpak override com.example.App --filesystem=home
flatpak install flathub com.github.tchx84.FlatsealFrequently asked questions
- Should I mix Flatpak and native packages for the same app?
- Avoid it. Pick one and stick with it. Having both versions installed can cause confusion about which one launches from your app menu and may result in duplicate config files.
- Are Flatpak apps safe to use on Wayland?
- Yes. Most major Flatpak apps have added Wayland support. You can check and adjust permissions with the Flatseal app if something doesn't work as expected.
- Why is the version in my distro repo older than what's on the app's website?
- Distro maintainers package and test software before shipping it, which takes time. This is a deliberate trade-off for stability. Use Flatpak or the vendor's own repo if you need a current release.
- Can I install packages as a regular user without sudo?
- Native package managers require root. Flatpak can install per-user without sudo using flatpak install --user. AppImages need no installation at all — just execute them from your home directory.
- How do I update everything at once?
- Run your distro's upgrade command (sudo apt upgrade, sudo dnf upgrade, or sudo pacman -Syu), then separately run flatpak update and snap refresh to cover all install methods.
Related guides
Linux Clipboards Explained (+ Clipboard Managers)
Learn the difference between Linux's PRIMARY and CLIPBOARD selections, use xclip, xsel, and wl-clipboard from the terminal, and manage history with GPaste or Klipper.
Configure LibreOffice for Daily Use
Configure LibreOffice for daily use: set default save formats for MS Office interop, tune autosave, install fonts, and add productivity extensions.
Configure the Touchpad and Multitouch Gestures
Configure Linux touchpad behavior and multitouch gestures using libinput, libinput-gestures, and native GNOME and KDE Plasma settings on both Wayland and X11.
Wayland vs X11: How to Choose and Configure Each
Know when to run Wayland or X11, how to check your current session, switch at login with GDM/SDDM/LightDM, and handle NVIDIA and XWayland edge cases.