![将 dpkg-query -W 的输出限制为已安装的软件包](https://linux22.com/image/936488/%E5%B0%86%20dpkg-query%20-W%20%E7%9A%84%E8%BE%93%E5%87%BA%E9%99%90%E5%88%B6%E4%B8%BA%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85.png)
在运行 Ubuntu 20.04 LTS 的服务器上,我尝试使用以下命令列出已安装的内核:
dpkg-query -W -f '${Package}\n' 'linux-image-[0-9]*'
根据手册页,它应该列出与模式匹配的已安装软件包。但是,命令的输出包含已删除的内核版本。如何将输出限制为仍安装的内核?
答案1
这手册页20.04 说“所有匹配模式的包“其中包括未安装的软件包。它并不声称将输出限制为已安装的软件包。
-W, --show [package-name-pattern...] Just like the --list option this will list all packages matching the given pattern. However the output can be customized using the --showformat option. The default output format gives one line per matching package, each line having the name (extended with the architecture qualifier for Multi-Arch same packages) and installed version of the package, separated by a tab.
将包状态添加到输出
dpkg-query -W -f '${db:Status-Status} ${Package}\n' 'linux-image-[0-9]*'
使用包状态字段过滤输出。除“未安装”之外的所有值都表示包至少已部分安装。
dpkg-query -W -f '${db:Status-Status} ${Package}\n' 'linux-image-[0-9]*' | awk '$1 != "not-installed" {print}'
将输出限制为包名称
dpkg-query -W -f '${db:Status-Status} ${Package}\n' 'linux-image-[0-9]*' | awk '$1 != "not-installed" {print $2}'