linux内核源代码标准存放路径是/usr/src/linux,该路径符合fhs规范,由发行版包管理器统一安装,用于编译、开发及模块构建,/lib/modules/$(uname -r)/build通常指向此目录。

Linux系统中,/usr/src 是标准约定的源码存放目录,而内核源码通常就放在 /usr/src/linux 或其符号链接指向的具体版本子目录下(如 /usr/src/linux-6.6.12)。这不是硬性强制路径,而是由发行版构建和包管理器(如 Debian 的 linux-source、RHEL/CentOS 的 kernel-devel)统一安装到此处,便于开发、编译和模块构建时定位。
/usr/src 是专为源码保留的系统目录
按照 Linux 文件系统层次结构标准(FHS),/usr/src 用于存放“非必需但对系统开发有用的源代码”。它不参与运行时,也不被普通用户直接操作,主要面向开发者和系统维护者:
- 该目录默认权限通常为
root:root,普通用户需 sudo 才能写入 - 发行版不会在安装时自动填充内容;只有显式安装内核源码包后,才会生成
linux链接或版本目录 - 多个内核版本可共存于
/usr/src/下(如linux-6.1、linux-6.6),通过软链接/usr/src/linux指向当前默认使用的版本
内核源码为何不放在 /lib/modules 或 /boot
/lib/modules/$(uname -r)/ 存放的是已编译的内核模块(.ko 文件)和构建信息(如 build 符号链接),不是源码本身;/boot 则只保留运行所需的精简产物(vmlinuz、initrd.img、config-xxx)。源码体积大、结构复杂,放在这两个位置既不符合职责分离原则,也影响启动效率和安全性。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
/lib/modules/$(uname -r)/build通常是一个指向/usr/src/linux的软链接,供make modules_prepare或第三方模块编译时快速定位头文件和 Makefile -
/boot/config-$(uname -r)是对应内核的配置文件,可用来还原源码编译环境,但它本身不是源码
实际查看与验证方法
确认当前系统是否安装了内核源码,以及它具体在哪,只需几步:
- 运行
ls -l /usr/src—— 若看到linux -> linux-6.x.y这类链接,说明源码已就位 - 执行
readlink -f /usr/src/linux可获得真实路径,比如输出/usr/src/linux-6.6.12 - 检查该目录下是否存在
Makefile和arch/、drivers/等典型子目录,即可确认是完整内核源树 - 若
/usr/src/linux不存在,说明未安装源码包;Debian/Ubuntu 运行apt install linux-source,RHEL/CentOS 运行yum install kernel-devel
为什么不是所有发行版都用 /usr/src/linux
部分轻量或嵌入式发行版(如 Alpine、Buildroot)默认不安装内核源码,也不会创建 /usr/src/linux;有些定制系统可能将源码放在 /opt/kernel-src 或 NFS 共享路径。但只要遵循 FHS 并支持内核模块开发,/usr/src 始终是首选位置——因为构建工具链(如 make menuconfig、scripts/Makefile.build)默认从这里读取顶层 Makefile,且 Kbuild 系统会优先查找 $(srctree) 环境变量或当前工作目录的父级结构。
不复杂但容易忽略:源码路径的正确性直接影响模块编译能否找到头文件和符号定义,而 /usr/src/linux 这个约定,正是让整个生态保持兼容的关键锚点。










