歡迎您光臨本站 註冊首頁

Linux 啟動過程, 初始化和關閉

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  本節介紹當Red Hat Linux系統啟動和關閉時會發生什麼. 讓我們從查看目錄 /etc/sysconfig中的信息開始.


11.9.1 Sysconfig信息
以下信息概括了/etc/sysconfig中的文件, 它們的功能和內容.


11.9.1.1 /etc/sysconfig中的文件
以下文件通常可以在/etc/sysconfig中找到:



/etc/sysconfig/clock

/etc/sysconfig/keyboard

/etc/sysconfig/mouse

/etc/sysconfig/network

/etc/sysconfig/pcmcia

/etc/sysconfig/amd

/etc/sysconfig/tape

讓我們依次看一下.


/etc/sysconfig/clock
-- /etc/sysconfig/clock文件控制著對系統時鐘讀出值的解釋. 早期版本的Red Hat Linux使用以下值(現在已不推薦使用):


CLOCKMODE=mode, 這裡mode是以下之一:


GMT -- 表明時鐘設置為UTC.

ARC -- 僅用於alpha表明使用ARC.


目前, 正確的值應為:



UTC=boolean, 這裡boolean是以下之一:


true -- 表明時鐘設置為UTC. 其他值表明設置為當地時間.


ARC=boolean, 這裡boolean是以下之一:


true -- (僅使用Alpha系統) 表明ARC時間系統有效; 其他值表明使用一般的UNIX時間系統.



/etc/sysconfig/keyboard
-- /etc/sysconfig/keyboard 文件控制著鍵盤的行為. 可以使用以下值:


KEYTABLE=file, 這裡 file是鍵盤對照表文件名. 例如:
KEYTABLE="/usr/lib/kbd/keytables/us.map"


/etc/sysconfig/mouse
-- /etc/sysconfig/mouse文件用來指定滑鼠的有關信息. 可以使用以下值:


MOUSETYPE=type, 這裡type是以下之一:


microsoft -- A Microsoft mouse.
mouseman -- A MouseMan mouse.
mousesystems -- A Mouse Systems mouse.
ps/2 -- A PS/2 mouse.
msbm -- A Microsoft bus mouse.
logibm -- A Logitech bus mouse.
atibm -- An ATI bus mouse.
logitech -- A Logitech mouse.
mmseries -- A older MouseMan mouse.
mmhittab -- A mmhittab mouse.


XEMU3=emulation, 這裡emulation是以下之一:


yes -- 模擬三鍵滑鼠.

no -- 滑鼠已有三鍵.


另外, /dev/mouse是指向實際滑鼠設備的符號連接.


/etc/sysconfig/network
-- /etc/sysconfig/network 文件用來指定有關網路配置的信息. 可以使用以下值:


NETWORKING=answer, 這裡 answer是以下之一:


yes -- 需配置網路.

no -- 不需配置網路.


HOSTNAME=hostname, 這裡hostname必須是 FQDN (Fully Qualified Domain Name完全有效的域名), 但可以是您喜歡的任何主機名.
請注意: 為了兼容人們安裝的舊軟體(如trn), 在 /etc/HOSTNAME 文件中必須包含和這裡相同的值.


FORWARD_IPV4=answer, 這裡 answer 是以下之一:


yes -- 執行IP轉遞(forward).

no -- 不執行IP轉遞(forward).

(目前的Red Hat Linux默認地把它設為 o(為了適應RFC), 但是如果FORWARD_IPV4 沒有設置, 為了兼容Red Hat Linux4.2 及以前版本, 是能夠轉遞的.)


GATEWAY=gw-ip, 這裡gw-ip是網關的IP地址.

GATEWAYDEV=gw-dev, 這裡gw-dev是網關的設備(例如eth0).

NISDOMAIN=dom-name, 這裡dom-name是 NIS域名.


/etc/sysconfig/pcmcia
-- /etc/sysconfig/pcmcia文件用來指定PCMCIA配置信息. 可以使用以下信息:


PCMCIA=answer, 這裡answer是以下之一:


yes -- 支持PCMCIA.

no -- 不支持PCMCIA.


PCIC=pcic-type, 這裡pcic-type是以下之一:


i82365 -- 計算機有一個i82365類型的PCMCIA插槽晶元.

tcic -- 計算機有一個tcic類型的PCMCIA插槽晶元.


PCIC_OPTS=option, 這裡option是插槽驅動器(i82365或tcic)的時間參數.

CORE_OPTS=option, 這裡option是PCMCIA 的CORE選項.

CARDMGR_OPTS=option, 這裡option是PCMCIA 的CARDMGR選項.


/etc/sysconfig/amd
-- /etc/sysconfig/amd文件用來指定 amd的操作參數. 可以使用以下值:


ADIR=path, 這裡 path是 amd目錄. 它應該是/.automount, 並且通常不會改變.

MOUNTPTS=mountpts, 這裡mountpts是, 例如, /net /etc/amd.conf.

AMDOPTS=options, 這裡options是其他AMD 選項.


/etc/sysconfig/tape
-- /etc/sysconfig/tape文件用來指定磁帶機的有關信息. 可以用以下值:


DEV=devnam, 這裡 devnam是磁帶設備 (例如, /dev/nst0). 對於SCSI磁帶機這是/dev/nst#,其中#是您想用的磁帶驅動器的數量. 如果您只有一個, 就用/dev/nst0. 對於IDE磁帶機用/dev/ht#, 其中#是您想用的磁帶驅動器的數量. 如果您只有一個, 就用/dev/ht0. 對於軟磁帶機用/dev/ftape.

ADMIN=account, 這裡account是當備份失敗時發送郵件的用戶帳號. 通常設為 oot.

SLEEP=time, 這裡time是磁帶操作之間需要睡眠的時間. 有些驅動器比其他的需要更多的時間, 但是5對於8mm, 4mm, 和DLT都能很好的工作.

BLOCKSIZE=size, 這裡size 是磁帶機最優的塊的大小. 對於8mm, 4mm和DLT32768能很好的工作. 一個最佳的設置是您的驅動器一次可寫的數據.

SHORTDATE=date, 這裡date是給短日期賦值的一個字元串, 用於備份日誌文件名. 默認值是: $(date +%y:%m:%d:%H:%M)

DAY=date, 這裡date是給日期賦值的一個字元串, 用於日誌文件目錄. 默認值是:$(date +log-%y:%m:%d)

DATE=date, 這裡date是給普通日期賦值的一個字元串, 用於日誌文件. 默認值是:$(date)

LOGROOT=path, 這裡path是登錄目錄的根.

LIST=file, 這裡file增加的備份用來存放增加的清單的文件名. 它將後跟一個序數.

DOTCOUNT=count, 這裡 count 用來計數的文件名, 可以知道哪些是增加的清單.

COUNTER=count-file, 這裡count-file 是用來在結束時重新開始.

BACKUPTAB=file, 這裡file是我們保持備份的文件名.


11.9.1.2 在/etc/sysconfig/network-scripts/中的文件
以下文件可以在/etc/sysconfig/network-scripts中發現:



/etc/sysconfig/network-scripts/ifup

/etc/sysconfig/network-scripts/ifdown

/etc/sysconfig/network-scripts/network-functions

/etc/sysconfig/network-scripts/ifcfg-

/etc/sysconfig/network-scripts/ifcfg--

/etc/sysconfig/network-scripts/chat-

/etc/sysconfig/network-scripts/dip-

/etc/sysconfig/network-scripts/ifup-post

/etc/sysconfig/network-scripts/ifdhcpc-done

讓我們依次看一下.


/etc/sysconfig/network-scripts/ifup, /etc/sysconfig/network-scripts/ifdown
-- 是/sbin/ifup和 /sbin/ifdown的連接. 這是在這個目錄中僅有的兩個應該直接調用的script; 這兩個script調用其他需要的script. 這兩個連接放在這是歷史遺留下來的 -- 在將來的版本中可能被移去, 所以現在應該用/sbin/ifup和/sbin/ifdown.
這些script通常有一個參數: 設備名(例如eth0). 在啟動時, 它們用第二個參數oot調用, 所以在啟動時不需要得設備可以在那時忽略.


/etc/sysconfig/network-scripts/network-functions
-- 不是真正的公共文件. 包含script用來啟動和關閉界面的功能. 特別, 它包含用來控制可選界面配置和通過網路報告通知界面修改的大多數代碼.

/etc/sysconfig/network-scripts/ifcfg-,
/etc/sysconfig/network-scripts/ifcfg--
-- 第一個
文件定義一個界面, 第二個文件僅包含在克隆界面中不同的部分. 例如, 網路號可能不同, 但其他都相同, 所以在克隆文件中只需要網路號, 而其他設備信息都在基本的 ifcfg文件.
在ifcfg文件中定義的根據界面類型而不同.

以下值在所有的基本文件中是共同的:



DEVICE=name, 這裡name是物理設備的名稱 (除了動態分配的PPP設備是邏輯名稱).

IPADDR=addr, 這裡addr是IP地址.

NETMASK=mask, 這裡mask是網路掩碼.

NETWORK=addr, 這裡addr是網路地址.

BROADCAST=addr, 這裡addr是廣播地址.

GATEWAY=addr, 這裡addr是網關地址.

ONBOOT=answer, 這裡answer是以下之一:


yes -- 這個設備在啟動時應該激活.

no -- 這個設備在啟動時不需激活.


USERCTL=answer, 這裡answer是以下之一:


yes -- 允許非root用戶控制該設備.

no -- 不允許非root用戶控制該設備.


BOOTPROTO=proto, 這裡proto是以下之一:


none -- 不需使用啟動時協議.

bootp -- 需使用bootp協議.

dhcp -- 需使用dhcp協議.


以下值對於所有PPP和SLIP文件是共同的:



PERSIST=answer, 這裡answer是以下之一:


yes -- 該設備必需一直保持活躍, 即使數據機掛起.

no -- 該設備不必一直保持活躍.


MODEMPORT=port, 這裡port是數據機的設備名(例如:/dev/modem).

LINESPEED=baud, 這裡baud是數據機的線速(例如,115200).

DEFABORT=answer, 這裡 answer是以下之一:


yes -- 當創建/編輯這個界面的script時插入默認的結束字元.

no -- 當創建/編輯這個界面的script時不需插入默認的結束字元.


以下值對於所有的PPP文件是共同的:



DEFROUTE=answer, 這裡answer是以下之一:


yes -- 將該界面設置為默認路由.

no -- 不將該界面設置為默認路由.


ESCAPECHARS=answer, 這裡 answer是以下之一:


yes -- 使用預定義的asyncmap.

no -- 不使用預定義的asyncmap.

(這是一個簡化的界面; 它不讓人們指定哪個字元是escape. 但是, 幾乎每個人都使用一個00000000asyncmap. 可以設置PPPOPTIONS使用一個專門的asyncmap.)


HARDFLOWCTL=answer, 這裡answer是以下之一:


yes -- 使用硬體流控制.

no -- 不使用硬體流控制.


PPPOPTIONS=options, 這裡 options 是一個選項字元串. 它放在命令行的最後, 可以覆蓋以前定義的其他選項.

PAPNAME=name, 這裡name是pppd命令行 "name $PAPNAME"部分.
注意 emotename選項總是指定為邏輯ppp設備名, 象ppp0 (如果其他ppp設備已經啟動,它可能是物理設備ppp1), 它使管理pap/chap文件更容易 ---名稱/口令對是和邏輯ppp設備名相關的, 它們可以一起管理.

原則上, 邏輯PPP設備名可以是worldnet或myISP, 而不一定必須是``ppp0 -- ``pppN.


REMIP=addr, 這裡addr是遠程IP地址(通常不指定).

MTU=value, 這裡value是MTU值.

MRU=value, 這裡value是MRU值.

DISCONNECTTIMEOUT=value, 這裡value 代表在連接中斷後重新建立連接需要等待的秒數.

RETRYTIMEOUT=value, 這裡value 代表前一次連接失敗后再次連接需要等待的秒數.


/etc/sysconfig/network-scripts/chat-
-- 這個文件是PPP或SLIP連接的對話script, 用來建立連接. 對於SLIP設備, 從對話 script寫一個DIP script; 對於PPP設備, 直接使用對話script.

/etc/sysconfig/network-scripts/dip-
-- 這個只寫script是netcfg從對話script創建的. 不要修改這個文件. 將來, 可能會沒有這個文件, 將從對話script動態創建.

/etc/sysconfig/network-scripts/ifup-post
-- 這個文件在任何網路設備(除了SLIP設備)啟動是被調用. 調用/etc/sysconfig/network-scripts/ifup-routes 啟動基於那個設備的靜態路由. 啟動那個設備的別名. 如果主機名沒有設置並可以從它的IP地址找到的話, 設置主機名. 發送SIGIO給任何請求網路事件通知的程序.
可以擴展配置域名服務, 如果需要, 調用scripts等等.


/etc/sysconfig/network-scripts/ifdhcpc-done
-- 這個文件在DHCP 配置完成後被dhcpcd調用; 從dhcpcd在/etc/dhcpc/resolv.conf中寫的版本可以配置/etc/resolv.conf.

11.9.2 System V Init
本節簡單介紹啟動的內部過程. 它主要包括機器如何用SysV init啟動, 以及用舊的Linux版本和SysV啟動的區別.

Init是啟動時運行內核的程序. 它負責啟動所有在啟動時需要運行的進程, 包括允許您登錄的gettys, NFS管理器, FTP管理器,以及您想在機器啟動時運行的任何事.

SysV init很快成為Linux世界在啟動時控制軟體啟動的標準. 這是因為它比傳統的 BSD init更容易使用, 更有力和更靈活.

SysV init和BSD init不同點還有, 配置文件存放在/etc的一個子目錄而不是存放在/etc. 這個目錄叫rc.d. 在那裡您將發現 rc.sysinit 和以下目錄:


init.d
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

init.d包含一組script. 基本上, 您在啟動時或進入另一個運行級別時, 每個service需要一個script. Services包括網路, NFS, 發送郵件, HTTPD等等. Services不包括象setserial這種運行一次就退出的事. 那種事應該放在rc.local或 rc.serial.

如果您需要rc.local, 它應該在/etc/rc.d. 雖然它作用不大, 但大多數系統都有它. 如果您在啟動時需要做串口方面的事, 您還可以在 /etc/rc.d中放一個rc.serial.

事件的過程如下:

內核在幾個地方查找init並運行它找到的第一個
init運行/etc/rc.d/rc.sysinit
rc.sysinit做一組必需的事然後運行rc.serial (如果存在)
init在默認運行級別運行所有的script
init運行rc.local
默認的運行級別在/etc/inittab中定義. 您應該在前面有一行類似:


id:3:initdefault:

在這裡, 您看到第二欄, 默認運行水平是3, 大多數系統都是這樣. 如果您想修改它您可以手工編輯/etc/inittab改掉3. 在改inittab時需要非常小心. 如果您陷入困境, 您可以重啟動並:

LILO boot: linux single

這將允許您以單用戶模式啟動, 並可修改inittab.

現在, 它如何運行所有正確的script? 如果您在rc3.d輸入ls -l ,您可以看到:


lrwxrwxrwx 1 root root 17 3:11 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 3:11 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 14 3:32 S40cron -> ../init.d/cron
lrwxrwxrwx 1 root root 14 3:11 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 13 3:11 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 15 3:11 S70nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 18 3:11 S90lpd -> ../init.d/lpd.init
lrwxrwxrwx 1 root root 11 3:11 S99local -> ../rc.local

您可以看到這個目錄中沒有真的文件, 只有對init.d目錄中的script的連接. 這個連接在前面還有一個S和一個數字. S是指啟動這個特定的script, K是指結束它. 數字是順序. Init將根據順序啟動所有的services. 您可以重複數字, 但這隻會把您搞混. 您只能用一個兩位數字和一個大寫的S或K來啟動或結束您需要的 service.

Init如何啟動和結束service? 很簡單. 每個script都寫了一個接收參數用來啟動 和結束. 您可以用命令行來執行這些script, 如:


/etc/rc.d/init.d/httpd.init stop

結束httpd伺服器. Init只需讀文件名, 如果有K, 它就用stop參數調用script. 如果有S,則用start參數. 那麼運行級別呢? 有些想要一個簡單的方法將機器設置成多用途. 我可以有一個伺服器運行級別, 運行httpd, 發送郵件, 網路等等. 然後, 我可以有一個用戶運行級別, 運行xdm等等.


11.9.3 Init Runlevels
一般的, Red Hat Linux運行在級別 3---完全多用戶模式. Red Hat Linux使用以下運行級別:


0
停止.
1
單用戶模式.
2
沒有NFS的多用戶模式.
3
完全多用戶模式.
6
重啟動.
如果您的機器因為毀壞了/etc/inittab無法啟動, 或者因為毀壞了/etc/passwd 不讓您登錄或者您忘了口令, 您可以在LILO提示下輸入linux 1進入單用戶模式. 您可以在這個模式下改正錯誤.


11.9.4 Initscript工具
chkconfig工具提供了一個簡單的命令行的工具來維護/etc/rc.d 目錄. 它使管理員不需要直接操作/etc/rc.d中的許多連接.

另外, ntsysv工具提供了面向屏幕的用戶界面.

詳情請參見chkconfig和ntsysv的man page.


11.9.5 在啟動時運行程序
在啟動時或者修改運行級別時, 當所有的其他初始化完成後, 將執行文件/etc/rc.d/rc.local. 您可以在這增加新的初始程序. 例如, 您想啟動更多的管理工具, 或者初始化印表機. 另外, 如果您需要串口設置, 您可以編輯/etc/rc.d/rc.serial, 它將在啟動時自動運行.

默認地, /etc/rc.d/rc.local簡單地用您的內核版本和機器類型創建一個好看的登錄標誌.


11.9.6 關閉
要關閉Red Hat Linux, 發出shutdown命令. 您可以閱讀shutdown man page 得到完整的信息, 但是有兩個最常見的用法:


shutdown -h now
shutdown -r now

每個都會幹凈地關閉系統. 在關閉之後, 前者會停止機器, 後者將重啟動.

雖然現在如果運行在級別1至5, 可以用reboot和halt 命令來替代shutdown, 但這是一個壞習慣, 因為並不是所有類Linux的操作系統都有這個特性.

摘自:http://www.hf.ah.cn/computer/linux51/doc085.htm#i691


[火星人 ] Linux 啟動過程, 初始化和關閉已經有343次圍觀

http://coctec.com/docs/linux/show-post-68029.html