8-3 變更核心參數
內容:
當系統啟動時,系統會依照所選定的 Runlevel,執行某些 RC Script,此時會建立一些相關聯的系統參數並儲存於 /proc 目錄下,而且將屬性相同的參數以同一檔案方式儲存。
8-3-1 系統參數 - /proc/sys/
系統參數大多記錄於 /proc/sys/ 目錄底下,在 /proc/ 目錄下也僅有此目錄下的資料可以修改,其他目錄或檔案大多僅供系統操作,並不允許管理者去變更它。一般 /proc/sys 目錄有下列次目錄:
#
ls /proc/sys
abi crypto debug dev fs kernel net sunrpc vm |
每一目錄儲存屬性相同的參數,各目錄屬性如下:
-
debug :儲存系統除錯(Debug)的相關訊息。
-
dev :儲存設備檔案(Device file)運作中的相關訊息。
-
fs :儲存檔案系統(File system)運作中的相關訊息。
-
kernel :儲存核心(Kernel)運作中的相關訊息。
-
net :儲存網路(Network)運作中的相關訊息。
-
proc :儲存行程(Process)運作中的相關訊息。
-
sunrpc :儲存 Sun RPC 子系統運作中的相關訊息。
-
vm :儲存虛擬記憶體(Virtual memory)子系統運作中的相關訊息。
上述目錄或子目錄下的檔案,並不一定會儲存資料,某些目錄或檔案是空閒著,有可能是該子系統還未被啟動,運行中的子系統並沒有可供修改的參數(如 proc)。
8-3-2 核心參數 - /proc/sys/kernel/
我們的重點是如何更新核心參數,其儲存於 /proc/sys/kernel/ 目錄下,範例如下:(本書範例)
# ls /proc/sys/kernel
acct panic_on_warn
acpi_video_flags perf_cpu_time_max_percent
auto_msgmni perf_event_max_sample_rate
bootloader_type perf_event_mlock_kb
bootloader_version perf_event_paranoid
cad_pid pid_max
…. |
上述中每一檔案儲存一個參數的內容,以本書範例所設定的『網域名稱』(Domain name)為例,該參數(domainname)的內容如下:
# cat /proc/sys/kernel/domainname
(none) |
如欲變更某一參數內容,只要直接修改其內容即可,大多利用 echo 命令就可達成,操作範例如下:
# echo "tsnien.idv.tw" > /proc/sys/kernel/domainname
# cat /proc/sys/kernel/domainname
tsnien.idv.tw
# |
利用命令直接更新參數的內容,如果重新開機之後,所變更的內容會回復成原來的值,所以還是必須將所欲變更的內容填入 /etc/rc.d/rc.local 檔案內,每次開機才會被執行到)。範例如下:
# cat /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
…
# that this script will be executed during boot.
touch /var/lock/subsys/local
echo "tsnien.idv.tw" > /proc/sys/kernel/domainname |
8-3-3 參數操作命令 - sysctl
除了直接修改參數檔案內容之外,我們也可利用 sysctl 命令(/sbin/sysctl)修改參數內容,變更 hostname 參數的操作範例如下:
# sysctl -w kernel.hostname=csu_linux 【變更參數內容,等號前後不可以空格】
kernel.hostname = csu_linux
# sysctl kernel.hostname 【顯示參數內容】
kernel.hostname = csu_linux
# cat /proc/sys/kernel/hostname 【顯示參數內容】
csu_linux |
8-3-4 核心組態檔案 - /etc/sysctl.d/
系統啟動時,會依據 /usr/lib/sysctl.d/、/run/sysctl.d/ 與 /etc/sysctl.d 等目錄下設定檔設定系統參數。/usr/lid/sysctl.d/ 是軟體開發者設定的參數,可能會被 /etc/sysctl.d/ 規劃檔重新設定,另外 /run/sysctl.d/ 是系統執行當然也可以將 sysctl 命令寫入 /etc/rc.d/rc.local 檔案內,每次重新啟動時會再執行當中,所設定的系統參數,優先權最高。一般系統管理者可以在 /etc/sysctl.d/ 下變更參數內容。
# ls /etc/sysctl.d
99-sysctl.conf
# cat /etc/sysctl.d/99-sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5). |
每一行表示一筆參數的設定,在每行的最前面是井號(#)表示該行為註解使用。又設定變數等號(=)的前後允許空格。
|