将 dpkg-query -W 的输出限制为已安装的软件包

将 dpkg-query -W 的输出限制为已安装的软件包

在运行 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.
  1. 将包状态添加到输出

    dpkg-query -W -f '${db:Status-Status} ${Package}\n' 'linux-image-[0-9]*'

  2. 使用包状态字段过滤输出。除“未安装”之外的所有值都表示包至少已部分安装。

    dpkg-query -W -f '${db:Status-Status} ${Package}\n' 'linux-image-[0-9]*' | awk '$1 != "not-installed" {print}'

  3. 将输出限制为包名称

    dpkg-query -W -f '${db:Status-Status} ${Package}\n' 'linux-image-[0-9]*' | awk '$1 != "not-installed" {print $2}'

相关内容