Linux系統剛入門的小伙伴們是不是還在迷惑到底系統從我們按下電源鍵的那一刻,是如何進行一步一步運行的,知道我們輸入用戶名和密碼進入系統,來操作電腦,今天我們就來寫一下開機的啟動過程以及相關服務的控制。
一. 系統引導流程:
1 . 開機加電,BIOS對硬件加電自檢
加電自檢,檢測硬件設備,這是因為BIOS中包含了CPU的相關信息、設備啟動順序信息、硬盤信息、內存信息、時鐘信息、PnP特性等等
2 . 檢查啟動順序,從硬盤引導,讀取MBR(446字節)
硬盤上第0磁道第一個扇區被稱為MBR,也就是Master Boot Record,即主引導記錄,它的大小是512字節,主引導程序的任務就是查找並且加載處在硬盤分區上的次引導程序。通過分區表查找活動分區,並將處在活動分區的次引導加載程序讀取到內存裡面運行。
3 . 讀取GRUB的引導
次引導加載程序得主要的功能就是加載linux內核,次引導程序(boot loader)會引導操作系統。當機器引導它的操作系統時,BIOS會讀取引導介質上最前面的512字節(主引導記錄,即master boot record,MBR)。在單一的MBR中只能存儲一個操作系統的引導記錄,所以當需要多個操作系統時就會出現問題,因此需要更靈活的引導加載程序
次引導加載程序就會在內存運行起來。系統讀取內存中的grub配置信息(一般為menu.lst或grub.lst)就會出現GRUB圖形界面,讓用戶選擇加載什麼樣的內核並依照此配置信息來啟動不同的操作系統。
如何查看你MBR的內容,那麼你可以使用以下命令來查看:
[root@localhost ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1 #此處的/dev/sda為你的硬盤的類型,本次我們使用的為scsi,表示為/dev/sda
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000280189 s, 1.8 MB/s
[root@localhost ~]# od -xa mbr.bin #此處必須root身份運行的dd命令,讀取你的第一個集成電子驅動器或者IDE驅動器的前512字節,並將他們寫入
mbr.bim文件.od命令則是以十六進制和ASCII碼形式打印出這個二進制文件
4 . 加載內核文件 (/boot目錄下)
用戶選擇要加載的內核之後,次引導加載程序(GRUB)就會根據/boot/grub.conf配置文件中所設置的信息,從/boot/所在的分區上讀取Linux內核映像,然後把內核映像加載到內存中並把控制權交給Linux內核。
5 . 運行init進程,永遠是第一個進程
內核被加載後,第一個運行的程序便是/sbin/init(變成一個用戶進程),該程序會讀取/etc/inittab配置文件,init根據/etc/inittab配置文件來執行相應的腳本進行系統初始化,如設置鍵盤、字體,裝載模塊,設置網絡等.其實/etc/inittab文件最主要的作用就是設定Linux的運行等級。
【Linux下運行級別設定:】
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:”,表明Linux運行在等級3上
在設定了運行等級後,Linux系統執行的第一個用戶層文件就是/etc/rc.d/rc.sysinit腳本程序,它做的工作非常多,包括設定PATH、設定網絡配置(/etc/sysconfig/network)、啟動swap分區、設定/proc等等。
根據運行級別的不同,系統會運行rc0.d到rc6.d中的相應的腳本程序,來完成相應的初始化工作和啟動相應的服務
rc.local配置文件就是在一切初始化工作後,Linux留給用戶進行個性化的地方,你可以進行一些開機加載的自定義設置,只限制於當前登錄的用的個人設置。
到了加載此步驟的時候,那麼系統已經運行到提醒用戶進行用戶名和密碼輸入登陸系統的過程了,到此為止,那麼一系列的從你把主機的電源打開一直到你輸入用戶名和密碼登陸系統之間全部啟動過程。
二. 服務的控制和優化:
1 . 常用方式:
- service 服務名稱 控制類型
- /etc/rc.d/init.d服務名稱 控制類型
[root@localhost ~]# /etc/init.d/vsftpd status
vsftpd is stopped
[root@localhost ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
2 . 控制類型
- start:啟動
- stop:停止
- restart:重新啟動
- reload:重新加載
- status:查看服務狀態
1 . 查看運行級別
[root@localhost ~]# runlevel
5 3
使用runlevel命令,分別顯示:
5:切換前的運行級別、3:當前運行級別
2 . 臨時切換運行級別
[root@localhost ~]# init 5
[root@localhost ~]# runlevel
3 5
使用init命令結合0-6運行級別參數
特點:
提供一個交互式、可視化窗口
可以在字符終端運行
便於集中管理多個服務
用法:
ntsysv --level 級別列表
[root@localhost ~]# ntsysv --level 3 #此處表示以級別3設置所有服務
特點:
不提供交互式、可視化窗口
管理��個服務效率更高
用法:
查看系統服務的啟動狀態
格式:chkconfig --list 服務名稱
[root@localhost ~]# chkconfig --list vsftpd #查看vsftpd服務開機是否啟動
vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off #此處的6個狀態就是linux的運行狀態 【off表示不啟動 on表示啟動】
----------
設置系統服務的啟動狀態
格式:chkconfig --level 級別列表 服務名 on|off
[root@localhost ~]# chkconfig --level 3 vsftpd on
[root@localhost ~]# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:off 3:on 4:off 5:off 6:off
----------
服務腳本位置:/etc/init.d ----》/etc/rc.d/init.d
到此為止,小伙伴是否了解了系統是如何進行啟動的以及啟動時加載所需的配置文件的順序,對於系統的啟動過程來說是我們入IT這一行的所要必須掌握的。掌握了此啟動過程,當系統出毛病的時候,我們才能根據啟動順序來進行分析並解決問題。