1.Linux的組成linux
kernel+rootfsshell
kernel:進程管理、內存管理、網絡管理、安全管理、文件系統管理、驅動程序c#
rootfs:程序和glibccentos
庫:函數集合,function,調用接口(頭文件負責描述)緩存
過程調用:procedure ,無返回值安全
結果調用:functionbash
程序:二進制文件網絡
2.內核設計流派ide
單內核(monolithic kernel):Linux模塊化
把全部功能集成於同一個程序
微內核(micro kernel):Windows, Solaris
每種功能使用一個單獨子系統實現
3.內核特色及組成
支持模塊化:.ko(內核對象)
支持內核模塊的裝載和卸載
4.內核的組成
核心部件: /boot/vmlinuz-VERSION-release
僞文件系統:ramdisk
centos5:/boot/initrd-VERSION-release.img
centos6,7:/boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release
5.centos6啓動流程
(1)主動讀取BIOS,經過CMOS加載硬件信息 ,並進行POST,指定第一個可啓動的設備
ROM:BIOS,Basic Input and Output System,保存着計算機系統最重要的基本輸入輸出程序,系統信息設置,開機加電自檢程序
RAM:保存各項參數的設定
(2)讀取第一個可啓動設備MBR的引導加載程序(grub)的啓動信息
<1>MBR: 446 boot loader 64:分區表 2 :55aa
BIOS經過硬件的INT13中斷功能來讀取MBR的
<2>Windows:ntloader 僅是啓動OS
Linux: 提供菜單; 轉交系統控制權; 直接指向內核文件
LILO:LInuxLOader
GRUB: GRandUnified Bootloader
primary boot loader:1st stage,1.5stage
secondary boot loader:2 stage,分區文件
bootloader的1stage是在MBR內進行的,1.5stage是再0面0磁道0扇區的後續扇區,2stage是在/boot分區上邊
1stage是 尋找/boot分區的文件系統驅動
1.5stage內就是/boot分區文件系統驅動,識別/boot分區
2stage是/boot分區相關操做
/boot/grub下的stage類文件(除了stage2)都是備份
<3>ramdisk:使用緩存或緩衝來加速對磁盤上文件的訪問
centos5:initrd 工具程序:mkinitrd
centos6:initramfs 工具程序:mkinitrd,dracut\
本身建立initramfs文件
mkinitrd [-v] [-with=模塊名稱] initrd文件名 內核版本
-v 顯示mkinitrd的過程
--with=[模塊名稱]:模塊名稱指的是模塊的名字,不需填寫文件名
若是在救援模式下,須要切根,由於救援模式下好多庫文件不存在
<4>解壓縮內核到內存中,
加載可識別的全部硬件設備(以本身的功能從新檢查一次硬件,不必定適用BIOS的檢測結果)
加載硬件驅動
以只讀方式掛載根系統
運行用戶空間的第一個程序:/sbin/init
<5>內核內容
(3)內核執行init程序,獲取默認運行信息
<1>init程序類型:
SysV: init, CentOS 5以前
配置文件:/etc/inittab
Upstart: init,CentOS6
配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system
/etc/systemd/system
<2>運行級別
0 halt(系統直接關機)
1 單用戶模式下,用在系統出問題時的維護
2 相似下面的runlevel 3,但無NFS服務
3 純文本模式
4 系統保留功能
5 字符界面
6 從新啓動
切換等級:init #
查看等級: runlevel who -r
<3>/etc/inittab文件相關知識
每一行定義一種action以及與之對應的process
id : runlevel : action : process
id:表明init的主要工做選項,只是簡單表明說明
runlevel:在那些等級下運行
action: initdefault:表明默認的runlevel設置值
sysinit:表明系統初始化的操做選項
ctrlaltdel:表明ctrl+alt+del三個按鍵是否能夠從新啓動
wait:表明後面設置的命令項目必需要執行完畢才能繼續下面的其餘操做
respawn:表明後邊字段的命令能夠無限制的從新啓動
process:能夠進行的命令
例如:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc0
l1:1:wait:/etc/rc.d/rc1
1:2345:respawn:/sbin/mingetty tty
x:5:resawn:/etc/prefdm -nodaemon x window 則是這行決定的
<4>/etc/init/*.conf
(4)init程序執行/etc/rc.d/rc.sysinit文件
取得網絡環境與主機類型:/etc/sysconfig/network
設置顯示與啓動過程當中的歡迎界面(textbanner)
檢查根文件系統,並以讀寫方式從新掛載根文件系統
掛載/etc/fstab文件中定義的文件系統
設置系統時間:讀入/etc/sysconfig/clock設置值 修改時區的話,把/user/share/zoneinfo/Asia /Shanghai複製到/etc/local下
激活udev和selinux
激活swap設備
初始化軟件磁盤陣列、初始化lvm文件系統、、磁盤配額
加載內核相關設置:/etc/sysctl.conf
用戶自定義模塊加載:/etc/sysconfig/modules.conf設置
清除啓動過程當中產生的臨時文件
將啓動相關信息加載到/var/log/dmesg中
(5)啓動核心的外掛模塊/etc/modeprobe.conf文件
(6)init執行各個批處理文件
<1>各個運行級別腳本所在目錄:
/etc/rc.d/rc 0.d
/etc/rc.d/rc 1.d
/etc/rc.d/rc 2.d
/etc/rc.d/rc 3.d
/etc/rc.d/rc 4.d
/etc/rc.d/rc 5.d
/etc/rc.d/rc 6.d
<2>腳本文件運行規則:
進入到某個運行級別的腳本目錄/etc/rc.d/rc?.d
k*: k##*: ##運行次序;數字越小,越先運行;數字越小的服務,一般爲依賴到別的服務
s*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,一般爲被依賴到的服務
s開頭的文件,運行
k開頭的文件,關閉
<3>chkconfig命令詳解
查看服務所在級別的啓動或關閉情形
chkconfig [--list] name
添加服務給chkconfig管理
SysV的的服務腳本放置於/etc/init.d
chkconfig --add name
服務腳本格式信息
#!/bin/bash
#LLLL 表示初始在哪一個級別下運行 「-」表示都不啓動
# LLLL mm nn mm表示啓動次序 nn表示古幣次序
刪除
chkconfig --del name
修改制定的連接類型
chkconfig [--level levels] name <off|on|reset>
--level LLLL:省略是表示2345
圖形化界面ntsysv
(7)init執行/etc/rc.d/rc.local
正常狀況下,最後啓動一個服務S99local沒有連接至/etc/init.d下的腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫爲服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中
(8)執行/bin/login程序,等待用戶登陸
1:2345:respawn:/usr/sbin/mingettytty1
2:2345:respawn:/usr/sbin/mingettytty2
...
6:2345:respawn:/usr/sbin/mingettytty6
mingetty會自動調用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon
(9)登陸後以shell控制主機
BIOS加載硬件信息--》post加電自檢--》加載MBR裏grub信息--》stage1.5--》stage2--》initramfs--》 rootfs-->init-->/etc/inittab-->設置默認運行級別-->初始化/etc/rc.d/rc.sysinit-->/etc/rc.d/rc#.d-->/etc/rc.local
7.使用gzip -d 解壓縮gz格式文件,此文件必須是.gz後綴,要不沒法解壓縮
8.破解centos5的root口令
(1)進入centos5 的grub界面,按a修改內核選項
(2)在命令行尾部追加1 或 S 或single,而後按enter鍵保存修改
(3)進入以下命令行模式,用passwd root 修改密碼
(4)從新啓動,用剛纔修改的密碼登陸系統
9.編寫centos5服務腳本
(1)在/root/bin寫編寫腳本testsrv,內容以下
(2)在/root/bin和/etc/init.d目錄下分別執行chkconfig --add testsrv發現沒法成功加載testsrv服務
把腳本複製到/etc/init.d下,執行上述命令,發現能夠實現
(3)
在/etc/rc.d/rc3.d下查看testsrv文件時什麼字母開頭的
發現此命令在level 3啓動等級下,是須要開啓的服務,與設定一致