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