官术网_书友最值得收藏!

3.4 運(yùn)行機(jī)制介紹

Linux系統(tǒng)的運(yùn)行機(jī)制,主要包括系統(tǒng)的運(yùn)行級(jí)別,系統(tǒng)的啟動(dòng)、引導(dǎo)與修復(fù),root密碼重置及關(guān)機(jī)等過(guò)程,下面講述Linux的具體運(yùn)行機(jī)制。

3.4.1 系統(tǒng)運(yùn)行級(jí)

所謂運(yùn)行級(jí)別,簡(jiǎn)單來(lái)說(shuō),就是操作系統(tǒng)當(dāng)前正在運(yùn)行的功能級(jí)別。級(jí)別為0~6,分別具有不同的功能,這些級(jí)別定義保存在/etc/inittab文件中。這個(gè)文件是init程序?qū)ふ业闹饕募到y(tǒng)最先運(yùn)行的服務(wù)是那些放在/ect/rc.d目錄下的文件。

1.運(yùn)行級(jí)別及原理

Linux下的7個(gè)運(yùn)行級(jí)別如表3-2所示。

表3-2 /etc/inittab運(yùn)行級(jí)別

各級(jí)別說(shuō)明如下。

0:系統(tǒng)停機(jī)狀態(tài),系統(tǒng)默認(rèn)運(yùn)行級(jí)別不能設(shè)置為0,否則不能正常啟動(dòng),機(jī)器關(guān)閉。

1:?jiǎn)斡脩?hù)工作模式,root權(quán)限,用于系統(tǒng)維護(hù),禁止遠(yuǎn)程登錄,就像Windows下的安全模式登錄。

2:多用戶(hù)模式,不支持NFS功能。

3:完整的多用戶(hù)模式,有NFS支持,登錄后進(jìn)入控制臺(tái)命令行模式。

4:系統(tǒng)保留,一般不用。在一些特殊情況下可以用它來(lái)做一些事情,例如在筆記本電腦的電池用盡時(shí),可以切換到這個(gè)模式來(lái)做一些設(shè)置。

5:X11控制臺(tái),登錄后進(jìn)入圖形GUI模式,X Window系統(tǒng)。

6:系統(tǒng)正常關(guān)閉并重啟,默認(rèn)運(yùn)行級(jí)別不能設(shè)為6,否則系統(tǒng)不能正常啟動(dòng)。運(yùn)行init6機(jī)器就會(huì)重啟。

標(biāo)準(zhǔn)的Linux運(yùn)行級(jí)別為3或5。

關(guān)于運(yùn)行級(jí)別的補(bǔ)充說(shuō)明如下:

在目錄/etc/rc.d/init.d下有許多服務(wù)器腳本程序,一般稱(chēng)為服務(wù)(service)。

在/etc/rc.d下有7個(gè)名為rcN.d的目錄,對(duì)應(yīng)系統(tǒng)的7個(gè)運(yùn)行級(jí)別。

rcN.d目錄下都是一些符號(hào)鏈接文件,這些鏈接文件都指向init.d目錄下的service腳本文件,命名規(guī)則為K+nn+服務(wù)名或S+nn+服務(wù)名,其中nn為兩位數(shù)字。

系統(tǒng)會(huì)根據(jù)指定的運(yùn)行級(jí)別進(jìn)入到對(duì)應(yīng)的rcN.d目錄,并按照文件名順序檢索目錄下的鏈接文件:對(duì)于以K(Kill)開(kāi)頭的文件,系統(tǒng)將終止對(duì)應(yīng)的服務(wù);對(duì)于以S(Start)開(kāi)頭的文件,系統(tǒng)將啟動(dòng)對(duì)應(yīng)的服務(wù)。

查看運(yùn)行級(jí)別可用runlevel。

進(jìn)入其他運(yùn)行級(jí)別可使用initN命令,例如運(yùn)行init3則進(jìn)入終端模式,運(yùn)行init5則又登錄到圖形GUI模式。

標(biāo)準(zhǔn)的Linux運(yùn)行級(jí)別為3或5,如果是3的話(huà),系統(tǒng)就運(yùn)行在多用戶(hù)狀態(tài)下;如果是5的話(huà),則運(yùn)行在X Window系統(tǒng)下。不同的運(yùn)行級(jí)別有不同的用處,應(yīng)該根據(jù)不同情形來(lái)設(shè)置。例如,如果丟失了root口令,那么可以讓機(jī)器啟動(dòng)進(jìn)入單用戶(hù)狀態(tài)來(lái)設(shè)置。在啟動(dòng)后的lilo提示符下輸入:

  init=/bin/shrw

這樣就可以使機(jī)器進(jìn)入運(yùn)行級(jí)別1,并把root文件系統(tǒng)掛載為讀寫(xiě)權(quán)限。它會(huì)跳過(guò)所有系統(tǒng)認(rèn)證,讓用戶(hù)使用passwd程序來(lái)改變r(jià)oot口令,然后以一個(gè)新的運(yùn)行級(jí)啟動(dòng)。

2.chkconfig用法

chkconfig命令可以用來(lái)檢查、設(shè)置系統(tǒng)的各種服務(wù),使用語(yǔ)法如下:

  chkconfig[--add][--del][--list][系統(tǒng)服務(wù)]

  chkconfig[--level<等級(jí)代號(hào)>][系統(tǒng)服務(wù)] [on/off/reset]

參數(shù)用法如下。

add 增加指定的系統(tǒng)服務(wù),讓chkconfig指令得以管理它,并同時(shí)在系統(tǒng)啟動(dòng)的敘述文件內(nèi)增加相關(guān)數(shù)據(jù)。

del 刪除指定的系統(tǒng)服務(wù),不再由chkconfig指令來(lái)管理該任務(wù),并同時(shí)在系統(tǒng)啟動(dòng)的敘述文件內(nèi)刪除相關(guān)數(shù)據(jù)。

level<等級(jí)代號(hào)> 指定讀系統(tǒng)服務(wù)要在哪一個(gè)執(zhí)行等級(jí)中開(kāi)啟或關(guān)閉。

使用范例:

  chkconfig --list 列出所有的系統(tǒng)服務(wù)
  chkconfig --add httpd 增加httpd服務(wù)
  chkconfig --del httpd 刪除httpd服務(wù)
  chkconfig --level httpd 2345 on httpd在運(yùn)行級(jí)別為2、3、4、5的情況下設(shè)置為on
(開(kāi)啟)的狀態(tài)。

chkconfig命令提供了一種簡(jiǎn)單的方式來(lái)設(shè)置一個(gè)服務(wù)的運(yùn)行級(jí)別。例如,為了設(shè)置MySQL服務(wù)器在運(yùn)行級(jí)別為3和4上運(yùn)行,用戶(hù)必須首先將MySQL添加為受chkconfig管理的服務(wù):

  chkconfig --add mysql

現(xiàn)在,假設(shè)用戶(hù)在級(jí)別3和5上設(shè)定服務(wù)為“on”,可輸入:

  chkconfig --level 35 mysql on

在其他級(jí)別上設(shè)為“off”,可輸入:

  chkconfig --level 01246 mysql off

為了確認(rèn)用戶(hù)的配置被正確地修改了,可以列出服務(wù)將會(huì)運(yùn)行的運(yùn)行級(jí)別,輸入代碼如下所示。

  chkconfig --list mysql

3.4.2 系統(tǒng)啟動(dòng)過(guò)程及GRUB文件

RHEL系統(tǒng)的啟動(dòng)按照如下步驟進(jìn)行,其啟動(dòng)流程如圖3-2所示。

圖3-2 系統(tǒng)啟動(dòng)流程

(1)POST(加電自檢):檢測(cè)硬件

在CPU的控制下,將RAM芯片中的某個(gè)程序映射到ROM地址空間,并執(zhí)行其中的指令,完成系統(tǒng)硬件健康狀況的檢查,例如存儲(chǔ)設(shè)備、網(wǎng)卡、CPU、聲卡等硬件設(shè)備是否完好。檢查完成后,如果所有硬件或基本硬件、核心硬件沒(méi)有問(wèn)題時(shí),則進(jìn)入下一個(gè)啟動(dòng)流程啟動(dòng)BIOS。

(2)BIOS(Boot Sequence):決定啟動(dòng)介質(zhì)

按照BIOS所設(shè)定的系統(tǒng)啟動(dòng)流程,根據(jù)引導(dǎo)次序(Boot Sequence)自上而下地尋找對(duì)應(yīng)存儲(chǔ)設(shè)備上操作系統(tǒng)的MBR(全稱(chēng)為Master Boot Record,即硬盤(pán)的主引導(dǎo)記錄),如果MBR存在,則會(huì)讀取MBR中的bootloader。

(3)MBR(bootloader):尋找grub,讀取配置文件/etc/grub.conf,決定默認(rèn)啟動(dòng)項(xiàng)

根據(jù)MBR所指引的活動(dòng)分區(qū),尋找系統(tǒng)分區(qū)中的bootloader。bootloader是一段程序,占據(jù)446字節(jié)。在bootloader中配置了所要引導(dǎo)操作系統(tǒng)的內(nèi)核所在的位置,因此當(dāng)BIOS被載入內(nèi)存并實(shí)現(xiàn)將控制權(quán)限轉(zhuǎn)交給bootloader以后,bootloader即接收整個(gè)系統(tǒng)的控制權(quán)限;而后根據(jù)用戶(hù)的選擇去讀取相應(yīng)操作系統(tǒng)的內(nèi)核,并將內(nèi)核裝載到內(nèi)存的某個(gè)空間位置,解壓縮;這時(shí)kernel就可以在內(nèi)存中開(kāi)始工作,并根據(jù)kernel本身的功能在內(nèi)存中搜索硬件,加載硬件驅(qū)動(dòng)程序,完成內(nèi)核初始化,bootloader會(huì)將控制權(quán)限轉(zhuǎn)交給內(nèi)核。

(4)kernel(初始化):內(nèi)核會(huì)主動(dòng)調(diào)用init進(jìn)程,讀取配置文件/etc/inittab,決定啟動(dòng)級(jí)別,運(yùn)行初始化腳本/etc/rc.d/rc.sysinit。

步驟是探測(cè)硬件→加載驅(qū)動(dòng)(initrd)→掛載根文件系統(tǒng)→rootfs(/sbin/init)。initrd是一個(gè)虛擬的文件系統(tǒng),里面有/、lib、bin、sbin、usr、proc、sys、var、dev、boot等目錄,我們稱(chēng)之為虛擬的根文件系統(tǒng),作用是將kernel和真實(shí)的根文件系統(tǒng)建立關(guān)聯(lián)關(guān)系,讓kernel去initrd中加載根文件系統(tǒng)所需要的驅(qū)動(dòng)程序,以讀寫(xiě)的方式掛載根文件系統(tǒng),并執(zhí)行用戶(hù)當(dāng)中第一個(gè)進(jìn)程init。

/etc/inittab

/sbin/init啟動(dòng)會(huì)用到/etc/inittab所定義的條目,如:默認(rèn)登錄級(jí)別為id:3:initdefault:,/etc/inittab有0~6個(gè)運(yùn)行級(jí)別。

系統(tǒng)初始化(/etc/rc.d/rc.sysinit)

①檢測(cè),并以讀寫(xiě)方式掛載根文件系統(tǒng)。

②設(shè)定主機(jī)名。

③檢測(cè)并掛載/etc/fstab中的其他文件系統(tǒng)。

④啟動(dòng)swap分區(qū)。

⑤初始化外圍硬件設(shè)備驅(qū)動(dòng)。

⑥根據(jù)/etc/sysctl.conf設(shè)定內(nèi)核參數(shù)。

⑦激活udev和seLinux。

⑧激活LVM和RAID設(shè)備。

⑨清理過(guò)期鎖文件和PID文件。

⑩裝載鍵映射(鍵盤(pán)上每個(gè)鍵的功能)。

GRUB配置文件/etc/grub.conf

/etc/grub.conf文件說(shuō)明如圖3-3、圖3-4所示。

圖3-3 /etc/grub.conf文件說(shuō)明

圖3-4 /etc/grub.conf文件說(shuō)明

文件參數(shù)說(shuō)明如下。

default=0:默認(rèn)啟動(dòng)第一個(gè)系統(tǒng),后面的每一個(gè)title對(duì)應(yīng)一個(gè)系統(tǒng),第一個(gè)title對(duì)應(yīng)第一個(gè)系統(tǒng),用0表示;第二個(gè)title對(duì)應(yīng)第二個(gè)系統(tǒng),用1表示。

timeout=5:默認(rèn)啟動(dòng)選擇界面時(shí)停留的時(shí)間,單位是秒。例如設(shè)置為5,表示等待5秒后會(huì)自動(dòng)進(jìn)入默認(rèn)操作系統(tǒng)。

splashimage=(hd0,0)/grub/splash.xpm.gz:grub啟動(dòng)背景畫(huà)面,配置文件中可以不包括此項(xiàng)內(nèi)容。

hiddenmenu:隱藏菜單。只有按上、下鍵才會(huì)出現(xiàn)。

title Red Hat Enterprise Linux (2.6.32-279.el6.i686):title后面是系統(tǒng)在啟動(dòng)時(shí)顯示的名字。

root (hd0,0):root指定內(nèi)核所在的分區(qū),hd0表示第一塊硬盤(pán)設(shè)備,0表示第一個(gè)分區(qū),也就是/boot所在的分區(qū)。

kernel...:內(nèi)核所在位置和名字。ro表示只讀,root用于指定根分區(qū),rhgb用圖形化方式顯示啟動(dòng)過(guò)程,quiet表示用靜默式方式啟動(dòng),不顯示dmesg信息。

initrd /initramfs-2.6.32-279.el6.i686.img:initrd內(nèi)核鏡像的名字。

rhgb:表示redhat graphics boot,就是用圖片來(lái)代替啟動(dòng)過(guò)程中顯示的文本信息。這些信息在啟動(dòng)后用dmesg可以看到。

quiet:表示在啟動(dòng)過(guò)程中只顯示重要信息,類(lèi)似硬件自檢的消息則不會(huì)顯示。

3.4.3 系統(tǒng)引導(dǎo)過(guò)程及修復(fù)

RHEL系統(tǒng)啟動(dòng)的引導(dǎo)過(guò)程如圖3-5所示。

圖3-5 RHEL系統(tǒng)啟動(dòng)引導(dǎo)過(guò)程

引導(dǎo)故障修復(fù)主要包含以下兩種情況:grub.conf文件損壞和/boot分區(qū)損壞。下面詳細(xì)說(shuō)明這兩種故障產(chǎn)生的原因及解決方法。

【例3-1】重啟系統(tǒng)停留在如圖3-6所示的界面,分析故障原因并說(shuō)明解決方法。

圖3-6 系統(tǒng)出錯(cuò)界面

故障原因:

GRUB找到不啟動(dòng)文件。

解決步驟:

(1)手動(dòng)指定啟動(dòng)文件位置,運(yùn)行root或者find /vmlinuz-2.6.32-279.e16.i686(可以使用Tab鍵補(bǔ)全),搜索vmlinuz所在分區(qū),也就是/boot所在分區(qū),如圖3-7所示。

圖3-7 指定啟動(dòng)文件位置

(2)指定Linux內(nèi)核,執(zhí)行kernel /vmlinuz-2.6.32-279.el6.i686 ro root=LABEL=/ rhgb quiet(結(jié)合Tab鍵),如圖3-8所示。

圖3-8 指定內(nèi)核

(3)指定initrd文件,執(zhí)行initrd /initrd-2.6.32-279.e16.i686.img,如圖3-9所示。

圖3-9 指定initrd文件

(4)執(zhí)行boot,如圖3-10所示。

圖3-10 執(zhí)行boot

(5)出現(xiàn)框中所標(biāo)的Red Hat字樣說(shuō)明內(nèi)核加載成功,如圖3-11所示。

圖3-11 內(nèi)核加載成功

啟動(dòng)成功后需要在grub.conf中把剛才執(zhí)行的三行命令加進(jìn)去,否則下次啟動(dòng)時(shí)還是會(huì)出現(xiàn)系統(tǒng)出錯(cuò)界面。如果執(zhí)行以上操作后還是無(wú)法正常進(jìn)入系統(tǒng),并提示內(nèi)核恐慌等信息時(shí),可以在第二步后面加上參數(shù)enforcing=0。

【例3-2】若經(jīng)過(guò)以上操作仍無(wú)法正常進(jìn)入系統(tǒng),提示內(nèi)核恐慌,如圖3-12所示,試說(shuō)明原因及解決方法。

圖3-12 內(nèi)核恐慌提示

故障原因:

提示無(wú)法找到root的參數(shù),也就是使用root=LABEL=/這個(gè)參數(shù)后無(wú)效。

解決步驟:

(1)使用安裝盤(pán),以救援模式rescue啟動(dòng),使用chroot命令切換到硬盤(pán)系統(tǒng),修改根目錄的LABEL名稱(chēng),如圖3-13所示。

圖3-13 內(nèi)核恐慌解決方案

(2)再重復(fù)上面修復(fù)的過(guò)程即可,如果以上還是無(wú)法修復(fù),可以嘗試在【例3-1】中解決方法的第二步指定內(nèi)核kernel /vmlinuz-2.6.32-279.el6.i686 ro root=LABEL=/ rhgb quiet后面增加參數(shù)enforcing=0。

【例3-3】若/boot分區(qū)損壞重啟后出現(xiàn)的界面和上面介紹的grub文件損壞時(shí)的一樣,如何判斷是grub損壞,還是/boot分區(qū)損壞?在指定內(nèi)核時(shí)無(wú)法找到參數(shù)應(yīng)如何解決?

在【例3-1】中指定內(nèi)核時(shí)發(fā)現(xiàn)找不到內(nèi)核參數(shù),此時(shí),應(yīng)按照如下方法解決:

(1)放入安裝盤(pán)從光盤(pán)啟動(dòng),進(jìn)入救援模式,執(zhí)行步驟如圖3-14所示。

圖3-14 進(jìn)入救援模式

(2)當(dāng)前boot目錄下一個(gè)文件也沒(méi)有(boot下面應(yīng)主要包含grub和kernel),因此這里需要安裝這兩部分內(nèi)容。先掛載安裝盤(pán),命令為mount/dev/cdrom/mnt/cd/,如圖3-15所示。

圖3-15 掛載安裝grub

(3)然后安裝kernel,命令為:rpm -ivh -force/mnt/cd/Packages/kernel-2.6.32-279. e16.i686.rpm,如圖3-16所示。

圖3-16 掛載安裝kernel

(4)安裝好kernel后還需要安裝grub,命令為grub-install/dev/sda,如圖3-17所示。

圖3-17 安裝grub

(5)新安裝的grub沒(méi)有配置文件,需要手動(dòng)添加,如圖3-18所示。

圖3-18 添加grub配置文件

(6)輸入兩次exit后退出重啟,重啟后會(huì)檢測(cè)磁盤(pán),如圖3-19所示。該過(guò)程可能會(huì)有點(diǎn)長(zhǎng)。

圖3-19 退出重啟

3.4.4 root密碼重置

恢復(fù)root密碼需要在單用戶(hù)模式下對(duì)root賬戶(hù)進(jìn)行初始化,對(duì)root賬戶(hù)重新設(shè)置密碼的步驟如下。

(1)出現(xiàn)如圖3-20所示的界面時(shí),立即按字母鍵E,之后出現(xiàn)如圖3-21所示的界面。

圖3-20 系統(tǒng)啟動(dòng)按字母鍵E界面

圖3-21 按字母鍵E后出現(xiàn)的界面

(2)在出現(xiàn)圖3-21所示界面后,再按字母鍵E,進(jìn)入如圖3-22所示的界面。

圖3-22 再按字母鍵E后的界面

(3)在圖3-22所示界面中選中第二行(kernel /vm...)后,再按字母鍵E進(jìn)入如圖3-23所示的界面。

圖3-23 選中第二行再按字母鍵E后的界面

(4)在圖3-23所示界面中輸入空格和數(shù)字1,如圖3-24所示。

圖3-24 輸入空格和1后的界面

(5)按Enter鍵后進(jìn)入如圖3-25所示界面。

圖3-25 按回車(chē)鍵后的界面

(6)在圖3-25所示界面中按字母鍵B,進(jìn)入如圖3-26所示界面,然后修改需要修改的賬戶(hù)密碼。

圖3-26 按字母鍵B后的界面

(7)重啟后即可用修改后的密碼來(lái)登錄。

3.4.5 系統(tǒng)關(guān)機(jī)過(guò)程

在了解Linux系統(tǒng)關(guān)機(jī)過(guò)程之前,有必要先學(xué)習(xí)Linux一些常用的關(guān)機(jī)命令。在Linux下,常用的關(guān)機(jī)/重啟命令有shutdown、halt、reboot和init等,它們都可以達(dá)到關(guān)機(jī)重啟系統(tǒng)的目的,但是每一個(gè)命令的內(nèi)部工作過(guò)程卻是不同的。通過(guò)學(xué)習(xí)這些可以更加靈活地運(yùn)用各種關(guān)機(jī)命令,并進(jìn)一步詳細(xì)了解Linux系統(tǒng)的安全關(guān)機(jī)過(guò)程。

1.shutdown,停止系統(tǒng)的妥善方式

shutdown命令可安全地將系統(tǒng)關(guān)機(jī)。有些用戶(hù)會(huì)使用直接斷掉電源的方式來(lái)關(guān)閉Linux,這種方法是十分危險(xiǎn)的。因?yàn)長(zhǎng)inux與Windows不同,其后臺(tái)運(yùn)行著許多進(jìn)程,所以強(qiáng)制關(guān)機(jī)可能會(huì)導(dǎo)致進(jìn)程的數(shù)據(jù)丟失,使系統(tǒng)處于不穩(wěn)定的狀態(tài),甚至在有的系統(tǒng)中會(huì)損壞硬件設(shè)備。而在系統(tǒng)關(guān)機(jī)前使用shutdown命令,系統(tǒng)管理員會(huì)通知所有登錄的用戶(hù)系統(tǒng)將要關(guān)閉。并且loginm命令會(huì)被凍結(jié),即新的用戶(hù)不能登錄。直接關(guān)機(jī)、延遲一定的時(shí)間關(guān)機(jī)或者重啟都是可能,這是由所有進(jìn)程收到系統(tǒng)所送達(dá)的信號(hào)決定的。這讓像vi之類(lèi)的程序有時(shí)間來(lái)儲(chǔ)存目前正在編輯的文檔,而像處理郵件和新聞的程序則可以正常地離開(kāi)等。

shutdown的任務(wù)是送信號(hào)給init程序,要求它改變r(jià)unlevel。runlevel 0用來(lái)停機(jī),runlevel 6用來(lái)重新激活系統(tǒng),而runlevel 1則是用來(lái)讓系統(tǒng)進(jìn)入運(yùn)行管理狀態(tài)。要想了解在停機(jī)或者重新開(kāi)機(jī)過(guò)程中做了哪些動(dòng)作,可以在/etc/inittab文件里查看runlevels的相關(guān)資料。

shutdown的參數(shù)說(shuō)明如下:

[-t]在改變到其他runlevel之前,告訴init多久以后關(guān)機(jī)。

[-r]重啟計(jì)算機(jī)。

[-k]并不真正關(guān)機(jī),只是發(fā)送警告信號(hào)給每位登錄的用戶(hù)(login)。

[-h]關(guān)機(jī)后關(guān)閉電源(halt)。

[-n]不用init,而是用戶(hù)自己來(lái)關(guān)機(jī)。不鼓勵(lì)使用這個(gè)選,該選項(xiàng)所產(chǎn)生的后果往往不是預(yù)料得到的。

[-c] cancel current process取消目前正在執(zhí)行的關(guān)機(jī)程序。這個(gè)選項(xiàng)沒(méi)有時(shí)間參數(shù),但是可以輸入一個(gè)用來(lái)解釋的信息,該信息將會(huì)發(fā)送到每位登錄的用戶(hù)。

[-f]在重啟計(jì)算機(jī)(reboot)時(shí)忽略fsck命令。

[-F]在重啟計(jì)算機(jī)(reboot)時(shí)強(qiáng)制執(zhí)行fsck命令。

[-time]設(shè)定關(guān)機(jī)(shutdown)前的時(shí)間。

【例3-4】立即關(guān)機(jī)重啟。

命令如下:

  shutdown –r now

【例3-5】立即關(guān)機(jī)。

命令如下:

  shutdown –h now

【例3-6】設(shè)定10分鐘后關(guān)機(jī),同時(shí)發(fā)出警告信息給其他登錄的用戶(hù)。

命令如下:

  shutdown +10  "system will shut down after 10 minutes"

2.halt,關(guān)閉系統(tǒng)更簡(jiǎn)單的方式

halt是最簡(jiǎn)單的關(guān)機(jī)命令,其實(shí)halt調(diào)用的就是shutdown -h。執(zhí)行halt時(shí),會(huì)殺死應(yīng)用進(jìn)程,執(zhí)行sync系統(tǒng)調(diào)用,文件系統(tǒng)寫(xiě)操作完成后就會(huì)停止內(nèi)核的工作。

halt的參數(shù)說(shuō)明如下:

[-n]防止sync系統(tǒng)調(diào)用。它用在使用fsck修補(bǔ)根分區(qū)之后,以阻止內(nèi)核用老版本的超級(jí)塊(superblock)來(lái)覆蓋修補(bǔ)過(guò)的超級(jí)塊。

[-w]并不是真正的重啟或關(guān)機(jī),只是寫(xiě)wtmp(/var/log/wtmp)記錄。

[-d]不寫(xiě)wtmp記錄(已包含在選項(xiàng)[-n]中)。

[-f]不調(diào)用shutdown而強(qiáng)制關(guān)機(jī)或重啟。

[-i]關(guān)機(jī)(或重啟)前,關(guān)掉所有的網(wǎng)絡(luò)接口。

[-p]該選項(xiàng)為缺省選項(xiàng),就是關(guān)機(jī)時(shí)調(diào)用poweroff。

3.reboot,快速重新啟動(dòng)

reboot的工作過(guò)程和參數(shù)都與halt相差不多,不過(guò)它用于主機(jī)重啟,而halt是關(guān)機(jī)。

4.telinit,改變init的運(yùn)行級(jí)

init是所有進(jìn)程的祖先,它的進(jìn)程號(hào)始終為1,所以發(fā)送TERM信號(hào)給init會(huì)終止所有的用戶(hù)進(jìn)程、守護(hù)進(jìn)程等,shutdown使用的就是這種機(jī)制。init定義了8個(gè)運(yùn)行級(jí)別(runlevel),其中init 0為關(guān)機(jī),init 1為重啟。telinit命令可以改變init的運(yùn)行級(jí)別,比如,telinit -iS可使系統(tǒng)進(jìn)入單用戶(hù)模式。在使用telinit命令的時(shí)候,不會(huì)得到像shutdown那樣友好的警告信息,也得不到使用shutdown時(shí)的信息和等待時(shí)間,所以很少使用。不過(guò)對(duì)于執(zhí)行測(cè)試inittab文件的修改效果來(lái)說(shuō),使用該命令還是比較方便的。

5.poweroff,關(guān)閉電源

poweroff命令等價(jià)于halt,不同之處在于,Linux關(guān)閉后poweroff可以向電源管理系統(tǒng)(在支持這項(xiàng)功能的系統(tǒng)上)發(fā)送一則請(qǐng)求來(lái)關(guān)閉系統(tǒng)的主電源,這項(xiàng)功能易于實(shí)現(xiàn)遠(yuǎn)程關(guān)機(jī)。Linux的文件系統(tǒng)緩沖一般在內(nèi)存中變化,只是偶爾才把它們寫(xiě)回磁盤(pán)。這種方案使得磁盤(pán)I/O速度更快,但是當(dāng)系統(tǒng)被粗暴地中止時(shí),這種方式也更容易使文件系統(tǒng)丟失數(shù)據(jù)。傳統(tǒng)的裝有Unix和Linux系統(tǒng)的計(jì)算機(jī)要非常小心地處理關(guān)機(jī)方式才行,雖然現(xiàn)在的系統(tǒng)已經(jīng)變得強(qiáng)壯了(尤其是使用ext3這樣強(qiáng)健的文件系統(tǒng)時(shí)),但是妥善關(guān)機(jī)總是一個(gè)好習(xí)慣。

關(guān)閉或者重新引導(dǎo)系統(tǒng)有許多種方法,比如關(guān)閉電源,但即使是在桌面系統(tǒng)上,關(guān)閉電源也不是關(guān)閉系統(tǒng)的一個(gè)好辦法,這樣做有可能丟失數(shù)據(jù)和破壞文件系統(tǒng)。許多計(jì)算機(jī)有一個(gè)軟電源開(kāi)關(guān),當(dāng)用戶(hù)按下電源按鈕時(shí),計(jì)算機(jī)實(shí)際上是在運(yùn)行一串命令來(lái)執(zhí)行關(guān)閉系統(tǒng)的正確操作。不過(guò),這種情況也是相對(duì)的,當(dāng)發(fā)生緊急情況時(shí),如果沒(méi)有足夠的時(shí)間來(lái)妥善關(guān)機(jī),那么關(guān)閉電源也是可以的。當(dāng)然,Linux系統(tǒng)下的關(guān)機(jī)操作更為常用是使用上述shutdown命令、halt或者reboot命令、以telinit命令改變init運(yùn)行級(jí)別及poweroff命令關(guān)閉系統(tǒng)電源等方法。

主站蜘蛛池模板: 玉林市| 鲁甸县| 宜兰县| 武川县| 赫章县| 湖州市| 称多县| 慈溪市| 双桥区| 财经| 佳木斯市| 镇巴县| 双辽市| 南宁市| 金阳县| 彰武县| 巴彦淖尔市| 东平县| 江阴市| 重庆市| 渭南市| 视频| 合水县| 隆林| 八宿县| 宕昌县| 廉江市| 耒阳市| 青浦区| 都匀市| 正阳县| 邮箱| 乌鲁木齐市| 将乐县| 大城县| 昂仁县| 正定县| 延安市| 林州市| 浑源县| 望谟县|