![如何获取过时软件包的列表?](https://linux22.com/image/813823/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%BF%87%E6%97%B6%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E5%88%97%E8%A1%A8%EF%BC%9F.png)
我正在尝试找出一种方法来获取我已启用的存储库中不再可用的软件包列表。此工作站已经历了多个版本的 Ubuntu,并且添加和删除了许多第三方存储库。我想从这些已删除的存储库中获取我拥有的软件列表,以便我可以清理它或重新添加适当的存储库。
答案1
aptitude search '~o'
Aptitude 有一些非常强大的搜索功能。遗憾的是语法有点笨拙,您必须翻阅手册页才能找到文档,但这是值得的。
apt-show-versions 也可能有帮助:
apt-show-versions | grep 'No available version'
答案2
从 Ubuntu 19.10 开始,也可以运行
apt list ?obsolete
获取过时软件包的列表。
对于任何版本,您都可以使用以下 Bash 单行命令:
comm -23 <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' | grep '^.[^nc]' | cut -f2 | sort) <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u)
无需为此安装额外的软件包,而且速度相对较快。这还将查找部分安装的软件包(但不会查找仅剩配置文件的软件包;不过,配置文件很容易更改)。注意:这不关心软件包属于哪种架构。
如果您想要包含安装的版本与存储库中提供的版本不同的软件包,您可以执行以下操作之一:
使用现代 apt:
apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'
对于 Bionic(也许对于早期版本)还有另一种选择:
ubuntu-support-status --show-unsupported
阅读“不再可下载:”部分下的包名称。
如果你使用 Focal 或更高版本,你可以使用
ubuntu-security-status --unavailable
相反,您可以在“软件包不再可供下载”文本下方阅读软件包名称。这不是最快的选项。此命令后来被替换为
pro security-status --unavailable
答案3
要获取未在注册存储库或 PPA 中的应用程序列表,请执行以下操作:
sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'
那应该输出如下文本:
app1 1.0.0.14 installed: No available version in archive
app23 0.3.6 installed: No available version in archive
app332 7.0.9377 installed: No available version in archive
对我来说,这是有效的,并显示了我使用 DEB 包安装的三个应用程序,但在 Repo 或 PPA 中不可用。
但请记住,不可能检查所有程序,只能检查经过的程序dpkg
。例如,某些应用程序只需将其提取到正确的文件夹中即可安装,而其他应用程序则使用独立的安装程序 bin 或脚本。因此,最好的方法是您自己保留通过 APT 以外的任何方法安装的应用程序列表。
答案4
有更多信息可供调查。
ubuntu 支持状态 echo "$(sudo apt-mark showmanual | wc -l) 标记为‘手动安装’的软件包。"
... ubuntu-support-status 和 apt-mark 可能需要安装。