Linux内核的相关文件并非集中存放在同一个目录中,而是根据文件的用途和类型分散在系统的多个目录里,不同类型的目录对应内核不同阶段的文件或信息。

内核源码默认存放目录
如果是手动下载编译的Linux内核源码,默认会存放在用户指定的目录中,通常很多开发者会将源码解压到/usr/src/目录下,比如下载的5.10版本内核源码解压后会形成/usr/src/linux-5.10/这样的目录结构。如果是通过系统包管理器安装的内核源码包,不同的Linux发行版路径略有差异,Debian系发行版一般会将内核源码放在/usr/src/linux-headers-$(uname -r)/目录,而RHEL系发行版通常会放在/usr/src/kernels/$(uname -r)/目录。
我们可以通过以下命令快速查看当前系统是否存在内核源码目录:
# 查看/usr/src目录下是否有内核相关目录 ls -d /usr/src/linux* # 如果是RHEL系,查看kernels目录 ls -d /usr/src/kernels/*
内核镜像文件存放目录
编译安装后或者系统自带的内核镜像文件主要存放在/boot/目录中,这个目录存放着系统启动所需的所有文件,其中内核相关的文件包括:
- vmlinuz开头的文件:这是压缩后的内核镜像文件,比如
vmlinuz-5.10.0-8-amd64,是系统启动时加载的核心内核文件。 - initrd开头的文件:这是初始内存磁盘镜像,用于在内核启动阶段加载必要的驱动模块,比如
initrd.img-5.10.0-8-amd64。 - config开头的文件:这是内核编译时的配置文件,记录了当前内核开启的功能和选项,比如
config-5.10.0-8-amd64。 - System.map开头的文件:这是内核符号表文件,用于调试和定位内核问题,比如
System.map-5.10.0-8-amd64。
我们可以通过以下命令列出/boot/目录下的内核相关文件:
ls -lh /boot/ | grep -E "vmlinuz|initrd|config|System.map"
内核运行时信息目录
系统启动后,内核运行时的相关信息会挂载到/proc/伪文件系统中,其中和内核直接相关的目录是/proc/kallsyms和/proc/version等,不过更核心的内核信息目录是/proc/sys/kernel/,这个目录存放着内核运行时的可调整参数,比如hostname、pid_max等配置项。
另外/sys/伪文件系统中也有部分内核相关的信息,其中/sys/kernel/目录存放着内核的调试信息、内存信息、调度器相关信息等内容。
快速查看当前内核版本对应的目录
如果不想手动逐个目录查找,可以通过uname命令先获取当前运行的内核版本,再结合版本号定位对应的目录:
# 获取当前内核版本 KERNEL_VERSION=$(uname -r) echo "当前内核版本: $KERNEL_VERSION" # 查看对应的/boot目录下的内核文件 ls -lh /boot/*$KERNEL_VERSION* # 查看对应的源码目录(如果存在) ls -d /usr/src/linux* | grep $KERNEL_VERSION ls -d /usr/src/kernels/* | grep $KERNEL_VERSION
不同场景下的目录总结
我们可以用下面的表格快速区分不同内核相关文件的存放目录:
| 文件/信息类型 | 存放目录 | 说明 |
|---|---|---|
| 内核源码 | /usr/src/linux* 或 /usr/src/kernels/* | 手动下载或包管理器安装的内核源码路径 |
| 内核镜像、配置文件 | /boot/ | 系统启动相关的内核文件存放位置 |
| 内核运行时参数 | /proc/sys/kernel/ | 内核运行中可调整的配置参数 |
| 内核调试信息 | /sys/kernel/ | 内核运行时的调试和状态信息 |
注意事项
如果是通过容器运行的Linux环境,可能没有完整的内核目录,因为容器共享宿主机的内核,不会在容器内部存放独立的内核文件。另外如果是精简版的Linux系统,可能默认没有安装内核源码,需要手动通过包管理器安装对应的内核头文件或源码包才能看到对应的源码目录。