# sysctl-查询修改Linux内核参数
Date: 2019-08-06


         sysctl命令可以_**实时**_（runtime）查看和修改linux 内核参数。这个命令可以在大多数发行版本找到， 另外内核参数，也可以通过procfs 文件系统，在 /proc/sys/kernel下 进行查看和修改。

#### **查看指定参数**

```
# sysctl kernel.sched_child_runs_firstkernel.sched_child_runs_first = 0
```

#### **查看所有参数**

```
# sysctl -a |moresysctl: reading key "net.ipv6.conf.all.stable_secret"sysctl: reading key "net.ipv6.conf.default.stable_secret"abi.vsyscall32 = 1crypto.fips_enabled = 0debug.exception-trace = 1debug.kprobes-optimization = 1
```

#### **修改指定参数**

```
# sysctl -w kernel.sched_child_runs_first=1 kernel.sched_child_runs_first = 1
```

注意等号前后不能有空格

#### **修改含多个值的参数**

```
# sysctl -w net.ipv4.ip_local_port_range="1025 60999"net.ipv4.ip_local_port_range = 1025 60999
```

#### **通过修改procfs 文件系统实现**

#### **修改指定参数**

```
# echo 1 > /proc/sys/kernel/sched_child_runs_first# sysctl kernel.sched_child_runs_firstkernel.sched_child_runs_first = 1
```

#### **修改含多个值的参数**

```
# echo "32768    60999" > /proc/sys/net/ipv4/ip_local_port_range# sysctl net.ipv4.ip_local_port_rangenet.ipv4.ip_local_port_range = 32768    60999
```

#### **持久化设置**

以上修改是临时性的，机器重启后失效，如果要持久化保存，可修改/etc/sysctl.conf 

```
# cat /etc/sysctl.confkernel.sched_child_runs_first=1
```

修改完毕后，使用以下命令使得参数立即生效

```
# sysctl -pkernel.sched_child_runs_first = 1
```

机器重启后该设置仍然有效。

#### **Cenos/RHEL7 下的设置**

Cenos/RHEL7版本与之前版本略有不通， 需要在/etc/sysctl.d目录下创建一个文件， 由于验证使用的虚拟机使用Cenos7可以看到，上面修改的/etc/sysctl.conf文件， 在 /etc/sysctl.d下有个叫99-sysctl.conf 的文件链接指向了他。

```
lrwxrwxrwx. 1 root root 14 Dec 16 2018 99-sysctl.conf -> ../sysctl.conf
```

下面是/etc/sysctl.conf中的说明

```
# cat /etc/sysctl.conf# sysctl settings are defined through files in# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.## Vendors settings live in /usr/lib/sysctl.d/.# To override a whole file, create a new file with the same in# /etc/sysctl.d/ and put new settings there. To override# only specific settings, add a file with a lexically later# name in /etc/sysctl.d/ and put new settings there.## For more information, see sysctl.conf(5) and sysctl.d(5).
```

       参考以上说明，可以在/etc/sysctl.d下自定义一个文件， 由于文件是按照顺序执行的， 文件名前面增加个序号， 比如/etc/sysctl.d/01-custom.conf:（验证前可以先手工清除之前/etc/sysctl.conf中的配置）

```
#cat /etc/sysctl.d/01-custom.confkernel.sched_child_runs_first=1
```

重启后生效，如果要立即生效可以执行以下命令

```
# sysctl -p /etc/sysctl.d/01-custom.confkernel.sched_child_runs_first = 1
```

#### **参考：**

[sysctl(8) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man8/sysctl.8.html)

[How to query and modify kernel parameters using sysctl (Immediately and persistently) in CentOS / RHEL](https://www.thegeekdiary.com/how-to-query-and-modify-kernel-parameters-using-sysctl-immediately-and-persistently-in-centos-rhel/)

