我如何获得过时包的列表?

我正在试图找到一种方法来获取我已启用的存储库中不再可用的软件包列表。 这个工作站已经通过了很多版本的Ubuntu,并添加和删除了许多第三方存储库。 我想从这些已删除的存储库中获取我的软件列表,因此我可以清理它或添加相应的存储库。

aptitude search '~o' 

Aptitude有一些非常强大的搜索function。 不幸的是,语法有点笨拙,你必须通过手册页来查找文档,但它值得。

apt-show-versions也很有帮助:

 apt-show-versions | grep 'No available version' 

要获取不在注册存储库或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以外的任何方法保留您安装的应用程序列表。

如果你有aptitude安装使用,

 aptitude search '?obsolete' 

或其简短forms

 aptitude search '~o' 

这是一个示例输出

 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 

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

  • p,表示系统上没有包的痕迹,
  • c,意味着包已删除但其配置文件仍保留在系统上,
  • 我,意思是包安装,和
  • v,表示包是虚拟的。

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

  • 我,意思是将安装包,
  • d,表示将删除包,并且
  • p,表示将删除包及其配置文件。

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

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

可能有一种更干净的方式,但你可以做到最好

 dpkg -l | cut -f 3 -d ' ' > installed xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available diff installed available 

清理installed文件的前几行:它将包含标题。

如果有人可以修复我的语法突出显示加分……

如上所述,apt-get搜索不是检查包是否仍然可用的好方法。 另外,我已将所有内容添加到一行:

 for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done