Linux常用命令-sysctl

命令

sysctl

描述

configure kernel parameters at runtime
在系统运行状态下更改内核参数

用法

1
2
sysctl [options] [variable[=value]] [...]
sysctl -p [file or regexp] [...]

选项

1
2
3
4
5
6
7
8
9
10
11
Options:
-a, --all 显示所有变量
-b, --binary 不换行显示变量值
-e, --ignore 忽略未知变量
-N, --names 显示变量名
-n, --values 显示变量值
-q, --quiet 静默模式,不显示值的设置
-w, --write 临时更改变量值
-p,-f,--load[=<file>] 从文件读取变量,留空则默认读取/etc/sysctl.conf
-r, --pattern <expression> 正则匹配(经测试无效)
--system 从系统目录中读取变量配置,包括/usr/lib/sysctl.d/*,/etc/sysctl.d/*,/etc/sysctl.conf

注意

如果主配置文件/etc/sysctl.conf中包括多个相同的变量设置,则后者会覆盖前者,以最后一次设置为准;
如果多个子配置文件/etc/sysctl.d/*中包括相同的变量设置,则以ls命令列出的顺序依次读取,以读取的最后一个文件中的设置为准;
如果主配置文件和子配置文件中包括同一变量设置,则以主配置文件为准.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 默认配置文件
$ ll /etc/sysctl.conf
-rw-r--r-- 1 root root 1808 Mar 16 16:42 /etc/sysctl.conf
$ ll /etc/sysctl.d/
lrwxrwxrwx. 1 root root 14 Jan 7 22:48 99-sysctl.conf -> ../sysctl.conf
# -a显示所有变量
$ sysctl -a |grep fs.file-max
fs.file-max = 655350
# 显示指定变量名和值
$ sysctl fs.file-max
fs.file-max = 655350
# -n显示变量值
$ sysctl -n fs.file-max
655350
# -r正则匹配,显示包括file的变量
$ sysctl -ar file
fs.file-max = 655350
fs.file-nr = 1120 0 655350
fs.xfs.filestream_centisecs = 3000
# -N显示变量名
$ sysctl -aNr file
fs.file-max
fs.file-nr
fs.xfs.filestream_centisecs
$ sysctl -ar forward$
net.ipv4.ip_forward = 1
# -r支持扩展正则
$ sysctl -ar 'net.ipv4.conf.(eth|wlan)0.arp'
net.ipv4.conf.eth0.arp_accept = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth0.arp_notify = 0
# -w临时更改变量值,注意设置的时候等号=两边没有空格
$ sysctl -w fs.file-max=65535
fs.file-max = 65535
# 永久更改变量值
$ vim /etc/sysctl.conf
fs.file-max = 65535
# 重新读取配置文件,应用变更,-q表示不显示任何内容
$ sysctl -p
$ sysctl -qp
# 配置文件读取顺序
$ sysctl --system | grep Applying
* Applying /usr/lib/sysctl.d/00-system.conf ...
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...