通过 aptitude 查找各个状态的包

通过 aptitude 查找各个状态的包

我正在寻找具有以下情况的软件包:

  1. 已删除但未清除
  2. 已安装但未配置

我尝试过类似的事情

aptitude search '~id'

aptitude search "~iuA"

但都不起作用。

有任何想法吗?

更新 - 其中一个命令不起作用 -

[$] dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]

zsh: no matches found: ^i[^i]

如果是 zsh 错误或其他原因,有什么想法吗?

答案1

对于您的aptitude尝试,需要注意的一点是,这~并不意味着“在包的状态中查找以下标志”。~i是的简写~installed,然后是d被解释为字面意思d,即名称包含字母的包d。我浏览了aptitude(在我的系统上)的文档,/usr/share/doc/aptitude/html/en/index.html寻找可以满足您的问题的搜索模式,但我不确定这是否可能。~action可能会让你成功一半,但我也不确定是否能获得状态。


using 的另一种选择aptitude是使用dpkg-querywith grep

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^r

这将搜索位于已删除状态,但未清除。

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]

这将搜索标记为的包已安装,但尚未完全安装。如果您不想包含触发器中待处理的包,^i[ncHUF]则可以使用。


要仅获取输出的第二列(包名称),您可以使用sed

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^r.R\?\s*//p'

查找已删除的包,以及

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^i[^i]R\?\s*//p'

查找要安装但未完全安装的软件包。


为了扩展这一点,Debian 软件包的“状态”有两个部分:

  • 行动旨在对包执行。这可以是安装一个包裹,到消除一个包裹,到抓住一个包裹,或清除一个包裹。

  • 包裹状态,它描述了系统上包的实际状态。

上面的dpkg-query调用列出了包的操作和状态,每个字符一个字符,在每一行的开头处显示包名称。

要查找已删除但未清除的包,我们只需使用“删除”操作搜索包:grep ^r。要查找已安装或打算安装但尚未配置的软件包,我们搜索其行动安装,但其状态不是已安装: grep ^i[^i]

答案2

已删除但未清除的是~c?config-files)。

已安装但未配置的内容不会被 apt 跟踪,只能被 dpkg 跟踪。包有两种状态:实际状态和期望状态。 Apt 只关心期望的状态。已安装但未配置的软件包的所需状态为已安装。

迪伦·弗雷斯的回答用于 dpkg 查询。

相关内容