日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统启动流程及服务管理控制

發(fā)布時間:2024/1/8 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统启动流程及服务管理控制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

系統(tǒng)啟動與服務(wù)管理

  • 一、系統(tǒng)啟動
    • 二、systemd服務(wù)管理

一、系統(tǒng)啟動

1.開機自檢BIOS
(Basic Input Output System基本輸入輸出系統(tǒng))
加電自檢、檢測硬件、決定啟動介質(zhì)、找到引導(dǎo)扇區(qū)。
2.MBR引導(dǎo)
讀取并且執(zhí)行第一個開機設(shè)備中的MBR(Master Boot Record主引導(dǎo)記錄)的bootloader(grub程序:Grand unified bootloader大統(tǒng)一啟動加載器)。
3.加載內(nèi)核
依據(jù)bootloader設(shè)置去加載內(nèi)核,內(nèi)核開始偵測硬件并加載驅(qū)動程序。
boot loader主要功能

提供選單:用戶可以選擇不同的開機項目載入核心文件:直接指向可開機的程序區(qū)域來開始操作系統(tǒng)轉(zhuǎn)交其他loader:將開機管理功能轉(zhuǎn)交給其他Loader負責(zé)

內(nèi)核在Linux中的存放位置為/boot分區(qū)下,主要有2個文件要被加載。

vmlinuz-3.10.0-514.el7.x86_64 內(nèi)核文件initramfs-3.10.0-514.el7.x86_64.img 虛擬文件系統(tǒng)

使用lsinitrd命令查看虛擬文件系統(tǒng)。

[root@localhost ~]# lsinitrd Image: /boot/initramfs-3.10.0-1160.6.1.el7.x86_64.img: 21M ======================================================================== Early CPIO image ======================================================================== drwxr-xr-x 3 root root 0 Nov 19 13:50 . -rw-r--r-- 1 root root 2 Nov 19 13:50 early_cpio drwxr-xr-x 3 root root 0 Nov 19 13:50 kernel drwxr-xr-x 3 root root 0 Nov 19 13:50 kernel/x86 drwxr-xr-x 2 root root 0 Nov 19 13:50 kernel/x86/microcode -rw-r--r-- 1 root root 25600 Nov 19 13:50 kernel/x86/microcode/GenuineIntel.bin ======================================================================== Version: dracut-033-564.el7 ...

GRUB2相較于GRUB一代的提升:更健壯、可移植、更強大。支持BIOS、EFI和OpenFirmware,支持GPT和MBR分區(qū)表。支持非Linux系統(tǒng),如蘋果HFS文件系統(tǒng)和Windows的NTFS文件系統(tǒng)。
4.如果是sysvinit啟動程序(linux6版本)

4.內(nèi)核啟動init進程5.系統(tǒng)初始化6.init找到/etc/inittab文件,決定系統(tǒng)的運行級別(X)7.觸發(fā)相應(yīng)的運行級別的事件,運行/etc/rcX.d下的腳本8.執(zhí)行/etc/rc.local文件來到登錄界面9.輸入用戶名密碼進入到系統(tǒng)中

5.如果是systemd啟動程序(Linux7版本)

4.在硬件驅(qū)動加載成功后,內(nèi)核會主動呼叫systemd程序,并以default.target流程開機5.systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)6.systemd啟動multi-user.target下的本機與服務(wù)器服務(wù)7.systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local文件8.systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)9.systemd執(zhí)行g(shù)raphical需要的服務(wù)

6.Init和Systemd的區(qū)別
systemd是linux系統(tǒng)中最新的初始化系統(tǒng)(init),它主要的設(shè)計目標(biāo)是克服sysvinit固有的缺點,提高系統(tǒng)的啟動速度。
Init

(1)啟動時間長 init是串行啟動,只有前一個進程啟動完才會啟動下一個進程;(2)啟動腳本復(fù)雜 init進程只是執(zhí)行啟動腳本,不管其他事情,腳本需要自己處理各種情況,這往往使得腳本變得很長;(3)由Linux內(nèi)核加載運行 位于/sbin/init,是系統(tǒng)中第一個進程,PID永遠為1;

對于支持service的程序,安裝時會自動在/etc/init.d目錄添加一個配置文件。當(dāng)使用service控制程序時,比如執(zhí)行開啟httpd服務(wù):service httpd start。那么service就會開啟/etc/init.d/httpd配置文件里面指向的/usr/sbin/httpd可執(zhí)行文件。
systemd

(1)按需啟動服務(wù),減少系統(tǒng)資源消耗;(2)盡可能并行啟動進程,減少系統(tǒng)啟動等待時間;(3)由Linx內(nèi)核加載運行 位于/usr/lib/systemd/systemd,是系統(tǒng)中第一個進程,PID永遠為1。

對于支持systemd的程序,安裝時會自動在/usr/lib/systemd/system目錄添加一個配置文件。當(dāng)使用systemctl控制該程序時,比如執(zhí)行開啟httpd服務(wù):systemctl start httpd。那么systemctl就會開啟httpd.service配置里面指向的/usr/sbin/httpd可執(zhí)行文件。
如果想讓該程序開機啟動,可以執(zhí)行命令systemctl enable httpd,這個命令相當(dāng)于在/etc/systemd/system目錄添加一個軟鏈接,指向/usr/lib/systemd/system目錄下的httpd.service文件。這是因為開機時,systemd只執(zhí)行/etc/systemd/system目錄里面的配置文件。
7.配置文件的區(qū)別
init進程的配置文件

文件位置意義
/etc/init.d/服務(wù)啟動腳本配置文件存放目錄
/etc/inittab默認運行級別配置文件
/etc/init/rcS.conf系統(tǒng)初始化配置文件
/etc/init/rc.conf各運行級別初始化的配置文件
/etc/init/rcS-sulogin.conf單用戶模式啟動/sbin/sushell環(huán)境的配置文件
/etc/init/control-altdelete.conf終端下的ctrl+alt+del熱鍵操作的配置文件
/etc/sysconfig/inittty終端的配置文件
/etc/init/start-ttys.conf配置tty終端的開啟數(shù)量、設(shè)備文件
/etc/init/tty.conf或/etc/init/serial.conf控制tty終端的開啟

systemd進程的配置文件

文件位置意義
/etc/systemd/system/default.target取代/etc/inittab文件配置,通常符號鏈接到/lib/systemd/system/graphical.target
/run/systemd/system/系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本所在目錄
/etc/systemd/system/里面存放著不同級別的開機自啟服務(wù)
/usr/lib/systemd/system/和/lib/systemd/system/兩個文件完全一樣,因為/lib是/usr/lib的軟鏈接。每個服務(wù)最主要的啟動腳本設(shè)置,類似于之前的/etc/init.d/

8.運行級別和說明

級別意義命令
0關(guān)機狀態(tài),使用該級別將會關(guān)機rehl6/7命令:init 0----rhel命令:poweroff
1系統(tǒng)救援模式,多用于系統(tǒng)維護rehl6/7命令:init 1----rhel命令:systemctl isolate rescue.target
2字符界面的多用戶模式(不可訪問網(wǎng)絡(luò))rehl6/7命令:init 2----rhel命令:systemctl isolate mutil-user.target
3字符界面的完整多用戶模式,大多數(shù)服務(wù)器主機運行此級別rehl6/7命令:init 3----rhel命令:systemctl isolate mutil-user.target
4未分配使用rehl6/7命令:init 4----rhel命令:systemctl isolate mutil-user.target
5圖形界面的多用戶模式,提供了圖形桌面操作環(huán)境rehl6/7命令:init 5----rhel命令:systemctl isolate graphical.target
6重新啟動主機rehl6/7命令:init 6----rhel命令:reboot

9.查看運行級別
(1)runlevel
顯示切換前的運行級別和當(dāng)前運行級別(6/7)。

[root@localhost ~]# runlevel N 3

(2)systemctl get-default
顯示當(dāng)前運行級別(7)

[root@localhost ~]# systemctl get-default multi-user.target

10.永久設(shè)置開機模式

systemctl set-default multi-user.target #開機默認為文本模式systemctl set-default graphical.target #開機默認為圖形模式修改/etc/inittab默認運行級別配置文件

二、systemd服務(wù)管理

1.單元(unit)的概念
系統(tǒng)初始化需要做的事情非常多。需要啟動后臺服務(wù),比如啟動SSHD服務(wù);需要做配置工作,比如掛載文件系統(tǒng)。這個過程中的每一步都被systemd抽象為一個配置單元。可以認為一個服務(wù)是一個配置單元;一個掛載點是一個配置單元;一個交換分區(qū)的配置是一個配置單元等。

單元意義
Service unit系統(tǒng)服務(wù),最常見的類型
Target unit多個Unit構(gòu)成的一個組,執(zhí)行環(huán)境類型
Device Unit硬件設(shè)備
Mount Unit文件系統(tǒng)的掛載點
Automount Unit自動掛載點
Path Unit偵測特定文件或目錄類型的
Scope Unit不是由Systemd啟動的外部進程
Slice Unit進程組
Snapshot UnitSystemd快照,可以切回某個快照
Socket Unit進程間通信的socket服務(wù)
Swap Unitswap文件
Timer Unit循環(huán)執(zhí)行的服務(wù)

2.Target和運行級別
systemd用target替代了運行級別的概念,提供了更大的靈活性。比如你可以繼承一個已有的目標(biāo),并添加其它服務(wù)來創(chuàng)建自己的目標(biāo)。
下表列舉了systemd下的目標(biāo)和常見runlevel的對應(yīng)關(guān)系。

sysvinit運行級別systemd目標(biāo)備注
0runlevel0.target,poweroff.target關(guān)閉系統(tǒng)
1,s,singlerunlevel1.target,rescue.target單用戶模式
2,4runlevel2.target,runlevel4.target,multi-user.target用戶定義/域特定運行級別。默認等同于3。
3runlevel3.target,multi-user.target多用戶,非圖形化。用戶可以通過多個控制臺或網(wǎng)絡(luò)登錄。
5runlevel5.target,graphical.target多用戶,圖形化。通常為所有運行級別3的服務(wù)外加圖形化登錄。
6runlevel6.target,reboot.target重啟
emergencyemergency.target緊急shell

3.systemctl管理服務(wù)
RHEL7監(jiān)視和控制systemd的主要命令是systemctl,該命令可以用于查看系統(tǒng)狀態(tài)和管理系統(tǒng)及服務(wù)。

命令意義
systemctl start <單元>立即啟動單元
systemctl stop <單元>立即停止單元
systemctl restart <單元>重啟單元
systemctl reload <單元>重新讀取單元配置
systemctl status <單元>輸出單元運行狀態(tài)
systemctl is-enabled <單元>檢查單元是否配置為自動啟動
systemctl enable <單元>開機自動啟動單元
systemctl disable <單元>取消開機自動激活單元
systemctl is-active <單元>查看單元是不是正在運行
systemctl is-failed <單元>查看單元是否處于啟動失敗狀態(tài)
systemctl kill <單元>殺死單元的所有子進程
systemctl daemon-reload重新載入systemd,掃描新的或有變動的單元

RHEL7的服務(wù)systemctl腳本存放在:/usr/lib/systemd/目錄,有系統(tǒng)(system)和用戶(user)之分,像需要開機不登陸就能運行的程序存在系統(tǒng)服務(wù)里,即/usr/lib/systemd/system目錄下。
4.服務(wù)組成介紹
每一個服務(wù)以.service結(jié)尾,一般會分為3部分:[Unit]、[Service]和[Install],每個部分內(nèi)部是一些等號連接的鍵值對,注意鍵值對的等號兩側(cè)不能有空格。

[root@localhost ~]# cat /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service[Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s[Install] WantedBy=multi-user.target

[Unit]
通常是配置文件的第一個區(qū)塊,用來定義Unit的元數(shù)據(jù)以及配置與其他Unit的關(guān)系。
主要字段如下:

Description:簡短描述Documentation:文檔地址Requires:當(dāng)前Unit依賴的其他Unit,如果它們沒有運行,當(dāng)前Unit會啟動失敗Wants:與當(dāng)前Unit配合的其他Unit,如果它們沒有運行,當(dāng)前Unit不會啟動失敗BindsTo:與Requires類似,它指定的Unit如果退出,會導(dǎo)致當(dāng)前Unit停止運行Before:如果該字段指定的Unit也要啟動,那么必須在當(dāng)前Unit之后啟動After:如果該字段指定的Unit也要啟動,那么必須在當(dāng)前Unit之前啟動Conflicts:這里指定的Unit不能與當(dāng)前Unit同時運行Condition...:當(dāng)前Unit運行必須滿足的條件,否則不會運行Assert...:當(dāng)前Unit運行必須滿足的條件,否則會報啟動失敗

[Service]
是服務(wù)的關(guān)鍵,是服務(wù)的一些具體運行參數(shù)的設(shè)置,只有Service類型的Unit才有這個區(qū)塊。
它的主要字段如下:
Type:定義啟動時的進程行為。
它有以下幾種值:

Type=simple:默認值,執(zhí)行ExecStart指定的命令,啟動主進程Type=forking:以fork方式從父進程創(chuàng)建子進程,創(chuàng)建后父進程會立即退出Type=oneshot:一次性進程,Systemd會等當(dāng)前服務(wù)退出再繼續(xù)往下執(zhí)行Type=dbus:當(dāng)前服務(wù)通過D-Bus啟動Type=notify:當(dāng)前服務(wù)啟動完畢會通知Systemd,再繼續(xù)往下執(zhí)行Type=idle:若有其他任務(wù)執(zhí)行完畢,當(dāng)前服務(wù)才會運行ExecStart:啟動當(dāng)前服務(wù)的命令ExecStartPre:啟動當(dāng)前服務(wù)之前執(zhí)行的命令ExecStartPost:啟動當(dāng)前服務(wù)之后執(zhí)行的命令ExecReload:重啟當(dāng)前服務(wù)時執(zhí)行的命令KillModecontrol-group(默認值):當(dāng)前控制組里面的所有子進程都會被殺掉process:只殺主進程mixed:主進程將收到SIGTERM信號,子進程收到SIGKILL信號none:沒有進程會被殺掉,只是執(zhí)行服務(wù)的stop命令ExecStop:停止當(dāng)前服務(wù)時執(zhí)行的命令ExecStopPost:停止當(dāng)前服務(wù)之后執(zhí)行的命令RestartSec:自動重啟當(dāng)前服務(wù)間隔的秒數(shù)Restart:定義何種情況Systemd會自動重啟當(dāng)前服務(wù),可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdogTimeoutSec:定義Systemd停止當(dāng)前服務(wù)之前等待的秒數(shù)Environment:指定環(huán)境變量

[Install]
通常是配置文件的最后一個區(qū)塊,用來定義如何啟動以及是否開機啟動。
它的主要字段如下:

WantedBy:它的值是一個或多個Target,當(dāng)前Unit激活時(enable),符號鏈接會放入/etc/systemd/system目錄下面以Target名+.wants后綴構(gòu)成的子目錄中RequiredBy:它的值是一個或多個Target,當(dāng)前Unit激活時,符號鏈接會放入/etc/systemd/system目錄下面以Target名+.required后綴構(gòu)成的子目錄中Alias:當(dāng)前Unit可用于啟動的別名Also:當(dāng)前Unit激活(enable)時,會被同時激活的其他Unit

注意:如果服務(wù)沒有Install段落,一般意味著應(yīng)該通過其它服務(wù)自動調(diào)用它們。
5.target簡介
簡單來說,Target就是一個Unit組,包含許多相關(guān)的Unit。啟動某個Target時,Systemd就會啟動里面所有的Unit。從這個意義上說,Target這個概念類似于"狀態(tài)點",啟動某個Target就好比啟動到某種狀態(tài)。
傳統(tǒng)的init啟動模式里面有RunLevel的概念,跟Target的作用很類似。
不同的是,RunLevel是互斥的,不可能多個RunLevel同時啟動,但是多個Target可以同時啟動。
(1)查看當(dāng)前系統(tǒng)的所有Target

$ systemctl list-unit-files --type=target

(2)查看一個Target包含的所有Unit

$ systemctl list-dependencies multi-user.target

(3)查看啟動時的默認Target

$ systemctl get-default

(4)設(shè)置啟動時的默認Target

$ sudo systemctl set-default multi-user.target

(5)切換Target時,默認不關(guān)閉前一個Target啟動的進程

$ systemctl isolate 命令改變這種行為

(6)關(guān)閉前一個Target里面所有不屬于后一個Target的進程

$ sudo systemctl isolate multi-user.target

總結(jié)

以上是生活随笔為你收集整理的Linux系统启动流程及服务管理控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。