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 23:21
下一篇 2016-09-08 18:55

相關推薦

  • rsyslog日志記錄服務器

    rsyslog日志記錄服務器 部分思路總結摘自網絡http://xuding.blog.51cto.com/4890434/1737947 一、syslog系統 1.syslog:系統日志服務,統一日志管理 支持C/S架構:可通過UDP或TCP協議提供日志記錄服務;實現集中收集日志功能 (1)日志、事件 歷史事件日志,保存系統上過去一段時間的發生的事件 事件…

    Linux干貨 2016-11-07
  • Linux系統啟動過程中grub故障與修復(一)

    GRUB 是引導裝入器 — 它負責裝入內核并引導 Linux 系統。GRUB 可以引導多種操作系統,如Linux、 DOS、 Windows 。 GRUB共分為三個階段:stage1主要負責BIOS和GRUB之間的交接,載入存放于各個分區中的開機文件;stage1.5是連接stage1和stage2之間的通道,起著過渡的作用,負責識別stage2所在/bo…

    2017-09-03
  • linux系統上的特殊權限SUID,SGID,STICKY

    特殊權限:SUID SGID STICKY     linux的安全上下文:     1.進程以用戶的身份運行,進程是發起此用戶的代理,因此以此用戶的身份和權限完成所有的操作。     2.權限匹配模型:     1)判斷進程的屬主,是否以被訪問的文件屬主。如果是,則應用屬主權限…

    Linux干貨 2016-08-05
  • GRUB詳解

    GRUB的啟動流程: grub: 在centos56中:0.X版本 grub legacy 在centos7中:1.X版本  grub2 grub可分為三個階段: stage1:mbr前446字節中保存的Boot Loader程序 stage1.5:mbr之后的扇區,讓stage1中的Boot Loader能夠識別stage2所在的分區上的文件系統…

    Linux干貨 2016-09-13
  • Linux 基礎(4)

    file    標準輸入輸出以及輸出重定向 >     tr     |管道      mail 1.file file [options] <filename>… 確定文件內容,是根據文件的頭部信息來判斷 hexdump -C -n 10…

    2017-07-20
  • 第一周博客作業

    1、描述計算機的組成及其功能。
    2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別。
    3、描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述。
    4、說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述。
    5、如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的。
    6、請羅列Linux發行版的基礎目錄名稱命名法則及功用規定

    Linux干貨 2018-03-13

評論列表(1條)

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

    寫的很詳細,贊一個

欧美性久久久久