開機啟動流程

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...