- CentOS 5和6的啟動(dòng)流程 ?
- 服務(wù)管理 ?
- Grub管理
一.Linux組成
(1)Linux: kernel+rootfs——內(nèi)核及其他應(yīng)用程序組成
ldd /bin/ls——查看執(zhí)行的命令是否調(diào)用了靜態(tài)庫(kù)或是動(dòng)態(tài)庫(kù)
kernel: 進(jìn)程管理、內(nèi)存管理、網(wǎng)絡(luò)管理、驅(qū)動(dòng)程序、文件系統(tǒng)、安
全功能
rootfs:程序和glibc 庫(kù):函數(shù)集合, function, 調(diào)用接口(頭文件負(fù)責(zé)描述) 過(guò)程調(diào)用:procedure,無(wú)返回值 函數(shù)調(diào)用:function 程序:二進(jìn)制執(zhí)行文件 ?
(2)內(nèi)核設(shè)計(jì)流派:
單內(nèi)核(monolithic kernel):Linux 把所有功能集成于同一個(gè)程序
image.png
ls /bootimage.png
微內(nèi)核(micro kernel):Windows, Solaris 每種功能使用一個(gè)單獨(dú)子系統(tǒng)實(shí)
(3)內(nèi)核
- Linux內(nèi)核特點(diǎn): 支持模塊化:.ko(內(nèi)核對(duì)象)——驅(qū)動(dòng)模塊
如:文件系統(tǒng),硬件驅(qū)動(dòng),網(wǎng)絡(luò)協(xié)議等 支持內(nèi)核模塊的動(dòng)態(tài)裝載和卸載 ?
組成部分: 核心文件:/boot/vmlinuz-VERSION-release- ramdisk:輔助的偽根系統(tǒng) ——存放在該initramfs-2.6.32-696.el6.x86_64.img系統(tǒng)文件中
作用:解決開(kāi)機(jī)啟動(dòng)的中間順序問(wèn)題。
在開(kāi)機(jī)啟動(dòng)時(shí),首先要進(jìn)入/boot中,來(lái)啟動(dòng)vmlinuz-VERSION-release,
但是由于/boot的文件系統(tǒng)類型是ext4,它的驅(qū)動(dòng)模塊存放在/lib/modules/2.6.32-696.el6.x86_64/kernel/fs/ext4/ext4.ko,而如果想要調(diào)用該庫(kù)文件就必須要進(jìn)入內(nèi)核進(jìn)行加載,所以進(jìn)入了一個(gè)死循環(huán)階段。
因此加入ramdisk來(lái)解決該問(wèn)題,在initramfs-2.6.32-696.el6.x86_64.img文件中,存有ext4.ko驅(qū)動(dòng),這樣就可驅(qū)動(dòng)/boot/,來(lái)加載內(nèi)核,從而進(jìn)入根目錄,執(zhí)行接下來(lái)的動(dòng)作- CentOS 5: /boot/initrd-VERSION-release.img
- CentOS 6,7: /boot/initramfs-VERSION-release.img ——"initramfs-2.6.32-696.el6.x86_64.im"
模塊文件:/lib/modules/VERSION-release
locate ext4.ko
image.png
實(shí)現(xiàn)功能模塊化,將硬件的相關(guān)功能功存放在模塊中,而不是內(nèi)核中
二.CentOS6啟動(dòng)流程
image.png
- 啟動(dòng)順序
1.加載BIOS的硬件信息,獲取第一個(gè)啟動(dòng)設(shè)備
2.讀取第一個(gè)啟動(dòng)設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動(dòng)信息
3.加載核心操作系統(tǒng)的核心信息,核心開(kāi)始解壓縮,并嘗試驅(qū) 動(dòng)所有的硬件設(shè)備
4.核心執(zhí)行init程序,并獲取默認(rèn)的運(yùn)行信息
5.init程序執(zhí)行/etc/rc.d/rc.sysinit文件
6.啟動(dòng)核心的外掛模塊
7.init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
8.init執(zhí)行/etc/rc.d/rc.local
9.執(zhí)行/bin/login程序,等待用戶登錄 1
0.登錄之后開(kāi)始以Shell控制主機(jī)
(1) POST
- Power-On-Self-Test,加電自檢,是BIOS功能的一個(gè)主要部分。
負(fù)責(zé)完成對(duì)CPU、主板、內(nèi)存、硬盤子系統(tǒng)、顯示子系統(tǒng)、串并行接 口、鍵盤、CD-ROM光驅(qū)等硬件情況的檢測(cè)。
按順序檢查由哪個(gè)硬件來(lái)驅(qū)動(dòng)引導(dǎo)計(jì)算機(jī)的開(kāi)啟:硬盤、u盤、光盤、網(wǎng)卡都可以來(lái)引導(dǎo)計(jì)算機(jī)的開(kāi)啟,一般情況下用硬盤來(lái)引導(dǎo)- ROM:BIOS,Basic Input and Output System,保存著有關(guān)計(jì) 算機(jī)系統(tǒng)最重要的基本輸入輸出程序,系統(tǒng)信息設(shè)置、開(kāi)機(jī)加電自檢程序和 系統(tǒng)啟動(dòng)自舉程序等。
- RAM:CMOS互補(bǔ)金屬氧化物半導(dǎo)體,保存各項(xiàng)參數(shù)的設(shè)定 按次序查找引導(dǎo)設(shè)備,第一個(gè)有引導(dǎo)程序的設(shè)備為本次啟動(dòng)設(shè)備 ?
bootloader: 引導(dǎo)加載器,引導(dǎo)程序
centos6——
windows: ntloader,僅是啟動(dòng)OS
Linux:功能豐富,提供菜單,允許用戶選擇要啟動(dòng)系統(tǒng)或不同的內(nèi) 核版本;把用戶選定的內(nèi)核裝載到內(nèi)存中的特定空間中,解壓、展開(kāi),并把 系統(tǒng)控制權(quán)移交給內(nèi)核 LILO:LInux LOader GRUB: GRand Unified Bootloader GRUB 0.X:
GRUB Legacy, GRUB2
image.png
centos7——image.png
(2)?MBR
第一階段
這一部分的grub驅(qū)動(dòng)無(wú)法驅(qū)動(dòng)/boot,因?yàn)樗奈募愋褪莈xt4,其驅(qū)動(dòng)模塊 etx4.ko的大小為633k
一部分grub文件存放在MBR的前446字節(jié)中,用來(lái)驅(qū)動(dòng)——bootloader
,image.png
所以無(wú)法驅(qū)動(dòng)。- 第1.5階段
在MBR中的512字節(jié)后續(xù)空間中,存在一個(gè)1.5階段,來(lái)解決ext4.ko的驅(qū)動(dòng)問(wèn)題,也就說(shuō),先通過(guò)grub來(lái)解決掛載/boot的問(wèn)題,然后進(jìn)入下一階段來(lái)解決掛載根的問(wèn)題第2階段
在第1.5階段加載內(nèi)核后,進(jìn)入該階段來(lái)掛載根,cat grub.conf
image.png
根的啟動(dòng)文件系統(tǒng)程序存在于initramfs-2.6.32-696.el6.x86_64.img這個(gè)文件中,而該文件系統(tǒng)又存在于/boot 中,也就是說(shuō)先啟動(dòng)/boot,才能啟動(dòng)根。
(3)ramdisk: ?
- 內(nèi)核中的特性之一:使用緩沖和緩存來(lái)加速對(duì)磁盤上的文件 訪問(wèn),并加載相應(yīng)的硬件驅(qū)動(dòng)
ramdisk --> ramfs 提高速度 ——該方式直接訪問(wèn)文件體系統(tǒng)上的數(shù)據(jù),而不需要先進(jìn)入磁盤中,再訪問(wèn)文件系統(tǒng)
CentOS 5: initrd ——模擬磁盤
工具程序:mkinitrd
CentOS 6,7: initramfs ——模擬文件系統(tǒng)
工具程序:mkinitrd, dracut——用來(lái)修復(fù)initramfs文件
rm -f initramfs-2.6.32-696.el6.x86_64.img ——?jiǎng)h除該文件
或者刪除直接重啟,進(jìn)入就救援模式來(lái)修復(fù)
mkinitrd initramfs-2.6.32-696.el6.x86_64.img——修復(fù)該文件
系統(tǒng)初始化: POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) -> init(systemd)
二.系統(tǒng)啟動(dòng)流程
(一)init程序的類型: ?
- SysV: init, CentOS 5之前
配置文件:/etc/inittab ?
*Upstart: init,CentOS 6image.png
配置文件:/etc/inittab, /etc/init/.conf ?image.png
默認(rèn)模式可以更改,將5改變成其他數(shù)字,那么開(kāi)機(jī)就會(huì)進(jìn)入修改后的模式中。
**Systemd:systemd,image.png
CentOS 7 配置文件:/usr/lib/systemd/system /etc/systemd/systemimage.png
(二)啟動(dòng)流程
/sbin/init CentOS6之前 ?
5:多用戶模式,正常模式;圖形界面 ——默認(rèn)開(kāi)機(jī)會(huì)進(jìn)入該模式下,但也可以手動(dòng)修改
運(yùn)行級(jí)別:為系統(tǒng)運(yùn)行或維護(hù)等目的而設(shè)定;0-6:7個(gè)級(jí)別
0:關(guān)機(jī)
1:?jiǎn)斡脩裟J?root自動(dòng)登錄), single, 維護(hù)模式
2: 多用戶模式,啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS;維護(hù)模式
3:多用戶模式,正常模式;文本界面
4:預(yù)留級(jí)別;可同3級(jí)別
image.png
例如將5改成3,那么開(kāi)機(jī)就會(huì)自動(dòng)進(jìn)入3模式,也就是字符界面模式
6:重啟 ——如果將默認(rèn)模式改為6,那么開(kāi)機(jī)機(jī)會(huì)重啟,始終無(wú)法進(jìn)入界面。
修復(fù)方案時(shí):在重啟機(jī)器時(shí),按a鍵進(jìn)入修改模式,然后輸入1進(jìn)入單用戶模式,打開(kāi)配置文件——/etc/inittab,將默認(rèn)模式改回5或3模式,然后init3或5重新進(jìn)入界面?
默認(rèn)級(jí)別: 3, 5 ?
切換級(jí)別:init # ——在圖形界面中輸入init 3就會(huì)進(jìn)入字符界面?
查看級(jí)別:runlevel ; who -rimage.png
(三)init初始化
(1)init讀取其初始化文件:/etc/inittab
(2)初始運(yùn)行級(jí)別(RUN LEVEL)
(3)系統(tǒng)初始化腳本
(4)對(duì)應(yīng)運(yùn)行級(jí)別的腳本目錄
(5)捕獲某個(gè)關(guān)鍵字順序
(6)定義UPS電源終端/恢復(fù)腳本
(7)在虛擬控制臺(tái)生成getty
(8)在運(yùn)行級(jí)別5初始化X11
(四)CentOS 5的inittab文件
配置文件:/etc/inittab ?
每一行定義一種action以及與之對(duì)應(yīng)的process id:runlevel:action:process
- action:
wait: 切換至此級(jí)別運(yùn)行一次
respawn:此process終止,就重新啟動(dòng)之 initdefault:設(shè)定默認(rèn)運(yùn)行級(jí)別;process省略 sysinit:設(shè)定系統(tǒng)初始化方式,此處一般為指定 /etc/rc.d/rc.sysinit ca::ctrlaltdel:/sbin/shutdown -t3 -r now :在字符界面中,按以上三個(gè)鍵會(huì)重啟機(jī)器
id:3:initdefault:默認(rèn)進(jìn)入3模式
si::sysinit:/etc/rc.d/rc.sysinit:開(kāi)機(jī)會(huì)先運(yùn)行該初始化腳本,無(wú)論在哪個(gè)模式,都會(huì)先運(yùn)行腳本
l0:0:wait:/etc/rc.d/rc 0——進(jìn)入0模式,就會(huì)運(yùn)行rc0.d腳本
l1:1:wait:/etc/rc.d/rc 1——進(jìn)入1模式,就會(huì)運(yùn)行rc1.d腳本
l6:6:wait:/etc/rc.d/rc 6——進(jìn)入6模式,就會(huì)運(yùn)行rc6.d腳本
image.png
(五)CentOS 6 /etc/inittab和相關(guān)文件
- /etc/inittab 設(shè)置系統(tǒng)默認(rèn)的運(yùn)行級(jí)別 id:3:initdefault: ?
示例: 破解CentOS5和6的root口令
/etc/init/control-alt-delete.conf ?
/etc/init/tty.conf ?
/etc/init/start-ttys.conf ?
/etc/init/rc.conf ?
/etc/init/prefdm.conf
或者重啟機(jī)器,在開(kāi)機(jī)界面進(jìn)入單用戶模式,就可以直接進(jìn)入界面,相當(dāng)于破解了root密碼,登陸后可以通過(guò)passwd直接修改新的密碼,破解了原來(lái)的root密碼,這種方法無(wú)法通過(guò)遠(yuǎn)程來(lái)實(shí)現(xiàn)
(六)啟動(dòng)流程順序
- /etc/rc.d/rc.sysinit: 系統(tǒng)初始化腳本
(1) 設(shè)置主機(jī)名
(2) 設(shè)置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統(tǒng)
(5) 檢測(cè)根文件系統(tǒng),并以讀寫(xiě)方式重新掛載根文件系統(tǒng)
(6) 設(shè)置系統(tǒng)時(shí)鐘
(7) 激活swap設(shè)備
(8) 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
(9) 激活lvm及software raid設(shè)備
(10) 加載額外設(shè)備的驅(qū)動(dòng)程序
(11) 清理操作
說(shuō)明:
rc N --> 意味著讀取/etc/rc.d/rcN.d/
K: K##:##運(yùn)行次序;數(shù)字越小,越先運(yùn)行;數(shù)字 越小的服務(wù),通常為依賴到別的服務(wù)
S: S##:##運(yùn)行次序;數(shù)字越小,越先運(yùn)行;數(shù)字 越小的服務(wù),通常為被依賴到的服務(wù)
for srv in /etc/rc.d/rcN.d/K; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S; do
$srv start
done
image.png
K與S的排列順數(shù):數(shù)字的優(yōu)先級(jí)高于字母,注意按數(shù)字排列最大為99,而不是100
image.png
(七)chkconfig命令
chkconfig命令 ?
查看服務(wù)在所有級(jí)別的啟動(dòng)或關(guān)閉設(shè)定情形: chkconfig [--list] [name]
image.png
image.png
添加: SysV的服務(wù)腳本放置于/etc/rc.d/init.d (/etc/init.d)
修改指定的鏈接類型 chkconfig [--level levels] name <on|off|reset> --level LLLL: 指定要設(shè)置的級(jí)別;
chkconfig --add name
刪除: chkconfig --del name ?
image.pngimage.png
省略時(shí)表示2345 ——chkconfig --level atd on,不寫(xiě)模式,自動(dòng)默認(rèn)開(kāi)啟2345模式
ntsysv命令image.png
例子:
chkconfig --level 5 atd off——關(guān)閉5模式的atd功能
此時(shí)查看ls K*
image.png
重新開(kāi)啟——chkconfig --level 5 atd on
ls S*
image.png
小練習(xí)
在/etc/init.d中編輯一個(gè)服務(wù)
vim testsrv
1 #!/bin/bash
2 #chkconfig:2345 96 07——必須寫(xiě)明,2345代表在這些模式下,開(kāi)啟testsrv功能,96代表開(kāi)啟編號(hào)為96 07代表關(guān)閉時(shí)的編號(hào),相當(dāng)于創(chuàng)建了一個(gè)軟連接
3 #description service testsrv 在五中必須加入描述,六中可寫(xiě)可不寫(xiě)
4 . /etc/init.d/functions——調(diào)用腳本
5 case $1 in
6 start)
7 touch /var/lock/subsys/testsrv
8 action " testsrv is start..." :
9 ;;
10 stop)
11 rm -f /var/lock/subsys/testsrv
12 action "testsrv is stopped" /bin/true
13 ;;
14 restart)
15 rm -f /var/lock/subsys/testsrv
16 action "testsrv is stopped " /bin/true
17 touch /var/lock/subsys/testsrv
18 action "testsrv is start..." :
19 ;;
20 status)
21 [ -f /var/lock/subsys/testsrv ] && echo "testsrv is running"|| echo "testsrv is stopped"
22 ;;
23 *)
24 echo "usage : testsrv start|stop|restart|status"
25 ;;
26 esac
寫(xiě)完腳本后,通過(guò)chkconfig --add testsrv 加入列表中
刪除選項(xiàng)——chkconfig --del testsrv
(八)xinetd服務(wù)
servce 命令:手動(dòng)管理服務(wù)
service 服務(wù) start|stop|restart service --status-all ?
瞬態(tài)(Transient)服務(wù)被xinetd進(jìn)程所管理
進(jìn)入的請(qǐng)求首先被xinetd代理 ,它只是監(jiān)聽(tīng),并不是代替工作,喚醒非獨(dú)立文件后,由非獨(dú)立文件來(lái)進(jìn)行工作
image.png
配置文件:
/etc/xinetd.d/<service> 與libwrap.so文件鏈接
/etc/xinetd.conf——會(huì)影響所有的非獨(dú)立文件,屬于總的配置服務(wù)
image.png
用chkconfig控制的服務(wù): chkconfig tftp on——開(kāi)啟該服務(wù)
或者在 vim /etc/xinetd.d/tftp 將disable=no 改為yes,來(lái)開(kāi)啟服務(wù)image.png
image.png
修改之后通過(guò)service xinetd testart 來(lái)是修改文件生效
注意:正常級(jí)別下,最后啟動(dòng)一個(gè)服務(wù)S99local沒(méi)有鏈接至 /etc/rc.d/init.d一個(gè)服務(wù)腳本,而是指向了 /etc/rc.d/rc.local腳本 ?
不便或不需寫(xiě)為服務(wù)腳本放置于/etc/rc.d/init.d/目錄,且 又想開(kāi)機(jī)時(shí)自動(dòng)運(yùn)行的命令,可直接放置于 /etc/rc.d/rc.local文件中 ?
/etc/rc.d/rc.local在指定運(yùn)行級(jí)別腳本后運(yùn)行 ?
可以根據(jù)情況,進(jìn)行自定義修改