開機啟動流程
CentOS6啟動流程
1.內核引導
加電自檢,檢查bios的配置,檢測硬件,開機
2.運行init
- 0:關機
- 1:單用戶模式
- 2:多用戶模式(沒有文件系統和網絡)
- 3:多用戶模式(命令行,默認模式)
- 4:沒有使用的模式
- 5:多用戶模式(圖形化界面)
- 6:重啟
3.系統初始化
4.建立終端
5.用戶登錄
## 關機命令
init 0
halt
shutdown -h now
shutdown -h 20:20
shutdown -h +10
poweroff
## 重啟命令
init 6
reboot
shutdown -r now
shutdonw -r 20:20
shutdown -r +10
CentOS7開機啟動流程
1.BIOS(開機自檢)
2.MBR ( Master Boot Record 主引導記錄)
3.GRUB2 Bootloader(引導菜單)
4.Kernel(內核引導)
5.Systemd (不再使用init,改成了systemd)
- 找/etc/systemd/system/default.target
- /usr/lib/systemd/system/multi-user.target
- 找到/etc/systemd/system/multi-user.target.wants
6.Runlevel-Target (行級別)
7.建立終端
8.用戶登錄
運行級別:
init 0.target -> poweroff.target # 關機
init 1.target -> rescue.target # 單用戶模式
init 2.target -> multi-user.target # 多用戶模式(沒有文件系統和網絡)
init 3.target -> multi-user.target # 多用戶模式(命令行)
init 4.target -> multi-user.target # 多用戶模式(還是沒有被使用)
init 5.target -> graphical.target # 圖形化模式
init 6.target -> reboot.target # 重啟
運行級別0:系統停機狀態,系統默認運行級別不能設為0,否則不能正常啟動
運行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸
運行級別2:多用戶運行級別(沒有文件系統)
運行級別3:完全的多用戶狀態(有文件系統),登陸后進入控制台命令行模式
運行級別4:多用戶運行級別
運行級別5:X11控制台,登陸后進入圖形GUI模式
運行級別6:系統正常關閉並重啟,默認運行級別不能設為6,否則不能正常啟動
# 設置開機自啟動
systemctl enable nginx
ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
# 獲取當前默認的運行級別
[root@qls ~]# systemctl get-default
multi-user.target
# 修改運行級別
[root@qls ~]# systemctl set-default poweroff
## 使用兩條命令修改默認運行級別
[root@qls ~]# rm -f /etc/systemd/system/default.target
[root@qls ~]# ln -s /usr/lib/systemd/system/poweroff.target /etc/systemd/system/default.target
## 相關目錄
[root@qls ~]# ll /etc/systemd/system (默認的運行級別)
[root@qls ~]# ll /usr/lib/systemd/system (運行級別和服務啟動腳本)
修改開機默認運行級別
單用戶引導:方法一
進入grub菜單按e進入單用戶模式
**在linux7 行末,加上:enforcing=0 init=/bin/bash
修改完之后,按Ctrl + X**
注意:
-
設置默認的啟動級別實際上的操作是刪除軟連接和創建軟連接的過程
/etc/systemd/system/default.target # 此文件有軟連接默認啟動級別
## 修改默認啟動方式
bash-4.2# mount -o rw,remount / # 將原本的只讀權限,修改為讀寫權限並且重新掛載
bash-4.2# systemctl set-default(不能用) # 在當前此模式下無法修改啟動級別
bash-4.2# rm -f /etc/systemd/system/default.target # 刪除默認連接文件(和命令systemctl一樣效果)
# 創建新的連接文件
bash-4.2# ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
bash-4.2# exec /sbin/init # 重新引導
單用戶引導:方法二
同樣需要進入到grub界面,按e進入
同樣linux16行末添加內容,ctrl+x執行進入
switch_root:/# mount -o rw,remount /sysroot # 重新掛載文件系統
switch_root:/# chroot /sysroot # 提權切換
sh-4.2# systemctl set-default multi-user.target # 更換默認運行級別
sh-4.2# exit # 退出
sh-4.2# reboot # 重啟
忘記root密碼
單用戶模式重置:方法一
找到linux行末,添加enforcing=0 init=/bin/bash 然后按ctrl+x開始執行
## 修改密碼
bash-4.2# mount -o rw,remount / # 添加權限
bash-4.2# echo 123|passwd --stdin root # 修改密碼
bash-4.2# exec /sbin/init # 重新引導
救援模式重置:方法二
- 開機進入bios界面,選擇CDROM設置為引導啟動項
-
進入救援模式()
-
進入救援模式
-
選擇繼續,輸入1回車即可
-
提權並進行密碼修改
-
退出模式,並重新啟動
救援模式(修復MBR損壞)
-
模擬損壞MBR
dd < /dev/zero > /dev/sda bs=1 count=446 # 強行將硬盤MBR進行損壞
-
將光驅放入系統中,作為開機boot引導項
-
打開電源,進入bios界面
-
將CD-ROM設為引導啟動項(shift+將CD置頂)
-
f10保存退出
-
選擇yes
-
進入救援模式
-
進入救援模式后選擇繼續
-
選擇1選項
-
獲取root環境變量(此圖片僅作為解釋,不以此圖做任何操作)
-
回車后輸入/mnt/sysimage(提權操作)
-
退出模式后重啟
救援模式(誤刪除GRUB菜單)
- 模擬誤刪除GRUB菜單,進入救援模式
rm -rf /boot/grub2 # 刪除grub2菜單
reboot # 重啟查看效果
- 同MBR損壞操作一致,僅需要多敲一條命令
chroot /mnt/sysimage # 安裝系統提示進行提權
grub2-install /dev/sda # grub2安裝MBR引導項
grub2-mkconfig -o /boot/grub2/grub.cfg # 通過此命令在/boot/grub2/目錄生成文件.cfg
exit # 退出此模式
reboot # 重啟
設置nginx開機啟動(不用systemd方式)
-
前提:不使用systemctl的方式對nginx設置開機啟動
-
原理:使用systemctl命令開機啟動nginx,是將nginx的啟動腳本文件創建軟連接到/etc/systemd/system目錄下的對應運行級別的.wants目錄下
-
實現過程:
一、找到默認nginx啟動文件:/usr/lib/systemd/system/nginx.service
二、創建軟連接到:/etc/systemd/system/multi-usr.target.wants(針對運行級別三,其他級別不一樣)
-
查看結果
注:
一切詳情可查看(zls網站)[https://www.driverzeng.com/zenglaoshi/1810.html]
systemd進程管理
systemd優勢
1.最新系統都采用systemd管理(RedHat7,CentOS7,Ubuntu15...)
2.CentOS7 支持開機並行啟動服務,顯著提高開機啟動效率
3.CentOS7關機只關閉正在運行的服務,而CentOS6,全部都關閉一次。
4.CentOS7服務的啟動與停止不在使用腳本進行管理,也就是/etc/init.d下不在有腳本。
5.CentOS7使用systemd解決原有模式缺陷,比如原有service不會關閉程序產生的子進程。
systemd 相關文件
相關文件 | CentOS6 | CentOS7 |
---|---|---|
服務啟動腳本存放路徑 | /etc/init.d | /usr/lib/systemd/system |
開機自啟服務存放路徑 | /etc/rcN.d | /etc/systemd/system/N.target.wants |
默認運行級別 | /etc/inittab | /etc/systemd/system/default.target |
systemd啟動相關命令
system V init CentOS6 | systemd CentOS7 | 作用 |
---|---|---|
/etc/init.d/nginx start | systemctl start nginx | 啟動nginx服務 |
/etc/init.d/nginx stop | systemctl stop nginx | 停止nginx服務 |
/etc/init.d/nginx status | systemctl status nginx | 查看服務的啟動狀態 |
/etc/init.d/nginx restart | systemctl restart nginx | 重啟服務 |
/etc/init.d/nginx reload | systemctl reload nginx | 不停止服務,重新加載nginx配置文件 |
systemctl is-acvite nginx | 判斷nginx服務是否存活 | |
systemctl mask nginx | 禁止服務運行 | |
systemctl unmask nginx | 取消禁止 |
systemd開機自啟動相關命令
C6 | C7 | 作用 |
---|---|---|
chkconfig --list | systemctl list-unit-files | 查看開機自啟的服務 |
chkconfig nginx on | systemctl enable nginx | 加入開機自啟動 |
chkconfig nginx off | systemctl disable nginx | 關閉開機自啟動 |
chkconfig --list nginx | systemctl is-enabled nginx | 查看指定服務是否被開機自啟 |
chkconfig --add nginx | systemctl daemon-reload | 當我們手寫腳本時讓系統認識 |
systemd服務狀態
服務狀態 | 狀態說明 |
---|---|
loaded | 服務單元的配置文件已經被處理 |
active(running) | 服務的一個或多個進程在運行中 |
active(exited) | 一次性運行的服務成功被執行並退出(服務運行后完成任務,相關進程會自動退出) |
active(waiting) | 服務已經運行但在等待某個事件 |
inactive | 服務沒有在運行 |
enable | 服務設定為開機運行 |
disabled | 服務設定為開機不運行 |
static | 服務不能被設定開機啟動,但可以由其他服務啟動該服務 |