一、CentOS 6 啟動流程
1.加載BIOS的硬件信息,獲取第一個啟動設備。
2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。
4.核型執行init程序并獲取運行信息。
5.Init執行/etc/rc.d/rc.sysinit文件。
6.啟動核心的外掛模塊(/etc/modprobe.conf)。
7.Init執行運行的各個批處理文件(scripts).
8.Init執行/etc/rc.d/rc.local.
9.執行/bin/login程序,等待用戶登錄。
10.登錄之后開始以Shell控制主機。
CentOS 6啟動流程總結:
POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot–> /sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別–> 系統初始化腳本rc.sysinit–> 關閉或啟動對應級別的服務–> 啟動終端
第一個進程init及配置文件/etc/inittab
run level:執行等級
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟
init初始化:
init讀取其初始化文件:/etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制臺生成getty
在運行級別5初始化X
/etc/inittab 內容與語法:
[root@CentOS 6 ~]# cat /etc/inittab # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: 默認啟動級別
CentOS 6 /etc/inittab和相關文件
/etc/inittab:設置系統默認的運行級別
id:3:initdefault:
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
CentOS 5 的inittab文件:
每一行定義一種action以及與之對應的process
id:runlevel:action:process
action:
wait: 切換至此級別運行一次;
respawn:此process終止,就重新啟動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式,此處一般為指定
/etc/rc.d/rc.sysinit
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…
l6:6:wait:/etc/rc.d/rc6
/etc/rc.d/rc.sysinit: 系統初始化腳本
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作
注意:
正常級別下,最后啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向 了/etc/rc.d/rc.local腳本
不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置于/etc/rc.d/rc.local文件中
/etc/rc.d/rc.local在指定運行級別腳本后運行
啟動流程中會用到的主要配置文件:
1,關于模塊:/etc/modprobe.conf
2,關于服務的相關配置文件:/etc/sysconfig/*
authconfig:設置用戶的身份認證的機制
clock:設置主機的時區。在clock文件內設置選項“ZONE”所參考的時區位于 /usr/share/zoneinfo 目 錄下的相對路徑中
i18n:設置語序
keyboard&mouse:設置鍵盤與鼠標
network:是否要啟動網絡
network-scripts:設置網卡
Run level 的切換:
與run level有關的啟動是在/etc/rc.d/rc.sysinit執行完畢后。run level的不同僅是/etc/rc[0-6].d里面啟動服務不同而已。
1,要每次啟動都執行某個默認的 run level ,則需修改/etc/inittab 內的設置選項,即是 "id:5:initdefault: 里面的數字
2,如果僅是暫時更改系統的 run level 時,則使用 inint[0-6] 來進行 run level 的更改,但下次重啟時,依舊會是以 /etc/ininttab 的設置為準
當執行 init3 時,系統會:
1),先比較/etc/rc3.d 及 /etc/rc5.d 內的K與S開頭的文件
2),在新的 run level 即是 /etc/rc3.d 內有多的K開頭的文件,則給予關閉
3),在新的 run level 即是 /etc/rc3.d 內有多的S開頭的文件,則給予開啟
[root@CentOS 7 ~]# runlevel 查詢當前系統的運行級別 N 5 由于之前沒切換過 runlevel,因此前一個runlevel 不存在(N) [root@CentOS 7 ~]# init 3 切換運行級別 5 3 前一個是 runlevel 5, 目前是 runlevel 3
二、在CentOS 5 6 上破解root的口令
只要能夠進入并且掛載 /,然后重新設置下root的密碼,就可以救回來。這是因為在啟動流程中,若強制內核進入runleverl 1,默認是不需要密碼即可取得一個root的shell來救援
操作流程:
1,重新啟動系統
2,啟動進入grub菜單后,在你要進入的菜單上面按‘e’鍵進入詳細設置;將光標移動kernel上方并按‘a’鍵進入編輯界面;然后出現如下界面來處理:
按鍵的描述:
重點是那個特殊字體(在rhgb后面加上1, s, S, single都可以)按下[enter]就能夠啟動進入單用戶 維護模式了。
3,進入單用戶維護模式后,系統會以root的權限直接給你一個shell,此時你就能夠執行“passwd”這個命令來重設root的密碼。然后直接執行“init 5”就可以切換成為X窗口或“init 3”進入純字符界面或者直接“reboot”.
4,又恢復到熟悉的界面:
三、在Centos 5 6 編寫服務腳本:
要實現開機啟動后自動運行腳本,則需要用到chkconfig命令
查看服務在所有級別的啟動或關閉設定情形:
chkconfig[–list] [name]
SysV的服務腳本放置于/etc/rc.d/init.d(/etc/init.d)
添加:chkconfig–add name
格式:
#!/bin/bash
#LLLL 表示初始在哪個級別下啟動,-表示都不啟動
# chkconfig: LLLL nnnn
刪除:chkconfig–del name
修改指定的鏈接類型:
chkconfig[–level levels] name <on|off|reset>
–level LLLL: 指定要設置的級別;省略時表示2345
示例:
[root@CentOS 6 init.d]# cat testservice #!/bin/bash # chkconfig:35 88 22 必須給出,指定在哪個級別下運行該服務 # description: test service 描述 prog=$(basename $0) lockfile=/var/lock/subsys/$prog start() { if [ -f $lockfile ];then echo "$prog is running yet." else touch $lockfile [ $? -eq 0 ] && echo "start $prog finished" fi } stop() { if [ -f $lockfile ];then rm -f $lockfile [ $? -eq 0 ] && echo "stop $prog finished" else echo "$prog is not running" fi } restart() { if [ -f $lockfile ];then rm -f $lockfile touch $lockfile echo "start $prog finished" fi } status() { if [ -f $lockfile ];then echo "$prog is running" else echo "$prog is stopped" fi } usage() { echo "usage:$prog {start|stop|restart|status}" } case $1 in start) start;; stop) stop;; restart) stop start;; status) status;; *) usage exit 1;; esac [root@CentOS 6 init.d]# chmod u+x testservice [root@CentOS 6 init.d]# chkconfig --add testservice [root@CentOS 6 init.d]# chkconfig --list testservice testservice 0:off1:off2:off3:on4:off5:on6:off [root@CentOS 6 init.d]#ll /etc/rc.d/rc*.d/*test* lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc0.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc1.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc2.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc3.d/S88testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc4.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc5.d/S88testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc6.d/K22testservice -> ../init.d/testservice [root@CentOS 6 ~]#service testservice start start testservice finished [root@CentOS 6 ~]#service testservice stop stop testservice finished [root@CentOS 6 ~]#service testservice status testservice is stopped [root@CentOS 6 ~]#service testservice s usage:testservice {start|stop|restart|status}
總結:
作業:
1、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
* * * * 2,4,7 cp -f /var/log/messages /logs/mesages-`date +\%Y\%m\%d
2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
* 2 * * * /bin/egrep '^[S|M]' /proc/meminfo >> /tmp/meminfo.txt
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/45697