CentOS 6 系統啟動流程

一、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

原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/45697

(0)
pingskypingsky
上一篇 2016-09-12
下一篇 2016-09-12

相關推薦

  • 讓運維工程師不再藍瘦、香菇

    最近廣西一小哥失戀后錄的視頻風靡互聯網,也讓“藍瘦、香菇”這兩個詞火了一把。雖然原故事男主角是因為失戀才藍瘦、香菇,但想想作為運維“狗”的我們也時常因強大的工作壓力而藍瘦,常常在晚上睡得香呼呼的時候因為要處理故障從溫暖的被窩爬起來,看著鋁朋友鄙視的眼神,真的好香菇……本來作為技術大牛的我們,工作應該是很酷的事情,享受的應該是小白美鋁們崇拜的眼神,可現在卻那么…

    系統運維 2017-01-09
  • ACL概述

    ACL概述 一、什么是ACL ACL是linux系統中一種被稱為訪問控制列表的權限控制方法,它是一種權限分配之外的普遍范式。在一般情況下,要確認三個權限組:owner、group和other。而使用ACL則可以增加權限給其他用戶或組別,不再僅僅是在“other”中定義權限,可以允許指定的用戶擁有不同于其所屬組的權限。 ACL支持多種Linux文件系統,包括e…

    2017-07-29
  • linux 基礎(8)—— 變量

    變量:命名的內存空間 1.作用:①數據存儲格式                         ②參與的運算                 &nbs…

    2017-08-05
  • Nginx/httpd 代理兩個Tomcat

    Nginx 前端代理服務器172.16.71.1 從ftp下載Nginx 安裝 vim /etc/nginx/nginx.confhttp {…# 添加以下內容upstream tcsrvs {         server 172.16.71.4:8080;        …

    Linux干貨 2017-02-12
  • centos 6.5下搭建svn服務端

    1、先配置好yum源,svn的包在系統光盤里就有 2、yum install subversion #安裝svn的服務端程序 3、mkdir -p /application/svndata #創建svn的數據存儲目錄,名字可以隨便取 4、svnserve -d -r /application/svndata/ #指定svn的數據存儲目錄,就是剛才創建的 5、…

    Linux干貨 2015-10-08
  • Linux程序包管理(rpm、yum、make)

    linux系統程序安裝的方法有rpm yum 以及make手動編譯3種方法: rpm這個機制最早由Redhat公司開發出來,后來由于實在好用,所以被很多發行版所使用作為軟件安裝的管理方式。不過由于使用RPM安裝軟件時有時會涉及到文件的依賴信,此時需要手動去逐個安裝被依賴的包操作起來十分復雜,于是yum這種線上升級的機制便出現了,它會自己主動解決各文件的依賴關…

    Linux干貨 2017-10-02
欧美性久久久久