一、命令简介

  sysctl用于在运行时修改内核参数,可用参数是/proc/sys/下列出的参数。Linux中的sysctl支持需要Procfs,可以使用sysctl读取和写入sysctl数据。我们也可以直接编辑/etc/sysctl.conf文件将内核参数写入配置文件中,需要使用sysctl -p命令重新加载配置文件使参数生效。常用此命令清理内存缓存、启停IP路由转发功能等。

二、使用示例

1、获取命令帮助

[root@s142 ~]# sysctl –help

2、查看命令版本

[root@s142 ~]# sysctl –version
sysctl from procps-ng 3.3.10

3、查看所有内核参数设置

[root@s142 ~]# sysctl -a
sysctl: reading key “net.ipv6.conf.all.stable_secret”
sysctl: reading key “net.ipv6.conf.default.stable_secret”
abi.vsyscall32 = 1
crypto.fips_enabled = 0
debug.exception-trace = 1
debug.kprobes-optimization = 1

vm.stat_interval = 1
vm.swappiness = 30
vm.user_reserve_kbytes = 118516
vm.vfs_cache_pressure = 100
vm.zone_reclaim_mode = 0

4、查看某变量的值

[root@s142 ~]# sysctl -n net.ipv4.ip_forward
1
[root@s142 ~]# sysctl -n vm.drop_caches
0

5、清理内存缓存

(base) [root@sun-site ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 118M 158M 148K 1.5G 1.5G
Swap: 2.0G 49M 1.9G
(base) [root@sun-site ~]# sysctl -w vm.drop_caches=3
vm.drop_caches = 3
(base) [root@sun-site ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 119M 1.6G 148K 107M 1.5G
Swap: 2.0G 49M 1.9G

6、重载内核参数配置文件

(base) [root@sun-site ipv4]# echo “net.ipv4.ip_default_ttl = 128” >> /etc/sysctl.conf
(base) [root@sun-site ipv4]# sysctl -p
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
kernel.sysrq = 1
net.ipv4.ip_forward = 1
fs.file-max = 65535
fs.file-max = 65535
net.ipv4.ip_default_ttl = 128

三、使用语法及参数说明

1、使用语法

用法:sysctl [options] [variable[=value] …]

2、参数说明

参数 参数说明
-a, –all 显示所有变量
-A 与-a参数一样
-X 与-a参数一样
-b, –binary 打印值(不起新行)
-e, –ignore 忽略未知变量错误
-N, –names 打印不带值的变量名称
-n, –values 仅打印变量的值
-p, –load[=] 从文件中读取值,默认从/etc/sysctl.conf中读取
-f 与-p参数一样
–system 从所有系统目录中读取值
-r, –pattern 选择与表达式匹配的设置
-q, –quiet 不回显变量集
-w, –write 启用将值写入变量,临时修改,重启失效
-d 与-h参数一样
-h, –help display 显示帮助
-V, –version output 显示版本信息

3、变量名称规则

  • 内核变量全部以文件形式存放在/proc/sys目录下
  • 变量名是通过目录+(.)+文件名拼接成立,目录可以有多层
  • 文件中存放的值即为变量的值

(base) [root@sun-site sys]# pwd
/proc/sys
(base) [root@sun-site sys]# tree
.
├── abi
│ └── vsyscall32
├── crypto
│ └── fips_enabled
├── debug
│ ├── exception-trace
│ ├── kprobes-optimization
│ └── panic_on_rcu_stall

├── user_reserve_kbytes
├── vfs_cache_pressure
└── zone_reclaim_mode

59 directories, 901 files

Linux命令之sysctl命令-编程之家