Linux内核proc sysctl
Linux内核proc sysctl
我们都知道linux下用户态与内核态通信的方法有
- procfs(/proc)
- sysctl(/proc/sys)
- sysfs(/sys)
- netlink 套接口
- 内核启动参数
- 模块参数
而这些方法是如何实现,又是怎样的一个原理,接下来就让我们来了解下。
一、什么是systcl
sysctl是一个用于运行时配置内核参数的命令,这些内核参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网等功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。
1、常见用法
首先sysctl命令是系统开源软件包提供的,我们目前主要发行版的的linux系统都默认预装了procps包,提供了sysctl命令供用户配置sysctl实现的内核参数。
tangm@tangm-PC:~$ which sysctl
/sbin/sysctl
tangm@tangm-PC:~$ apt-file search /sbin/sysctl
procps: /sbin/sysctl
这个命令我们常用的方法用
1)列出所有的变量并查看
sysctl -a | less
2)修改某变量的值
sysctl -w 变量名=变量值
#sysctl -w vm.max_map_count=262144
3)读一个指定的变量,例如 kernel.msgmnb:
[tangm@tangm] $ sysctl kernel.msgmnb
kern.maxproc: 65536
要设置一个指定的变量,直接用 variable=value 这样的语法:
[tangm@tangm]$ sudo sysctl kernel.msgmnb=1024
kernel.msgmnb: 1024
可以使用sysctl修改系统变量,也可以通过编辑sysctl.conf文件来修改系统变量。
sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示’yes’,用 0 来表示’no’)。
sysctl -w kernel.sysrq=0
sysctl -w kernel.core_uses_pid=1
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_keepalive_time=3600
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_sack=1
除此之外,我们还可以通过文件的读写操作进行设置。
tangm@tangm-PC:~$ cat /proc/sys/kernel/sysrq
438
tangm@tangm-PC:~$ cat /proc/sys/net/ipv4/tcp_sack
1
浙公网安备 33010602011771号