Linux入門——啟動和關閉
Linux入門——啟動和關閉
摘要:本文主要學習了Linux的啟動和關閉。
配置檔案
說明
在CentOS 7之前可以通過修改inittab配置檔案來修改開機啟動模式。
CentOS 7由於使用systemd而不是init,所以不能通過修改inittab配置檔案來修改開機啟動模式,而是通過命令列。
檔案格式
在Linux系統啟動時,會啟動init程序,init程序會根據/etc/inittab這個檔案,在不同的執行級別啟動相應的程序或執行相應的操作。
在/etc/inittab配置檔案中定義的登記項都是以“:”隔開的四個段,即:
1 id:runlevels:action:process
登記項
id
每個登記項的識別符號,用於唯一標識每個登記項,不能重複。
runlevels
系統的執行級別,表示process的action要在哪個級別下執行,該段中可以定義多個執行級別,各級別之間直接寫不用分隔符,如果為空,表示在所有的執行級別執行。
Linux的執行級別有:
1 0:表示關機,系統預設級別不能設為0,否則不能正常啟動。 2 1:表示單使用者模式,在這個模式中,使用者登入不需要密碼,禁止遠端登入。 3 2:表示多使用者模式,NFS服務不開啟,沒有網路服務。 4 3:表示完全的多使用者模式,有NFS服務,登入進入命令列模式。 5 4:這個模式保留未用。 6 5:表示圖形使用者模式,登入進入圖形介面。7 6:表示重啟系統,系統預設級別不能設為6,否則不能正常啟動。
最常用到的是3和5。
action
表示對應登記項的process在一定條件下所要執行的動作。
具體動作有:
1 respawn:當process終止後馬上啟動一個新的process。 2 wait:當進入指定的runlevels後process才會啟動一次,並且到離開這個runlevels終止。 3 initdefault:設定預設的執行級別,即我們開機之後預設進入的執行級別,不能是0和6,你懂的。 4 sysinit:系統初始化,只有系統開機或重新啟動的時候,這個process才會被執行一次。 5 powerwait:當init接收到電源失敗訊號的時候執行相應的process,並且如果init有程序在執行,會等待這個程序完成之後,再執行相應的process。6 powerfail:當init接收到電源失敗訊號的時候執行相應的process,並且如果init有程序在執行,不會等待這個程序完成,它會直接執行相應的process。 7 powerokwait:電源已經故障,但是在等待執行對應操作的時候突然來電了就執行對應的process。 8 powerfailnow:當電源故障並且init被通知UPS電源已經快耗盡執行相對應的process。 9 ctrlaltdel:當用戶按下ctrl+alt+del這個組合鍵的時候執行對應的process。 10 boot:只有在引導過程中,才執行該程序,但不等待該程序的結束,當該程序死亡時,也不重新啟動該程序。 11 bootwait:只有在引導過程中,才執行該程序,並等待程序的結束,當該程序死亡時,也不重新啟動該程序。 12 off:如果process正在執行,那麼就發出一個警告訊號,等待20秒後,再通過殺死訊號強行終止該process。如果process並不存在那麼就忽略該登記項。 13 once:啟動相應的程序,但不等待該程序結束便繼續處理/etc/inittab檔案中的下一個登記項,當該程序死亡時,init也不重新啟動該程序。
process
表示啟動哪個程式或指令碼或執行哪個命令等。
檢視
CentOS 7之前的配置檔案:
1 [root@localhost ~]# 2 # 3 # inittab This file describes how the INIT process should set up 4 # the system in a certain run-level. 5 # 6 # Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org> 7 # Modified for RHS Linux by Marc Ewing and Donnie Barnes 8 # 9 10 # Default runlevel. The runlevels used by RHS are: 11 # 0 - halt (Do NOT set initdefault to this) 12 # 1 - Single user mode 13 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 14 # 3 - Full multiuser mode 15 # 4 - unused 16 # 5 - X11 17 # 6 - reboot (Do NOT set initdefault to this) 18 # 19 id:3:initdefault: 20 21 # System initialization. 22 si::sysinit:/etc/rc.d/rc.sysinit 23 ... 24 [root@localhost ~]#
CentOS 7的配置檔案:
1 [root@localhost ~]# cat /etc/inittab 2 # inittab is no longer used when using systemd. 3 # 4 # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. 5 # 6 # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target 7 # 8 # systemd uses 'targets' instead of runlevels. By default, there are two main targets: 9 # 10 # multi-user.target: analogous to runlevel 3 11 # graphical.target: analogous to runlevel 5 12 # 13 # To view current default target, run: 14 # systemctl get-default 15 # 16 # To set a default target, run: 17 # systemctl set-default TARGET.target 18 # 19 [root@localhost ~]#
命令列
在CentOS 7中,可以使用命令列來設定執行級別。
檢視當前執行級別:
1 systemctl get-default
設定當前執行級別為3,開機為命令列模式:
1 systemctl set-default multi-user.target
設定當前執行級別為5,開機為圖形介面:
1 systemctl set-default graphical.target
啟動過程
加電自檢
當計算機開啟電源後,首先是BIOS開機自檢,按照BIOS中設定的啟動裝置(通常是硬碟)來啟動。
核心引導
作業系統接管硬體以後,首先讀入“/boot”目錄下的核心檔案。
執行init
init程序是系統所有程序的起點,你可以把它比擬成系統所有程序的老祖宗,沒有這個程序,系統中任何程序都不會啟動。
init程式首先是需要讀取配置檔案/etc/inittab。
啟動程序
init程序會根據配置檔案的執行級別啟動相應的程序。
系統初始化
在init的配置檔案中呼叫執行了/etc/rc.d/rc.sysinit,而rc.sysinit是一個指令碼,它主要是完成一些系統初始化的工作,rc.sysinit是每一個執行級別都要首先執行的重要指令碼。
它主要完成的工作有:啟用交換分割槽,檢查磁碟,載入硬體模組以及其它一些需要優先執行任務。
建立終端
rc執行完畢後,返回init。這時基本系統環境已經設定好了,各種守護程序也已經啟動了。
init接下來會開啟6個終端,以便使用者登入系統。
使用者登入系統
一般來說,使用者的登入方式有三種:
(1)命令列登入
(2)ssh登入
(3)圖形介面登入
關閉系統
說明
在Linux領域內大多用在伺服器上,很少遇到關機的操作。畢竟伺服器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。
正確的關機流程為:
1 sync > shutdown > reboot > halt
不管是重啟系統還是關閉系統,首先要執行sync命令,把記憶體中的資料寫到磁碟中。
命令
sync
將資料由記憶體同步到硬碟中。
同步:
1 [root@localhost ~]# sync
shutdown
關機指令。
立馬關機:
1 [root@localhost ~]# shutdown –h now
在今天20:25關機:
1 [root@localhost ~]# shutdown –h 20:25
十分鐘後關機:
1 [root@localhost ~]# shutdown –h +10
立馬重啟:
1 [root@localhost ~]# shutdown –r now
十分鐘後重啟:
1 [root@localhost ~]# shutdown –r +10
reboot
重啟,等同於“shutdown –r now”。
重啟:
1 [root@localhost ~]# reboot
poweroff
關閉系統,等同於“shutdown –h now”。
關閉:
1 [root@localhost ~]# poweroff
halt
關閉系統,等同於“shutdown –h now”和“poweroff”
關閉:
1 [root@localhost ~]# halt
init
執行指定程序。
關閉:
1 [root@localhost ~]# init 0
重啟:
1 [root@localhost ~]# init 6