Linux distributions like debian or those based on it, like Mint or Ubuntu, use
deb files to package programs and the apt package manager to to deal with them. While the apt command is very simple to use, it is important to understand it properly to not be surprised by unused packages or outdated package information.
The command confusion:
When first starting to look into package managers, a lot of confusing commands come up. Here is how they differ:
dpkg: This is the basic low-level package manager the other commands use. It is very simple, only capable of installing local
.debfiles and managing the installed ones.
apt-get: Comes with several commands.
apt-cachemaintains a list of packages installable from remote sources,
apt-getist used to install them, will automatically resolve dependencies and let's you upgrade installed packages to newer versions. It contains more commands like
apt-configto provide the full range of functionality.
apt: Is the new and improved version of the
apt-gettoolchain. It is significantly more user-friendly to use and combines the functionality of all the seperate commands that
apt-getcontained. It is backwards-compatible with their syntax while also providing renamed commands and refined behaviour to better automate and abstract the package management process.
aptitude: Is largely equivalent to
aptbut uses an interactive terminal interface instead. It is slightly older than
apt, not always installed by default and not as easy to use in automation scripts.
Finding packages and versions
Before we can even install a package, we first need to find one. Let's install the
htop command, a more user-friendly version of the
top command to check system utilization.
Before we can search for packages, we should update the package list so we have the most recent information about package names and versions:
Now that we have a copy of what packages can be installed, searching for it is really simple:
apt search htop
This lists all packages containing our keyword "htop". If we get multiple results, we can get more information by using
apt show with the package name:
apt show htop
The output will contain more information about the package, like it's description, maintainer and dependencies:
Version: 3.2.2-2 Priority: optional Section: utils Maintainer: Daniel Lange <DLange@debian.org> Installed-Size: 387 kB Depends: libc6 (>= 2.34), libncursesw6 (>= 6), libnl-3-200 (>= 3.2.7), libnl-genl-3-200 (>= 3.2.7), libtinfo6 (>= 6) Suggests: lm-sensors, lsof, strace Homepage: https://htop.dev/ Tag: admin::monitoring, implemented-in::c, interface::text-mode, role::program, scope::utility, uitoolkit::ncurses, use::monitor, works-with::software:running Download-Size: 152 kB APT-Sources: http://deb.debian.org/debian bookworm/main amd64 Packages Description: interactive processes viewer
On a side note, there is an undocumented command
apt info, which is simply an alias for
apt show. You should prefer
apt show as it is the official command stated in documentation and the other may be removed without warning in the future.
Installing and removing packages
Once we have found the package we were looking for, installing it is trivial:
apt install htop -y
-y flag will skip the confirmation prompt asking if we are sure we want to install the package and it's dependencies.
If we decide we don't want the package anymore, we can remove it just as easily:
apt remove htop -y
Removing packages will delete the package itself from your harddrive, but leave small or modified configuration files untouched, as you may be reinstalling the package or it might have been removed by accident. If you want to delete those as well, you can run
apt purge htop -y
This will remove the package and all files related to it, even if modified by the user. You can use this instead of
apt remove to get rid of the entire package, or call it even on already removed packages to clean leftover files.
If you ever encounter a broken package, for example because you accidentally deleted some of it's files or dependencies, you can quickly reinstall it to fix the issue:
apt reinstall htop
Getting package updates
To upgrade packages, it is always advisable to first refresh the local list of packages so we have the latest information about package versions available:
To see a list of upgradable packages (ie installed packages that have a newer version available), run:
apt list --upgradable
Now, upgrading installed packages that have new versions is just a single command:
apt upgrade -y
A thought to note is that in case of dependency conflicts, the
apt upgrade command will simply skip the package. To forcibly upgrade all packages and allow it to remove dependency packages if required, make a full upgrade instead:
Note: This used to be called
apt-get and an alias for it still exists in the
apt command, but using
apt full-upgrade is the better choice as the alias may be removed in the future.
You should run package upgrades regularly or automate them with tools like unattended-upgrades.
More fine-grained control over packages
In some situations, the default behaviour of
apt may not be exactly what you want. You may for example want to install a specific version instead of the most recent one. You can check all available versions of a package by running
apt list --all-versions python3
When you have found the version you want, you can add it to the package name separated by a
= character during install:
apt install python3=3.11.2--1+b1
This will install the specific package version
3.11.2--1+b1 of the
To check what packages and versions are currently installed, you can use
apt list as well:
apt list --installed
Occasionally, you may want to upgrade a package if it is installed, but not install it in case it is not:
apt install --only-upgrade python3
Or you may want to install a package if it does not exist, but not upgrade it in case it is already installed:
apt install --only-install python3
Cleanup and maintenance commands
When a package releases to a new version, it may not need a prior dependency anymore. Simply upgrading the package will install the new version, but also leave the old, now unrequired dependency, installed as well. To free the space used by those packages and have them automatically removed, run:
apt autoremove -y
You may have seen commands like
apt-cache clean or
apt-cache autoclean in some tutorials out there. Those are outdated and, while
apt has aliases for them, they are undocumented because it will manage cache cleaning automatically when installing/removing packages. You do not need to call these commands on your own anymore if you regularly upgrade packages.