啓動流程

一、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’鍵進入編輯界面;然後出現如下界面來處理:

wKioL1fRaSKzUx5lAAAGc_n8xiE406.png


  按鍵的描述:

wKiom1fRaE3TUaJAAAAKdGIuWIg753.png


  重點是那個特殊字體(在rhgb後面加上1, s, S, single都可以)按下[enter]就能夠啓動進入單用戶   維護模式了。

wKiom1fRaTihviBXAAASZQ6ndr8183.png


3,進入單用戶維護模式後,系統會以root的權限直接給你一個shell,此時你就能夠執行“passwd”這個命令來重設root的密碼。然後直接執行“init 5”就可以切換成爲X窗口或“init 3”進入純字符界面或者直接“reboot”.

wKiom1fRaXLxXjxfAAAUydZiHhs360.png


4,又恢復到熟悉的界面:

wKioL1fSOjzxTXgYAAAFvyhByj4590.png


三、在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}


總結:

wKiom1fVFW2zMFtaAADjN2Tg7hc561.png

作業:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章