The apt command is used for package management in Debian and Ubuntu. While you are probably already familiar with the install and remove options, apt provides a few extra features as well.
One of them is the ability to see all the upgradable packages on your system. And to display them, all you have to do is to use this command in the terminal:
apt list --upgradable
As you can notice, you don’t even need sudo to list the updatable packages. It just lists the packages that can be updated. It doesn’t update them.
In fact, the apt command adds this hint when you run the
sudo apt update command to update the local package repository cache.
Fetched 1,243 kB in 17s (71.4 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done 30 packages can be upgraded. Run 'apt list --upgradable' to see them.
I don’t recall any similar direct option in the older apt-get command to list all the upgradable packages. That’s one of the several new features apt has added on top of the older apt-get command.
Let’s talk about it in a bit more detail.
Listing all the upgradable packages
What you should know here is that you only get to list the updates available through the APT package manager. So, if you have added PPAs or external repositories to your system’s sources.list, you’ll see the updates from them.
But you won’t get updates for AppImage, Flatpak, Snap or some other packaging formats here.
In other words, it works with apt packages only.
So, to list all the upgradable packages on your Ubuntu or Debian system, you should update the local package cache first:
sudo apt update
And then your system will be aware of the available package updates. The apt command tells you how many packages can be upgraded at the end of the update command:
To see what package can be upgraded, run the command:
apt list --upgradable
You should see an output like this:
[email protected]:~$ apt list --upgradable Listing... Done apparmor/jammy-updates 3.0.4-2ubuntu2.1 amd64 [upgradable from: 3.0.4-2ubuntu2] brave-browser/stable 1.40.113 amd64 [upgradable from: 1.40.107] evolution-data-server-common/jammy-updates,jammy-updates 3.44.2-0ubuntu1 all [upgradable from: 3.44.1-0ubuntu2] evolution-data-server/jammy-updates 3.44.2-0ubuntu1 amd64 [upgradable from: 3.44.1-0ubuntu2]
It lists all the upgradable packages in alphabetical order with the information on the currently installed version and the new available package version.
brave-browser/stable 1.40.113 amd64 [upgradable from: 1.40.107]
For example, It shows that I have Brave browser version 1.40.107 installed on the system, and version 1.40.113 is available.
What can you do with this information? Let me share a few things I can think of.
Upgrade all the packages
This is probably what most casual Ubuntu users do. You can upgrade all the upgradable packages with the following command:
sudo apt upgrade
It lists what packages will be upgraded and then asks to confirm the upgrade by pressing enter or Y.
If you are sure about upgrading all the packages, you can skip the ‘Do you want to continue’ part by giving it the go ahead by adding -y to the command.
sudo apt upgrade -y
Simulate an upgrade (but don’t upgrade any packages)
This is what people did before the apt list command. With the simulate option, you don’t actually make any changes. It just shows what packages will be installed or upgraded if you run the upgrade.
apt -s upgrade
You don’t need to use sudo (even though I have used it in the screenshot below).
Upgrade only the selected packages
If you are managing an Ubuntu server and you don’t want to upgrade all the packages but only one of a few selected ones (like MySQL/Ngnix), you can do that easily with the apt command.
sudo apt --only-upgrade install package_name
Actually, if you run the apt install command on an already installed package for which an update is available, it will upgrade the package.
--only-upgrade flag, you ensure that a package is only upgraded (if it is already installed). It won’t install the given package if it is not already installed.
You can also upgrade selected few packages by providing their name:
sudo apt --only-upgrade install package1 package2
You can also do the opposite and hold selected packages from the upgrade.
sudo apt-mark hold package_name
With that, the given package won’t be upgraded when you upgrade all the system packages.
You can remove the hold with this command:
sudo apt-mark unhold package_name
Does it show the kernel upgrades?
This is kind of tricky.
When you run the ‘apt list –upgradable’ command it shows all the packages that can be upgraded.
But if there are new kernel versions available, they might not be shown since the kernel package name starts with linux-headers-x-y. It’s because the system treats them as new packages, not an upgrade on already installed package linux-headers-a-b.
However, you would still see “linux-generic-hwe” kind of package in the list of upgradable packages. Because that package will be upgraded (with the newer kernel).
The ability to list upgradable packages is one of the several new features the apt command brought over the older apt-get command. For more on this topic, you can read my article explaining the difference between the apt and apt-get commands.
As a desktop user, I don’t always check the packages that can be upgraded. I go for the upgrade straightaway. However, when I am managing a server, I prefer to see what updates are available and then decide whether or not I am going for an upgrade.
How about you? Do you see a good use for this feature for yourself?