內核體系設計分:單內核,微內核
windows是微內核設計,
Linux是單內核設計,但充分借鑒了為微內核體系的優點,為內核引入了模塊化機制,
內核的組成部分
-
kernel:內核核心,一般為bz壓縮的image檔案,通常位于/boot目錄,名稱為vmlinuz-VERSION-release
-
kernel object:內核物件,即為內核模塊,一般放置于/lib/modules/VERSION-release目錄下
kernel和kernel object的版本號一定要完全一樣,才能正常使用,
[ ]:不編譯,不使用
[M]:編譯成模塊,不編譯進內核
[*]:直接編譯進kernel
-
ramdisk:輔助性檔案,并非必須,這取決于內核是否能直接驅動rootfs所在的設備,
里面放的是:
- 目標設備驅動,例如SCSI設備的驅動;
- 邏輯設備驅動,例如LVM設備驅動
- 檔案系統,例如xfs檔案系統
它是一個簡裝版的根檔案系統
獲取內核版本資訊的命令:uname
-
內核檔案所在位置:/boot/vmlinuz-VERSION.release
-
獲取內核的release號:
# uname -r 2.6.32-754.el6.x86_64獲取主機名:
# uname -n c610 # hostname c610
獲取內核已經裝載了哪些模塊:lsmod
顯示的資訊來自/proc/modules檔案
Module:模塊名字
size:大小
used by:被哪個模塊使用了,及被參考的次數
# lsmod
Module Size Used by
xt_CHECKSUM 12549 1
ipt_MASQUERADE 12678 3
nf_nat_masquerade_ipv4 13412 1 ipt_MASQUERADE
tun 31740 1
獲取模塊的詳細資訊:modinfo NAME
即使模塊沒有被加載也可以獲得資訊,類似rpm -ql命令,
# modinfo xfs
filename: /lib/modules/3.10.0-957.el7.x86_64/kernel/fs/xfs/xfs.ko.xz
license: GPL
description: SGI XFS with ACLs, security attributes, no debug enabled
author: Silicon Graphics, Inc.
alias: fs-xfs
retpoline: Y
rhelversion: 7.6
srcversion: 799C7EBA4C499822FD1E465
depends: libcrc32c
intree: Y
vermagic: 3.10.0-957.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: B7:0D:CF:0D:F2:D9:B7:F2:91:59:24:82:49:FD:6F:E8:7B:78:14:27
sig_hashalgo: sha256
常用選項:
-
指定顯示的欄位:-F filed-name
# modinfo -F filename xfs /lib/modules/3.10.0-957.el7.x86_64/kernel/fs/xfs/xfs.ko.xz -
顯示模塊檔案的路徑:-n
# modinfo -n xfs /lib/modules/3.10.0-957.el7.x86_64/kernel/fs/xfs/xfs.ko.xz -
如果有多個內核,顯示指定內核的資訊:-k kernel
裝載/卸載模塊:modprobe
-
裝載模塊:
modprobe mode_name# modprobe btrfs -
卸載模塊:
modprobe -r mode_name# modprobe -r btrfs
裝載/卸載模塊的另一組命令:
-
裝載模塊:
insmod file_name裝載時使用模塊檔案路徑,
# insmod /lib/modules/3.10.0-957.el7.x86_64/kernel/fs/xfs/xfs.ko.xz # insmod `modinfo -n xfs`insmod和rpm類似,不能自動解決依賴關系,當你要裝載的模塊所依賴的模塊還沒有被裝載的化,裝載失敗,錯誤資訊:Unknown symbol in module, modeprobe可以自動解決依賴關系,
-
卸載模塊:
rmmod mode_name卸載時,指定模塊的名字,
# rmmod xfs
生成模塊依賴關系檔案:depmod
ramdisk檔案的管理
不小心把/boot目錄下的initramfs-3.10.0-957.el7.x86_64.img檔案洗掉了,下次系統就不能啟動了,所以需要手動制作ramdisk檔案,
創建ramdisk檔案的命令:
centos5,6,7:mkinitrd
# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
/boot/initramfs-$(uname -r).img:指定ramdisk的檔案名,
$(uname -r):指定kernel的release號
常用選項:
- 除了默認模塊之外,再安裝別的模塊到ramdisk里:--with=<module>
- 內核裝載ramdisk里的模塊前,預先裝載的模塊:--preload=<module>
centos6,7:dracut
kernel引數管理
修改kernel引數的作用:修改了kernel的引數,kernel的行為就發生變化了,
kernel的引數管理是用偽檔案系統管理的,因為一切皆檔案嘛,kernel引數也被抽象成了檔案,
一,目錄/proc就是偽檔案系統,kernel的引數在此存盤
- 所以查看kernel引數的值,就是用cat等命令查看/proc目錄下對應的檔案即可,
- 所以修改kernel引數的值,就是用echo重定向/proc目錄下對應的檔案即可,
- 當然也有專用的命令可以查看和修改kernel的引數,
查看當前運行的kernel的引數
查看內核的所有引數:sysctl -a
-
使用專用命令查看:
# sysctl abi.vsyscall32 abi.vsyscall32 = 1 -
使用檔案系統的命令查看:
# cat /proc/sys/abi/vsyscall32 1
可以看出來引數是用點分隔的,把點換成/就找到了存盤此引數的檔案的路徑,
例如,引數net.ipv4.ip_forward對應的檔案的路徑就是:/proc/sys/net/ipv4/ip_forward
引數abi.vsyscall32對應的檔案的路徑就是:/proc/sys/abi/vsyscall32
所以/proc/sys/目錄下存放的就是所有kernel引數了,
# ll /proc/sys
dr-xr-xr-x 0 root root 0 Feb 23 07:34 abi
dr-xr-xr-x 0 root root 0 Feb 23 07:31 crypto
dr-xr-xr-x 0 root root 0 Feb 23 07:34 debug
dr-xr-xr-x 0 root root 0 Feb 23 07:34 dev
dr-xr-xr-x 0 root root 0 Feb 23 07:31 fs
dr-xr-xr-x 0 root root 0 Feb 23 07:31 kernel
dr-xr-xr-x 0 root root 0 Feb 23 07:31 net
dr-xr-xr-x 0 root root 0 Feb 23 07:31 vm
修改當前運行的kernel的引數
-
使用專用命令修改:
# sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1 # sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1 -
使用檔案系統的命令修改:
# echo 0 > /proc/sys/net/ipv4/ip_forward # sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0 -
上面的修改,僅在當前有效,重啟失效,所以組態檔登場
-
通過修改組態檔,讓kernel引數永久有效,
-
centos6:修改/etc/sysctl.conf
修改完檔案后,不能立即生效,要想立即生效,可以使用:
sysctl -p [filename]選項-p后,不給檔案路徑的活,就是加載檔案/etc/sysctl.conf檔案,
修改/etc/sysctl.conf檔案: net.ipv4.ip_forward = 1 # cat /proc/sys/net/ipv4/ip_forward 0 [root@c610 ~]# sysctl -p net.ipv4.ip_forward = 1 [root@c610 ~]# cat /proc/sys/net/ipv4/ip_forward 1 -
centos7:修改/etc/sysctl.d/*.conf檔案
# emacs -nw /etc/sysctl.d/test1.conf net.ipv4.ip_forward = 0 # cat /proc/sys/net/ipv4/ip_forward 1 # sysctl -p /etc/sysctl.d/test1.conf net.ipv4.ip_forward = 0 # cat /proc/sys/net/ipv4/ip_forward 0
-
-
內核引數:net.ipv4.icmp_echo_ignore_all
- 0:別人發給我的ping請求,我回應,所以別人能ping通我
- 1:別人發給我的ping請求,我不回應,所以別人不能ping通我,但我還是可以ping別人,
二,目錄/sys也是偽檔案系統
-
輸入kernel識別出的各個硬體設備的屬性資訊,也有kernel控制硬體的引數,對此引數修改,即可定制硬體設備作業特性,
-
udev通過讀取/sys目錄下硬體設備資訊,為硬體創建驅動程式(設備檔案:/dev/xxx),udev是用戶空間程式,工具是
devadmin,hotplug(熱插拔)kernel不知道,開機后,用戶還添加哪些硬體,所以就無法按需創建硬體驅動,所以,kernel2.4以前的做法就是把能知道的所以硬體設備驅動檔案都放在/dev目錄下,這種做法,一是浪費空間,二是用戶不能通過/dev目錄下的檔案來判斷當前系統上有哪些硬體設備,/sys目錄的出現,就能讓設備按需出現在/dev目錄,
-
udev為設備創建驅動程式時,會讀取事先定義好的規則檔案
- centos7:一般在/etc/udev/rules.d/目錄,以及/usr/lib/udev/rules.d/目錄下,
- centos6:一般在/etc/udev/rules.d/目錄
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/138739.html
標籤:Linux
