Linux如何在系統(tǒng)運(yùn)行過程中修改內(nèi)核參數(shù)
RedHat向管理員提供了非常好的方法,使我們可以在系統(tǒng)運(yùn)行時(shí)更改內(nèi)核參數(shù),而不需要重新引導(dǎo)系統(tǒng)。這是通過/proc虛擬文件系統(tǒng)實(shí)現(xiàn)的。/proc/sys目錄下存放著大多數(shù)的內(nèi)核參數(shù),并且設(shè)計(jì)成可以在系統(tǒng)運(yùn)行的同時(shí)進(jìn)行更改。下面我們以打開內(nèi)核的 ip轉(zhuǎn)發(fā)功能為例說明在系統(tǒng)運(yùn)行時(shí)修改內(nèi)核參數(shù)的兩種方法。IP轉(zhuǎn)發(fā)是指允許系統(tǒng)對來源和目的地都不是本機(jī)的數(shù)據(jù)包通過網(wǎng)絡(luò),RedHat默認(rèn)屏蔽此功能,在 需要用本機(jī)作為路由器、NAT等情況下需要開啟此功能。
方法一:修改/proc下內(nèi)核參數(shù)文件內(nèi)容
直接修改內(nèi)核參數(shù)ip_forward對應(yīng)在/proc下的文件/proc/sys/net/ipv4/ip_forward。用下面命令查看ip_forward文件內(nèi)容:
# cat /proc/sys/net/ipv4/ip_forward
該文件默認(rèn)值0是禁止ip轉(zhuǎn)發(fā),修改為1即開啟ip轉(zhuǎn)發(fā)功能。修改命令如下:
# echo 1 >/proc/sys/net/ipv4/ip_forward
修改過后就馬上生效,即內(nèi)核已經(jīng)打開ip轉(zhuǎn)發(fā)功能。但如果系統(tǒng)重啟后則又恢復(fù)為默認(rèn)值0,如果想永久打開需要通過修改/etc/sysctl.conf文件的內(nèi)容來實(shí)現(xiàn)。
方法二.修改/etc/sysctl.conf文件
默認(rèn)sysctl.conf文件中有一個(gè)變量是
net.ipv4.ip_forward = 0
將后面值改為1,然后保存文件。因?yàn)槊看蜗到y(tǒng)啟動(dòng)時(shí)初始化腳本/etc/rc.d/rc.sysinit會(huì)讀取/etc/sysctl.conf文件的內(nèi)容,所以修改后每次系統(tǒng)啟動(dòng)時(shí)都會(huì)開啟ip轉(zhuǎn)發(fā)功能。但只是修改sysctl文件不會(huì)馬上生效,如果想使修改馬上生效可以執(zhí)行下面的命令:
# sysctl –p
在修改其他內(nèi)核參數(shù)時(shí)可以向/etc/sysctl.conf文件中添加相應(yīng)變量即可,下面介紹/proc/sys下內(nèi)核文件與配置文件 sysctl.conf中變量的對應(yīng)關(guān)系,由于可以修改的內(nèi)核參數(shù)都在/proc/sys目錄下,所以sysctl.conf的變量名省略了目錄的前面部 分(/proc/sys)。
將/proc/sys中的文件轉(zhuǎn)換成sysctl中的變量依據(jù)下面兩個(gè)簡單的規(guī)則:
1.去掉前面部分/proc/sys
2.將文件名中的斜杠變?yōu)辄c(diǎn)
這兩條規(guī)則可以將/proc/sys中的任一文件名轉(zhuǎn)換成sysctl中的變量名。
例如:
/proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward
/proc/sys/kernel/hostname =》 kernel.hostname
可以使用下面命令查詢所有可修改的變量名
# sysctl –a
下面例舉幾個(gè)簡單的內(nèi)核參數(shù):
1./proc/sys/kernel/shmmax
該文件指定內(nèi)核所允許的最大共享內(nèi)存段的大小。
2./proc/sys/kernel/threads-max
該文件指定內(nèi)核所能使用的線程的最大數(shù)目。
3./proc/sys/kernel/hostname
該文件允許您配置網(wǎng)絡(luò)主機(jī)名。
4./proc/sys/kernel/domainname
該文件允許您配置網(wǎng)絡(luò)域名。