Answers:
aptitude search '~o'
Aptitude提供了一些非常强大的搜索功能。不幸的是,语法有点笨拙,您必须仔细阅读手册页才能找到文档,但这是值得的。
apt-show-versions也可能有帮助:
apt-show-versions | grep 'No available version'
apt-show-versions | grep "newer than version in archive"
要获取不在注册存储库或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以外的任何其他方式安装的应用程序的列表。
dpkg
安装的软件包。一个例外。它列出了skype-bin
,而apt-cache policy skype-bin
清楚地显示了Canonical合作伙伴存储库。我不确定发生了什么。多体系结构问题?仍为+1 apt-show-versions
!
如果您已经安装了智能功能,
aptitude search '?obsolete'
或其缩写
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
每行的第一个字符表示软件包的当前状态。最常见的状态是:
第二个字符表示要在包装上执行的已存储操作(如果有),否则显示空白。最常见的操作是:
如果第三个字符是A,则表示该软件包已自动安装。
有关可能的状态和操作标志的完整列表,请参阅《适用性参考指南》中的“ 访问软件包信息 ”部分。
aptitude search ?obsolete
也许可以使用bash,但是您应该使用aptitude search '?obsolete'
从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}'
另一个选择是运行
ubuntu-support-status --show-unsupported
并在“不再可下载:”部分下阅读软件包名称。
可能有一种更清洁的方法,但是您可以做到的
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
:它将具有标题。
如果任何人都可以修复我的语法突出显示,则奖励...
dpkg -l
获取已安装软件包的列表,则应将结果限制为第二列中带有“ i”的行,因为dpkg还会列出未安装的软件包(可能已删除但未清除) 。例如,将第一个命令更改为dpkg -l | grep '^.[^i]' | cut -f 3 -d ' '
它将返回未安装的软件包列表。(但曾经是)
apt-cache search someinstalledpackage
即使该软件包无法从回购中获得,它也将返回某些内容,因此我认为这根本不起作用。
dpkg -l | grep '^.[^i]' | cut -f 3 -d ' '
还会打印一些标题行。
apt-cache search
分别针对每个软件包运行。
如前所述,apt-get搜索不是检查软件包是否仍然可用的好方法。另外,我已将所有内容添加到仅一行中:
for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done
grep '^i'
man dpkg-query
以获取更多信息。
apt-cache show
这样做对检查包装是否可用没有好处。如果禁用了相应的存储库,但没有其他启用的存储库,则它仍显示软件包。