Linux系統(tǒng)啟動(dòng)流程: POST --> BIOS(Boot Sequence引導(dǎo)次序) --> MBR(bootloader,446byte) --> Kernel --> initrd(initramfs) --> (ROOTFS) --> /sbin/init(/etc/inittab) 內(nèi)核設(shè)計(jì)風(fēng)格: 單內(nèi)核: 所有功能都在一個(gè)內(nèi)核中。Linux采用單內(nèi)核,但是采用了微內(nèi)核的設(shè)計(jì)思想。LWP(輕量級(jí)進(jìn)程 light weight pprocess)。 核心: /boot/vmlinuz-verison 動(dòng)態(tài)加載ko(kernel object 內(nèi)核專用模塊)。 內(nèi)核模塊(ko):/lib/modules/KERNELVERISON/ 常見的裝載內(nèi)核模塊命令: #insmod #modprobe 微內(nèi)核: 把其他功能做成子內(nèi)核。Windows Solaris。真正意義上的多線程。 內(nèi)核提供的功能: 文件系統(tǒng) 進(jìn)程管理 內(nèi)存管理 網(wǎng)絡(luò)管理 安全功能 驅(qū)動(dòng)程序 內(nèi)核初始化過程: 1.設(shè)備探測(cè)。 2.驅(qū)動(dòng)初始化 可能從initrd(initramfs(RHEL6))件中裝載驅(qū)動(dòng)模塊。 3.以只讀模式掛載根文件系統(tǒng)(rootfs)。 4.裝載用戶空間內(nèi)第一個(gè)進(jìn)程init(PID=1) initrd: 一個(gè)中間層系統(tǒng),在系統(tǒng)啟動(dòng)是提供必要的基本驅(qū)動(dòng),生成一個(gè)臨時(shí)根,為內(nèi)核提供訪問真正根文件系統(tǒng)所需要的基本驅(qū)動(dòng)程序。待內(nèi)核成功掛載根文件系統(tǒng)后,會(huì)把臨時(shí)根下的 /proc、 /sys、/dev移動(dòng)到真的根下。 ramdisk --> initrd RHEL5 把內(nèi)存模擬成磁盤使用。 ramfs --> initramfs RHEL6 把內(nèi)存模擬成磁盤使用。 #chroot TEMPROOTDIR [COMMAND] 臨時(shí)切換為根目錄 例如: #chroot /tmp/virroot /bin/csh #ldd FILE 顯示二進(jìn)制文件所依賴共享庫。 init: 系統(tǒng)啟動(dòng)的第一個(gè)進(jìn)程。 bin文件路徑: /sbin/init /etc/init /bin/init 內(nèi)核將會(huì)依次按以上目錄順序查找init,若都無法找到init,則內(nèi)核會(huì)執(zhí)行/bin/sh。 配置文件: /etc/inittab 每一行記錄一個(gè)要啟動(dòng)或運(yùn)行的服務(wù)(進(jìn)程)。 設(shè)定的任務(wù): 1.設(shè)定默認(rèn)運(yùn)行級(jí)別。 2.運(yùn)行系統(tǒng)初始化腳本。 /etc/rc.d/rc.sysinit 3.按照以下順序運(yùn)行指定運(yùn)行級(jí)別對(duì)應(yīng)目錄下的下的服務(wù)類腳本。 /etc/rc.d/init.d /etc/rc.d/rcNUM.d /etc/rc.d/rc.local 4.設(shè)定ctrlaltdel組合鍵的動(dòng)作。 5.定義ups電源在電源故障或恢復(fù)是執(zhí)行的操作。 6.啟動(dòng)虛擬終端(level為2345)。 1:2345:respawn:/sbin/mingetty tty1 ... 6:2345:respawn:/sbin/mingetty tty6 7.啟動(dòng)圖形終端(level為5)。 x:5:respawn:/etc/X11/perfdm-nodaemon 每行結(jié)構(gòu)如下: id:runlevels:action:process id:服務(wù)參數(shù)的標(biāo)示,1~4個(gè)字符。 id 默認(rèn)RUNLEVEL si 系統(tǒng)初始化 l0~l6 指定RUNLEVEL ca 攔截到ctrl+alt+del pf 電源失效 pr 電源恢復(fù) NUM 配置NUM號(hào)虛擬終端 x 啟動(dòng)x服務(wù) runlevels:在哪個(gè)級(jí)別下運(yùn)行。 action:在某個(gè)事件下執(zhí)行的動(dòng)作。 initdefault 設(shè)定默認(rèn)運(yùn)行級(jí)別。 sysinit 系統(tǒng)初始化。 wait 級(jí)別切換至此級(jí)別時(shí)執(zhí)行。 ctrlaltdel 重啟。 powerfail 電源失效。 powerokwait 電源失效后至關(guān)機(jī)前電源恢復(fù)。 respawn 一旦程序終止會(huì)重新啟動(dòng)。 process:要運(yùn)行的程序,定義使用絕對(duì)路徑。 /etc/init/*.conf 該目錄下的文件是把inittab文件進(jìn)行切片后產(chǎn)生的許多.conf文件。都是基于事件驅(qū)動(dòng)編寫的。 重啟init: #init q #telinit q #kill -HUP 1 運(yùn)行級(jí)別RUNLEVEL: 各個(gè)級(jí)別區(qū)別在于啟動(dòng)的服務(wù)不同。 0:halt 1:single user mode 直接怡管理員身份登錄,無需驗(yàn)證。 2:mulit user mode no NFS 不啟動(dòng)NFS等網(wǎng)域功能相關(guān)的服務(wù)器。 3:mulit user mode text mode 命令行模式 4:reseved 保留級(jí)別,暫時(shí)未定義。 5:mulit user mode graphic mode 圖形模式 6:reboot 運(yùn)行級(jí)別的設(shè)定: 修改/etc/inittab 查看運(yùn)行級(jí)別: #runlevel LSATLEVEL CURRENTLEVEL 其中LASTLEVEL表示上一個(gè)級(jí)別,N表示沒切換過。CURRENTLEVEL表示當(dāng)前級(jí)別。 切換運(yùn)行級(jí)別: #init [OPTION] LEVEL [OPTION] LEVEL 0 關(guān)機(jī) 1 單用戶模式 2 命令行模式(不啟用NFS) 3 命令行模式 4 保留模式 5 圖形界面 6 重啟 S 單用戶模式 s 單用戶模式 /etc/rc.d/rc.sysinit 設(shè)置系統(tǒng)的基本環(huán)境,完成以下任務(wù): 1.激活udev和selinux。 2.根據(jù)/etc/sysctl.conf文件來設(shè)定內(nèi)核參數(shù)。 執(zhí)行sysctl -p。 3.設(shè)定系統(tǒng)時(shí)鐘。 4.裝載鍵盤映射。 5.啟用swap分區(qū)。 執(zhí)行swapon -a -e。 6.設(shè)置主機(jī)名,從/etc/sysconfig/network中讀取HOSTNAME參數(shù)。 7.文件系統(tǒng)檢測(cè),根據(jù)/etc/fstab,檢查并掛載其他文件系統(tǒng)。并且在無錯(cuò)誤以后,將根以讀寫方式重新掛載。 8.初始圍硬件設(shè)備。 定義在/etc/modprobe.conf中的模塊 ISA、PnP的設(shè)備 USB設(shè)備 9.啟動(dòng)RAID和LVM 10.如有必要,卸載initrd 11.初始化串行設(shè)備。根據(jù)/etc/rc.serial進(jìn)行初始化。默認(rèn)無此腳本,需要自行建立。 12.清理過期的鎖文件(/var/lock/subsys/*)和IPC文件。 13.重新設(shè)置磁盤參數(shù),根據(jù)/etc/sysconfig/harddisk DEVICE。 /etc/rc.d/init.d/* 服務(wù)類腳本,SysV風(fēng)格,存放在/etc/rc.d/init.d下。有一個(gè)鏈接文件/etc/init.d --> /etc/rc.d/init.d。 配置文件: /etc/sysconfig/服務(wù)腳本同名 腳本至少接受以下參數(shù): start|stop|restart|status|reload|condrestart(有條件重啟,已啟動(dòng)的重啟,未啟動(dòng)的不重啟。) 腳本共有特性: #chkconfig: RUNLEVELS SS KK RUNLEVELS 啟動(dòng)級(jí)別 RUNLEVELS可以用-表示沒有級(jí)別默認(rèn)為SNUM開頭的鏈接,即全部都是KNUM開頭的鏈接。 SS 啟動(dòng)的優(yōu)先級(jí) KK 關(guān)閉的優(yōu)先級(jí) 當(dāng)使用chkconfig命令為此腳本在rcNUM.d目錄創(chuàng)建鏈接時(shí),RUNLEVEL表示默認(rèn)創(chuàng)建為SNUM開頭的文件,除此之外的級(jí)別均默認(rèn)創(chuàng)建為KNUM開頭的鏈接。S后邊的啟動(dòng)優(yōu)先級(jí)為SS所表示的數(shù)字,K后邊的關(guān)閉優(yōu)先級(jí)次序?yàn)镵K所表示的數(shù)字。一般SS+KK=99。 #description: DESCRIPTIONS 描述信息,用戶說明此腳本的簡(jiǎn)單功能??梢允褂肻進(jìn)行續(xù)行。 /etc/rc.d/rc.local /etc/rc.d/rcNUM.d/S99local --> /etc/rc.d/rc.local /etc/rc.local --> /etc/rc.d/rc.local 在系統(tǒng)啟動(dòng)最后執(zhí)行的服務(wù),準(zhǔn)確說應(yīng)該是腳本。不方便定義為服務(wù)等的命令都可以在其中寫入,在用戶登錄前執(zhí)行。 例如命令行模式登陸式的顯示的歡迎內(nèi)容等。 GRUB:GRand Unified Bootloader grub啟動(dòng)流程: stage1:裝在MBR中。目的是為了引導(dǎo)stage2。 stage1.5:用來識(shí)別常見的文件系統(tǒng)。 stage2:位于內(nèi)核所在分區(qū)。/boot/grub/。 /etc/grub.conf grub配置文件。是鏈接文件,指向/boot/grub/grub.conf 主要內(nèi)容如下: default=0 設(shè)定默認(rèn)啟動(dòng)的title編號(hào),編號(hào)從0開始。 timeout=5 等待選擇超時(shí)時(shí)間。單位是秒。 splashimeage=(hd0,0)/grub/palash.xmp.gz 指定grub背景圖片。 hidenmenu 是否隱藏菜單。 password --md5 PASSWORD 設(shè)定GRUB的編輯的密碼??梢允褂胓rub-md5-crypt來生成加密的密碼。 title TITLENAME 內(nèi)核標(biāo)題或者是OS的名稱,可自由修改。 root (hdDISKNUM,PARTNUM) 指定內(nèi)核文件所在的設(shè)備和分區(qū)。對(duì)grub而言,所有硬盤一律顯示為為hd。DISKNUM表示磁盤序號(hào),PARTNUM表示分區(qū)序號(hào)。 kernel KERNEL CMDLINE 指定kernel路徑即傳遞給內(nèi)核的參數(shù)。參數(shù)文件可以在/proc/cmdline中看到。 initrd INIDRD 指定initrd路徑。 password --md5 PASSWORD 啟動(dòng)內(nèi)核或OS的密碼。 安裝grub: #fdisk DEVICE /dev/PART1 用來做boot /dev/PART2 用來做sysroot #mkdir /DIR/boot #mount /dev/PART1 /DIR/boot #grub-install --root-directory=/DIR DEVICE 此種方式要保證把內(nèi)核文件所在分區(qū)掛載在/boot上。grub只要指定/boot所在的父目錄就能自動(dòng)找到/boot。 #vim /DIR/boot/grub.conf 修復(fù)grub: 安裝grub stage1: #grub grub> root (hdDISKNUM,PARTNUM) 指定內(nèi)核所在的磁盤和分區(qū)。 grub> setup (hdDISKNUM) 在指定的硬盤上安裝grub。 grub> quit grub.conf文件丟失: 開機(jī)進(jìn)入grub后操作。 grub> find (hdDISKNUM,PARTNUM)/ 按tab鍵會(huì)顯示出相關(guān)文件。 grub> root (hdDISKNUM,PARTNUM) grub> kernel /KERNEL grub> initrd /INITRD grub> boot #mingetty [OPTION] 啟動(dòng)終端 [OPTION] --loginprog=/bin/login 啟動(dòng)中斷后執(zhí)行的程序。默認(rèn)為/bin/login。 #agetty [OPTION] PROT BAUDRATE 替代getty命令。 [OPTION] -l LOGIN PROGRAME 指定登陸程序 -n 不需要用戶輸入用戶名。不需要用戶輸入登錄信息。配合-l一起使用。 例如: #agetty -l /bin/bash 38400 登陸bash并將波特率設(shè)定為38400。 #stty [OPTION] DEVICE SETTING 改變和顯示終端設(shè)備。 [OPTION] -F --file=DEVICE 打開并使用指定的設(shè)備 SETTING: size 顯示行(rows)列(columns)數(shù)。 speed 顯示終端速率。 例如: #stty -F /dev/console size 物理終端 25 80 25行80列。 #stty -F /dev/console speed 38400 每秒38400個(gè)字符 #chkconfig [OPTION] 指定SysV風(fēng)格腳本,自動(dòng)在/etc/rcNUM.d下創(chuàng)建鏈接。 [OPTION] --list SERVICE 列出所有獨(dú)立守護(hù)進(jìn)程的啟動(dòng)設(shè)定。不加參數(shù)顯示所有設(shè)定。 --add SERVICE 自動(dòng)創(chuàng)建鏈接,將SERVICE添加到chkconfig控制的服務(wù)列表中。下次系統(tǒng)啟動(dòng)生效。 --del SERVICE 刪除SERVICE所有鏈接文件。 --level [RUNLEVELS] SERVICE on|off 指定級(jí)別為RUNLEVELS,SERVICE啟動(dòng)或關(guān)閉。對(duì)于瞬時(shí)守護(hù)進(jìn)程不需要指定RUNLEVLES。RUNLEVELS可以省略,省略默認(rèn)為2345級(jí)別。 linux常見的關(guān)機(jī)和重啟命令: shutdown halt -p 切斷電源 需要配合exec命令使用。 reboot poweroff init 0 init 6 #exec 執(zhí)行文件,并以子進(jìn)程替換父進(jìn)程。 例如: #exec halt -p 守護(hù)進(jìn)程的類型: 獨(dú)立守護(hù)進(jìn)程 瞬時(shí)守護(hù)進(jìn)程 不需要關(guān)聯(lián)至運(yùn)行級(jí)別。 xinetd:超級(jí)守護(hù)進(jìn)程。管理所有瞬時(shí)守護(hù)進(jìn)程。需要關(guān)聯(lián)運(yùn)行級(jí)別。
|
|