16. Linux啟動流程和內(nèi)核管理

1 CentOS6的啟動管理

1.1 Linux組成

內(nèi)核: 實(shí)現(xiàn)進(jìn)程管理, 內(nèi)存管理, 網(wǎng)絡(luò)管理, 驅(qū)動程序管理, 文件系統(tǒng)管理, 安全管理等功能
rootfs: 根文件系統(tǒng), 包含程序和glibc庫
  程序: 二進(jìn)制執(zhí)行文件
  庫: 函數(shù)集合, function, 調(diào)用接口

1.2 CentOS6 啟動流程

1.2.1 CentOS6 啟動流程

圖片.png

資料來自51cto: http://s4.51cto.com/wyfs02/M02/87/20/wKiom1fVBELjXsvaAAUkuL83t2Q304.jpg

1. 加載BIOS的硬件信息, 獲取第一個(gè)啟動設(shè)備
2. 讀取第一個(gè)啟動設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動信息
3. 加載核心操作系統(tǒng)的核心信息, 核心開始解壓縮, 并嘗試驅(qū)動所有的硬件設(shè)備
4. 核心執(zhí)行init程序, 并獲取默認(rèn)的運(yùn)行信息
5. init程序執(zhí)行/etc/rc.d/rc.sysinit文件, 重新掛載根文件系統(tǒng)
6. 啟動核心的外掛模塊
7. init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
8. init執(zhí)行/etc/rc.d/rc.local
9. 執(zhí)行/bin/login程序, 等待用戶登錄
10. 登錄之后開始以shell控制主機(jī)

1.2.2 硬件啟動POST

POST: Power On Self Test, 加電自檢, 是BIOS功能的一個(gè)主要部分, 與操作系統(tǒng)無關(guān), 是硬件功能. 負(fù)責(zé)完成對CPU, 主板, 內(nèi)存, 硬盤子系統(tǒng), 顯示子系統(tǒng), 串并行接口, 鍵盤等硬件情況的檢測
主板的ROM: BIOS, Basic Output System, 保存著有關(guān)計(jì)算機(jī)系統(tǒng)最重要的基本輸入輸出程序, 系統(tǒng)信息設(shè)置, 開機(jī)加電自檢程序和系統(tǒng)啟動自舉程序等. 服務(wù)器加電后, BIOS會自動把BIOS內(nèi)的程序加載到CPU, 然后進(jìn)行加電自檢
主板的RAM: CMOS互補(bǔ)金屬氧化物半導(dǎo)體, 保存各項(xiàng)參數(shù)的設(shè)定, 按次序查找引導(dǎo)設(shè)備, 第一個(gè)有引導(dǎo)程序的設(shè)備為本次啟動設(shè)備

1.2.3 啟動加載器 bootloader

1.2.3.1 bootloader

引導(dǎo)加載器, 用來引導(dǎo)程序, 不同操作系統(tǒng)的bootloader不一樣
Windows: ntloader, 僅支持啟動OS
Linux: 功能豐富, 提供菜單, 允許用戶選擇要啟動的系統(tǒng)或不同的內(nèi)核版本, 把用戶選定的內(nèi)核裝在到內(nèi)存的特定空間中, 解壓, 展開, 并把系統(tǒng)控制權(quán)移交給內(nèi)核

1.2.3.2 Linux的bootloader

LILO: Linux Loader, 早期的bootloader, 功能單一
GRUB: Grand Unified Bootloader, CentOS 6 GRUB 0.97:GRUB Legacy, CentOS7 以后使用 GRUB 2.02

1.2.3.3 GRUB啟動階段

  • primary bootloader
1st stage: MBR的前446個(gè)字節(jié), 存放GRUB第一階段的數(shù)據(jù)
1.5 stage: MBR之后的扇區(qū)(加載對應(yīng)的文件系統(tǒng)驅(qū)動), 讓stage1中的bootloader能識別stage2所在分區(qū)上的文件系統(tǒng)
啟動菜單, 內(nèi)核等文件都是存在文件系統(tǒng)上的, 因此, 需要1.5階段, 幫助GRUB去識別文件系統(tǒng), 進(jìn)到對象的目錄拿到相應(yīng)的文件
MBR, 磁盤的第一個(gè)扇區(qū), 512個(gè)字節(jié)
前446個(gè)字節(jié)用來引導(dǎo)GRUB第一階段
中間64個(gè)字節(jié)分區(qū)表
后兩個(gè)字節(jié)標(biāo)記位
  • secondary bootloader: 2階段, 分區(qū)文件/boot/grub, 保存二階段相關(guān)內(nèi)容, 比如啟動菜單
[08:30:10 root@centos-7-1 ~]#ll /boot/grub2 # CentOS6上保存在/boot/grub
total 32
-rw-r--r--. 1 root root   84 Oct 29 21:44 device.map
drwxr-xr-x. 2 root root   25 Oct 29 21:44 fonts
-rw-r--r--. 1 root root 4423 Oct 29 21:56 grub.cfg  # 啟動菜單文件
-rw-r--r--. 1 root root 1024 Oct 29 21:45 grubenv
drwxr-xr-x. 2 root root 8192 Oct 29 21:44 i386-pc
drwxr-xr-x. 2 root root 4096 Oct 29 21:44 locale

grub.conf啟動菜單的修復(fù)-案例1

initramfs-3.10.0-1127.el7.x86_64.img # 存放文件系統(tǒng)驅(qū)動, 讓內(nèi)核加載操作系統(tǒng)的根, 模擬一個(gè)小型根系統(tǒng)
而1.5階段, 利用MBR后續(xù)扇區(qū)是為了讓bootloader能識別/boot分區(qū), 而/boot分區(qū)和根分區(qū)不一樣在同一分區(qū), 所有要有單獨(dú)的文件來幫助內(nèi)核加載根分區(qū)
initramfs和內(nèi)核文件都存放在了/boot目錄里, 因此在啟動菜單中, initramfs要放在kernel后, 先加載內(nèi)核
圖片.png
  1. 如果啟動菜單的順序有問題, 開機(jī)會提示initramfs需要在kernel之前啟動, 這時(shí)可以在開機(jī)菜單選擇中按e, 進(jìn)入菜單編輯
圖片.png
  1. 選中錯誤的選項(xiàng), 按d刪除, 這時(shí)只是臨時(shí)刪除, 之后系統(tǒng)啟動后, 還要去修改文件
圖片.png
  1. 添加正確的菜單, 按o鍵,再按e鍵, 輸入文件路徑, 可以tab補(bǔ)全, 啟動菜單必須有三行信息
圖片.png
  1. 寫完按回車, 檢查菜單
圖片.png
  1. 確認(rèn)無誤后, 按b啟動

  2. 啟動后修改grub.conf, 否則下次重啟還是無法啟動

grub.conf啟動菜單的修復(fù)-案例2

grub.conf存著啟動的菜單, 一旦該文件丟失, 系統(tǒng)將無法啟動
  1. 模擬文件丟失
mv /boot/grub/grub.conf /data
  1. 重啟測試
圖片.png
  1. 在錯誤界面, 補(bǔ)全菜單文件內(nèi)容, 按boot啟動
圖片.png
  1. 啟動后恢復(fù)grub.conf文件

CentOS6破解root口令

CentOS6啟動過程中, 加載完bootloader會加載內(nèi)核, 根文件系統(tǒng), 加載init進(jìn)程, 然后啟動init進(jìn)程
init進(jìn)程啟動時(shí)會讀取其配置文件, /etc/inittab, 其中定義了系統(tǒng)啟動的模式,7種模式: 0 - 6
圖片.png
  1. 如果啟動模式錯誤的改成6, 那么服務(wù)器會無限重啟, 這時(shí)也是需要修改啟動菜單, 啟動時(shí)先按任意鍵進(jìn)入菜單
圖片.png
  1. 選擇版本, 然后按a鍵
圖片.png
  1. 在quiet后加入本次啟動時(shí)想進(jìn)入的模式
圖片.png
  1. 輸入的數(shù)字相當(dāng)于內(nèi)核參數(shù), 也是通過干預(yù)本次啟動時(shí)菜單選項(xiàng)來修復(fù)
圖片.png
圖片.png
  1. 按回車, 進(jìn)入啟動, 然后修改/etc/inittab文件

  2. 若要破解root用戶, 需要啟動時(shí)進(jìn)入1,單用戶模式

單用戶模式, 只有一個(gè)用戶能使用Linux, 遠(yuǎn)程連接都會端斷開
可以切換用戶, 但是不能開啟多個(gè)終端, 也不能遠(yuǎn)程
一般在系統(tǒng)維護(hù)時(shí)可以使用
  1. 進(jìn)入啟動界面, 按任意鍵, 選擇版本, 然后按a鍵
圖片.png
  1. 輸入1, 按回車進(jìn)入單用戶模式

  2. 再次啟動后, 會直接進(jìn)入系統(tǒng), 而且身份是root, 無需密碼

  3. passwd重置密碼即可

破解口令必須能到機(jī)房或者服務(wù)器面前去破解, 因此 雖然破解過程簡單, 但并不是所有人都有機(jī)會

給grub加密, 防止root破解

  1. 生成grub口令
圖片.png
  1. 添加到grub配置文件/boot/grub/grub.conf
圖片.png
  1. 此時(shí)服務(wù)器啟動時(shí), 是沒有a鍵選項(xiàng)的, 要想修改啟動默認(rèn), 需要按p鍵, 然后輸入grub密碼
圖片.png
  1. 輸入密碼后, 再用a鍵進(jìn)入菜單修改

注意: 即使grub加密了, 還是可以通過救援模式破解口令, 因此, 一定要確保服務(wù)器的物理安全

1.2.3.4 修復(fù)GRUB第一階段故障(CentOS6)

破壞GRUB第一階段, MBR前446個(gè)字節(jié), 可以通過救援模式修復(fù), 但是,grub.conf菜單文件是無法修復(fù)的, 需要手寫

1.2.4 加載內(nèi)核

內(nèi)核自身初始化的過程

1. 探測可識別到的所有硬件設(shè)備
2. 加載硬件驅(qū)動程序(借助于ramdisk加載驅(qū)動)
3. 以只讀方式掛載根文件系統(tǒng)
4. 運(yùn)行用戶空間的第一個(gè)應(yīng)用程序: /sbin/init

內(nèi)核特點(diǎn):

支持模塊化: .ko(內(nèi)核對象), 如: 文件系統(tǒng), 硬件驅(qū)動, 網(wǎng)絡(luò)協(xié)議等
支持內(nèi)核模塊的動態(tài)裝載和卸載

內(nèi)核組成部分:

核心文件: /boot/vmlinuz/VERSION-release
 ramdisk: 輔助的偽根系統(tǒng), 加載相應(yīng)的硬件驅(qū)動, ramdisk --> ramfs提高速度
 CentOS5 /boot/initrd-VERSION-release.img 
 CentOS6以后版本/波特/initramfs-VERSION-release.img
模塊文件: /lib/modules/VERSION-release

范例: 誤刪除內(nèi)核文件/boot/vmlinuz-2.6.32-754.el6.x86_64無法啟動的故障恢復(fù)

rm -rf /boot/vmlinuz-2.6.32-754.el6.x86_64
reboot
進(jìn)入救援模式
切根 chroot /mnt/sysimage
掛載光盤 mount /dev/sr0 /mnt
復(fù)制內(nèi)核文件 cp /mnt/isolinux/vmlinuz /boot/vmlinuz-2.6.32-754.el6.x86_64
sync
exit
reboot

ramdisk文件的制作

  • mkinitrd命令
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
  • dracut命令
dracut /boot/initramfs-$(uname -r).img $(uname -r)

案例: 誤刪除/boot/initramfs-2.6.32-754.el6.x86_64.img無法啟動, 故障恢復(fù)

rm -rf /boot/initramfs-2.6.32-754.el6x86_64.img
reboot
進(jìn)入救援模式
chroot /mnt/sysimages # /etc/fstab文件存在時(shí), 系統(tǒng)啟動后自動找到根分區(qū), 把根分區(qū)掛載到/mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
sync
exit
reboot

1.2.5 init初始化

POST --> BootSeqyence(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs(只讀) --> init(systemd)

init程序類型:

Upstart: init, CentOS6, 配置文件: /etc/inittab, /etc/init/*.conf
Systemd: systemd, CentOS7, 配置文件: /usr/lib/systemd/system, /etc/systemd/system

運(yùn)行級別

為系統(tǒng)運(yùn)行或維護(hù)等目的而設(shè)定, 0-6, 共7個(gè)級別, 一般使用3,5作為默認(rèn)級別

0 -- 關(guān)機(jī)
1 -- 單用戶模式(root自動登錄), 維護(hù)模式, 只有一個(gè)用戶能登錄
2 -- 多用戶模式, 啟動網(wǎng)絡(luò)功能, 但不會啟動NFS, 維護(hù)模式
3 -- 多用戶模式. 正常模式, 文本界面
4 -- 預(yù)留級別, 可同3級別
5 -- 多用戶模式, 正常模式, 圖形界面
6 -- 重啟

命令行切換級別

init 數(shù)字

CentOS6服務(wù)管理

  • service命令: 手動管理服務(wù)
  • /etc/rc*.d. 控制服務(wù)腳本的開機(jī)自動運(yùn)行
K開機(jī)不自動運(yùn)行, 數(shù)字越小, 越先運(yùn)行, 數(shù)字越小的服務(wù), 通過是依賴其他服務(wù)的服務(wù)
S開機(jī)自動運(yùn)行, 數(shù)字越小, 越先運(yùn)行, 數(shù)字越小的服務(wù), 通過為被依賴的服務(wù), 其他服務(wù)依賴其運(yùn)行

配置服務(wù)開機(jī)啟動

chkconfig
查看服務(wù)在所有級別的啟動或關(guān)閉情況
chkconfig [--list] [name]
編寫啟動腳本, 添加到/etc/rc.d/init.d(/etc/init.d)中, 實(shí)現(xiàn)服務(wù)開機(jī)自啟

#!/bin/bash
chkconfig: #### S數(shù)字 K數(shù)字 # 如果想讓服務(wù)在任何級別都不啟動, 級別用-表示
description: 描述信息
....
腳本寫完, 執(zhí)行 chkconfig --add NAME, 把服務(wù)添加到init.d中
將任務(wù)從init.d刪除

chkconfig --del NAME
服務(wù)剛加入到chkconfig列表時(shí), 所有運(yùn)行級別初始狀態(tài)都是off
CentOS6, 希望開機(jī)自動運(yùn)行但是不方便寫啟動腳本的命令可以放在/etc/rc.d/rc/local, 該文件會在所有init.d下的啟動文件運(yùn)行完運(yùn)行
CentOS7和8也兼容這種方式, 但是, 需要給該文件加執(zhí)行權(quán)限
非獨(dú)立服務(wù): 按需啟動, 需要被其他服務(wù)喚醒, 超級守護(hù)進(jìn)程(xinetd進(jìn)程)

以telnet服務(wù)為例

telnet是非獨(dú)立服務(wù), 平時(shí)不會工作, 有連接請求時(shí)會由xinetd喚醒
但是, 服務(wù)安裝后,默認(rèn)都是關(guān)閉狀態(tài), 因此, 需要先設(shè)置為開機(jī)自動啟動, chkconfig telnet-server on
另外, xinetd默認(rèn)系統(tǒng)是沒有的, 安裝非獨(dú)立服務(wù)后會自動安裝xinetd
圖片.png
圖片.png
圖片.png
圖片.png
圖片.png

1.3 啟動過程故障排錯

1.3.1 故障: rm -rf /boot/* , rm -rf /etc/fstab 后進(jìn)行恢復(fù)

恢復(fù)過程:

  1. 用光盤進(jìn)入救援模式, 找到/所在分區(qū)并恢復(fù)/etc/fstab
由于fstab文件被刪除, 系統(tǒng)啟動后無法識別根分區(qū), 也就無法把光盤中的/mnt/sysimage掛載到/目錄下
圖片.png
圖片.png
  1. 利用blkid查看硬盤分區(qū)對應(yīng)關(guān)系
圖片.png
  1. 由于不確定sda1, sda2,和sda3與分區(qū)的對應(yīng)關(guān)系, 可以用fdisk -l來查看分區(qū)空間大小來判斷
圖片.png
sda4為擴(kuò)展分區(qū), sda5為swap
sda1 只有一個(gè)G, 根分區(qū)不會這么小, 一般/boot在1-2個(gè)G左右
sda2和sda3就是根分區(qū)和數(shù)據(jù)分區(qū)了, 所以要大概知道原本每個(gè)分區(qū)的容量
  1. 臨時(shí)掛載一個(gè)目錄, 來判斷具體是哪個(gè)分區(qū)

創(chuàng)建/mnt/rootfs目錄, 將/dev/sda1掛載上去, 可以看到目錄是空的, 因?yàn)榭梢灾?dev/sda1是/boot分區(qū), 因?yàn)槔锩娴奈募急粍h了

圖片.png
  1. 掛載/dev/sda2 到 /mnt/rootfs

可以看到其中包含了/分區(qū)的目錄

圖片.png
  1. 因?yàn)閒stab被刪了, 所有找不到硬盤的根分區(qū)
圖片.png
  1. 創(chuàng)建fstab文件
圖片.png
  1. sync同步, 重啟

  2. 再次進(jìn)入救援模式, 因?yàn)橐呀?jīng)修復(fù)了fstab, 那么是可以找到硬盤的根分區(qū)的, 會把根掛載到/mnt/sysimage下

圖片.png
圖片.png
  1. 安裝內(nèi)核包
圖片.png

sync同步

  1. 安裝grub, 內(nèi)核包安裝后, 除了grub目錄, 其他文件都會自動生成
圖片.png
圖片.png
  1. 編輯菜單文件, grub安裝會生成grub目錄, 但是菜單還是要手寫的
vim /boot/grub/grub.conf
圖片.png
  1. sync, reboot即可

2 /proc目錄和內(nèi)核參數(shù)管理

/proc目錄: 內(nèi)核把自己內(nèi)部狀態(tài)信息及統(tǒng)計(jì)信息, 以及可配置參數(shù)通過proc偽文件系統(tǒng)加以輸出

內(nèi)核參數(shù)分為:

只讀參數(shù): 只用于輸出信息
可寫參數(shù): 可接受用戶指定的"值"來實(shí)現(xiàn)對內(nèi)核某功能或特性的配置

/proc/sys的設(shè)置

  • sysctl命令可用于查看或設(shè)定此目錄中諸多參數(shù)
sysctl -w path.to.oarameter=VALUE #臨時(shí)設(shè)置
  • 默認(rèn)配置文件: /etc/sysctl.conf及以下文件
/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf

范例:

sysctl -w kernel.hostname=123.com

echo命令通過重定向方式也可以修改大多數(shù)參數(shù)的值

echo "VALUE" > /proc/sys/path/to/parameter
echo "webserver" > /proc/sys/kernel/hostname

sysctl命令:

  • 臨時(shí)設(shè)置參數(shù)
sysctl -w parameter=VALUE
  • 通過讀取配文件設(shè)置參數(shù)
sysctl -p [/path/to/conf_file]
  • 查看所有生效的參數(shù)
sysctl -a
  • 讓參數(shù)永久生效
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p # -p默認(rèn)加載/etc/sysctl.conf文件, 如果配置放在了其他文件里, 需要-p指定路徑

常用內(nèi)核參數(shù)

net.ipv4.ip_forward # 開啟路由轉(zhuǎn)發(fā)
net.ipv4.icmp_echo_ignore_all # 禁ping
net.ipv4.ip_nonlocal_bind # 允許應(yīng)用程序可以監(jiān)聽本地不存在的ip地址
vm.drop_caches # 清理緩存
fs.file_max=1020000 # 最大打開文件個(gè)數(shù)限制

net.ipv4.ip_nonlocal_bind

讓服務(wù)器監(jiān)聽在本地不存在的端口, 一般用在調(diào)度器上, 配合keepalived, 監(jiān)聽在vip上
但是vip本身在調(diào)度器是不存在的, 所以要修改參數(shù)使服務(wù)器能監(jiān)聽這個(gè)本地不存在的ip

3 /sys目錄管理

/sys目錄主要和硬件相關(guān). 為用戶使用的偽文件系統(tǒng), 輸出內(nèi)核識別出的各硬件設(shè)備的相關(guān)屬性信息
也有內(nèi)核對硬件特性的設(shè)定信息, 有些參數(shù)是可以修改的, 用于調(diào)整硬件工作特性
udev通過此路徑下輸出的信息動態(tài)為各設(shè)備創(chuàng)建所需要的設(shè)備文件, udev是運(yùn)行用戶空間程序?qū)S霉ぞ? udevadmin, hotplug
udenv為設(shè)備創(chuàng)建設(shè)備文件時(shí), 會讀取其事先定義好的規(guī)則文件, 一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下

4 內(nèi)核模塊管理

內(nèi)核組成部分:

kernel: 內(nèi)核核心, 一般為bzImage, 通常在/boot目錄, vmlinuz-VERSION-RELEASE
kernel object: 內(nèi)核對象, 一般放置于 /lib/modules/VERSION-RELEASE/
輔助文件: ramdisk. initrd: CentOS5以前, initramfs: CentOS6以后

4.1 內(nèi)核版本

uname命令, 查看運(yùn)行中內(nèi)核信息

-n 顯示節(jié)點(diǎn)名稱
-r 顯示內(nèi)核版本
-a 顯示內(nèi)核所有信息

4.2 內(nèi)核模塊命令

lsmod命令:

顯示內(nèi)核已經(jīng)裝載好的內(nèi)核模塊, 內(nèi)容為模塊名稱, 大小, 使用次數(shù), 被哪些模塊所依賴
顯示的內(nèi)容來自:/proc/modules文件

5 systemd

systemd: 從CentOS7版本之后開始使用systemd實(shí)現(xiàn)init進(jìn)程, 7以后init僅為systemd的軟連接, 系統(tǒng)啟動和服務(wù)器守護(hù)進(jìn)程管理器, 負(fù)責(zé)在系統(tǒng)啟動或運(yùn)行時(shí), 激活系統(tǒng)資源, 服務(wù)器進(jìn)程和其他進(jìn)程

5.1 systemd新特性

系統(tǒng)引導(dǎo)時(shí)實(shí)現(xiàn)服務(wù)并行啟動
按需啟動守護(hù)進(jìn)行, 比如CentOS6上的非獨(dú)立服務(wù), 由xinetd喚醒. CentOS7上由systemd喚醒
自動化的服務(wù)依賴關(guān)系管理
同時(shí)采用socket式于D-Bus總線式激活服務(wù)
socker與服務(wù)程序分離 # 節(jié)約資源, socket文件處于打開狀態(tài)監(jiān)聽端口, 但是服務(wù)只有有人訪問時(shí)才啟動, 或者人為啟動. 第一次按需啟動, 之后一旦啟動就不會自動關(guān)閉了
向后兼容sysv init腳本
使用systemctl命令管理, systemclt命令固定不變, 不可擴(kuò)展, 非由systemd啟動的服務(wù), systemctl無法與之通信和控制
系統(tǒng)狀態(tài)快照

不同版本的服務(wù)啟動區(qū)別

  • CentOS5: 無論各個(gè)服務(wù)之間有沒有依賴關(guān)系, 都按照固定的次序啟動服務(wù), 因此系統(tǒng)啟動時(shí)間是所有服務(wù)串行啟動的累加時(shí)間
  • CentOS6: 對于有依賴關(guān)系的服務(wù), 采用串行啟動, 而沒有依賴的服務(wù), 并行啟動
  • CentOS7: 所有服務(wù)全部并行啟動, 雖然各服務(wù)間存在依賴關(guān)系, 但是某些資源并不是啟動階段就立即需要的, 因此CentOS7和8啟動很快, 但是第一次訪問會比較慢

5.2 systemd的核心概念: unit

unit表示不同類型的systemd對象, 通過配置文件進(jìn)行識別和配置; 文件中主要包含系統(tǒng)服務(wù), 監(jiān)聽socket, 保存的系統(tǒng)快照以及其他與init相關(guān)的信息

unit主要類型

service.unit: 文件擴(kuò)展名為.service, 用于定義系統(tǒng)服務(wù)
socket.unit: .socket碼定義進(jìn)程間通信用的socket文件, 也可以在系統(tǒng)啟動時(shí), 延遲啟動服務(wù), 實(shí)現(xiàn)按需啟動

unit配置文件

/usr/lib/systemd/system: 每個(gè)服務(wù)最主要的啟動腳本設(shè)置. 類似/etc/init.d/
/lib/systemd/system: ubuntu的對應(yīng)目錄
/run/systemd/system: 系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本, 比上面目錄優(yōu)先運(yùn)行
/etc/systemd/system: 管理員建立的執(zhí)行腳本, 類似/etc/rcN.d/Sxx的功能, 比上面目錄優(yōu)先運(yùn)行

5.3 systemctl管理service unit

systemctl start | stop | restart | enable --now  NAME
禁止自動和手動啟動服務(wù)

systemctl mask name.service
systemctl unmask name.service

5.4 運(yùn)行級別

target units: 相當(dāng)于CentOS6之前的runlevel
unit配置文件: .target
0 關(guān)機(jī)
1 救援模式
2,3,4 多用戶
5 圖形
6 重啟
lrwxrwxrwx. 1 root root  15 Oct 29 21:40 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root  13 Oct 29 21:40 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root  17 Oct 29 21:40 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 Oct 29 21:40 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 Oct 29 21:40 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root  16 Oct 29 21:40 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root  13 Oct 29 21:40 /usr/lib/systemd/system/runlevel6.target -> reboot.target

5.5 CentOS 7 之后版本引導(dǎo)順序

1. UEFI或BIOs初始化, 運(yùn)行POST開機(jī)自檢
2. 選擇啟動設(shè)備
3. 引導(dǎo)裝載程序, CentOS7后為grub2, 加載裝載程序的配置文件: /etc/grub.d /etc/default/grub /boot/grub2/grub.cfg
4. 加載initramfs驅(qū)動模塊
5. 加載內(nèi)核選項(xiàng)
6. 內(nèi)核初始化, CentOS使用systemd代替init
7. 執(zhí)行initrd.target所有單元, 包括掛載/etc/fstab
8. 從initramfs根文件系統(tǒng)切換到磁盤根目錄
9. systemd執(zhí)行默認(rèn)target配置, 配置文件/etc/systemd/system/default.target
10. systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)
11. systemd啟動multi-user.target下的本機(jī)與服務(wù)器服務(wù)
12. systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
13. systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)
14. systemd執(zhí)行g(shù)raphical需要的服務(wù)

5.6 破解CentOS7和8的root密碼

方法1:

  1. 啟動時(shí)按任意鍵暫停啟動
圖片.png
  1. 按e鍵進(jìn)入編輯模式

  2. 將光標(biāo)移動linux開始的行, 末尾添加內(nèi)核參數(shù)rd.break

圖片.png
  1. 按ctrl-x啟動
  1. mount -o remount, rw /sysroot

  2. chroot /sysroot

  3. passwd root

圖片.png

如果SELinux是啟用的, 那么需要執(zhí)行下面操作, 如果沒有啟動, 不需執(zhí)行
touch /.autorelabel

8 exit, reboot

方法2:

啟動時(shí)任意鍵暫停啟動
按e進(jìn)入編輯模式
將光標(biāo)移動到linux開始的行, 末尾添加rw init=/sysroot/bin/sh
按ctrl -x啟動
chroot /sysroot
passwd root
# 如果SELinux是啟用的, 才需要執(zhí)行下面操作
touch /.autorelabel

exit
reboot

5.7 實(shí)現(xiàn)GRUB2安全

[20:09:19 root@centos-7-1 ~]#grub2-setpassword 
Enter password: 
Confirm password: 
[20:15:58 root@centos-7-1 ~]#ls -l /boot/grub2
total 36
-rw-r--r--. 1 root root   84 Oct 29 21:44 device.map
drwxr-xr-x. 2 root root   25 Oct 29 21:44 fonts
-rw-r--r--. 1 root root 4423 Oct 29 21:56 grub.cfg
-rw-r--r--. 1 root root 1024 Oct 29 21:45 grubenv
drwxr-xr-x. 2 root root 8192 Oct 29 21:44 i386-pc
drwxr-xr-x. 2 root root 4096 Oct 29 21:44 locale
-rw-------  1 root root  298 Feb  5 20:15 user.cfg
[20:16:04 root@centos-7-1 ~]#cat /boot/grub2/user.cfg 
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.CFE85393B86CB607472A627A7E351405116594BBDDE32B6092EF6DB32E22AEE8F8C083DD0B2078D9782AB89B3FFCA12E1440C400DACD672E7A1961F1591C258D.051CE5E46915AF217A54A7FCA87D97BC7CECE67003DBF6931D69BB15410B16567C8E39D43F1A180D6D4FF7FB8EA71AAFA588EEA2339F5A64B2C6F6AE10E2562F
圖片.png
清空grub2密碼

[20:18:22 root@centos-7-1 ~]#cat /dev/null > /boot/grub2/user.cfg

5.8 修復(fù)GRUB2

GRUB2: CentOS7 和 8 以及Ubuntu1804都適用
引導(dǎo)提示時(shí)可以使用命令行界面, 可從文件系統(tǒng)引導(dǎo)
主要配置文件:/boot/grub2/grub.cfg
修復(fù)配置文件: grub2-mkconfig > /boot/grub2/grub.cfg

修復(fù)grub2

grub2-install /dev/sda #BIOS環(huán)境
grub2-install #UEFI環(huán)境

案例: CentOS8刪除/boot下的文件后進(jìn)行恢復(fù)

  1. 光盤救援模式下安裝grub2
CentOS8 必須先安裝grub, 再安裝kernel, 否則安裝kernel-core時(shí)會提示grub出錯
chroot /mnt/sysimage
grub2-install /dev/sda
mount /dev/sr0 /mnt
  1. 安裝內(nèi)核
CentOS7
rpm -ivh /mnt/Packages/kernel-3.10.0-1062.el7.x86_64.rpm --force

CentOS8
rpm -ivh /mnt/BaseOS/Packages/kernel-core-4.18.0-147.el8.x86_64.rpm --force
  1. 修改grub配置文件
生成grub2.cfg文件
grub2-mkconfig -o /boot/grub2/grub.cfg
  1. 退出重啟
exit
exit
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玻蝌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子屯断,更是在濱河造成了極大的恐慌忍饰,老刑警劉巖可都,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡摊腋,警方通過查閱死者的電腦和手機(jī)妄痪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門哈雏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衫生,你說我怎么就攤上這事裳瘪。” “怎么了罪针?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵彭羹,是天一觀的道長。 經(jīng)常有香客問我泪酱,道長派殷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任墓阀,我火速辦了婚禮毡惜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斯撮。我一直安慰自己经伙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布勿锅。 她就那樣靜靜地躺著帕膜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粱甫。 梳的紋絲不亂的頭發(fā)上泳叠,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音茶宵,去河邊找鬼危纫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的种蝶。 我是一名探鬼主播契耿,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼螃征!你這毒婦竟也來了搪桂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤盯滚,失蹤者是張志新(化名)和其女友劉穎踢械,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魄藕,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡内列,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了背率。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片话瞧。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖寝姿,靈堂內(nèi)的尸體忽然破棺而出交排,到底是詐尸還是另有隱情,我是刑警寧澤饵筑,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布埃篓,位于F島的核電站,受9級特大地震影響根资,放射性物質(zhì)發(fā)生泄漏都许。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一嫂冻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塞椎,春花似錦桨仿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骂铁,卻和暖如春吹零,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拉庵。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工灿椅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓茫蛹,卻偏偏與公主長得像操刀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子婴洼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容