linux初始化进程ppid号,linux基础(十一)--系统初始化的简谈
我們在深入學習linux之前呢首先要了解其的引導加載過程,這樣我們就可以在判斷一些在系統初始化過程的出現問題的來源,并及時做出處理。
這個過程大概分為【開機】——【BIOS】(CMOS)——【grub或者其他引導程序】——【kernel boot】(initrd文件)——【init『init回調用rc.sysinit和rc等』】——【tty】——【shell】——【登錄】
首先主機有一個加電自檢的過程,一般來講這個過程是我們沒有辦法干預的,要是這個環節出了問題那就是硬件的問題了BIOS中包含了CPU的相關信息、設備啟動順序信息、硬盤信息、內存信息、時鐘信息、PnP特性等等
通常來講,Linux 都是從硬盤上引導的,其中主引導記錄(MBR)中包含主引導加載程序。
由于MBR最先被讀取一般都是存放在硬盤上第0磁道第一個扇區被稱為MBR,也就是Master Boot Record,即主引導記錄,它的大小是512字節,存放了預啟動信息、分區表信息。系統找到BIOS所指定的硬盤的MBR后,就開始家在引導了。當 MBR 被加載到 RAM 中之后,BIOS 就會將控制權交給 MBR。就是Boot Loader那就是lilo或者grub了。
2、啟動GRUB/LILO
Boot Loader 就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核做好一切準備。
Boot Loader一般用到的有Grub和Lilo。
GRUB和LILO都是引導加載程序,它們會引導操作系統。當機器引導它的操作系統時,BIOS會讀取引導介質上最前面的512字節(即MBR: master boot record)。在單一的 MBR 中只能存儲一個操作系統的引導記錄
GRUB 與 LILO 的比較
所有引導加載程序都以類似的方式工作,滿足共同的目的。不過,LILO 和 GRUB 之間有很多不同之處:
● LILO 沒有交互式命令界面,而 GRUB 擁有。
● LILO 不支持網絡引導,而 GRUB 支持。
● LILO 將關于可以引導的操作系統位置的信息物理上存儲在 MBR 中。如果修改了 LILO 配置文件,必須將 LILO 第一階段引導加載程序重寫到 MBR。相對于 GRUB,這是一個更為危險的選擇,因為錯誤配置的 MBR 可能會讓系統無法引導。使用 GRUB,如果配置文件配置錯誤,則只是默認轉到 GRUB 命令行界面。
我們以Grub為例來講解。系統讀取內存中的grub配置信息(一般為menu.lst),并依照此配置信息來啟動不同的操作系統。 grub的引導分為兩個階段:第一階段的引導主要是為引導第二階段做鋪墊,準確來說還有個1.5階段作用是為了grub識別文件系統類別的
grub的存放位置:/boot/grub/grub.conf在配置文件中,可以修改啟動項和一些信息
其中default:定義默認啟動 項,timeout:定義默認的超時時間,splashp_w_picpath:用于定義背景圖片,hiddenmenu:用于隱藏啟動項,title:用于定義啟動項及其參數的
當grub引導完成以后就開始加載內核 當內核映像被加載到內存后,內核階段就開始了。 內核映像并不是一個可執行的內核,而是一個壓縮過的內核映像。通常它是一個zImage(壓縮映像,小于512KB)或bzImage(較大的壓縮映像,大于512KB),它是自動解壓縮的。
在內核 的加載過程中還需要個inintrd這個驅動加載程序,一般這個程序就像一個小linux程序主要是是為了引導真正的linux內核做鋪墊的加載額外的驅動程序
然后開始執行init進程(/sbin/init)
init進程是所有進程的起點,內核在完成內核引導后,即在本線程(進程)空間內加載init程序,它的進程號為1。init進程是所有進程的發起者和控制者。因為在任何基于Unix的系統(比如Linux)中,它都是第一個運行的進程,所以init進程的編號(Process ID,PID)永遠是1。如果init出現了問題,系統的其余部分也就隨之而垮掉了。
init進程有兩個作用:
● 扮演終結父進程的角色:所有的孤兒進程都會被init進程接管。快速執行一下ps -af 命令,可以列出許多父進程ID(Parent Process ID,PPID)為1的進程來。
● 進入某個特定的運行級別時運行相應的程序,以此對各種運行級別進行管理,這個作用由/etc/inittab文件定義的。 內核被加載后,第一個運行的程序便是/sbin/init,該文件會讀取/etc/inittab文件,并依據此文件來進行初始化工作。
通過/etc/inittab文件進行初始化
etc/inittab主要定義一下內容:包括1,默認運行級別2,執行系統初始化腳本,完成系統初始化3執行指定運行級別下的每一個啟動腳本4,捕獲鍵盤序列(設定特別快捷鍵ctrl+alt+del功能)5設定電源故障時執行的腳本6,設定要啟動的虛擬控制臺/dev/tty1-67當運行級別為5時做圖形初始化的腳本。
iniLinux的運行等級設定如下:
0:關機
1:單用戶模式
2:無網絡支持的多用戶模式
3:有網絡支持的多用戶模式
4:保留,未使用
5:有網絡支持有X-Window支持的多用戶模式
6:重新引導系統,即重啟
對于RedHat來說,按以下順序執行:
a、執行/etc/rc.d/rc.sysinit(由init執行的第一個腳本)
在設定了運行等級后,Linux系統執行的第一個用戶層文件就是/etc/rc.d/rc.sysinit腳本程序,它做的工作非常多,包括設定PATH、設定網絡配置(/etc/sysconfig/network)、啟動swap分區、設定/proc、把root文件系統輸入到mtab、使用系統為裝入模塊做準備、查找模塊的相關文件、檢查文件系統,以進行必要的修復、加載所有其他文件系統、清除幾個/etc文件,如/etc/mtab、/etc/fastboot和/etc/nologin、刪除UUCP的lock文件、刪除過時的子系統文件、刪除過時的pid文件、設置系統時鐘、打開交換、初始化串行端口、裝入模塊等等。可以到/etc/rc.d中查看一下rc.sysinit文件。
b、執行/etc/rc.d/rcX.d[KS]
首先終止K開頭的服務(用來關閉一個服務),然后啟動S開頭的服務(用來啟動一個服務);對每一個運行級別來說,在/etc/rc.d子目錄中都有一個對應的下級目錄。這些運行級別的下級子目錄的命名方法上rcX.d, 其中X就是代表運行級別的數字。在各個運行級別的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令腳本程序的符號鏈接。鏈接的名稱在K與S后有一個數字,表示執行順序,數字小的先執行如K01tog-pegasus 、 S00microcode_ctl。對以K開頭的腳本執行時系統會傳遞stop參數,而S開頭的腳本系統會傳遞start參數。
c、執行/etc/rc.d/rc.local
Redhat中運行模式2,3,5都把/etc/rc.d/rc.local作為初始化腳本中的最后一個文件,所以用戶可以自己在這個文件中添加一些需要在其他初始化工作之后,登陸之前執行的命令。
你如果打開了此文件,里面有一句話,讀過之后,你就會對此命令的作用一目了然:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留給用戶進行個性化的地方。你可以把你想設置和啟動的東西放到這里。
6、執行/bin/login
login程序會提示使用者需輸入帳號與密碼,接著編碼并確認密碼的正確性,若二者相合,則為使用者進行初始化環境,并將控制權交給shell,即用戶登錄。
linux的啟動過程有個大概的認識后我們就該考慮下當出現故障時找原因了:當我們的grub損壞時我們就應該修復下使用grub命令,相當于我們windows中使用gost基本相似,
grub>boot (hd0,0) ? ?指定boot的MBR引導分區
grub>find / ? ? ?連鍵入兩個tab鍵這時會顯示目錄下文件信息
grub>kernel ?/vmlinuz-version ? ? 用于指定內核
grub>initrd ? /initrd-version.img ? 指定initrd引導的
grub>boot ? ?重新引導
或者使用命令直接修復
grub -install --root-directory=內核掛載點/dev/hda
內核的掛載點也是有講究的:當我們的boot和跟目錄是單獨分區的話就不用寫全路徑,當沒有單獨分區時就需要寫上全路徑的
上面我們提到過linux也是有運行級別的,其中1級別是單用戶模式我們在在忘記linux的密碼時就可以進去該模式進行修改了方法:在開機運行時們進去內核啟動項里輸入e開始編輯選擇對應的內核輸入S然后按enter鍵確認輸入b引導這時我們就可以不用輸入密碼登陸了,這時有人就會想這樣雖然方面了但是那豈不是任何可以接觸到我主機的人都可以進去該級別下修改root密碼了這也太不安全了吧,不用擔心我們也有安全機制的,可以給grub加密碼讓用戶輸入e修改時必須輸入p后完成密碼方可進去修改那豈不是很好的嗎?
使用grub-md5-crypy命令使用的MD5加碼后的密碼 編輯/boot/grub/grub.conf
同時passwd放置的位置不同所起的作用也不同
放在title上面:password --md5給grub加密碼
放在title下面:password --md5給內核加密碼
總結
以上是生活随笔為你收集整理的linux初始化进程ppid号,linux基础(十一)--系统初始化的简谈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Office 2007:另存为PDF或X
- 下一篇: 【工具】VirtualBox装VBoxG