我正在寻找具有以下情况的软件包:
- 已删除但未清除
- 已安装但未配置
我尝试过类似的事情
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-query
with 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 查询。