在 Linux 系統下一些常用的關機/重啟命令有 shutdown、halt、reboot以及init,他們都可以達到重啟系統的目的,但每個命令的內部工作過程不同。
一、使用 shutdown 關機或重啟
1. shutdown 命令介紹
shutdown 命令安全地將系統關機,在系統關機前使用 shutdown 命令,系統管理員會通知所有登錄的用戶系統將要關閉,並且 login 指令會被凍結,即新的用戶不能再登錄。直接關機或是延時一段時間關機都是可以的,也可以進行重啟。
shutdown 執行的工作是送信號給 init 程序,要求它改變 runlevel。 runlevel 0 被用來停機, runlevel 6 用來程序激活系統。 而 runlevel 1 則是被用來讓系統進入管理工作可以進行的狀態。 如果想要了解在停機或重新開機過程中做了哪些動作,可以在 /etc/inittab 里看到關於這些 runlevel 的 信息。
2. shutdown 參數說明
-t 在改變到其它 runlevel 之前,告訴 init 多久以后關機
-r 重啟計算機
-k 並不是真正關機,只是送警告信號給每位登陸者
-h 關機后關閉電源
-n 不用 init,而是自己來關機
-c 取消目前正在執行的關機程序
-f 在重啟計算機時忽略 fsck
-F 在重啟計算機時強迫 fsck
-time 設關機前的時間
二、最簡單的關機指令 halt
halt 就是調用 shutdown -h。 halt 執行時,會殺死應用進程,執行 sync 系統調用,文件系統寫操作完成后就會停止內核,與 reboot 不同之處在於 halt 用來關機,而 reboot 用來重啟系統。
三、使用 reboot 重啟系統
reboot 命令用來重啟系統,用法比較簡單,在終端命令行以 root 用戶執行該命令即可進行系統的重啟。
reboot 命令常用參數如下:
-n 在重啟之前不執行磁盤刷新
-w 做一次重啟模擬,並不會真的重新啟動
-d 不把記錄寫到 /var/log/wtmp 檔案里( -n 參數包含了 -d)
-f 強制重開機
-i 在重開機之前先把所有網絡相關的裝置停止
四、使用 poweroff 終止系統運行
poweroff 就是 halt 或 reboot 命令的軟鏈接。而執行 halt 調用 shutdown -h 。具體如下所示:
[hk@localhost ~]$ which poweroff
/usr/sbin/poweroff
[hk@localhost ~]$ ls -l /sbin/poweroff
lrwxrwxrwx. 1 root root 16 Nov 14 21:00 /sbin/poweroff -> ../bin/systemctl
[hk@localhost ~]$ ls -lhtr /sbin/halt
lrwxrwxrwx. 1 root root 16 Nov 14 21:00 /sbin/halt -> ../bin/systemctl
[hk@localhost ~]$
五、使用 init 命令改變系統運行級別
init 是所有進程的祖先,其進程號始終為 1 ,所以發送 TERM 信號給 init 會終止所有的用戶進程、守護進程等。 shutdown 使用的就是這種機制。
init 定義了 7 個運行級別,每個運行級別定義如下:
0 停機
1 單用戶模式
2 多用戶
3 完全多用戶模式
4 沒有用到
5 X11(X Window)
6 重新啟動
這些級別在 /etc/inittab 里指定。這個文件是 init 程序尋找的主要文件,最先運行的服務是放在 /etc/rc.d 目錄下的文件。 在大多數的Linux發行版中,啟動腳本都是位於 /etc/rc.d/init.d 中的。這些腳本被用 ln 命令鏈接到 /etc/rc.d/rcN.d 目錄,這里的 N 就是運行級別 0 -6.因此使用 init 命令可以關機或重新啟動。
