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
posted @ 2024-01-15 14:48  寻梦99  阅读(62)  评论(0)    收藏  举报