Linux 下的 sysctl 指令可以用作检视及修改执行中的 Kernel 变量, 例如想其中一个变量的数值, 指令是这样:
# sysctl kernel.ostype
回传结果类似这样:
kernel.ostype = Linux
在 sysctl 后面加上 -a 参数, 会列出所有变量的数值:
# sysctl -a
由于变量很多, 配合 grep 可以更有效找到想要的变量, 例如以下会列出有 “tcp_timeout” 关键字的变量:
# sysctl -a | grep tcp_timeout
回传结果:
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 432000
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 432000
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
那么要修改这些 Kernel 的变量, 要在 sysctl 后面加上 -w 参数, 及修改的变量的数值, 例如要开启 IPv4 的 packet forwading, 便要将 net.ipv4.ip_forward 设定成 1, 指令如下:
# sysctl -w net.ipv4.ip_forward=1
用 sysctl 设定的每个变量, 在重新开机后便会失效, 而只要将变量设定写入 /etc/sysctl.conf 则可以设定在开机时自动加载 Kernel 变量, 以上面的例子, 开启 /etc/sysctl.conf:
# vi /etc/sysctl.conf
加入以下一行:
net.ipv4.ip_forward=1
但放在 /etc/sysctl.conf 的设定需要重新启动系统才会生效, 可以执行以下指令重新加载 /etc/sysctl.conf 的设定:
|
1 |
# sysctl -p |
或
|
1 |
# sysctl --system |
上面两个指令的分别是, “sysctl -p” 只会重新加载 /etc/sysctl.conf 的设定, 而 “sysctl –system” 则会重新加载以下所有档案:
/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf
No Responses