首页 > 解决方案 > 如何列出所有加载的内核模块的名称和描述

问题描述

如何按以下格式列出模块名称和描述?

...
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
...

如何结合名称和描述?

标签: bash

解决方案


使用标准外壳执行此操作:

#!/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 | whilelsmod: 将' 的输出通过管道传输到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":打印格式化的模块名称和描述行。

推荐阅读