在這個 第 13 部分 的 LFCS(Linux 基金會認證系統管理員)系列 中,我們解釋了如何使用 GRUB 通過向內核傳遞選項來修改系統的行為,以便進行正在進行的啟動過程。
同樣地,您可以在運行中的 Linux 系統中使用命令行來修改某些運行時內核參數,作為一次性修改,或通過編輯配置文件來永久修改。
因此,當系統預期的操作方式需要進行必要的更改時,您可以輕鬆地在需要時即時啟用或禁用內核參數。
介紹 /proc 檔案系統
最新的「檔案系統層次標準」規範指出,/proc 代表處理進程和系統信息以及其他內核和記憶體信息的默認方法。特別地,/proc/sys 是您可以找到有關設備、驅動程序和一些內核特性的所有信息的地方。
/proc/sys 的實際內部結構取決於正在使用的內核,但您可能會在其中找到以下目錄。依次,每個目錄都會包含其他子目錄,其中包含每個參數類別的值。
dev
:連接到機器的特定設備的參數。fs
:文件系統配置(例如額度和inode)。- kernel:特定於內核的配置。
net
:網絡配置。vm
:使用內核的虛擬內存。
要修改內核運行時參數,我們將使用sysctl
命令。可以通過以下方式查看可以修改的參數的確切數量:
# sysctl -a | wc -l
如果要查看完整的內核參數列表,只需執行:
# sysctl -a
由於上述命令的輸出將包含大量行,我們可以使用管道後跟less來仔細檢查它:
# sysctl -a | less
讓我們看一下前幾行。請注意,每行中的第一個字符與/proc/sys
內部目錄的名稱匹配:

例如,突出顯示的行:
dev.cdrom.info = drive name: sr0
表示sr0
是光驅的別名。換句話說,這就是內核“看到”該驅動器並使用該名稱來引用它的方式。
在接下來的部分中,我們將解釋如何在Linux中更改其他“更重要”的內核運行時參數。
如何更改或修改Linux內核運行時參數
根據我們迄今所解釋的,很容易看出參數的名稱與/proc/sys
內部目錄結構匹配。
例如:
dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward
檢查Linux內核參數
我們可以使用sysctl
後跟參數名稱或讀取相關檔案來查看特定Linux核心參數的值:
# sysctl dev.cdrom.autoclose # cat /proc/sys/dev/cdrom/autoclose # sysctl net.ipv4.ip_forward # cat /proc/sys/net/ipv4/ip_forward

設置或修改Linux核心參數
要為核心參數設置值,我們也可以使用sysctl
,但使用-w
選項,後跟參數名稱、等號和所需值。
另一種方法是使用echo
來覆蓋與參數相關的檔案。換句話說,以下方法等同於在我們的系統中禁用封包轉發功能(預設值應該是當一個盒子不應該在網路之間傳遞流量時):
# echo 0 > /proc/sys/net/ipv4/ip_forward # sysctl -w net.ipv4.ip_forward=0
重要的是要注意,使用sysctl
設置的核心參數僅在當前會話期間生效,並在系統重新啟動時消失。
要永久設置這些值,請編輯/etc/sysctl.conf
並設置所需的值。例如,要在/etc/sysctl.conf中禁用封包轉發,請確保此行出現在檔案中:
net.ipv4.ip_forward=0
然後運行以下命令以應用更改到運行配置。
# sysctl -p
其他重要的核心運行時參數示例包括:
fs.file-max
指定核心可以為系統分配的檔案處理數量的最大值。根據系統的預期用途(例如網頁/資料庫/檔案伺服器等),您可能需要更改此值以滿足系統的需求。
否则,您最多會收到「開啟文件过多」的錯誤訊息,最糟的情況是可能會阻止操作系統启动。
如果您因為無心的錯誤而發現自己處在這種情況,請以單一用戶模式启动(如在第13部分 – 配置和解決Linux Grub引导加载程序中說明的那樣),並按照早先的指示編輯/etc/sysctl.conf。為了為每個用戶設定相同的限制,請參考本系列的第14部分 – 監控和設定Linux进程限制使用。
kernel.sysrq
用來啟用键盘上的SysRq按键(也稱為打印屏幕按键),以便在系統變得無响应時允許某些按鍵組合調用緊急操作。
(16)這個默認值表示系統將尊重Alt+SysRq+key
按键組合並執行列在sysrq.c文檔中的操作,該文檔可在kernel.org找到(其中key是b-z範圍內的一個字母)。例如,Alt+SysRq+b
將強制重置系統(如果您的伺服器無响应,將此作為最後手段使用)。
警告!請勿在虛擬機上嘗試按下此按鍵組合,因為這可能會強制重新啟動您的主機系統!
當設置為1時,net.ipv4.icmp_echo_ignore_all將忽略ping請求並在內核層級丟棄它們。如下圖所示-設置此內核參數後,請注意ping請求的丟失:

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d
, grouping them by categories.
例如,我們可以在/etc/sysctl.conf中創建一個名為net.conf
的新文件,而不是設置net.ipv4.ip_forward=0和net.ipv4.icmp_echo_ignore_all=1:
# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf # echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf
如果您選擇使用此方法,請不要忘記從/etc/sysctl.conf
中刪除相同的行。
總結
在本文中,我們解釋了如何使用sysctl、/etc/sysctl.conf和/etc/sysctl.d的文件修改內核運行時參數,包括持久和非持久的參數。
在sysctl文檔中,您可以找到更多有關更多變量含義的信息。這些文件代表可以通過sysctl設置的參數的最完整文檔來源。
您覺得這篇文章有用嗎?我們真誠希望如此。如果您有任何問題或改進建議,請隨時告訴我們。
Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/