怎么在Linux利用Rpm -Qa --Queryformat结合Awk实现针对系统所有已安装包的物理存储空间占用热力图绘制

雨辰君_2577

雨辰君_2577

2026-05-25

1008人浏览

原创

RPM和AWK无法直接生成热力图,但可统计各包安装后文件总大小并排序,输出结构化数据供gnuplot、Python等工具绘图;关键步骤是rpm -ql结合stat计算实际磁盘占用。

怎么在linux利用rpm -qa --queryformat结合awk实现针对系统所有已安装包的物理存储空间占用热力图绘制

直接用 rpm -qa --queryformat 配合 awk 无法生成“热力图”——因为热力图是可视化图形,而 RPM 和 AWK 是命令行文本处理工具,不支持绘图。但你可以用它们完成**关键前置步骤**:统计每个已安装 RPM 包的磁盘占用(即所有文件总大小),并按大小排序输出,为后续绘图提供结构化数据。

一、获取每个 RPM 包的物理文件总大小

RPM 包本身(.rpm 文件)不等于其安装后占用的空间。真正要统计的是包安装后在系统中创建的所有文件的磁盘占用。可用以下命令安全获取:

注意:需 root 权限;部分包含大量小文件时速度较慢;建议先测试小范围(如 rpm -q bash)

rpm -qa --queryformat '%{NAME} %{PACKAGEORIGIN}\n' | while read name origin; do<br>  files=$(rpm -ql "$name" 2>/dev/null | grep -v '^$' | grep -v '^(none)$');<br>  if [ -n "$files" ]; then<br>    size=$(echo "$files" | xargs -r stat -c '%s' 2>/dev/null | awk '{sum += $1} END {print sum+0}');<br>    echo "$name $size";<br>  else<br>    echo "$name 0";<br>  fi;<br>done | sort -k2,2nr | head -50

二、优化版单行命令(推荐用于导出数据)

更健壮、可重定向到文件供后续分析:

rpm -qa --queryformat '%{NAME}\n' | xargs -r -I{} sh -c 'echo -n "{} "; rpm -ql "{}" 2>/dev/null | grep -v "^$" | xargs -r stat -c "%s" 2>/dev/null | awk "{sum+=$1} END {print sum+0}"' | awk ' > 0' | sort -k2,2nr > rpm-sizes.txt

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • rpm -ql 列出包内所有文件路径
  • stat -c "%s" 获取每个文件字节数(跳过符号链接和缺失路径)
  • awk '{sum+=$1} END {print sum+0}' 累加求和,空输入返回 0
  • awk '$2 > 0' 过滤掉无文件或统计失败的包(避免干扰)

三、生成可导入绘图工具的数据格式

热力图通常需要二维分布(例如:包大小 vs 类别 / 安装时间 / 依赖深度)。纯大小排序只是线性排名。若真要“热力图”,可构造简单二维指标:

  • 横轴:包大小区间(如每 1MB 一档)
  • 纵轴:包数量(直方图式热力)→ 实际是柱状图密度,常用 gnuplot 或 Python 绘制
  • 或用包名首字母分组(A–Z)为 Y 轴,大小为 X 轴 → 得到字符级粗粒度热力

示例(按大小分桶计数,适合 gnuplot):

awk '{bucket=int($2/1048576); count[bucket]++} END {for (b in count) print b, count[b]}' rpm-sizes.txt | sort -n > size-buckets.dat

四、真正绘图:交给专业工具

把 rpm-sizes.txt 或 size-buckets.dat 导入以下任一工具即可生成热力图:

  • Python + matplotlib/seaborn:读取 rpm-sizes.txt,用 plt.hist2d 或 sns.heatmap(需构造矩阵)
  • gnuplot:plot 'size-buckets.dat' with image
  • R(ggplot2):用 geom_tile() 或 geom_raster()
  • Excel / LibreOffice Calc:导入后用“条件格式 → 色阶”模拟简易热力效果

不复杂但容易忽略:RPM 自身不存文件大小元数据,必须通过 rpm -ql + stat 实时计算——这是唯一准确方式。没有捷径,也没有内置热力图开关。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1769

3

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.06.27

1211

7

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4230

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3573

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2813

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6870

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6522

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3753

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3245

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习