熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Slackware Linux 101 在引導 Linux 機器時發生了什麼

2013-11-13 16:22:30  來源: Oracle 

  作者Joe Zonker Brockmeier (jbroc)高級編輯User Friendly Media
  提要Joe Brockmeier 研究了 Slackware Linux init 進程他討論了系統如何初始化服務各種運行級別是什麼以及如何從缺省安裝中添加或除去服務來定制系統
  
  
  Linux 用戶正日益成熟這意味著他們想要將系統配置成執行他們希望完成的任務但目前 Linux 發行版通常都附帶了自動配置的設備和啟動服務如 Sendmail 或 Apache這些發行版沒有考慮到的是毫不更改其缺省設置來運行服務如 Apache 用戶毫不知情 會讓黑客和利用腳本搗亂的人趁虛而入而且這會用完本可以更好利用的系統資源 比如可以用於 Quake 或您喜歡的編譯器的更多處理器時間由於缺少控制是件糟糕的事因此讓我們看一下 Linux 系統引導時在 init 進程期間在所涉及的各個運行級別上都發生了什麼以及如何在系統運行時定制系統或在運行級別之間切換
  
  我們的示例使用 x 平台上的 Slackware Linux 發行版(請參閱本文後面的參考資料)大多數信息可用於其它 Linux 發行版但在細節處會略有不同尤其是與其說 Slackware 的 init 結構類似於 System V 結構還不如說它更類似於 BSD UNIX 結構盡管 Slackware 的最新發行版中的程序做了一些讓步它們要將服務添加到啟動但期望這些服務是 System V 目錄結構(請參閱側欄BSD 和系統 V init 腳本之間的差異
  
  所有進程的父代
  當 Linux 機器引導時究竟會發生什麼?在計算機的 BIOS 完成其任務後系統會讀取硬盤(或軟盤或 CDROM或 Zip 驅動器……Linux 是非常靈活的)的第一位並會遇到引導裝入程序雖然 GRUB 和其它裝入程序也逐漸變得流行但通常這就是 Linux 裝入程序 (LInux LOader)一般稱作 LILO
  
  然後 LILO 將 Linux 內核裝入內存並開始展示它的魔力Linux 內核初始化了諸如 SCSI 卡之類的設備以及其它內核中內置的硬件設備然後內核運行 init它是除內核之外在系統運行的第一個進程如果執行 ps ax | grep 就會看到 init 的進程 ID (PID) 是
  
  裝入 init 之後它會讀取 inittab 以查看下一步做什麼inittab 告訴 init 要進入什麼運行級別以及在哪裡可以找到該運行級別的配置文件
  
  運行級別
  運行級別是由系統上的所有服務在某個給定時間定義的(基本上是操作方式)Linux 可以有幾種操作方式單用戶方式單用戶聯網方式多用戶方式始於 X 窗口的多用戶方式等等這部分將要說明運行級別的概念Slackware 上有哪些運行級別已經它們被叫作什麼
  
  運行級別由數字或字母標明可惜不是所有的 Linux 發行版在各個運行級別的稱呼問題上都能達成共識在某些發行版中運行級別 是使用 X 窗口登錄的多用戶方式而其它的如 Slackware將運行級別 指定成使用控制台登錄的多用戶方式
  
  據我所知所有 Linux 發行版都認同運行級別 停機運行級別 S 是單用戶方式(稍後將詳細說明)運行級別 是重新引導系統Slackware 的運行級別如下
  
  運行級別 = 系統停機
  運行級別 = 單用戶方式主要用於維護
  運行級別 = 從不使用
  運行級別 = 使用控制台登錄的多用戶方式
  運行級別 = 使用 X 會話管理器的多用戶方式 (XDM GDM KDM)
  運行級別 = 從不使用
  運行級別 = 重新引導
  運行級別 S 或 s = 單用戶方式
  
  這裡沒有記錄運行級別 在理論上它們適用於在需要時定制運行級別但我還沒有親自嘗試過創建一個
  
  BSD 和 System V init 腳本之間的差異
  Slackware Linux 使用 BSD init 腳本說說挺容易但這究竟表示什麼?
  
  仿真 BSD init 樣式的 Linux 和 UNIX 系統有一個 /etc/rcd/ 目錄其中每個運行級別都包含一個 init 腳本因此如果要查看或修改運行級別 的 init 腳本應該編輯文件 /etc/rcd/rc
  
  另一方面其 init 腳本基於 System V 的系統對於每個運行級別都有獨立的目錄因此如果要編輯運行級別 init 腳本應查找 /etc/rcd/ 目錄並查找該目錄中對應於要修改的服務的腳本
  
  這個差異導致了 Berkeley Software Distribution (BSD) UNIX 和 AT&T System V UNIX 之間的設計差異這兩者都開創了各自的 UNIX 商業版本它們連同 Vi 以及 Emacs 一起是計算機界的激烈爭論之一
  
  由於許多 Linux 發行版都喜歡 System V init 布局Slackware 現在也附帶了目錄和 rcsysvinit init 腳本用於保持兼容性
  
  運行級別配置
  如果您使用的不是 Slackware Linux那麼配置文件的結構與我談到的結構會大不相同除了 inittab 文件所有 Slackware 的啟動配置文件都在 /etc/rcd/ 目錄中
  
  缺省情況下目錄中有 個運行級別 rc* 腳本如果將 symlink 從 rc 加到 rc那麼可有
  
  運行級別 init 腳本是
  
  rc = rc 文件是到 rc 的 symlink
  rcM = 多用戶運行級別 的 init 腳本
  rcK = 管理運行級別單用戶方式
  rcS = 系統初始化腳本
  rc = 運行級別 (自動引導入所選擇的 X 會話管理器)的 init 腳本
  rc = 重新引導或停止系統時由 init 執行的腳本
  
  目錄中的其余 rc* 文件用於啟動諸如聯網內核模塊PCMCIASambaApacheNetatalk 和 GPM 的系統服務如果想要使某個服務(如 Apache)完全不能在任何運行級別上使用請使用 chmod 將文件的許可權從可執行更改成不可執行除去該文件也可以到達相同效果但我不推薦這種做法也許在以後某個日子您會發現要重新啟用服務但卻不知道怎樣做
  
  rcinet 腳本負責啟動基本聯網服務如設置主機名(IP 和 DHCP)rcinet 腳本負責啟動所有其它 INET 服務如 NFS包轉發ssh 服務器和其它聯網守護程序
  
  所有 Slackware /etc/rcd/rc* 文件都是 Bash shell 腳本都可以進行手工編輯可是對於聯網您可能應該先嘗試 netconfig 實用程序雖然需要手工編輯 /etc/nf 來添加多個名稱服務器但是它也許能處理您想要執行的所有操作而且它非常易於使用
  
  如果您是 Linux 初學者並且要修改系統那麼也許應該確保您有引導軟盤並且應該復制您所有想要編輯的 rc* 文件如果拿不定主意我通常會將文件保存為 rc*old使它們變成不可執行文件
  
  使用運行的系統
  好現在系統已經運行然而您需要在單用戶方式中執行一些操作 該怎麼做呢?本文的下一部分將說明如何在系統運行時更改運行級別而不是通過重新引導來更改運行級別而且還說明了為什麼執行此操作以及何時執行
  
  telinit 命令在運行的系統上更改運行級別
  telinit 命令可以用於更改運行級別當以 root 身份執行 telinit S(或者想要更改的任意運行級別)時它會更改運行級別關閉前一個運行級別然後啟動下一個
  
  某種程度上您正在重新引導系統的一部分然而關閉與重新啟動服務的能力正是 Linux 最可愛的品質之一想要更改機器的 IP 地址嗎?沒問題只要進行一些更改然後重新啟動聯網服務就行了只要一切配置正確備份和運行是如此迅速很難分辯是否做過更改在其它即使更改了桌面上的牆紙都必須重新引導的操作系統上嘗試一下執行此操作
  
  確實需要重新引導或徹底關閉 Linux 機器的唯一情況是如果正在添加或更改硬件假設您正在使用不能熱插拔的設備或者已經中斷且需要使機器脫機以修復損壞與其它操作系統不同對於那些不經過重新引導就無法解決問題的產品系統我從來沒有看到過重新引導解決了這些系統上的問題我曾設法利用諸如 hdparm 的命令來掛起非生產性機器我希望這種情況發生
  
  假設您想要執行一些系統維護而這些系統維護要求系統處於單用戶方式例如使用 hdparm 調整硬盤第一步是 su(切換)到 root 用戶
  
  然後執行 telinit 命令使系統進入單用戶方式
  
  telinit S t
  
  自變量 t 是可選的它告訴 telinit 在真正切換到單用戶方式之前等待 然而只要執行了該命令登錄到機器的任何人都會看到在控制台上出現一個警告指出系統將切換運行級別或將在 秒內停機
  
  到了 秒時init 會關閉單用戶方式中不使用的進程並使系統進入單用戶方式然後將提示您輸入 root 用戶密碼以執行系統維護
  
  系統進入單用戶方式所使用的進程略有不同缺省情況下單用戶方式要求 init 在控制台上調用 sulogin 命令並要求在單用戶方式中使用 root 登錄
  
  系統進入單用戶方式後應該會看到如下的消息
  
  Give root password for system maintenance
  (or type ControlD for normal startup):
  
  執行了維護之後可以執行以下命令來使系統回到以前的運行級別
  
  telinit
  
  此命令告訴系統重新進入多用戶運行級別在此命令中可以用 來代替 在 Slackware 系統上運行級別 將使您進入使用 X 窗口顯示管理器之一的多用戶方式因此您將直接登錄到 X 窗口
  
  如果在擁有串行電纜的串行上掛了 UPS那麼就可以讓 UPS 在斷電的情況下向系統發送一個信號如果您的產品級系統有一個很大的文件系統那麼這是非常有用的我曾看到過當沒
From:http://tw.wingwit.com/Article/program/Oracle/201311/18222.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.