为什么 /usr/lib/update-notifier/apt-check 不同意 apt-get upgrade

Luk*_*ins 7 upgrade updates apt

我有一个最新的 Ubuntu 安装 (13.10)。

当我运行/usr/lib/update-notifier/apt-check它时返回7:0,即 7 个​​可用更新,但没有一个是安全的。

但是,当我尝试升级时,我得到以下信息:

sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么以及如何让 apt-check 返回正确的值?如果 apt-check 返回,3:0那么这似乎是有道理的,但是 7 是从哪里来的?

顺便说一句,apt-check 是随sudo apt-get install update-notifier.

Sto*_*rux 8

/usr/lib/update-notifier/apt-check 
Run Code Online (Sandbox Code Playgroud)

实际上相当于返回的统计信息

apt-get -s dist-upgrade | grep "^[[:digit:]]\+ upgraded"
Run Code Online (Sandbox Code Playgroud)

并不是

apt-get upgrade|grep "^[[:digit:]]\+ upgraded"
Run Code Online (Sandbox Code Playgroud)

例如

/usr/lib/update-notifier/apt-check --human-readable
Run Code Online (Sandbox Code Playgroud)

返回

22 packages can be updated.
0 updates are security updates.
Run Code Online (Sandbox Code Playgroud)

然而

apt-get -s dist-upgrade | grep "^[[:digit:]]\+ upgraded"
Run Code Online (Sandbox Code Playgroud)

返回

18 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Run Code Online (Sandbox Code Playgroud)

它实际上18+4相当于22.

从 apt-get 手册:

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.
Run Code Online (Sandbox Code Playgroud)

来源