linux系統啟動詳解

主要內容:

系統啟動過程

init啟動過程

chkconfig的增,刪,查


Linux組成

Linux: kernel+rootfs 

kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能 

rootfs:程序和glibc 庫:函數集合, function, 調用接口(頭文件負責描述)

 過程調用:procedure,無返回值 

 函數調用:function 程序:二進制執行文件 v 

內核設計流派: 單內核(monolithic kernel)Linux 把所有功能集成于同一個程序 

微內核(micro kernel)Windows, Solaris 每種功能使用一個單獨子系統實現

核心文件: /boot/vmlinuz-2.6.18…

LINUX特點:

 支持模塊化:.ko(內核對象) 如:文件系統,硬件驅動,網絡協議等 

支持動態加載和卸載

 

組成部分:

核心文件 :/boot/vmlinuz-2.6.18..

CentOS6,7: /boot/initramfs-VERSION-release.img 

模塊文件:/lib/modules/VERSION-release

 

啟動過程:

加載BIOS的硬件信息,獲取第一個啟動設備。 

讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息 

加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅 動所有的硬件設備。 

核心執行init程序并獲取運行信息。 

Init執行/etc/rc.d/rc.sysinit文件。 

啟動核心的外掛模塊(/etc/modprobe.conf)。 

Init執行運行的各個批處理文件(scripts). 

Init執行/etc/rc.d/rc.local.

執行/bin/login程序,等待用戶登錄。

登錄之后開始以Shell控制主機。

 

具體流程:

1 POST:上電自檢,檢查CPU,主板,內存,硬盤

 ROM:不可寫入內存,存著系統最基本的輸入輸出程序,系統信息設置,開機加電自檢程序

 RAM:保存各項參數設定,易失性內存,拔掉電池就丟失

 

2 MBR

446字節 bootloader

64:分區表

2:55AA

grub啟動3個階段

  1  primary boot loader

  1.5  讀取硬盤后續的20-30個分區中存放的驅動信息

   2 讀取分區文件

加載內核文件,并解壓縮內核文件,再執行內核文件

Bootloader

window:僅僅用來啟動系統

linux:功能比較豐富,可以選擇啟動內核版本  GRUB

 

獲取runlevel級別 

init程序:

讀取/etc/inittab  /etc/init.*/.conf文件

不同的級別將會加載不同的程序,啟動不同的服務。

運行的所有初始化腳本放在/etc/init.d/目錄下,不同運行級別對應不同的文件夾,每個級別有自己的目錄存放服務,rc#.d

Init執行運行的各個批處理文件(scripts). 

Init執行/etc/rc.d/rc.local.

 

 

用戶登錄

執行/bin/login

1)命令行登錄:init進程調用getty程序(意為get teletype),讓用戶輸入用戶名和密碼。輸入完成后,再調用login程序,核對密碼,如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然后啟動這個shell

2ssh登錄:這時系統調用sshd程序,取代gettylogin,然后啟動shell。

 

 

 

內核文件被刪除恢復

刪除initramfs-`uname -r`

啟動時按住esc,進入光盤啟動

進入救援模式

4 chroot /mnt/sysimage

  cd /boot

  mkinitrd initramfs-`uname -r`.image `uname -r`

拷貝生成的文件到/boot目錄下

 

 /sbin/init CentOS6之前 v 

運行級別:為系統運行或維護等目的而設定;0-67個級別 

0:關機 

1:單用戶模式(root自動登錄), single, 維護模式 

2: 多用戶模式,啟動網絡功能,但不會啟動NFS(共享);維護模式 

3:多用戶模式,正常模式;文本界面 

4:預留級別;可同3級別 

5:多用戶模式,正常模式;圖形界面 

6:重啟 v 

默認級別: 3, 5 

切換級別:init # 

查看級別:runlevel ; who -r

 

init初始化:

init讀取其初始化文件:/etc/inittab 

初始運行級別(RUN LEVEL) 

系統初始化腳本 

對應運行級別的腳本目錄 

捕獲某個關鍵字順序 

定義UPS電源終端/恢復腳本 

在虛擬控制臺生成getty 

在運行級別5初始化X

 

/etc/inittab 

kk.png

 

設置系統默認的運行級別 id:3:initdefault: v

/etc/init/control-alt-delete.conf v/etc/init/tty.conf v/etc/init/start-ttys.conf /etc/init/rc.conf /etc/init/prefdm.conf

K*  K開頭的:kill

S*  S開頭的:start

數字越小越先執行

 

init啟動流程詳解:

解析/etc/inittab 文件,執行sysinit指定的進程,/etc/rc.d/sysinit

執行sysinit腳本,這是由init執行的第一個腳本,此步進行的工作包括配置網絡、配置內核參數、掛載root文件系統、檢查文件系統、設置系統時鐘、配置機器、開啟交換空間等。

執行/etc/rc.d/rcX.d/[K…][S…]:根據定義的initdefault運行級別,執行對應wait命令指定的程序,這會運行對應目錄下的各個程序,并等待它們運行完。在rcX.d目錄下,首先終止K開頭的服務(用來關閉一個服務),然后啟動S開頭的服務(用來啟動一個服務)。對每一個運行級別來說,在/etc/rc.d子目錄中都有一個對應的下級目錄。這些運行級別的下級子目錄的命名方法為rcX.d, 其中X就是代表運行級別的數字。在各個運行級別的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令腳本程序的符號鏈接,鏈接的名稱在KS后有一個數字,表示執行順序,數字小的先執行,例如K01tog-pegasus、S00microcode_ctl。對以K開頭的腳本執行時系統會傳遞stop參數,而S開頭的腳本系統會傳遞start參數。

最后執行rc.d/rc.local腳本

執行getty程序:為每個聯機終端使用fork()創建一個子進程,并在子進程中運行getty程序,init進程則調用wait(),進入等待子進程結束狀態。getty程序設置終端類型、屬性、速度和線路規程等。對于字符界面的運行級別(如級別23),它會打開并初始化一個tty端口,顯示提示信息。通常,若/etc/issue文本文件存在,則getty會首先顯示其中的文本信息,然后顯示登錄提示信息(例如“plinux login:” ),出現字符登錄界面,并等待用戶鍵入用戶名和口令??梢栽?/span>inittab文件中配置使用哪一種getty程序(在“id:runlevels:action:process”process部分指定,并可以傳遞相應的getty參數),如agetty, getty, mgetty, uugetty, mingetty,fbgetty等。getty程序只能由超級用戶執行。

6執行login程序:getty調用exec()執行login程序,以核對輸入的用戶名和口令。由于調用了exec(而不是fork),login的執行環境會覆蓋getty的執行環境。login進程會讀取

/etc/passwd,以用戶名和口令。login根據用戶輸入的用戶名,從口令文件passwd中取得對應用戶的登錄項,然后調用getpass()以顯示”password:”提示信息,讀取用戶鍵入的密碼

然后使用加密算法對鍵入的密碼進行加密處理,并與口令文件中該用戶項中pw_passwd字段作比較。如果用戶幾次鍵入的密碼均無效,則login程序會以出錯碼1退出執行,表示此次登錄過程失敗。此時父進程(進程init)的wait()會返回該退出進程的pid,因此會根據                                                        記錄下來的信息再次創建一個子進程,并在該子進程中針對該終端設備再次執行getty程序,再重復上述過程。如果用戶鍵入的密碼正確,則login就會把當前工作目錄(Currend Work Directory)修改成口令文件中指定的起始工作目錄。并把對該終端設備的訪問權限修改成用戶讀/寫和組寫,設置進程的組ID。然后利用所得到的信息初始化環境變量信息,例如起始目錄(HOME=)、使用的shell程序(SHELL=)、用戶名(USER=LOGNAME=)和系統執行程序的默認路徑序列(PATH=)。接著顯示/etc/motd文件(message-of-the-day)中的文本信息,并檢查并顯示該用戶是否有郵件的信息。最后login程序改變成登錄用戶的用戶ID,并執行口令文件中該用戶項中指定的shell程序,如/bin/bash/bin/csh等。

 

chkconfig命令 v 查看服務在所有級別的啟動或關閉設定情形:

chkconfig [–list] [name] v 添加: SysV的服務腳本放置于/etc/rc.d/init.d (/etc/init.d) chkconfig –add name 

 

添加服務格式

#!/bin/bash 

#LLLL 表示初始在哪個級別下啟動,表示都不啟動 

# chkconfig: LLLL nn nn v

#description:xxx 

 

刪除服務: chkconfig –del name v

 修改指定的鏈接類型

chkconfig [–level levels] name <on|off|reset>

 –level LLLL: 指定要設置的級別;省略時表示2345 

 

刪除服務腳本步驟:

先用chkconfig –del 刪除服務

刪除服務文件

 

 

xineted:一系列非獨立服務的代理 

 

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

(0)
liuzhuoliuzhuo
上一篇 2016-09-07
下一篇 2016-09-08

相關推薦

  • 22期網絡班+第一周作業+深圳+王金寶

    1、描述計算機的組成及其功能? 答: 顯示器和主機,顯示器就不說了 主機里又有,主板,又叫主機板(mainboard)、系統板(systembourd)和母板(motherboard);它安裝在機箱內,是微機最基本的也是最重要的部件之一。主板一般為矩形電路板,上面安裝了組成計算機的主要電路系統,一般有BIOS芯片、I/O控制芯片、鍵盤和面板控制開關 接口、指…

    Linux干貨 2016-08-13
  • Linux基礎 & bash基礎特性

    Q1:描述計算機的組成及其功能。 計算機的組成:運算器、控制器、存儲設備、輸入設備、輸出設備。 運算器: 運算器是計算機中執行各種算術和邏輯運算操作的部件。運算器的基本操作包括加、減、乘、除四則運算,與、或、非、異或等邏輯操作,以及移位、比較和傳送等操作,亦稱算術邏輯部件。 存儲設備: 計算機總是需要記錄與讀取數據的,而這些數據當然不可能每次都由用戶經過鍵盤…

    Linux干貨 2016-10-30
  • 網絡接口Bonding以及網絡組

    網絡接口Bonding就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址。 網絡組 :網絡組:是將多個網卡聚合在一起方法,從而實現冗錯和提高吞吐量。網絡組不同于舊版中bonding技術,提供更好的性能…

    Linux干貨 2016-11-23
  • 阿里巴巴開源項目nginx_concat_module企業部署實例

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1580194        公司的前端開發工程師今天找我,讓我給他搞下淘寶的一個開源項目 nginx_concat_m…

    Linux干貨 2016-08-15
  • Trie樹:應用于統計和排序

    1. 什么是trie樹 1.Trie樹 (特例結構樹)         Trie樹,又稱單詞查找樹、字典樹,是一種樹形結構,是一種哈希樹的變種,是一種用于快速檢索的多叉樹結構。典型應用是用于統計和排序大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。它的優點是:最大限度地減少…

    Linux干貨 2015-04-08
  • linux 小命令

    設置自動登錄、設置網絡自動連接、字體顏色

    2017-11-19

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-10 10:32

    寫的很詳細,贊一個

欧美性久久久久