一、命令简介
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_mode59 directories, 901 files