跳至内容

查看当前内核配置

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 等)还将用于可启动安装内核的配置存储在 /boot 目录中,该目录由 Grub2 作为 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 或 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”字段的输出。

参考

depmodlslsmodmodinfomodprobemodules.depnamespacesprocfssysctlsysfsuname

作者:David Hensley

贡献者:Steven Spencer