跳至内容

查看当前内核配置

Linux内核通过两个特殊的文件系统存储正在运行的内核信息

  • 较旧的 procfs,它挂载在/proc (通过mount -l -t proc验证)
  • 较新的 sysfs,它挂载在/sys (通过mount -l -t sysfs验证)

警告

在检查此处提及的文件时要小心,修改它们可能会改变实际运行内核的行为!

这两个接口允许您查看和更改当前正在运行的内核的参数。

请注意,如果您对其中一些文件执行 ls -l,它们会显示为“0”长度,但如果您 cat 它们,它们实际上包含数据。其中大多数是ASCII文本且可编辑,但有些是二进制的。无论哪种情况,像 filestat 这样的命令通常只会返回“空文件”或长度为“0”,尽管它们会显示其他信息。

与这些功能交互的首选和标准程序是 lsmodmodinfosysctl 等。

sysctl -a | grep -i <keyword>
lsmod | grep -i <keyword>
modinfo <module>

使用以下命令查看您当前正在运行的“内核版本”:

uname -r 并在命令中使用 $(uname -r) 替换其返回值

RHEL 及其衍生发行版(Fedora、CentOS Stream、Scientific Linux、RockyLinux、AlmaLinux 等)还将已安装的可引导内核的配置存储在 Grub2 使用的 /boot 目录下的 ASCII 文件中

/boot/config-<kernel-release>

检查当前运行内核的特定值的配置

cat /boot/config-$(uname -r) | grep -i <keyword>

结果将显示

  • =m 如果编译为内核模块
  • =y 如果静态编译到内核中
  • is not set 如果该设置被注释掉了
  • 一个数值
  • 一个带引号的字符串值

某些发行版,如 Gentoo 和 Arch,默认使用 configs 内核模块来提供 /proc/config.gz

zcat /proc/config.gz | grep -i <keyword>
zgrep <keyword> /proc/config.gz

对于任何发行版,如果您的正在运行的内核同时设置了 CONFIG_IKCONFIGCONFIG_IKCONFIG_PROC,并且如果

ls -lh /sys/module/configs

存在且可执行(如果是目录则可搜索),那么如果 /proc/config.gz 不存在,您可以使用此命令创建它

modprobe configs

启用的存储库

本文档目前不涵盖可能来自非默认存储库的内核包,例如

appstream-debug, appstream-source, baseos-debug, baseos-source, or devel

kernel-devel 包将用于编译每个已安装的标准内核包的配置文件安装为 ASCII 文件,位置如下:

/usr/src/kernels/<kernel-release>/.config

此文件通常通过 kernel-core 包提供的符号链接路径访问

/lib/modules/<kernel-release>/build/ -> /usr/src/kernels/<kernel-release>/

如果您安装了 kernel-debug-devel 包,您也将拥有此目录

 /usr/src/kernels/<kernel-release>+debug/

您可以查看以下任何内容以了解用于构建已安装内核的配置值的详细信息

/lib/modules/<kernel-release>/config
/lib/modules/<kernel-release>/build/.config
/usr/src/kernels/<kernel-release>/.config
/usr/src/kernels/<kernel-release>+debug/.config

当前运行内核的已配置模块,无论是内置(即静态编译到内核本身)还是可加载模块,都按模块名称的子目录列出在

/sys/module/

对于每个已安装的内核版本,您可以检查这些文件以查看哪些值被编译到该内核中,以及使用哪个版本的 GCC 进行编译

cat /lib/modules/$(uname -r)/config | grep -i <keyword>
cat /lib/modules/$(uname -r)/build/.config | grep -i <keyword>
cat /usr/src/kernels/$(uname -r)/.config | grep -i <keyword>
cat /usr/src/kernels/$(uname -r)+debug/.config | grep -i <keyword>
ls -lh /sys/module/ | grep -i <keyword>

您可以在以下文件中检查内核模块依赖关系:

/lib/modules/<kernel-release>/modules.dep

但更容易读取或解析 lsmod 中“Used-by”字段的输出。

参考

depmod, ls, lsmod, modinfo, modprobe, modules.dep, namespaces, procfs, sysctl, sysfs, uname

作者:David Hensley

贡献者:Steven Spencer