Linux 護套

事實證明,引導過程沒有太多內容:

1. 引導加載程序在 disk,將其加載到內存中,然後啟動它。
2. 內核初始化的設備和性病司機。
3. 內核掛載根文件system.
4. 內核啟動init稱為計劃。
5. 初始化設置其餘的運動過程中。
6. 最後進程init啟動引導順序的一部分,允許您登錄。

確定啟動過程的每個階段對於解決啟動問題和了解啟動過程非常重要。 system 整體上首先,在引導加載程序上進行零輸入,這是初始屏幕,或者在計算機執行開機自檢後詢問您是否進行以下操作時提示您 system 跑步。 做出選擇後,引導加載程序會運行 Linux 內核,移交控制權 system 到內核。

本文摘自在這本書中,這在其他地方的內核有一個詳細的討論。 本文介紹了 內核初始化階段,這是內核打印一堆有關硬件存在的消息的階段。 system。 內核會在顯示一條消息,表明內核已掛載內核後立即啟動init。 根文件system:

VFS:安裝 根目錄(ext2 文件system) 只讀。

不久之後,您將看到有關init啟動的消息,然後是 system 服務啟動消息,最後您得到某種登錄提示。

注意 :在 紅帽 Linux, init 註釋特別明顯,因為它“歡迎”你加入紅帽 Linux。” 此後的所有消息都會在屏幕右側的括號中顯示成功或失敗。

本章的大部分處理初始化,因為它是WHERE部分你有控制的引導順序。
初始化

init 沒有什麼特別之處。 它是一個程序,就像任何其他程序一樣 Linux system,您會在/ sbin中找到它,以及其他 system 二進製文件。 init的主要目的是按特定順序啟動和停止其他程序。 您只需要知道此序列是如何工作的即可。

有一些不同的變化,但大多數 Linux 分佈使用 System V型在這裡討論。 Some distributions use a simpler version that resembles the BSD init, but you are unlikely to encounter this.有些發行版使用的是類似於BSD init的簡單版本,但是您不太可能遇到這種情況。

運行級別

在任何給定時間 Linux system,某個基本的進程集正在運行。 這種狀態 machine稱為其運行級別,並用0到6之間的數字表示。 system 它的大部分時間都花在單個運行級別上。 但是,當您關閉 mac降低,init切換到不同的運行級別以終止 system 以有序的方式提供服務並告訴內核停止。 另一種運行級別適用於單用戶 mode,稍後討論。

獲取運行級別的最簡單方法是檢查 init 配置文件 /etc/inittab。 查找如下所示的行:

ID:5:initdefault:

這行表示 default 運行級別 system 是 5。 inittab 文件中的所有行都採用這種形式,其中用冒號分隔的四個字段按以下順序出現:
#唯一標識符(一個簡短的字符串,如ID在前面的例子)
#適用的運行級別的數字(S)
#init應該執行的操作(在前面的示例中,該操作是設置 default 運行級別到5)
#要執行的命令(可選)

在前面的init中沒有要執行的命令default 例子,因為在設置上下文中命令沒有意義 default 運行級別。 在inittab中往下看一點,直到看到這樣的行:

l5:5:等待等:/ /的rc.d / RC 5的的

這條線觸發了大多數 system 通過rc * .d和init.d目錄進行配置和服務。 您可以看到init設置為在運行級別5時執行一個名為/etc/rc.d/rc 5的命令。wait操作說明了init運行命令的時間和方式:何時運行rc 5 enter進入運行級別5,然後等待此命令完成,然後再執行其他操作。

有幾種不同的動作 add初始化default 然後等待,尤其是與電源管理有關的內容,inittab(5)手冊頁將為您提供所有相關信息。 以下幾節說明了您最有可能遇到的問題。

重生

respawn 操作會導致 init 運行後面的命令,如果該命令執行完畢,則再次運行它。 您可能會在 inittab 文件中看到類似於此行的內容:

1:2345:重生:/ sbin目錄/的mingetty tty1的的

蓋蒂程序提供的登錄提示。 上線的第一個虛擬的控制台(/ dev / tty1的),你看,當你按下ALT或CONTROL-ALT F1的F1的。 重生行動帶來的登錄提示回來後,你退出。

ctrlAltdel

ctrlaltdel操作可控制 system 在虛擬控制台上按CONTROL-ALT-DELETE時執行此操作。 在大多數 systems,這是使用shutdown命令的某種重新引導命令。

SYSINIT

sysinit操作是init啟動時應首先運行的第一件事, enter在任何運行級別。

如何在運行級別的進程開始

您現在準備好學習如何啟動 system 服務,然後再讓您登錄。 回顧一下先前的inittab行:

l5:5:等待等:/ /的rc.d / RC 5的的

這個小行會觸發許多其他程序。 RC代表執行命令,你會聽到人們提到腳本,程序或服務的命令。 所以,這些命令在哪裡呢?

For runlevel 5, in this example, the commands are probably either in /etc/rc.d/rc5.d or /etc/rc5.d.對於運行級別1,在此示例中,命令可能在/etc/rc.d/rc1.d或/etc/rc2.d中。 Runlevel 2 uses rcXNUMX.d, runlevel XNUMX uses rcXNUMX.d, and so on.運行級別XNUMX使用rcXNUMX.d,運行級別XNUMX使用rcXNUMX.d,依此類推。 You might find the following您可能會發現以下內容 items 在rc5.d目錄中:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

的RC 5命令啟動程序在這個運行級別目錄運行北京時間命令:

S10sysklogd家
S12kerneld家
S15netstd_init家
S18netbase家
...
S99sshd家

請注意每個命令中的開始參數。 命令名稱中的 S 表示該命令應在開始時運行 mode,數字(00 到 99)確定 rc 在序列中的何處啟動命令。

RC * D命令shell腳本,通常啟動程序在/ sbin或/ usr / sbin目錄。 通常情況下,你可以弄清楚什麼命令實際上是通過尋找小於或尋呼機另一個程序的腳本。

您可以手動啟動這些服務之一。 例如,如果要手動啟動httpd Web服務器程序,請運行S99httpd start。 同樣,如果您需要在 machine處於打開狀態,您可以使用stop參數(例如,S99httpd stop)在rc * .d目錄中運行命令。

某些 rc*.d 目錄包含以 K 開頭的命令(表示“kill”或“stop”) mode)。 在這種情況下,rc 使用 stop 參數而不是 start 運行命令。 您很可能會在運行級別中遇到 K 命令,這些命令會關閉 system 下。

Add刪除和刪除服務

如果你想 add、刪除、修改rc*.d目錄下的服務,需要仔細查看裡面的文件。 一個長列表揭示了這樣的結構:

lrwxrwxrwx。 。 。 S10sysklogd - > .. / init.d /的sysklogd的
lrwxrwxrwx。 。 。 S12kerneld - > .. / init.d /的核心模式
lrwxrwxrwx。 。 。 S15netstd_init - > .. / init.d /的netstd_init
lrwxrwxrwx。 。 。 S18netbase - > .. / init.d /的netbas的
...

rc*.d 目錄中的命令實際上是 init.d 目錄中文件的符號鏈接,通常位於 /etc 或 /etc/rc.d 中。 Linux 發行版包含這些鏈接,以便它們可以對所有運行級別使用相同的啟動腳本。 這種約定絕不是必需的,但它通常會使組織更容易一些。

為了防止 init.d 目錄中的命令之一在特定運行級別中運行,您可能會考慮刪除相應 rc * .d 目錄中的符號鏈接。 這確實有效,但如果您犯了錯誤並且需要將鏈接放回原處,您可能無法記住鏈接的確切名稱。 因此,您不應該刪除 rc * .d 目錄中的鏈接,而是, add 鏈接名稱開頭的下劃線 (_),如下所示:

MV S99httpd _S99httpd

在啟動時,rc忽略_S99httpd,因為它不是以S或K開頭。此外,原始名稱仍然很明顯,如果您需要手動啟動它,可以快速訪問該命令。

至 add 一個服務,你必須像其他人一樣在 init.d 目錄中創建一個腳本,然後在正確的 rc * .d 目錄中創建一個符號鏈接。 編寫腳本的最簡單方法是檢查 init.d 中已有的腳本,複製一份您理解的腳本,然後修改該副本。

时间 add在啟動服務時,請確保在啟動順序中選擇合適的位置來啟動服務。 如果服務啟動得太快,它可能無法工作,因為它依賴於某些其他服務。 對於非必要服務,大多數 systems administrators 更喜歡 90 年代的數字,在大多數服務之後 system.

Linux 發行版通常帶有一個命令來啟用和禁用 rc * .d 目錄中的服務。 例如,在 Debian 中,命令是 update-rc.d,在 Red Hat 中 Linux,命令是chkconfig。 圖形用戶界面也可用。 使用這些程序有助於保持啟動目錄一致並有助於升級。

提示: 最常見的一種 Linux install問題是配置不正確的 XFree86 服務器時常閃爍,使 system 在控制台上無法使用。 要停止此行為,請啟動到單用戶 mode 並更改您的運行級別或運行級別服務。 在 rc*.d 目錄或 /etc/inittab 中查找包含 xdm、gdm 或 kdm 的內容。

控制初始化

有時,您需要給 init 一點提示,告訴它切換運行級別、重新讀取 inittab 文件,或者只是為了 shut down system。 因為init始終是 system,其進程ID始終為1。

你可以控制的init使用telinit。 例如,如果你想要切換到的runlevel 3的,使用這個命令:

telinit的3的

切換運行級別時,init 會嘗試終止新運行級別的 inittab 文件中不存在的所有進程。 因此,更改運行級別時應該小心。

當您需要 add 或者刪除重生作業或對 inittab 文件進行任何其他更改,您必須將更改告知 init 並使其重新讀取該文件。 有些人使用kill -HUP 1 來告訴init 執行此操作。 這種傳統方法適用於大多數版本的 Unix,只要您輸入正確。 但是,您也可以運行以下 telinit 命令:

使用telinit q

您還可以使用 telinit 切換到單用戶 mode.

關閉

初始化還控制 system 關閉並重新啟動。 正確的方法 shut down a Linux machine是使用shutdown命令。

有兩種使用關機的基本方法。 如果您停止 system,它會關閉 mac放鬆下來,保持冷靜。 為了使 mac立即停止運行,請使用以下命令:

現在關機-H

在大多數情況下 modern mac與合理的最新版本相吻合 Linux, 停止會切斷電源 macine 您也可以重新啟動 macine 要重新引導,請使用-r而不是-h。

關閉過程需要幾秒鐘。 您切勿重設或關閉電源 mac在這個階段

在前面的示例中,現在是時候 shut down。 此參數是強制性的,但是有很多方法可以指定它。 如果你想要 mac要在將來某個時間關閉,一種方法是使用 + n,其中 n 是關閉在執行其工作之前應該等待的分鐘數。 對於其他 options,看關機(8)手冊頁。

製作 system 在10分鐘內重新啟動,運行以下命令:

執行shutdown-r + 10

On Linux, 關機通知任何登錄的人 machine 正在下降,但它幾乎沒有什麼實際作用。 如果您指定的時間不是現在,shutdown 會創建一個名為 /etc/nologin 的文件。 當該文件存在時, system 禁止除超級用戶以外的任何人登錄。

时间 system 關閉時間終於到了,shutdown告訴init切換到運行級別0來停止,而運行級別6來重新啟動。 初始化時 enters運行級別0或6,將執行以下所有操作,您可以通過查看rc0.d和rc6.d中的腳本來進行驗證:

1。 初始化殺死每一個過程,它可以(因為它會轉換成任何其他runlevel時)。

#初始rc0.d / rc6.d命令運行並鎖定 system 文件到位並做好關閉的其他準備工作。
# 接下來的 rc0.d/rc6.d 命令卸載所有文件system除了根以外。
# 進一步的rc0.d/rc6.d命令重新掛載根文件system 只讀。
# 還有更多 rc0.d/rc6.d 命令將所有緩衝數據寫入文件system 與同步程序。
#的最終rc0.d / rc6.d的命令告訴內核重啟或停止使用reboot,halt或關機程序。

對於每個運行級別,重新引導和停止程序的行為都不同,從而可能引起混亂。 通過 default, 這些程序使用 -r 或 -h 調用關閉 options,但如果 system 已經處於停止或重新啟動運行級別,程序告訴內核立即關閉自身。 如果您真的想關閉您的 mac急著下來(不考慮因不正常關機而造成的任何損壞),請使用-f選項。

對技術充滿熱情,我很高興寫 StealthSettings.com 自 2006 年起。我在作業系統方面擁有豐富的經驗: macOS, Windows 對 Linux,而且還包括程式語言和部落格平台(WordPress)和線上商店(WooCommerce、Magento、PrestaShop)。

發表評論