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: dpkg
, apt-get
, aptitude
and apt
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.deb
files and managing the installed ones.apt-get
: Comes with several commands.apt-cache
maintains a list of packages installable from remote sources,apt-get
ist used to install them, will automatically resolve dependencies and let's you upgrade installed packages to newer versions. It contains more commands likeapt-show-versions
orapt-config
to provide the full range of functionality.apt
: Is the new and improved version of theapt-get
toolchain. It is significantly more user-friendly to use and combines the functionality of all the seperate commands thatapt-get
contained. 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 toapt
but uses an interactive terminal interface instead. It is slightly older thanapt
, 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:
apt update
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
The -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:
apt update
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:
apt full-upgrade
Note: This used to be called dist-upgrade
in 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 python3
package.
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.