Linux 内核是操作系统的核心,它负责管理硬件资源和提供系统调用接口供用户程序使用。Linux 内核的设计极为灵活和模块化,它允许开发者通过加载和卸载模块来动态地扩展内核的功能。

Linux内核负责管理计算机硬件资源,并提供用户程序运行的环境。它包括以下几个主要组成部分:

  • 进程管理:内核负责调度和管理进程的运行,包括进程的创建、销毁、切换和同步等。它还提供多任务处理的能力,让多个进程可以同时运行。
  • 内存管理:Linux 内核管理系统的物理内存和虚拟内存,包括内存分配、回收、分页机制等。通过虚拟内存技术,内核可以使得系统能够运行比物理内存更大的应用程序。
  • 文件系统管理:内核通过文件系统抽象了底层存储设备(如硬盘、SSD等)的操作,提供了一个统一的文件访问接口,支持多种文件系统(如 ext4、xfs等)。
  • 硬件设备管理:内核通过驱动程序与硬件设备通信,包括网络设备、输入设备、存储设备等,提供硬件设备的抽象层。
  • 网络管理:内核提供了强大的网络协议栈,支持多种网络协议(如 TCP/IP),以及网络接口和相关资源的管理。
  • 安全管理:内核负责系统安全机制的实施,如用户权限控制、文件权限检查、防火墙规则的应用等。

内核参数管理

sysctl 命令用来配置linux 系统内核参数,这些参数以文件的形式显示在 /proc/sys/ 目录中,配置项就是目录名加文件名,值就是该文件中的内容 注意:不是所有内核参数都是可以被修改的

查看所有配置项


#内核参数配置目录
[root@ubuntu ~]# ll /proc/sys
total 0
dr-xr-xr-x 1 root root 0 Dec  4 15:11 abi
dr-xr-xr-x 1 root root 0 Nov  5 13:59 crypto
dr-xr-xr-x 1 root root 0 Dec  4 15:11 debug
dr-xr-xr-x 1 root root 0 Dec  4 15:11 dev
dr-xr-xr-x 1 root root 0 Nov  5 21:58 fs
dr-xr-xr-x 1 root root 0 Nov  5 21:58 kernel
dr-xr-xr-x 1 root root 0 Nov  5 21:58 net
dr-xr-xr-x 1 root root 0 Dec  4 15:11 user
dr-xr-xr-x 1 root root 0 Nov  5 21:58 vm

[root@ubuntu ~]# ll /proc/sys/net/ipv4/ip_forward
-rw-r--r-- 1 root root 0 Dec  4 15:11 /proc/sys/net/ipv4/ip_forward

[root@ubuntu ~]# cat /proc/sys/net/ipv4/ip_forward
0

sysctl 格式


sysctl [options] [variable[=value] ...]

#常用选项
-a|-A|-x|--all #显示所有内核参数
-p|--load #重载
-N|--names #仅显示参数名称
-n|--values #仅显示参数值
-w|--write #设置内核参数

查看所有参数


[root@ubuntu ~]# sysctl -a | head
abi.vsyscall32 = 1
debug.exception-trace = 1
debug.kprobes-optimization = 1
dev.cdrom.autoclose = 1
......

查看指定项


[root@ubuntu ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

#仅显示名称
[root@ubuntu ~]# sysctl -N net.ipv4.ip_forward
net.ipv4.ip_forward

#仅显示值
[root@ubuntu ~]# sysctl -n net.ipv4.ip_forward
0 

#直接查看文件内容
[root@ubuntu ~]# cat /proc/sys/net/ipv4/ip_forward
0

修改内核参数


[root@ubuntu ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

#查看
[root@ubuntu ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

#查看
[root@ubuntu ~]# cat /proc/sys/net/ipv4/ip_forward
1

[root@ubuntu ~]# echo 123 > /proc/sys/net/ipv4/ip_forward

[root@ubuntu ~]# cat /proc/sys/net/ipv4/ip_forward
123

[root@ubuntu ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 123

写配置文件,永久有效


[root@ubuntu ~]# vim /etc/sysctl.conf
.....
net.ipv4.ip_forward=0

#还没有生效
[root@ubuntu ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

#重载生效
[root@ubuntu ~]# sysctl -p
net.ipv4.ip_forward = 0

可用的配置文件

系统在启动时,会按下列顺序加载配置文件,读取参数值


/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf

常用内核参数


net.ipv4.ip_forward #是否开启ipv4地址转发
net.ipv4.icmp_echo_ignore_all #是否禁用ping功能
net.ipv4.ip_nonlocal_bind #允许应用程序可以监听本地不存在的IP
vm.drop_caches #缓存回收机制 3 回收所有 2 释放数据区和信息节点 1 释放页面缓存
fs.file-max = 1020000 #内核可以支持的全局打开文件的最大数
vm.overcommit_memory = 0 #超分 0 表示进程申请内存时会判断,不够则返回错误,1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何,2 表示内核允许分配超过所有物理内存和交换空间总和的内存
vm.swappiness = 10 #使用swap空间时物量内存还有多少可用,10 表示物理存只有10%时才使用swap

#禁用IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

对于网络接口的配置,则会在对应的网络接口出现的时候才会生效,具体来说就是 net.ipv4.conf,net.ipv6.conf,net.ipv4.neigh,net.ipv6.neigh 等参数。

有部分 sysctl 参数仅在加载了相应的内核模块之后才可用,因为内核模块是按需动态加载的(例如加入了新的硬件或启动网络时),所以在 sysctl.conf 文件中无法设置的那些依赖于特定模块的参数。

总结

Linux 内核是操作系统的核心,它提供了进程管理、内存管理、文件系统管理等多种功能。通过内核模块,开发者可以动态地扩展内核功能,尤其是设备驱动的开发。内核模块的加载和卸载可以通过 insmod、modprobe、rmmod 等工具完成,而调试模块则可以通过 printk 和 dmesg 来查看调试信息。

原文连接: Linux 内核管理