如何获得过时软件包的列表?

Sea*_*ean 26 package-management

我试图找出一种方法来获取已启用的存储库中不再可用的软件包列表。这个工作站已经通过了很多版本的 Ubuntu,并且添加和删除了许多 3rd 方存储库。我想从这些已删除的存储库中获取我拥有的软件列表,以便我可以清理它或重新添加适当的存储库。

ste*_*tew 32

aptitude search '~o'
Run Code Online (Sandbox Code Playgroud)

Aptitude 有一些非常强大的搜索功能。不幸的是,语法有点笨拙,您必须翻阅联机帮助页才能找到文档,但这是值得的。

apt-show-versions 也有帮助:

apt-show-versions | grep 'No available version'
Run Code Online (Sandbox Code Playgroud)

  • 另一个有用的列表由```apt-show-versions | 生成。grep“比存档中的版本新”``` (2认同)

jap*_*one 9

要获取不在注册存储库或 PPA 中的应用程序列表,请执行以下操作:

sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'
Run Code Online (Sandbox Code Playgroud)

那应该输出这样的文本:

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

对我来说,这有效并显示了我使用 DEB 包安装的三个应用程序,并且在 Repo 或 PPA 中不可用。

请记住,不可能检查所有程序,只能检查通过dpkg. 例如,一些应用程序通过简单地将它们解压缩到正确的文件夹中来安装,或者其他应用程序使用独立的安装程序 bin 或脚本。因此,最好的方法是让您自己保留通过 APT 以外的任何方法安装的应用程序列表。


Dem*_*a ツ 7

如果你安装了aptitude使用,

aptitude search '?obsolete'
Run Code Online (Sandbox Code Playgroud)

或其缩写形式

aptitude search '~o'
Run Code Online (Sandbox Code Playgroud)

这是一个示例输出

i A gcc-4.7-base - GCC, the GNU Compiler Collection (base package)
id  libdb4.7     - Berkeley v4.7 Database Libraries [runtime]
i   libudev0     - libudev shared library
Run Code Online (Sandbox Code Playgroud)

每行的第一个字符表示包的当前状态。最常见的状态是:

  • p,表示系统上不存在包的踪迹,
  • c,表示包被删除,但其配置文件保留在系统上,
  • i,表示安装了包,以及
  • v,表示包是虚拟的。

第二个字符表示要对包执行的存储操作(如果有),否则显示一个空格。最常见的操作是:

  • i,表示将安装该软件包,
  • d,意味着该包将被删除,以及
  • p,意味着包及其配置文件将被删除。

如果第三个字符是 A,则软件包已自动安装。

有关可能的状态和操作标志的完整列表,请参阅aptitude 参考指南中的访问包信息部分。


jar*_*rno 5

从 Ubuntu 19.10 开始,也可以运行

apt list ?obsolete
Run Code Online (Sandbox Code Playgroud)

获取过时软件包的列表。

对于任何版本,您都可以使用以下 Bash one-liner:

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

无需为此安装额外的软件包,而且速度相对较快。这还将找到部分安装的软件包(但不会找到那些只剩下配置文件的软件包;不过,可以轻松更改)。注意:这并不关心包是哪种架构。

如果要包含安装版本与存储库中可用版本不同的软件包,您可以执行以下操作之一:

使用现代 apt:

 apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'
Run Code Online (Sandbox Code Playgroud)

另一种选择是运行

ubuntu-support-status --show-unsupported
Run Code Online (Sandbox Code Playgroud)

并阅读“不再可下载:”部分下的包名称。