bash - 如何列出所有加载的内核模块的名称和描述
问题描述
如何按以下格式列出模块名称和描述?
...
ext4 Fourth Extended Filesystem
video ACPI Video Driver
...
列出所有加载的内核模块(每个模块都有一些使用信息)
$ lsmod
仅列出模块名称(lsmod 的第一列,删除标题)
$ lsmod | cut -d " " -f 1 | tail -n +2
...
ext4
video
...
列出加载的内核模块的所有描述
$ sudo modinfo $(lsmod | cut -d " " -f 1 | tail -n +2) |grep "description" | cut -c17-
...
Fourth Extended Filesystem
ACPI Video Driver
...
如何结合名称和描述?
解决方案
使用标准外壳执行此操作:
#!/usr/bin/env sh
lsmod | {
read -r _ || exit 1 # Ignore header line
while read -r name _; do
modinfo -F description "$name" | {
read -r desc || true # Ignore read failure if no description
# Print at least a line per module
printf '%-24s %s\n' "$name" "$desc"
# Iterate remaining description lines if any
while read -r desc; do
# Print description line without repeating module name
printf '%-24s %s\n' '' "$desc"
done
}
done
}
lsmod | while
lsmod
: 将' 的输出通过管道传输到while
循环while read -r name _; do
:迭代读取模块名称,并忽略“size”和“used by”到_
占位符变量中。modinfo -F description "$name" | while
: 查询modinfo
的描述,并将输出传递到一个while
循环,因为它可以是多行。while read -r desc; do
:迭代阅读每个描述行。printf '%-24s %s\n' "$name" "$desc"
:打印格式化的模块名称和描述行。
推荐阅读
- node.js - Next.js 的 API 路由不发送响应
- android - Facebook 受众网络一直等待广告请求
- c++ - C ++中的短无符号整数
- asp.net-core - Chrome 手机颜色不匹配
- php - 根据状态隐藏记录
- vba - 允许从一个表中删除数据以添加到另一个表
- sql - 带有 LEFT JOIN、GROUP BY 和 HAVING 的 SQL UPDATE 语句?
- flutter - 尝试在 Flutter FutureBuilder 中构建 ListView 时出错
- swift - 如何在 SwiftUI 中交换 TabView 和 BottomToolbar
- sql - 将时间戳转换为 varchar