主要內容:
系統啟動過程
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 讀取分區文件
3 加載內核文件,并解壓縮內核文件,再執行內核文件
Bootloader:
window:僅僅用來啟動系統
linux:功能比較豐富,可以選擇啟動內核版本 GRUB
4 獲取runlevel級別
init程序:
讀取/etc/inittab /etc/init.*/.conf文件
不同的級別將會加載不同的程序,啟動不同的服務。
運行的所有初始化腳本放在/etc/init.d/目錄下,不同運行級別對應不同的文件夾,每個級別有自己的目錄存放服務,rc#.d。
Init執行運行的各個批處理文件(scripts).
Init執行/etc/rc.d/rc.local.
5 用戶登錄
執行/bin/login
(1)命令行登錄:init進程調用getty程序(意為get teletype),讓用戶輸入用戶名和密碼。輸入完成后,再調用login程序,核對密碼,如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然后啟動這個shell。
(2)ssh登錄:這時系統調用sshd程序,取代getty和login,然后啟動shell。
內核文件被刪除恢復
1 刪除initramfs-`uname -r`
2 啟動時按住esc,進入光盤啟動
3 進入救援模式
4 chroot /mnt/sysimage
cd /boot
mkinitrd initramfs-`uname -r`.image `uname -r`
5 拷貝生成的文件到/boot目錄下
/sbin/init CentOS6之前 v
運行級別:為系統運行或維護等目的而設定;0-6:7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網絡功能,但不會啟動NFS(共享);維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟 v
默認級別: 3, 5 v
切換級別:init # v
查看級別:runlevel ; who -r
init初始化:
init讀取其初始化文件:/etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制臺生成getty
在運行級別5初始化X
/etc/inittab
設置系統默認的運行級別 id:3:initdefault: v
/etc/init/control-alt-delete.conf v/etc/init/tty.conf v/etc/init/start-ttys.conf v /etc/init/rc.conf v /etc/init/prefdm.conf
K* K開頭的:kill
S* S開頭的:start
數字越小越先執行
init啟動流程詳解:
1 解析/etc/inittab 文件,執行sysinit指定的進程,/etc/rc.d/sysinit
2 執行sysinit腳本,這是由init執行的第一個腳本,此步進行的工作包括配置網絡、配置內核參數、掛載root文件系統、檢查文件系統、設置系統時鐘、配置機器、開啟交換空間等。
3 執行/etc/rc.d/rcX.d/[K…][S…]:根據定義的initdefault運行級別,執行對應wait命令指定的程序,這會運行對應目錄下的各個程序,并等待它們運行完。在rcX.d目錄下,首先終止K開頭的服務(用來關閉一個服務),然后啟動S開頭的服務(用來啟動一個服務)。對每一個運行級別來說,在/etc/rc.d子目錄中都有一個對應的下級目錄。這些運行級別的下級子目錄的命名方法為rcX.d, 其中X就是代表運行級別的數字。在各個運行級別的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令腳本程序的符號鏈接,鏈接的名稱在K與S后有一個數字,表示執行順序,數字小的先執行,例如K01tog-pegasus、S00microcode_ctl。對以K開頭的腳本執行時系統會傳遞stop參數,而S開頭的腳本系統會傳遞start參數。
4 最后執行rc.d/rc.local腳本
5 執行getty程序:為每個聯機終端使用fork()創建一個子進程,并在子進程中運行getty程序,init進程則調用wait(),進入等待子進程結束狀態。getty程序設置終端類型、屬性、速度和線路規程等。對于字符界面的運行級別(如級別2和3),它會打開并初始化一個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
刪除服務腳本步驟:
1 先用chkconfig –del 刪除服務
2 刪除服務文件
xineted:一系列非獨立服務的代理
原創文章,作者:liuzhuo,如若轉載,請注明出處:http://www.www58058.com/44616
寫的很詳細,贊一個