開機啟動流程

来源:https://www.cnblogs.com/1naonao/archive/2019/07/24/11238348.html
-Advertisement-
Play Games

[toc] 開機啟動流程 linux啟動流程 centos6 1.內核引導 2.運行init 首先讀取/etc/inittab配置文件 在init中,涉及7個運行級別(runlevel) 查看當前運行的級別 臨時切換運行級別 永久切換運行級別 查看開機自啟服務 CentOS6忘記root密碼或者調整 ...


目錄

開機啟動流程

linux啟動流程

centos6

1.內核引導

2.運行init

首先讀取/etc/inittab配置文件

在init中,涉及7個運行級別(runlevel)

運行級別0:系統停機狀態,系統預設運行級別不能設為0,否則不能正常啟動
運行級別1:單用戶工作狀態,root許可權,用於系統維護,禁止遠程登陸
運行級別2:多用戶狀態(沒有文件系統)
運行級別3:完全的多用戶狀態(有文件系統),登陸後進入控制台命令行模式
運行級別4:系統未使用,保留
運行級別5:X11控制台,登陸後進入圖形GUI模式
運行級別6:系統正常關閉並重啟,預設運行級別不能設為6,否則不能正常啟動

查看當前運行的級別

[root@zls ~]# runlevel
N 3

臨時切換運行級別

[root@zls ~]# init 5
[root@zls ~]# runlevel
3 5

永久切換運行級別

[root@zls ~]# vim /etc/inittab
id:3:initdefault

查看開機自啟服務

[root@zls ~]# chkconfig --list

註:該輸出結果只顯示 SysV 服務,並不包含
原生 systemd 服務。SysV 配置數據
可能被原生 systemd 配置覆蓋。

      要列出 systemd 服務,請執行 'systemctl list-unit-files'。
      查看在具體 target 啟用的服務請執行
      'systemctl list-dependencies [target]'。

netconsole      0:關 1:關 2:關 3:關 4:關 5:關 6:關
network         0:關 1:關 2:開 3:開 4:開 5:開 6:關
sysstat         0:關 1:關 2:開 3:開 4:關 5:開 6:關

CentOS6忘記root密碼或者調整了運行級別為6

進入單用戶級別

1.重啟伺服器,一直按“E”鍵,進入grub引導菜單的內核界面

2.在內核界面選擇使用上下箭頭移動並選擇內核

3.內核選定之後再次按下“E”鍵進行編輯

4.在最後一行後面加上數字1(是單用戶模式的運行級別)或者single然後回車

5.然後根據提示按下boot進行重新引導

3.系統初始化

在init的配置文件中有這麼一行: si::sysinit:/etc/rc.d/rc.sysinit 它調用執行了/etc/rc.d/rc.sysinit,而rc.sysinit是一個bash shell的腳本,它主要是完成一些系統初始化的工作,rc.sysinit是每一個運行級別都要首先運行的重要腳本。

它主要完成的工作有:激活交換分區,檢查磁碟,載入硬體模塊以及其它一些需要優先執行任務。

l5:5:wait:/etc/rc.d/rc 5

這一行表示以5為參數運行/etc/rc.d/rc,/etc/rc.d/rc是一個Shell腳本,它接受5作為參數,去執行/etc/rc.d/rc5.d/目錄下的所有的rc啟動腳本,/etc/rc.d/rc5.d/目錄中的這些啟動腳本實際上都是一些連接文件,而不是真正的rc啟動腳本,真正的rc啟動腳本實際上都是放在/etc/rc.d/init.d/目錄下。

而這些rc啟動腳本有著類似的用法,它們一般能接受start、stop、restart、status等參數。

/etc/rc.d/rc5.d/中的rc啟動腳本通常是K或S開頭的連接文件,對於以 S 開頭的啟動腳本,將以start參數來運行。

而如果發現存在相應的腳本也存在K打頭的連接,而且已經處於運行態了(以/var/lock/subsys/下的文件作為標誌),則將首先以stop為參數停止這些已經啟動了的守護進程,然後再重新運行。

這樣做是為了保證是當init改變運行級別時,所有相關的守護進程都將重啟。

至於在每個運行級中將運行哪些守護進程,用戶可以通過chkconfig或setup中的"System Services"來自行設定。

img

4.建立終端

rc執行完畢後,返回init。這時基本系統環境已經設置好了,各種守護進程也已經啟動了。

init接下來會打開6個終端,以便用戶登錄系統。在inittab中的以下6行就是定義了6個終端:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

從上面可以看出在2、3、4、5的運行級別中都將以respawn方式運行mingetty程式,mingetty程式能打開終端、設置模式。

同時它會顯示一個文本登錄界面,這個界面就是我們經常看到的登錄界面,在這個登錄界面中會提示用戶輸入用戶名,而用戶輸入的用戶將作為參數傳給login程式來驗證用戶的身份。

5.用戶登錄系統

5.用戶登錄系統

一般來說,用戶的登錄方式有三種:

(1)命令行登錄
(2)ssh登錄
(3)圖形界面登錄

img

對於運行級別為5的圖形方式用戶來說,他們的登錄是通過一個圖形化的登錄界面。登錄成功後可以直接進入 KDE、Gnome 等視窗管理器。

而本文主要講的還是文本方式登錄的情況:當我們看到mingetty的登錄界面時,我們就可以輸入用戶名和密碼來登錄系統了。

Linux 的賬號驗證程式是 login,login 會接收 mingetty 傳來的用戶名作為用戶名參數。

然後 login 會對用戶名進行分析:如果用戶名不是 root,且存在 /etc/nologin 文件,login 將輸出 nologin 文件的內容,然後退出。

這通常用來系統維護時防止非root用戶登錄。只有/etc/securetty中登記了的終端才允許 root 用戶登錄,如果不存在這個文件,則 root 用戶可以在任何終端上登錄。

/etc/usertty文件用於對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。

圖形模式與文字模式的切換方式

Linux預設提供了六個命令視窗終端機讓我們來登錄。

預設我們登錄的就是第一個視窗,也就是tty1,這個六個視窗分別為tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 來切換它們。

如果你安裝了圖形界面,預設情況下是進入圖形界面的,此時你就可以按Ctrl + Alt + F1 ~ F6來進入其中一個命令視窗界面。

當你進入命令視窗界面後再返回圖形界面只要按下Ctrl + Alt + F7 就回來了。

如果你用的vmware 虛擬機,命令視窗切換的快捷鍵為 Alt + Space + F1~F6. 如果你在圖形界面下請按Alt + Shift + Ctrl + F1~F6 切換至命令視窗。

img

init程式的類型:

SysV:       init, CentOS 5之前, 配置文件: /etc/inittab。
Upstart:    init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
Systemd:    systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。

Linux 關機

在linux領域內大多用在伺服器上,很少遇到關機的操作。畢竟伺服器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。

正確的關機流程為:sync > shutdown > reboot > halt

關機指令為:shutdown ,你可以man shutdown 來看一下幫助文檔。

關機重啟指令:

sync 將數據由記憶體同步到硬碟中。

shutdown 關機指令,你可以man shutdown 來看一下幫助文檔。例如你可以運行如下命令關機:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 這個命令告訴大家,電腦將在10分鐘後關機,並且會顯示在登陸用戶的當前屏幕中。

shutdown –h now 立馬關機

shutdown –h 20:25 系統會在今天20:25關機

shutdown –h +10 十分鐘後關機

shutdown –r now 系統立馬重啟

shutdown –r +10 系統十分鐘後重啟

reboot 就是重啟,等同於 shutdown –r now

halt 關閉系統,等同於shutdown –h now 和 poweroff

總結:

不管是重啟系統還是關閉系統,首先要運行 sync 命令,把記憶體中的數據寫到磁碟中。

關機的命令有 shutdown –h now halt poweroff 和 init 0 , 重啟系統的命令有 shutdown –r now reboot init 6。

img

CentOS6啟動流程](https://www.processon.com/view/link/5bffde0ae4b0f012f2382181)

img


centos7

CentOS7中的運行級別:

runlevel0.target -> poweroff.target

runlevel1.target -> rescue.target

runlevel2.target -> multi-user.target

runlevel3.target -> multi-user.target

runlevel4.target -> multi-user.target

runlevel5.target -> graphical.target

runlevel6.target -> reboot.target

運行級別0:系統停機狀態,系統預設運行級別不能設為0,否則不能正常啟動
運行級別1:單用戶工作狀態,root許可權,用於系統維護,禁止遠程登陸
運行級別2:多用戶運行級別(沒有文件系統)
運行級別3:完全的多用戶狀態(有文件系統),登陸後進入控制台命令行模式
運行級別4:多用戶運行級別
運行級別5:X11控制台,登陸後進入圖形GUI模式
運行級別6:系統正常關閉並重啟,預設運行級別不能設為6,否則不能正常啟動

1.重啟Linux系統主機並出現引導界面時,按下鍵盤上的e鍵,進入內核編輯界面

img

2.在Linux16這行後面添加enforcing=0 init=/bin/bash,然後按下Ctrl+X組合鍵來運行修改過的內核程式

img

3.然後進入單用戶模式界面。

#重新掛載/目錄
bash-4.2# mount -o rw,remount /
#非交互設置root密碼
bash-4.2# echo 1 |passwd --stdin root
#重新引導系統
bash-4.2# exec /sbin/init

img

不需要重新掛載的方式

img

如果centos7系統運行級別被設置成重啟的級別...

img

img

1.掛載光碟鏡像

img

2.從BIOS啟動

img

3.進入BIOS設置從光碟啟動

img

4.按F10保存並退出

img

5.進入救援模式

img

6.選擇救援模式

img

7.選擇繼續

img

接下來就可以...做你想做的事

生產場景1:

當系統壞了,無法登陸系統,但是需要把裡面的數據拷貝出來,怎麼辦?

bash-4.2# mkfs.xfs -f /dev/sdc
bash-4.2# mkdir /data
bash-4.2# mount /dev/sdc /data
bash-4.2# cp -a /raid0 /data
bash-4.2# umount /dev/sdb

生產場景2:

修複MBR,主要出現在安裝雙系統的時候,後安裝的系統把原來的MBR刪除了,需要修複

1.破壞硬碟的前446位元組,模擬MBR引導損壞,會發現重啟無法啟動系統

[root@zls ~]# dd < /dev/zero >/dev/sda bs=1 count=446
記錄了446+0 的讀入
記錄了446+0 的寫出
446位元組(446 B)已複製,0.0011061 秒,403 kB/秒

2.重啟,查看系統狀態

img

3.重啟進入救援模式

img

4.進入系統,獲取root許可權

img

5.修複MBR引導,然後重啟連接伺服器
img

#修複grub
bash-4.2# grub2-install /dev/sda

#退出
bash-4.2# exit

#重啟進入系統
bash-4.2# reboot

生產場景3:

CentOS7 誤刪除grub文件,進行修複

1.模擬故障

#刪除grub2
[root@zls ~]# rm -fr /boot/grub2/
#重啟
[root@zls ~]# reboot

2.查看系統狀態

img

3.重啟進入救援模式

img

4.重新安MBR,載入grub2中的grub.cfg文件

img

bash-4.2# chroot /mnt/sysimage
bash-4.2# grub2-install /dev/sda
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg

5.查看載入出來的文件

img

bash-4.2# ls /boot/grub2

6.退出重啟

bash-4.2# exit
sh-4.2# reboot

img

滿血複活...

systemd進程管理

systemd

systemd即為system daemon守護進程

systemd的目標是,為系統的啟動和管理提供一套完整的解決方案。

mysql  mysqld  rsync  rsyncd    vsftp   ftp://   vsftpd  

systemd優勢

1.最新系統都採用systemd管理(RedHat7,CentOS7,Ubuntu15...)
2.CentOS7 支持開機並行啟動服務,顯著提高開機啟動效率
3.CentOS7關機只關閉正在運行的服務,而CentOS6,全部都關閉一次。
4.CentOS7服務的啟動與停止不在使用腳本進行管理,也就是/etc/init.d下不在有腳本。
5.CentOS7使用systemd解決原有模式缺陷,比如原有service不會關閉程式產生的子進程。

systemd相關的配置文件

/usr/lib/systemd/system   #類似C6系統的啟動腳本目錄/etc/init.d/
/etc/systemd/system/   #類似C6系統的/etc/rc.d/rcN.d/
/etc/systemd/system/multi-user.target.wants/

systemd相關命令

systemctl管理服務的啟動、重啟、停止、重載、查看狀態等常用命令

System V init(6系統) systemctl命令(7系統) 作用
service crond start systemctl start crond.service 啟動服務
service crond stop systemctl stop crond.service 停止服務
service crond restart systemctl restart crond.service 重啟服務
service crond reload systemctl reload crond.service 重新載入配置(不終止服務)
service crond status systemctl status crond.servre 查看服務運行狀態
systemctl is-active sshd.service 查看服務是否在運行中
systemctl mask crond.servre 禁止服務運行
systemctl unmask crond.servre 取消禁止服務運行

systemctl設置服務開機啟動、不啟動、查看各級別下服務啟動狀態等常用命令

System V init(6系統) systemctl命令(7系統) 作用
chkconfig crond on systemctl enable crond.service 開機自動啟動
chkconfig crond off systemctl disable crond.service 開機不自動啟動
chkconfig --list systemctl list-unit-files 查看各個級別下服務的啟動與禁用
chkconfig --list crond systemctl is-enabled crond.service 查看特定服務是否為開機自啟動
chkconfig--add crond systemctl daemon-reload 創建新服務文件或者變更設置

systemctl服務狀態說明

服務狀態 狀態說明
loaded 服務單元的配置文件已經被處理
active(running) 服務的一個或多個進程在運行中
active(exited) 一次性運行的服務成功被執行並退出(服務運行後完成任務,相關進程會自動退出)
active(waiting) 服務已經運行但在等待某個事件
inactive 服務沒有在運行
enable 服務設定為開機運行
disabled 服務設定為開機不運行
static 服務不能被設定開機啟動,但可以由其他服務啟動該服務

網卡命名規則

[root@ server ~]# cd /etc/sysconfig/network-scripts/ #修改網卡配置文件
[root@ server network-scripts]# mv ifcfg-eno16777728 ifcfg-eth0
[root@ server network-scripts]# sed -i "s#ens33#eth0#g" ifcfg-eth0
[root@server~]# vim /etc/sysconfig/grub #GRUB添加kernel參數
GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet"
[root@server~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@server~]# reboot #重啟系統生效

網卡配置文件

cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
ONBOOT=yes
IPADDR=10.0.0.150
PREFIX=24
GAMEWAY=10.0.0.254
DNS1=10.0.0.254

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • LinuxShell腳本——函數 摘要:本文主要學習了Shell中函數的定義和使用。 函數的定義 Shell函數的本質是一段可以重覆使用的腳本代碼,這段代碼被提前編寫好了,放在了指定的位置,使用時直接調取即可。 函數定義的語法 Shell函數定義的語法格式如下: 對各個部分的說明: 由 {} 包圍的 ...
  • LinuxShell腳本——迴圈結構 摘要:本文主要學習了Shell腳本中的迴圈結構。 while迴圈 基本語法 while迴圈是最簡單的一種迴圈,如果條件滿足則執行迴圈里的語句,如果條件不滿足則退出迴圈: 註意,在迴圈體命令中必須有相應的語句使得條件“不成立”,只有這樣才能最終退出迴圈,否則就成了 ...
  • 由於銀行對網路有控制,連接銀行虛擬桌面,就不能訪問外網,解決如下: route print 能查看目前的活動路由、添加過的永久路由等信息 route add 10.60.4.10 mask 255.255.255.0 -p 10.60.4.1 route add 192.168.16.9 mask2 ...
  • POSIX線程終止相關函數 線程終止方式 單個線程可以通過3種方式退出,可以在不終止整個進程的情況下,停止線程的控制流。 (1)線程可以直接從啟動常式(也就是線程函數)中返回,即執行return語句,返回值是線程的退出碼。 (2)線程可以被同一進程中的其他線程取消。即其他線程調用pthread_ca ...
  • 一、基本操作 Tab鍵: 自動補全ctrl + u: 清空至行首ctrl + k: 清空至行尾 ctrl + l: 清屏 ctrl + c: 取消本次命令編輯重啟:rebootsystemctl rebootshutdown -rinit 6關機:poweroffsystemctl poweroff ...
  • 參考地址: http://www.111cn.net/sys/CentOS/81133.htm https://www.cnblogs.com/laoxiajiadeyun/p/9943742.html https://blog.51cto.com/liqingbiao/2119953 https: ...
  • "Hadoop集群搭建 05安裝配置YARN" "Hadoop集群搭建 04安裝配置HDFS " "Hadoop集群搭建 03編譯安裝hadoop" "Hadoop集群搭建 02安裝配置Zookeeper" "Hadoop集群搭建 01前期準備" 這一篇接著記錄集群搭建,開始安裝配置zookeepe ...
  • GPS系統中有兩種時間區分,UTC就0時區的時間,CST為本地時間,如北京為早上八點(東八區),UTC時間比北京時晚八小時; CST :China Standard Time,UTC+8:00 中國沿海時間(北京時間) UTC :Universal Time Coordinated 世界協調時間 如 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...