我读过了在 Ubuntu 中,什么将应用程序归类为‘已安装’?但它没有解决以下问题:
当我apt list --installed
在 Kubuntu 16.04 上运行时,我看到我列出的所有软件包都有[installed]
或[installed,automatic]
。然而,我看到报告称,用户有几个甚至大多数软件包被描述为[installed,local]
。最后一种情况下,他们的软件包似乎已经过时了。
相当于[installed,local]
Synaptic 包管理器所描述的“本地或过时”Synaptic 中的“本地或过时”是什么意思?
答案1
使用以下方法检查我的系统:
apt list --installed | awk -F/ '/local]/{print $1}' | xargs apt-cache policy
每个标记的软件包local
都有一个在存储库中不可用的安装版本。例如,我folly
使用安装了checkinstall
。在apt list --installed
:
folly/now 57.0-1 amd64 [installed,local]
对于apt-cache policy
:
folly:
Installed: 57.0-1
Candidate: 57.0-1
Version table:
*** 57.0-1 100
100 /var/lib/dpkg/status
你可以从源头验证这一点。apt list
调用apt-private/private-list.cc
的DoList()
功能,最终又调用apt-private/private-output.cc
的ListSingleVersion()
,你可以看到:
if (state.Upgradable() && state.CandidateVer != NULL)
strprintf(StatusStr, _("[installed,upgradable to: %s]"),
CandidateVerStr.c_str());
else if (V.Downloadable() == false)
StatusStr = _("[installed,local]");
else if(V.Automatic() == true && state.Garbage == true)
StatusStr = _("[installed,auto-removable]");
else if ((state.Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
StatusStr = _("[installed,automatic]");
else
StatusStr = _("[installed]");