ein*_*lum 22 dpkg apt package-management
我在系统上运行(最近的)基于 Debian 的发行版。
我想生成与特定模式匹配的所有已安装软件包的简单列表。我可以通过跑步来做到这一点
apt list --installed "linux-image-*" | cut -d/ -f1
Run Code Online (Sandbox Code Playgroud)
但我得到了我不关心的线路,例如:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Listing...
Run Code Online (Sandbox Code Playgroud)
所以也许我最好不要使用apt. 我可以像这样运行 dpkg-query:
dpkg-query --showformat='${Package}\n' --show "linux-image*"
Run Code Online (Sandbox Code Playgroud)
但这不仅限于已安装的软件包。我可以用
dpkg-query --list "linux-image-*" | grep "ii"
Run Code Online (Sandbox Code Playgroud)
但后来我需要做一堆文本处理,谁能相信这些空间,对吧?
所以,最重要的是:获取与模式匹配的已安装软件包列表的正确方法是什么?
注意:
Ste*_*itt 14
aptitude 支持在包管理工具已知的所有包中进行搜索,安装或其他方式,使用正则表达式,没有多余的输出,并且可以被告知如何格式化其输出:
aptitude search "linux-image-.*"
Run Code Online (Sandbox Code Playgroud)
仅列出已安装的软件包:
aptitude search "linux-image-.* ~i"
Run Code Online (Sandbox Code Playgroud)
仅列出与正则表达式匹配的已安装包名称:
aptitude search "linux-image-.* ~i" -F "%p"
Run Code Online (Sandbox Code Playgroud)
该文档详细介绍了可用的搜索模式和输出格式说明符。您还可以在此站点上找到示例,例如有没有一种方法可以通过 aptitude 使用正则表达式?、带有 aptitude 第 2 部分的正则表达式,以及仅使用 apt 的 Linux 显示或升级安全更新。
Geo*_*iou 13
$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1{print $1}'
linux-image-3.16.0-4-amd64
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64
linux-image-4.8.0-2-amd64
linux-image-4.9.0-1-amd64
linux-image-4.9.0-2-amd64
linux-image-4.9.0-3-amd64
Run Code Online (Sandbox Code Playgroud)
谈论正则表达式:
$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1 && $0~/4.1/{print $1}'
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64
Run Code Online (Sandbox Code Playgroud)
您还可以使用dpkg-querywith -f(--showformat) 选项,在没有任何包名的情况下调用时,默认情况下只列出已安装的包。
$ dpkg-query -f '${Package}\n' -W |grep 'linux-image' #-W == --show
Run Code Online (Sandbox Code Playgroud)
这是在基于 Debian 的系统上获取已安装软件包列表的一种好方法:
dpkg -l | grep ^ii | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
的输出线dpkg -l可以相信是理智的。该模式^ii将匹配已安装包的行,简单的 awk 将提取第二列,包名称(与apt-get install命令中使用的名称相同)。包名不能包含空格,所以这也是一个安全的操作。
| 归档时间: |
|
| 查看次数: |
21908 次 |
| 最近记录: |