How to get a list of installed packages held back from upgrade?
Recently, I needed to get a list of packages that were installed on my Ubuntu system which were also put on hold for upgrade.
The 'hold' status for a package means that when the operating system is upgraded, the installer will not upgrade these packages either, unless explicitly stated in the options.
I am looking for a command-line solution but understand this may be possible from the GUI as well.
Solution 1:
You can use apt-mark
:
apt-mark showhold
this will show the packages that are kept in "hold" state so that the pacakge manager won't auto upgrade the packages.
From man apt-mark
:
showhold
showhold is used to print a list of packages on hold
Solution 2:
Use dpkg
dpkg -l | grep "^hi"
The -l
means to list all packages which are then piped into grep.
The regular expression "^hi"
means to search for all lines that begin with "hi" which are initials for "hold" and "installed".
By default, dpkg -l
will list the status, package name, version, architecture, and a short description.
Solution 3:
as an alternative you can also use dpkg --get-selections
:
dpkg --get-selections | grep "\<hold$"
dpkg --get-selections
lists the status of all installed packages and grep "\<hold$"
only shows lines which end with the word "hold".
perhaps also interesting, if you are looking for irregularities - especially if the above shows nothing (useful), would be
dpkg --get-selections | grep --invert-match "\<install$"
this shows all lines/packages which are not just installed.