我曾经使用 Synaptic 寻找本地软件包。那些本地安装但在当前活动存储库中没有完全匹配的包。正如这篇文章中解释的那样:Synaptic 中的“本地或过时”是什么意思。
在调试未满足的依赖关系问题时,我发现该功能非常有用。虽然我知道如何获取过时软件包列表,但我找不到本地软件包的方法。
那么,是否有任何等效的命令行列出所有本地包?
注意解释我使用的成语。
- 孤立包:作为依赖项自动安装,然后依赖项被删除。
- 过时的包:已安装但存储库中没有具有相同(名称、架构)的包。
- 本地包:已安装但存储库中没有具有相同(名称、架构、版本)的包。
所以我不是指所有已安装的软件包。
测试用例
- Synaptic → Menu:Settings → Repositories → Updates: Enable Unsupported Updates (backports) (注意:我将其用作 PPA 示例)
- 重新加载包列表
- 搜索
debhelper
,选择它。菜单:Packages → Force Version ...:从 backports 选择并安装版本(通常是最高版本) - Menu:Settings → Repositories → Updates: Disable Unsupported Updates (backports) (注意:我用它作为 PPA 的例子)
- 重新加载包列表
现在比较这两个列表:
Synaptic → 侧边栏:状态 → 已安装(本地和过时)
aptitude search '~o'
user@user-vb:~$ aptitude search '~o' i A linux-headers-4.15.0-19 - Header files related to Linux kernel version 4.15.0 i A linux-headers-4.15.0-19-generic - Linux kernel headers for version 4.15.0 on 64 bit x86 SMP i A linux-image-4.15.0-19-generic - Signed kernel image generic i A linux-modules-4.15.0-19-generic - Linux kernel extra modules for version 4.15.0 on 64 bit x86 i A linux-modules-extra-4.15.0-19-generic - Linux kernel extra modules for version 4.15.0 on 64 bit x86 user@user-vb:~$
查找并非来自任何 source.list 或无法下载的已安装包。
或简写形式:
?narrow
(filter, pattern)选择同时匹配过滤器和模式的包。
?or
(pattern, pattern)匹配任一模式或两者。
?origin
(模式)选择具有给定来源的包。
?obsolete
匹配无法下载的已安装包。
?installed
选择已安装的软件包。
?not
(模式)或!
选择任何与模式不匹配的包。
apt list --installed
local
以似乎与您的定义一致的方式标记包(请参阅我的答案here)。您可以只过滤带有 ask、grep 等标签的包:您也可以使用Python APT API进行类似的检查。
你应该得到
apt-show-versions | grep -e 'No available version' -e 'newer than version'
包列表:可能您需要预先安装它
sudo apt install apt-show-versions