Linux系統學習筆記:運行系統
引導
引導就是啟動計算機。在啟動計算機時操作系統還不能夠使用,必須由引導程序將其啟動起來。在引導過程中,內核被加載到內存中並開始執行,進行各種初始化,之後系統就可以使用了。
引導包括自動引導和手工引導。自動引導時,系統會自己執行全部引導過程。手工引導則會在某一時刻將控制權交給用戶,這時計算機處於單用戶模式,其他用戶還不能登錄系統。
引導的過程可以分成:
加載並初始化內核。
檢測和配置設備。
創建內核進程。
操作員干預(手工引導時)。
執行系統啟動腳本。
多用戶模式運行。
Linux的內核通常是 /vmlinuz ,在Debian [1] 上它鏈接到 /boot/vmlinuz-2.6.32-5-686 。系統引導時首先將它載入內存。內核執行內存檢測來確定可用的RAM,然後會按靜態方式分配內存量。
接下來內核會查找並初始化內核中給出的設備。
在基本的初始化完成後,內核會在用戶空間創建一些自發進程,這麼說是因為它們不通過 fork 機制創建。可以使用 ps -Af 命令進行查看,它們被中括號括了起來。創建完自發進程後,內核的工作就完成了,接下來的任務由 init 進程來完成。
如果以單用戶模式引導,系統會進入一個特殊的登錄模式。輸入 root 的密碼會進入到一個root shell,也可以按 ^D 跳過單用戶模式繼續引導。
接下來就是按一定的順序執行系統啟動腳本,如果安裝了圖形界面並設置了圖形登錄系統,會進入它等待用戶登錄。
計算機啟動時首先加載磁盤開頭的MBR,它是一個512字節的段,它告訴計算機從哪裡引導,並加載引導加載程序,然後由引導加載程序負責加載內核。現在Linux系統最常用的引導加載程序是GRUB,以前還有LILO,但它沒有GRUB強大,現在已經很少使用它了。
啟動腳本
啟動腳本是一些shell腳本,不同的Linux系統對它們的組織方式有很大區別。一般來說,啟動腳本會:
設置計算機名稱。
設置時區。
采用 fsck 檢查磁盤。
安裝系統的磁盤。
從 /tmp 刪除舊文件。
配置網絡。
啟動守護進程和網絡服務。
如果文件系統是正常卸載的,一般會自動跳過 fsck 檢查。
init 定義了7個運行級:
0級為關閉系統級別。
1級為單用戶模式級別。
2-5級為多用戶模式級別。
6級為重新引導級別。
0級和6級比較特殊,系統不能留在這兩個級別裡,大多數系統運行在2級或3級。
/etc/inittab 定義了 init 在每個運行級上要做的事情,也就是進入每個級別要運行的命令。Debian的默認運行級是2,可以修改它。
id:2:initdefault:
可以使用 telinit 命令進入特定的運行級。
啟動腳本放在 /etc/init.d/ 下,這些腳本都可以使用參數 start 和 stop 來運行,有些還支持 restart 。系統啟動腳本時,並不直接在該路徑下找,而是查找 /etc/rcN.d/ (N為0-6的級別)。 /etc/rcN.d/ 包含到啟動腳本的符號鏈接,它們都以 S 或 K 開頭, init 按運行級別由低到高過渡時,運行各級別以 S 開頭的帶有 start 參數的腳本,由高到低過渡時,運行各級別以 K 開頭的帶有 stop 參數的腳本。
Debian的配置信息放置比較分散。系統的主機名在 /etc/hostname 裡,網絡接口和默認網關在/etc/network/interfaces 裡。Debian有一個啟動腳本管理程序 update-rc.d 。
關機
停止或重新引導系統的最完善的方式是 shutdown 。可以給 shutdown 指定時間和可選的消息通知。用 -h 和-r 指定是停機還是重新引導,用 -F 或 -f 來強制或跳過 fsck 檢查。
shutdown -h 調用 halt 命令,它也可以單獨使用,執行關閉系統的基本任務。 halt 會執行 sync 系統調用,可以使用 -n 選項不執行 sync ,這主要用在 fsck 修復後的情況。
shutdown -r 調用 reboot 命令,和 halt 類似,區別是它重啟機器,它也支持 -n 選項。
poweroff 命令等價於 halt ,但它還請求關閉主電源(有這種功能的系統上)。