1. 程式人生 > >Linux核心管理

Linux核心管理

1、核心基本原理

(1)Linux系統的組成部分是核心+根檔案系統。核心負責程序管理、記憶體管理、網路協議棧、檔案系統、驅動程式和安全功能。
執行中的系統環境可分為兩層:核心空間(系統空間、系統模式)、使用者空間(使用者模式)。使用者空間執行的是應用程式(程序或執行緒),核心空間執行的是核心程式碼(系統呼叫)。
(2)核心設計流派
1)單核心設計:把所有功能集成於同一個程式,如Linux系統,但充分借鑑了微核心體系的設計的優點,為核心引入了模組化機制。
2)微核心設計:每種功能使用一個單獨的子系統實現,如Windows系統Solaris系統。
(3)Linux核心特點
1)支援模組化: .ko (kernel object)
2)支援模組執行時動態裝載或解除安裝。
Linux的物件類檔案有兩種:.ko(kernel object,核心物件)

和.so(shared object,共享物件,供各種應用程式之間共享的功能模組)。
(4)核心的組成部分
1)核心檔案:核心核心,一般為bzImage,通常位於/boot目錄,名稱為/boot/vmlinuz-VERSION-release,其中VERSION是核心版本號,release是本地版本號,製作和編譯核心的人加上的版本號。
編譯核心時,[ ]:N,表示不要此核心模組,[M]:Module,表示編譯成模組,[*]:Y,表示編譯進核心核心,核心支援模組的動態裝載和解除安裝。
2)ramdisk:把記憶體中某一塊空間作為磁碟用,用於實現系統初始化的、基於記憶體的磁碟裝置。輔助性檔案,並非必須,這取決於核心是否能直接驅動rootfs所在的裝置:a) 目標裝置驅動,例如SCSI裝置的驅動;b) 邏輯裝置驅動,例如LVM裝置的驅動;c) 檔案系統,例如xfs檔案系統。ramdisk是一個簡裝版的根檔案系統。CentOS 5,6,7中的ramdisk:
CentOS 5:/boot/initrd-VERSION-release.img
CentOS 6,7:/boot/initramfs-VERSION-release.img
(由initrd替換成initramfs的原因是避免雙緩衝和雙快取,從而達到提速啟動的目的)
3)模組檔案:/lib/modules/VERSION-release 如果安裝了多個核心版本,在/lib/modules目錄下將有多個核心檔案目錄。
4)kernel object:核心物件,即核心模組,一般放置於/lib/modules/VERSION-release/。核心模組與核心核心版本一定要嚴格匹配。

2、核心相關命令

(1)核心資訊獲取
uname命令
該命令用來列印系統資訊。
uname [OPTION]...
-r:核心的release號
-n:主機名
-v:編譯版本
-a:所有資訊
此命令檢視的是檔案:/boot/vmlinuz-VERSION-release中的系統資訊。
(2)模組資訊獲取和管理
1)lsmod命令
該命令用於顯示Linux核心模組的狀態資訊。顯示的內容來自於/proc/modules,包括3個欄位:模組名稱、模組大小、被引用次數。
2)modinfo命令
該命令用於顯示Linux核心模組的資訊。
modinfo [-F field] [-k kernel] [modulename|filename...]


-F field: 僅顯示指定欄位的資訊;
-n:顯示檔案路徑;
3)modprobe命令
該命令用於從Linux核心中新增或移除模組。
modprobe [-r] module_name
模組的動態裝載:modprobe module_name。
動態解除安裝:modprobe -r module_name。
通過配置檔案來裝載和解除安裝:/etc/modprobe.conf和/etc/modprobe.d/*.conf。
4)depmod命令
該命令用於生成模組.dep和對映檔案,是一種核心模組依賴關係檔案的生成工具。
模組的裝載和解除安裝的另一組命令:
5)insmod命令
insmod [filename] [module options...]
filename:模組檔案的檔案路徑。
6)rmmod命令
rmmod [module_name]

3、ramdisk檔案的管理

(1)mkinitrd命令
該命令用於CentOS5,CentOS6和CentOS7也都有連結。為當前使用中的核心重新制作ramdisk檔案:
# mkinitrd [OPTION...] [<initrd-image>] <kernel-version>
–with=:除了預設的模組之外需要裝載至initramfs中的模組;
–preload=:initramfs所提供的模組需要預先裝載的模組;
示例:~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2)dracut命令
該命令用於CentOS6和CentOS7,生成initramfs映象的更為底層的工具。
# dracut [OPTION...] [<image> [<kernel version>]]
示例:~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)

4、核心資訊輸出的偽檔案系統

(1)偽檔案系統目錄
/proc:該目錄下的檔案為核心狀態和統計資訊的輸出介面,同時,還提供一個配置介面:/proc/sys;
只讀引數:資訊輸出;例如/proc/#/*
可寫引數:可接受使用者指定一個“新值”來實現對核心某功能或特性的配置,可寫引數位於/proc/sys/目錄下。
/proc/sys目錄下的net/ipv4/ip_forward相當於net.ipv4.ip_forward。
(2)sysctl命令
該命令專用於檢視或設定/proc/sys目錄下引數的值。
sysctl [options] [variable[=value]]
檢視:
# sysctl -a
# sysctl variable
修改其值:
# sysctl -w variable=value
(3)檔案系統命令(cat, echo)
檢視:
# cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
設定:
# echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE
注意:上述兩種方式的設定僅當前執行核心有效;
(4)修改配置檔案:/etc/sysctl.conf, /etc/sysctl.d/*.conf
立即生效的方式:sysctl -p [/PATH/TO/CONFIG_FILE]
該命令重讀配置檔案,並根據配置檔案修改核心引數。
(5)核心引數:(/proc/sys目錄下)
net.ipv4.ip_forward:核心轉發;
vm.drop_caches:手動回收記憶體,清理一部分buffer/cache;
kernel.hostname:主機名;
net.ipv4.icmp_echo_ignore_all:忽略所有ping操作,禁止別人ping自己,自己也可以ping別人。
(6)/sys目錄:
sysfs:輸出核心識別出的各硬體裝置的相關屬性資訊,也有核心對硬體特性的各設定引數, 對此些引數的修改,即可定製硬體裝置工作特性。
(7)udev:通過讀取/sys目錄下的硬體裝置資訊按需為各硬體裝置建立裝置檔案。udev是使用者空間程式,專用工具:devadmin, hotplug。
udev為裝置建立裝置檔案時,會讀取其事先定義好的規則檔案,一般在/etc/udev/rules.d/目錄下,以及/usr/lib/udev/rules.d/目錄下。