Why use apt-get upgrade instead of apt-get dist-upgrade?
I typically upgrade my machines with:
sudo apt-get update && time sudo apt-get dist-upgrade
Below is an excerpt from man apt-get
. Using upgrade keeps to the rule: under no circumstances are currently installed packages removed, or packages not already installed retrieved and installed. If that's important to you, use apt-get upgrade
. If you want things to "just work", you probably want apt-get dist-upgrade
to ensure dependencies are resolved.
To expand on why you'd want upgrade instead of dist-upgrade, if you are a systems administrator, you need predictability. You might be using advanced features like apt pinning or pulling from a collection of PPAs (perhaps you have an in-house PPA), with various automations in place to inspect your system and available upgrades instead of always eagerly upgrading all available packages. You would get very frustrated when apt performs unscripted behavior, particularly if this leads to downtime of a production service.
upgrade
upgrade is used to install the newest versions of all packages
currently installed on the system from the sources enumerated in
/etc/apt/sources.list. Packages currently installed with new
versions available are retrieved and upgraded; under no
circumstances are currently installed packages removed, or packages
not already installed retrieved and installed. New versions of
currently installed packages that cannot be upgraded without
changing the install status of another package will be left at
their current version. An update must be performed first so that
apt-get knows that new versions of packages are available.
dist-upgrade
dist-upgrade in addition to performing the function of upgrade,
also intelligently handles changing dependencies with new versions
of packages; apt-get has a "smart" conflict resolution system, and
it will attempt to upgrade the most important packages at the
expense of less important ones if necessary. So, dist-upgrade
command may remove some packages. The /etc/apt/sources.list file
contains a list of locations from which to retrieve desired package
files. See also apt_preferences(5) for a mechanism for overriding
the general settings for individual packages.
I know this question has been answered and is a year old, but I feel this needs to be said. Ubuntu 14.04 and later (and Debian Jessie and later, for those finding this from Google) uses APT 1.0, which allows the command apt
instead of apt-get
and apt-cache
for some operations.
-
apt-get upgrade
will not change what is installed (only versions), -
apt-get dist-upgrade
will install or remove packages as necessary to complete the upgrade, -
apt upgrade
will automatically install but not remove packages. -
apt full-upgrade
performs the same function asapt-get dist-upgrade
.
The upgrade
option only installs new version of the packages that are already installed on the system (and yes, kernel updates belong to them).
However, sometimes the updates change dependencies: for example, a new version of a package will no longer depend on a library that you have installed, or will require installation of additional libraries. The upgrade
option will never remove installed packages that you no longer actually need.
However, the dist-upgrade
option can "intelligently" handle changes in the dependencies system. This includes removing packages that are no longer necessary or resolve conflicts between packages that arose because of changes in the dependencies.
Users might have come to rely on packages that were installed implicitly because of other (explicitly installed) packages' dependency on them. Thus the packaging system cannot be aware of a user/administrator desire to retain certain functionality that might otherwise be removed via dist-upgrade.