Notes about sysctl
sysctl
的用法可参考man sysctl
。
本文主要转载自Linux 下的 Sysctl 命令。
作为一个 Linux 系统管理员,有时候你需要修改默认的内核行为。例如,你可能想要启用 SysRq 或者增加 Kernel 能够接受的连接数量。 内核参数可以在构建内核的时候,在系统启动时,或者在运行时进行设置。
本文讲解如何使用sysct
l命令在运行时进行查看并且修改内核参数。
1. 使用sysctl查看 Kernel 参数
想要查看所有的当前内核参数,运行sysctl
命令加上-a
选项:1
sysctl -a
这将会输出一个很大的列表,看起来像下面这样,每行包含一个参数和对应的值:1
2
3
4abi.vsyscall32 = 1
debug.exception-trace = 1
debug.kprobes-optimization = 1
...
所有用户可以查看当前的内核参数;仅仅 root 用户可以修改它们的值。
通过将参数名传递给sysctl
,你可以检查单个参数的取值。例如,想要检查当前的 swappiness 取值,你可以输入:1
sysctl vm.swappiness
输出:1
vm.swappiness = 60
Swappiness 是一个内核属性,它定义了系统多长时间会使用swap space。
这个sysctl
命令将会从/proc/sys
目录下读取信息。 /proc/sys
是一个虚拟目录,它包含文件对象,可以被用来查看或者设置当前的内核参数。
你也可以通过显示合适的文件,来查看参数值。唯一的不同就是文件如何被展示。例如,sysctl vm.swappiness
和cat /proc/sys/vm/swappiness
都将给出同样的输出。当使用sysctl
时,目录中的斜杠将会被点所替代,并且proc.sys
部分被去掉了。
2. 使用sysctl来修改内核参数
想要在系统运行时设置一个内核参数,按照下面的格式运行sysctl
命令加上参数名和取值:
1 | sysctl -w parameter=value |
如果这个取值包含空格或者特殊符号,使用双引号包裹取值。你还可以在同一个命令中传递多个parameter=value
键值对。
1 | 在生产系统中修改内核设置必须非常小心,这可能会使得内核不稳当,并且你需要重启系统。 |
例如,想要允许 IPV4 包转发,你需要运行:
1 | sysctl -w net.ipv4.ip_forward=1 |
这个修改立即生效,但是它不是持久化的。在系统重启后,默认值会被重新加载。
想要永久修改一个参数,你需要修改设置到文件/etc/sysctl.conf
:
1 | sysctl -w net.ipv4.ip_forward=1 >> /etc/sysctl.conf |
另外修改参数的方式就是使用echo
命令将设置写入到/proc/sys
目录下的文件中。例如,不使用上面的命令,你还可以用:
1 | echo 1 > /proc/sys/net/ipv4/ip_forward |
这个-p
选项允许你从一个配置文件中加载设置:
1 | sysctl -p /etc/sysctl.d/file_name.conf |
如果没有给出文件,那么 sysctl
从 /etc/sysctl.conf
文件中读取。
3. 总结
sysctl
命令允许你查看并且修改 Linux 内核参数。
参考资料: