本章內容
CentOS 5和6的啓動流程 CentOS7啓動流程
Unit介紹 服務管理
服務管理和查看 Grub管理
啓動排錯 自制Linux
破解口令 啓動排錯
修復grub2 編譯安裝內核
1 Linux: kernel(內核,控制,調用,至關於一個管理者的功能,)+rootfs(相關的工具) ,硬件須要驅 才能加載,管理驅動的東西就是內核,內核是控制系統中的以下,而經過命令讓內核調用其功能
kernel:
(操做系統的核心)進程管理、內存管理、網絡管理、驅動程序、文件系統、安全能,
rootfs:(程序)和glibc(各類庫)
ldd /bin/ls:系統中指定命令包含調用的庫
庫:函數集合, function, 調用接口(頭文件負責描述)
過程調用:procedure,無返回值
函數調用:function
程序:二進制執行文件,只解決程序自己功能外,通用的公共的功能是放到庫中的
2:內核設計流派:
單內核(monolithic kernel):
Linux
把全部功能集成於同一個程序
微內核(micro kernel):Windows, Solaris
每種功能使用一個單獨子系統實現
3:Linux內核特色:
1)支持模塊化:
.ko文件(內核對象)lsmod命令 |grep ext4 :查看加載了那些模塊
核心功能是專門的一個文件實現的,可是一些零散的功能如:文件系統,硬件驅動,網絡協 議等模塊也就是一個個.ko文件實現,須要的時候加載,不須要的時候卸載
2)支持內核模塊的動態裝載和卸載
/boot/initrd(centos5)
例子: ethtool -i ens33 查看網卡信息,網卡驅動e1000
modinfo e1000 查看e1000的模塊信息
modprobe e1000 :加載模塊
modprobe -r e1000 :下載模塊或 rmmod e1000
3)組成部分:內核啓動依賴的關鍵內容在
/boot下,(/lib/modules/+內核的版本號)下,如下這 些文件來實現內核相應的必要功能如:文件系統,硬件驅動,網絡協 議等模塊
內核核心文件:/boot/vmlinuz-VERSION-release(linux的最核心功能)
ramdisk:輔助的僞根系統
CentOS 5:
/boot/initrd-VERSION-release.img(裏面放的和啓動相關的各類驅動模塊)
CentOS 6,7:
/boot/initramfs-VERSION-release.img(裏面放的和啓動相關的各類驅動模塊)
模塊文件:/lib/modules/內核的版本號
圖片註釋: file :查看文件格式 cpio格式的文件是打包文件
centos6 啓動流程
1
POST:開機自檢,開機自檢是 BIOS(基本輸入輸出系統) 實現的;BIOS是存在CMOS(互補金屬氧化物半 導體)中
CMOS:是一個硬件系統,裏面有電池,當計算機關機,在打開,時間是對的,但電池也會沒電
實現的硬件環境.加載BIOS的硬件信息,獲取第一個啓動設備
硬盤,光盤,usb(ubuntu)network
經過 硬盤引導:0磁道,0扇區 的前512字節稱爲mbr
而第一啓動項爲硬盤時,硬盤須要文件系統才能加載根文件系統,在無文件系統的狀況下,選擇
0磁道,0扇區 前512字節無需文件系統就能訪問
2 mbr:主引導記錄(整個硬盤的第一個扇區,不須要文件系統就能訪問,總共512字節分爲三部分)
Master boot record = MBR (446 Boot Loader + 4* 16 分區表 + 55 AA )
1)
主引導程序即主引導記錄(MBR)前446個字節稱爲bootloader
2)磁盤4個分區表(佔16個字節)
3)結束標誌(佔2個字節)其值爲AA55
補充:Boot Loader
類型:windows loader lilo(linux loader) grub grub2 macOS
功能:
1.提供菜單
2.啓動內核
3.轉交給別的loader(只有 linux才具備轉交功能) 硬盤有多個分區,每個分區的第 一個扇區保留boot loader的備份, linux loader會把啓動權限轉交給windows loader,兩個系統先裝windows系統,再裝linux系統,實現雙系統方案,
2 grub stage1 在mbr前446(bootloader) 引導啓動介質的Grub主體文件
3 grub stage1.5 mbr以後的扇區,讓stage1中的boot loader能識別stage2 所在的分區上的文件。加載/boot 文件系統驅動 ,一階段446字節存儲不夠,須要1.5階段加載2階段的須要的驅動 (菜單啓動成功
4 grub stage2 cd /boot/grub/ /boot/下分區存放的內容是基於文件系統存放,識別訪問ext4文件系統
則必須加載驅動,
5 內核加載:vmlinuz-2.6.32-696.el6.x86_64 ,解壓縮 ,並嘗試驅動全部的硬件設備
6訪問硬盤的根,尋找根裏的啓動程序,第一個進程爲: /sbin/init 運行第一個進程則要找到根
/etc/inittab id:3:開機進入到字符或者圖形界面,initramfs-2.6.32-696.el6.x86_64.img來加載根的驅動
7 rc.sysinit (初始化腳本,)
8 /etc/rc3.d(軟鏈接)/S,Kxxx (先運行K在運行S,在切換模式的時候,才運行K打頭的) --> /etc/init.d/xxx
chkconfig --level N service on|off
9 /etc/rc.local 開機運行腳本,能夠將開機自啓動的服務發入,
10 login 登陸
POST
Power-On-Self-Test,
加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主
板、內存、硬盤子系統、顯示子系統、串並行接口、鍵盤、CD-ROM光驅等硬件狀況的檢測。
ROM:BIOS,Basic Input and Output System,保存着有關計算機系統最重要的基本輸入輸出
程序,系統信息設置、開機加電自檢程序和系統啓動自舉程序等。
RAM:CMOS互補金屬氧化物半導體(電池),保存各項參數的設定
按次序查找引導設備,第一個有引導程序的設備爲本次啓動設備:(光盤或硬盤引導等
bootloader: 引導加載器,引導程序
windows: ntloader,僅是啓動OS
Linux:功能豐富,提供菜單,容許用戶選擇要啓動系統或不一樣的內核版本;把用戶選定的
內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核
LILO:LInux LOader(早期)
GRUB: GRand Unified Bootloader(如今)
GRUB 0.X: GRUB Legacy, GRUB2
MBR:
446: bootloader, 64: 分區表, 2:
55AA(標記判斷這個硬盤是否具備引導能力,如無就到第二硬盤)
GRUB:
primary boot loader : 1st stage,1.5 stage:在mbr的其餘扇區
secondary boot loader :2nd stage,分區文件
kernel:
自身初始化:
探測可識別到的全部硬件設備
加載硬件驅動程序(藉助於ramdisk加載驅動)
ramdisk: CentOS 5:
/boot/initrd-VERSION-release.img
CentOS 6,7:
/boot/initramfs-VERSION-release.img(
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init
ramdisk管理
(1) mkinitrd命令
爲當前正在使用的內核從新制做ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
mkinitrd /boot/initramfs-2.6.32-696.el6.x86_64.img $(uname -r)(內核的從新制做)
(2) dracut命令
爲當前正在使用的內核從新制做ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
init(Sys V) centos6
1: 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
centos5
/etc/inittab
2:init讀取其初始化文件:/etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制檯生成getty
在運行級別5初始化X
3:CentOS 5的inittab文件
配置文件:/etc/inittab
每一行定義一種action以及與之對應的process
id:runlevel:action:process
action:
wait: 切換至此級別運行一次
respawn:此process終止,就從新啓動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式,此處通常爲指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault:
si::sysinit(系統初始化):/etc/rc.d/rc.sysinit(初始化文件)
vim /etc/inittab
init級別
0: 關機
1:單用戶模式,(用來排錯)
2:沒有網絡(nfs)的多用戶模式
3:完整的多用戶模式(生產經常使用圖形字符界面,非圖形工具)
4:自定義(淘汰)
5:有圖形化的完整的多用戶模式。
6:重啓
/etc/rc.d/rc.sysinit (初始化文件)
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,並以讀寫方式從新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操做
/etc/rc.d/rc
/etc/rc.d/rcX.d/K??....
默認級別: 3, 5
切換級別:init #
查看級別:runlevel ; who -r ,
runlevel 查看上一次及當前的init運行級別
chkconfig 命令:
--list 列出全部服務的chkconfig狀態
添加:
SysV的服務腳本放置於/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name
#!/bin/bash
#LLLL 表示初始在哪一個級別下啓動,-表示都不啓動
# chkconfig: LLLL nn nn
刪除:
chkconfig --del name
chkconfig --list crond 僅列出某個服務的狀態
chkconfig
crond on 將指定服務在2,3,4,5級別設置爲ON,即設置爲SXXcrond
chkconfig crond off 將指定服務在2,3,4,5 級別設置爲OFF,即設置爲KXXcrond
chkconfig crond on[off] --level 3,5 僅對3,5設置 on或off
--
add mageserv 能夠將本身的服務自定義在/etc/init.d下的啓動腳本加入chkconfig支持
要確認該文件的描述中有如下兩行
# chkconfig : 35 80 30
# description: xxxx
/etc/init.d/daemon(服務名) start[stop|restart|status]
或
service daemon(服務名) start[stop|restart|status]
破root密碼centos5,centos6(只有挨着機器才能破解,是本機管理員六的後門)
啓動時在grub菜單中按a, 空格 1 ,回車
passwd
init 5(正常啓動)
stage 1: 446 引導啓動介質的Grub主體文件
stage 1.5: mbr以後的扇區,讓stage1中的boot loader能識別stage2 所在的分區上的文件。加載文件系統驅動
stage 2: /boot/grub
/boot/grub/grub.conf
default=0 默認啓動第幾個title對應的內核,0表示第一個,1表示第二個……
timeout=5 進入默認啓動的內核的等待時間
splashimage=(hd0,0:表示第一個硬盤的第一個分區) /grub/mage.xpm.gz :菜單的背景圖片
hd0.0當時還沒激活udev,因此命名hd表示
自制背影圖片: convert -resize 640X480 -colors 14 mage.jpg mage.xpm
gzip mage.xpm
hiddenmenu 菜單不會默認顯示,而是隱藏,可使用上下箭頭打斷倒計時並顯示菜單
title Red Hat Enterprise Linux Server (2.6.18-164.el5) 能夠隨便定義,不影響啓動
CentOS 5:
/boot/initrd
CentOS 6,7:
/boot/initramfs
/boot/vmlinuz
root (hd0,0)指定的 sda1 對應的boot/要有下面這兩個文件
內核文件 kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/(掛載sda3) rhgb(啓動的時候是否以圖形化界面啓動) quiet(內核加載的信息顯示的多少)
centos6 : root=UUID=6d73f629-c898-4a01-b63bb477759428f0
虛擬磁盤映像文件 initrd /initrd-2.6.18-164.el5.img
vim /boot/grub/grub.conf
init (Upstart) ubuntu開發 ( centos6)
不關聯服務,並行啓動,有關聯關係的,按順序啓動
systemd 命令centos7 :全部服務並行啓動
/etc/init/rcS.conf
/etc/init.d/rc.sysinit
/etc/init/rc.conf
/etc/rc.d/rc
/etc/rc.d/rcX.d/K.. S..
說明:rc N --> 意味着讀取/etc/rc.d/rcN.d/
K*: K##*:##運行次序;數字越小,越先運行;數字越小的服務,一般爲依賴到別的服務
S*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,一般爲被依賴到的服務
for srv in /etc/rc.d/rcN.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
xinetd管理的服務: 自身爲 獨立啓動服務
yum -y install telnet-server
chkconfig telnet on 設置telnet服務的disable=no 也能夠手工改/etc/xinetd.d/telnet
service xinetd start 啓動xinetd服務,從而啓動全部受其管理的xinetd類型服務
chkconfig xinetd on 設置xinted服務爲開機自啓動
service 命令:手動管理服務
service 服務 start|stop|restart
service --status-all
瞬態(Transient)服務被xinetd進程所管理
進入的請求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<service>
與libwrap.so文件連接
用chkconfig控制的服務:
chkconfig tftp on
在centos7,全部服務都是非獨立服務 ,全部服務都受Systemd管理
注意1:正常級別下,最後啓動一個服務S99local沒有連接至/etc/rc.d/init.d一個服務腳本,而是指向 了/etc/rc.d/rc.local腳本
2:不便或不需寫爲服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放 置於/etc/rc.d/rc.local文件中
• /etc/rc.d/rc.local在指定運行級別腳本後運行
• 能夠根據狀況,進行自定義修改
3總結:/sbin/init --> (/etc/inittab) --> 設置默認運行級別 --> 運行系統初始腳本、完成系統初始化 --> (關閉對應下須要關閉的服務)啓動須要啓動服務 --> 設置登陸終端
4:CentOS 6 init程序爲: upstart, 其配置文件:/etc/inittab, /etc/init/*.conf,配置文件的語法 遵循 upstart配置文件語法格式,和CentOS5不一樣
練習:刪除centos6當中的/boot/grub/grub.conf重啓,而後恢復該文件。
修復方法:進入模式修復在從新生成文件
實驗1:
刪除/boot/grub/中除grub.conf之外的全部文件 (啓動不受影響)
實驗2:
破壞硬盤的前446字節,即破壞grub的stage1階段,將不可啓動。
dd if=/dev/zero of=/dev/sda bs=1 count=446
修復過程:
1.進入rescue
2.chroot /mnt/sysimage
3.grub-install /dev/sda
4.reboot
建議關閉selinux
方法有3:
a.vim /etc/selinux/config
SELINUX=disabled
b.vim /boot/grub/grub.conf 在內核參數後寫selinux=0
c.啓動時,修改單次的Grub內核參數後寫selinux=0
實驗3:
破壞stage1.5
dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512
修復過程:
1.進入rescue
2.chroot /mnt/sysimage
3.grub
root(hd0,0)
setup(hd0) 須要使用/boot/grub/stage1,stage1_5,stage2
實驗4:
刪除/boot/grub/grub.conf並恢復
實驗5:
破解root密碼
加密Grub
default=0
timeout=5
password magedu 解鎖grub編輯時,須要密碼
password --md5 xxxxxx 使用grub-md5-crypt生成
password --encrpted xxxxx 使用grub-crypt
title redhat 6
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet selinux=0
initrd /initramfs-2.6.32-696.el6.x86_64.img
password magedu #這裏的做用,進入內核時就會要求驗證密碼
實驗6:
刪除/boot/grub/下的全部文件,並恢復
1.進入rescue
2.chroot /mnt/sysimage
3.grub-install /dev/sda
4.vim /boot/grub/grub.conf
5.exit;reboot
實驗7:刪除整個/boot
1.進入rescue
2.chroot /mnt/sysimage
3.grub-install /dev/sda
4.mount /dev/cdrom /media
5.cp /media/isolinux/vmlinuz /boot/
也能夠cp /media/Packages/kernel-2.6.32-696.el6.x86_64.rpm /app/
rpm2cpio kernel-2.6.32-696.el6.x86_64.rpm |cpio -id
cp boot/vmlinuz-2.6.32-696.el6.x86_64 /boot/
6.mkinitrd /boot/initramfs-2.6.32-696.el6.x86_64.img $(uname -r)
7.vim /boot/grub/grub.conf
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
8.exit;reboot
實驗8:
刪除/etc/fstab,刪除/etc/init/rcS.conf,刪除/etc/rc.d/rc.sysinit,刪除/boot下的全部文件
1.進入rescue
2.編寫/etc/fstab
UUID=b6d6d6ca-8f04-43a3-84a4-d34d2b2f50d1 /boot ext4 defaults 0 2
UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f / ext4 defaults 0 1
UUID=50950a59-83cb-4688-80ec-d9883019fcce /app ext4 defaults 0 0
UUID=5a1ff0b5-5c19-42e3-8b6a-65e7d332ee0c swap swap defaults 0 0
3.從新進入Rescue
4.chroot /mnt/sysimage
5.grub-install /dev/sda
6.恢復內核文件及ramdisk。
方法1:從其餘機器拷
方法2:從光盤中恢復,步驟見上
7.vim /boot/grub/grub.conf
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
8.rpm -qf /etc/init/rcS.conf /etc/rc.d/rc.sysinit
9.mount /dev/cdrom /media
cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id
cp etc/init/rcS.conf /etc/init
cp etc/rc.d/rc.sysinit /etc/rc.d
10.reboot
實驗9:
基於根所在的文件系統在LVM上的恢復
將/etc/fstab及/boot下的全部文件刪除
1.進入rescue
2.lvscan;vgchange -ay
3.同上
定製linux
gentoo、LFS。
須要的東西: mbr(grub,分區表)
stage 1 446
stage 1.5
stage 2 grub.conf (手工編輯)
title
root (hd0,0)
kernel
initrd
/etc/inittab (模式切換)
/etc/rc.d/rc.sysinit (初始化腳本)
/etc/rcX.d/S... K.. (軟鏈接)
/etc/init.d
/etc/rc.d/rc.local
centos6 > 硬盤,單個文件
1.在舊系統中加硬盤
2.使新硬盤在虛擬機中被發現
echo '- - -' > /sys/class/scsi_host/host2/scan
3.對新硬盤進行分區,分2個區,一個100M,一個20G
fdisk /dev/sdb
4.格式化文件系統爲ext4,並建立相應目錄,掛載
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2 建立 /mnt/sysimage
[root@instructor_v6(nanyibo) ~]# mkdir /mnt/sysimage 先掛載根,在根裏面建立boot
[root@instructor_v6(nanyibo) ~]# mount /dev/sdb2 /mnt/sysimage/ 臨時掛載根
[root@instructor_v6(nanyibo) ~]# mkdir /mnt/sysimage/boot
[root@instructor_v6(nanyibo) ~]# mount /dev/sdb1 /mnt/sysimage/boot/
5.安裝grub
grub-install --root-directory=/mnt/sysimage /dev/sdb
[root@instructor_v6(nanyibo) ~]# cp /boot/vmlinuz-2.6.32-696.el6.x86_64 /mnt/sysimage/boot/
[root@instructor_v6(nanyibo) ~]# cp /boot/initramfs-2.6.32-696.el6.x86_64.img /mnt/sysimage/boot/
cd /mnt/sysimage/boot
root@instructor_v6(nanyibo) boot]# ls -R
.:
grub initramfs-2.6.32-696.el6.x86_64.img vmlinuz-2.6.32-696.el6.x86_64
cd grub
./grub:
device.map ffs_stage1_5 minix_stage1_5 stage2 xfs_stage1_5
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
fat_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5
6.編寫grub.conf
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=4aa06589-fccb-4acd-b406-219347f5ad2d rhgb q
uiet selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-696.el6.x86_64.img
7.編寫拷貝程序和對應庫文件的腳本
vim copycmd.sh
#!/bin/bash
copy_cmd() {
local cmd_destdir=$destdir$(dirname $(which $1))
if [ ! -d $cmd_destdir ];then
mkdir -pv $cmd_destdir
fi
cp -v $(which $1) $cmd_destdir
}
copy_libfile() {
ldd $(which $1) |grep -oE "/.* " | while read libfile
do
local lib_destdir=$destdir$(dirname $libfile)
local lib_destfile=$destdir$libfile
if [ -e $lib_destfile ];then
continue
elif [ -d $lib_destdir ];then
cp -v $libfile $lib_destdir
else
mkdir -pv $lib_destdir
cp -v $libfile $lib_destdir
fi
done
}
destdir=/mnt/sysimage
if [ ! -d $destdir ];then
mkdir $destdir
fi
while true;do
echo -ne "\e[33mPlease input a execute command:\e[0m"
read cmd
if [ "$cmd" == quit ];then
exit
fi
which $cmd &> /dev/null || { echo $cmd not exist;continue; }
copy_cmd $cmd
copy_libfile $cmd
done
8.執行上述腳本以拷貝命令及所對應的庫文件
./copycmd 注意執行前,修改該腳本中的destdir=你所指定的根目錄
bash ls ifconfig ping hostname cat vi vim mount umount ps pstree mv touch cp insmod modprobe
9.拷貝網卡模塊文件
cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysimage/lib64/
10.建立根下的其餘目錄
mkdir /mnt/sysimage/{etc,dev,proc,sys,home,var,mnt,media,root,tmp,lib}
11.嘗試chroot,並sync,而後關機
12.啓動後配置網卡
insmod /lib64/e1000.ko
ifconfig eth0 xxx.xxx.xxx.xxx/16
sysctl
sysctl -a 列出全部的配置
/etc/sysctl.conf 是自定義設置
sysctl -p 重讀/etc/sysctl.conf使之生效
net.ipv4.ip_forward = 1 開啓ip轉發
net.ipv4.icmp_echo_ignore_all = 1 禁止ping
echo 1 > /proc/sys/vm/drop_caches
udev
vim /etc/udev/rules.d/80-usb.rules
SUBSYSTEM=="block", KERNEL=="sdb", NAME="liubinupan", SYMLINK+="xiaoliupan"
運行中的內核:
uname命令:
uname - print system information
uname [OPTION]...
-n: 顯示節點名稱;
-r: 顯示VERSION-RELEASE;
-a:顯示全部信息
編譯內核
1.tar xvf linux-4.17.3.tar.xz
2.yum -y groupinstall "Development Tools
yum -y install ncurses-devel elfutils-libelf-devel openssl-devel
3.cp /boot/config-2.6.32-696.el6.x86_64 /usr/local/src/linux-4.16.13/.config
4.make menuconfig
5.make -j 8
6.make modules_install
7.make install
8.reboot
SELINUX
A
B1
B2
B3
C1
C2
C3
client(IE/FIREFOX) -> httpd(apache) -> /var/www/html/index.html
chmod -R 777 /var/www/html
selinux
getenforce
setenforce [1|0] 1:enforcing 0:permissive
sestatus
vim /etc/selinux/config
/boot/grub/grub.conf
kernel 後加 selinux=0 也能夠起到禁用selinux的做用
chcon -t httpd_sys_content_t index.html
restorecon index.html
查看指望(默認)context
semanage fcontext -l |grep var/www
semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
semanage fcontext -d -t public_content_t '/var/www/html(/.*)?'
apache httpd_sys_content_t public_content_t
新建文件時,其context繼承父目錄的context,而restorecon 還原成指望context
實驗1:日誌
logger helllo
cp /var/log/messages /root
mv /root/messages /var/log/messages
實驗2:apache建立一個新的數據目錄 /app/apache22,設置期指望context並還原
實驗3:httpd端口
vim /etc/httpd/conf/httpd.conf
Listen 9527
semanage port -a -t http_port_t -p tcp 9527
service httpd restart
crul http://127.0.0.1:9527
刪除的方法
semanage port -d -t http_port_t -p tcp 9527
實驗4:ssh的端口 (僅限centos7)
vim /etc/ssh/sshd_config
Port 2222
semanage port -a -t ssh_port_t -p tcp 2222
systemctl restart sshd
實驗5:在selinux爲enfocing的狀況下,開啓ftp的匿名上傳功能
vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
systemctl restart vsftpd (centos6: service vsftpd restart)
chmod 777 /var/ftp/pub
semanage fcontext -a -t public_content_rw_t /var/ftp/pub
restorecon -Rv /var/ftp/pub/
setsebool -P ftpd_anon_write 1 = on
0 = off
semanage boolean -l -C
查看僅修改過的bool值
故障拍錯
1:掛載/則找到/的文件系統的驅動,若是「/「和/boot分區的文件系統不一致則要靠/boot下文件initramfs-2.6.32-696.el6.x86_64.img經過這個文件找到/所在的文件系統的驅動,(虛擬文件系統,裏面存放不少驅動)
破壞 /boot下文件initramfs-2.6.32-696.el6.x86_64.img(沒法啓動/)
內核:vmlinuz-2.6.32-696.el6.x86_64
故障畫面
修復方法:
1:刪除/boot/grub/中除grub.conf之外的全部文件
啓動不受影響
補充:[root@centos6 ~]# mount /sr0 /media/
mount: you must specify the filesystem type
2:破壞硬盤的前446字節,即破壞grub的stage1階段,將不可啓動。
dd if=/dev/zero of=/dev/sda bs=1 count=446
修復過程:
1.進入rescue(救援模式)
2.chroot /mnt/sysimage(切換/環境)
3.grub-install /dev/sda
4exit
5.reboot
建議關閉selinux
方法有3:
a.vim /etc/selinux/config
SELINUX=disabled
b.vim /boot/grub/grub.conf 在內核參數後寫selinux=0
c.啓動時,修改單次的Grub內核參數後寫selinux=0
實驗3:
破壞stage1.5
dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512
hexdump -C -n 10240 -v /dev/sda
恢復
1.進入rescue
2.chroot /mnt/sysimage(切/)
3.grub 進入交互式
root(hd0,0)
setup(hd0) 須要使用/boot/grub/stage1,stage1_5,stage2 不能刪除這些文件,
4:quit
5:exit
實驗4:
刪除/boot/grub/grub.conf並恢復
實驗5:
破解root密碼
vim /boot/grub/grub.conf
這種不安全
加密Grub
打開:vim /boot/grub/grub.conf文件
default=0
timeout=5
password
magedu 解鎖grub編輯時,須要密碼
或者1:password --md5 xxxxxx(密碼) 使用
grub-md5-crypt生成後加入 到/boot/grub/grub.conf文件中
或者2:password --encrpted xxxxx (密碼) 使用
grub-crypt生成
title redhat 6
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a- f7c3511a6b3f rhgb quiet selinux=0
initrd /initramfs-2.6.32-696.el6.x86_64.img
password
magedu #這裏的做用,進入內核時就會要求驗證密碼
實驗6:刪除/boot/grub/下的全部文件,並恢復
1.進入rescue
2.chroot /mnt/sysimage
3.grub-install /dev/sda
4.vim /boot/grub/grub.conf
5.exit;reboot
實驗7:刪除整個/boot
1.進入rescue
2.chroot /mnt/sysimage
3.grub-install /dev/sda
4.mount /dev/cdrom /media
5.cp /media/isolinux/vmlinuz /boot/(複製光盤中的內核文件)
也能夠cp /media/Packages/kernel-2.6.32-696.el6.x86_64.rpm /app/
rpm2cpio kernel-2.6.32-696.el6.x86_64.rpm |cpio -id
cp boot/vmlinuz-2.6.32-696.el6.x86_64 /boot/
6.mkinitrd /boot/initramfs-2.6.32-696.el6.x86_64.img $(uname -r)
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
7.vim /boot/grub/grub.conf
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet .!blkid |grep sda2
initrd /initramfs-2.6.32-696.el6.x86_64.img
8.exit;reboot:: .!ls /boot/ini
實驗8:刪除/etc/fstab,刪除/etc/init/rcS.conf,刪除/etc/rc.d/rc.sysinit,刪除/boot下的全部文件
1.進入rescue
2.編寫/etc/fstab
UUID=b6d6d6ca-8f04-43a3-84a4-d34d2b2f50d1 /boot ext4 defaults 0 2
UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f / ext4 defaults 0 1
UUID=50950a59-83cb-4688-80ec-d9883019fcce /app ext4 defaults 0 0
UUID=5a1ff0b5-5c19-42e3-8b6a-65e7d332ee0c swap swap defaults 0 0
3.從新進入Rescue
4.chroot /mnt/sysimage
5.grub-install /dev/sda
6.恢復內核文件及ramdisk。
方法1:從其餘機器拷
方法2:從光盤中恢復,步驟見上
7.vim /boot/grub/grub.conf
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
8.rpm -qf /etc/init/rcS.conf /etc/rc.d/rc.sysinit
9.mount /dev/cdrom /media
cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
cd /app
rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id
cp etc/init/rcS.conf /etc/init
cp etc/rc.d/rc.sysinit /etc/rc.d
10.reboot
實驗9:
基於根所在的文件系統在LVM上的恢復
將/etc/fstab及/boot下的全部文件刪除
1.進入rescue
2.lvscan;vgchange -ay
3.同上
centos7啓動流程
systemd
POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --
> rootfs --> /sbin/init
init: CentOS 5: SysV init
CentOS 6: Upstart rpm -qi Upstart
-rwxr-xr-x. 1 root root 150352 May 11 2016 /sbin/init
CentOS 7: Systemd
lrwxrwxrwx. 1 root root 22 May 23 04:24 /sbin/init -> ../lib/systemd/systemd
Systemd:系統啓動和服務器守護進程管理器,負責在系統啓動或運行時,激活系統資源,服務 器進程和其它進程
Systemd新特性:
系統引導時實現服務
並行啓動
按需啓動守護進程:有些進程開機時不啓動,等到用戶訪問的時候臨時激活
自動化的服務依賴關係管理
同時採用socket(socket激活)式與D(桌面)-Bus總線式激活服務
補充:socket(套接字)也就是IP+端口號,能夠定位應用程序的位置
查VNC端口號:windos開始菜單-運行-輸入cmd-命令(tasktlist)
好比:查找VNC進程的端口號 tasklist !findstr vnc
netstst -no !findstr 2060
監聽端口時候,端口要打開,但程序telnet能夠不啓動,用telnet ,socket tcp23,打開一個socket來進行監控,等到用戶訪問時,在喚醒程序
cat(less) /etc/services :查看全部的端口號
系統狀態快照
核心概念:unit(單元)
unit表示不一樣類型的systemd對象,經過配置文件進行標識和配置;文件中
主要包含了系統服務、監聽socket、保存的系統快照以及其它與init相關的信息
配置文件:
/usr/lib/systemd/system:每一個服務最主要的啓動腳本設置,相似於以前的/etc/init.d/(服務啓動腳本)
/run/systemd/system:系統執行過程當中所產生的服務腳本,比上面目錄優先運行
/etc/systemd/system:管理員創建的執行腳本,相似於/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行
Unit類型
Systemctl –t help 查看unit類型
Service unit: 文件擴展名爲.service, 用於定義系統服務------至關於6中的服務,
Target unit: 文件擴展名爲.target(目標),用於模擬實現運行級別------至關於6中的runlevel
Device unit: .device, 用於定義內核識別的設備
Mount unit:
.mount, 定義文件系統掛載點 自動掛載服務實現
Socket unit: .socket, 用於標識進程間通訊用的socket文件,也可在系統啓動時,
延遲啓動服務,實現按需啓動
Snapshot unit: .snapshot, 管理系統快照
Swap unit: .swap, 用於標識swap設備
Automount unit: .automount,文件系統的自動掛載點
Path unit: .path,用於定義文件系統中的一個文件或目錄使用,經常使用於當文件系統變化時,
延遲激活服務,如:spool 目錄
[root@centos6 ~]# ls /var/spool/
abrt abrt-upload anacron at cron cups gdm lpd mail plymouth postfix
特性
關鍵特性:
基於socket的激活機制:socket與服務程序分離
基於d-bus的激活機制:
基於device的激活機制:
基於path的激活機制:
系統快照:保存各unit的當前狀態信息於持久存儲設備中
向後兼容sysv init腳本
不兼容:
systemctl(二進制程序)命令固定不變,不可擴展
非由systemd啓動的服務,systemctl沒法與之通訊和控制,補充:反之只有用systemd啓動的服務,才能用systemctl命令控制
管理系統服務:
CentOS 7: service unit
注意:能兼容早期的服務腳本
命令:systemctl COMMAND name.service ( .service能夠省略不寫)
啓動:service name start ==> systemctl start name.service (好處能夠啓動多個服務)
中止:service name stop ==> systemctl stop name.service
重啓:service name restart ==> systemctl restart name.service
狀態:service name status ==> systemctl status name.service crond服務
管理服務
條件式重啓:已啓動才重啓,不然不作操做
service name condrestart ==> systemctl try-restart name.service
重載或重啓服務:先加載,再啓動
systemctl reload-or-restart name.service
重載或條件式重啓服務:
systemctl reload-or-try-restart name.service
禁止自動和手動啓動:
systemctl mask name(把某個服務禁止啓動).service
補充:在centos中6只能中止一個服務不能禁止,除非卸載
取消禁止:
systemctl unmask name.service
systemctl is-active atd:查看atd服務是否活動
活動:active 不活動:inactive
eg:有些服務不想啓動,但有不卸載,能夠用mask
補充:httpd服務和nginx服務都屬於web服務 ,端口都是tcp的80端口,兩個服務是同一類型的,只能 二選一 能夠用mask禁止其中一個服務
服務查看
服務查看
1查看某服務當前激活與否的狀態:
systemctl is-active name.service
eg:判斷某個服務是否啓動,若是沒啓動就用腳本實現啓動
2查看全部已經激活的服務:
systemctl list-units --type|-t service
3查看全部服務:
systemctl list-units --type service --all|-a
chkconfig命令的對應關係:
4設定某服務開機自啓:
chkconfig name on ==> systemctl enable name.service
5設定某服務開機禁止啓動:
chkconfig name off ==> systemctl disable name.service
6查看全部服務的開機自啓狀態:
chkconfig --list ==> systemctl list-unit-files --type service
7用來列出該服務在哪些運行級別下啓用和禁用
chkconfig sshd –list ==>
ls /etc/systemd/system/*.wants/sshd.service
8查看服務是否開機自啓:
systemctl is-enabled name.service
9其它命令:
9查看服務的依賴關係:
systemctl list-dependencies name.service
10殺掉進程:
systemctl kill unitnam
補充:有軟鏈接就是開機自啓動,無軟鏈接就是開機不啓動
[root@centos7 ~]# ll /etc/systemd/system/multi-user.target.wants/*.service
服務狀態
systemctl list-unit-files --type service --all顯示狀態
loaded:Unit配置文件已處理 (配置文件已經生效)
active(running):一次或屢次持續處理的運行 當前服務正在運行
active(exited):成功完成一次性的配置
active(waiting):運行中,等待一個事件
inactive:不運行
enabled:開機啓動
disabled:開機不啓動
static:開機不啓動,但可被另外一個啓用的服務激活,(不是本身啓動的)
systemctl 命令
顯示全部單元狀態
systemctl或 systemctl list-units
只顯示服務單元的狀態
systemctl --type=service
顯示sshd服務單元
systemctl–l status sshd.service
驗證sshd服務當前是否活動
systemctl is-active sshd
啓動,中止和重啓sshd服務
systemctl start sshd.service
systemctl stop sshd.service
systemctl restart sshd.service
從新加載配置
systemctl reload sshd.service
列出活動狀態的全部服務單元
systemctl list-units --type=service
列出全部服務單元
systemctl list-units --type=service --all
查看服務單元的啓用和禁用狀態
systemctl list-unit-files --type=service
列出失敗的服務
systemctl --failed --type=service
列出依賴的單元
systemctl list-dependencies sshd
驗證sshd服務是否開機啓動
systemctl is-enabled sshd
禁用network,使之不能自動啓動,但手動能夠
systemctl disable network
啓用network
systemctl enable network
禁用network,使之不能手動或自動啓動
systemctl mask network
啓用network
systemctl unmask network
service unit文件格式
/etc/systemd/system:系統管理員和用戶使用/usr/lib/systemd/system:發行版打包者使用
vim /usr/lib/systemd/system/atd.service (至關於6中的cat /etc/init.d/atd)
[Unit]
Description=Job spooling tools
After=syslog.target systemd-user-sessions.service
[Service]
EnvironmentFile=/etc/sysconfig/atd
ExecStart=/usr/sbin/atd -f $OPTS
IgnoreSIGPIPE=no
[Install]
WantedBy=multi-user.target
以 「#」 開頭的行後面的內容會被認爲是註釋
相關布爾值,一、yes、on、true 都是開啓,0、no、off、false 都是關閉
時間單位默認是秒,因此要用毫秒(ms)分鐘(m)等須顯式說明
service unit file文件一般由三部分組成:
[Unit]:定義與Unit類型無關的通用選項;用於提供unit的描述信息、unit行爲及依賴關係等
[Service]:與特定類型相關的專用選項;此處爲Service類型
[Install]:定義由「systemctl enable」以及"systemctl disable「命令在
實現服務啓用或禁用時用到的一些選項
Unit段的經常使用選項:
Description:描述信息
After:定義unit的啓動次序,表示當前unit應該晚於哪些unit啓動,其功能與Before相反
Requires(須要):依賴到的其它units(服務),強依賴,被依賴的units沒法激活時,當前unit也沒法激活
Wants(想要):依賴到的其它units,弱依賴
Conflicts:定義units間的衝突關係
Service段的經常使用選項:
Type:定義影響ExecStart及相關參數的功能的unit進程啓動類型 (包括如下類型)
•simple:默認值,這個daemon(服務)主要由ExecStart接的指令串來啓動,啓動後常駐於內中,(開機的時候會運行ExecStart的指令集,加載到內存中)
• forking:由ExecStart啓動的程序透過spawns延伸出其餘子程序來做爲此daemon的主要服務。原生父程序在啓動結束後就會終止
• oneshot:與simple相似,不過這個程序在工做完畢後就結束了,不會常駐在內存中
• dbus:與simple相似,但這個daemon必需要在取得一個D-Bus的名稱後,纔會繼續運做.所以一般也要同時設定BusNname= 才行 (NetworkManager服務依賴於dbus)
• notify:在啓動完成後會發送一個通知消息。還須要配合 NotifyAccess 來讓Systemd 接收消息
• idle:與simple相似,要執行這個daemon必需要全部的工做都順利執行完畢後纔會執行。這類的daemon一般是開機到最後才執行便可的服務 (系統不忙的時候才啓動)
EnvironmentFile:環境配置文件
ExecStart:指明啓動unit要運行命令或腳本的絕對路徑
ExecStartPre: ExecStart前運行
ExecStartPost: ExecStart後運行
ExecStop:指明中止unit要運行的命令或腳本
Restart:當設定Restart=1 時,則當次daemon服務意外終止後,會再次自動啓動此服務
(殺不死)
Install段的經常使用選項: (安裝)
• Alias:別名,可以使用systemctl command Alias.service (用Alias.service啓動)
• RequiredBy:被哪些units所依賴,強依賴
• WantedBy:被哪些units所依賴,弱依賴
• Also:安裝本服務的時候還要安裝別的相關服務
注意:對於新建立的unit文件,或者修改了的unit文件,要通知systemd重載此配置文件,然後能夠選擇重啓
systemctl daemon-reload
服務Unit文件示例:
vim /etc/systemd/system/bak.service (本身建立一個service服務文件)(etc下的全部作備份)
[Unit]
Description=backup /etc (描述)
Requires=atd.service (依賴)
[Service]
Type=simple (在運行時其實是運行這個腳本/bin/bash -c "echo /testdir/bak.sh|at now")
ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"
[Install] (安裝)
WantedBy=multi-user.target (安裝時依賴multi-user.target)
systemctl daemon-reload
systemctl start bak
eg:自動備份etc/ 開機自動啓動腳本
1: systemctl status atd (先啓動依賴的服務atd)
cd /etc/systemd/system
2: vim /bak.service
[Unit]
Description=backup /etc
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now" (缺運行腳本)
[Install]
WantedBy=multi-user.target
3; mkdir /data
4:vim /data/bak.sh (想實現的功能如:把etc備份)
tar Jcvf /data/(目錄下) /etc-`date +%F` .tar.xz /etc/ &>/dev/null
5: sh -x /data/bak.sh
6: tar -tvf /data/etc-2018-07-06.tar.xz
7 :用rm-f刪除打包文件後從新啓動後還會再次執行
運行級別
target units:
unit配置文件:.target (至關於runlevel)
ls /usr/lib/systemd/system/*.target
systemctl list-unit-files --type target --all
運行級別:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
查看依賴性:
systemctl list-dependencies graphical.target
級別切換:init N ==> systemctl isolate name.target
systemctl isolate multi-user.target
注:只有/lib/systemd/system/*.target文件中AllowIsolate=yes 才能切換
(修改文件需執行systemctl daemon-reload才能生效)
查看target:
runlevel ;who -r
systemctl list-units --type target
獲取默認運行級別:
/etc/inittab ==> systemctl get-default
修改默認級別:
/etc/inittab ==> systemctl set-default name.target
systemctl set-default multi-user.target
ls –l /etc/systemd/system/default.target
開機自動到某模式下6:cat /etc/inittab 7: systemctl get-default
實驗:若是設置爲6模式:則修復而7上沒有單用戶
1:systemctl set-default reboot 設置爲reboot模式
2:systemctl set-default 查看模式
3 :敲e鍵進入第一個
4 :在ifnames=0 後面輸入:systemd.unit=multi-user.targe_
5 :ctrl x 退出
6 :systemctl set-default graphical.target
其它命令
切換至緊急救援模式:
systemctl rescue
切換至emergency模式:
systemctl emergency
其它經常使用命令:
傳統命令init,poweroff,halt,reboot都成爲systemctl的軟連接
關機:systemctl halt、systemctl poweroff
重啓:systemctl reboot
掛起:systemctl suspend
休眠:systemctl hibernate
休眠並掛起:systemctl hybrid-sleep
CentOS7引導順序
UEFi(相對於新的電腦用的是)或BIOS初始化,運行POST開機自檢
選擇啓動設備 (光盤|硬盤|網卡)
引導裝載程序, centos7是grub2
hexdump -C -n 512 /dev/sda 前446是grub 1
加載裝載程序的配置文件:
/etc/grub.d/
/etc/default/grub
/boot/grub2/grub.cfg
加載initramfs驅動模塊
加載內核選項
內核初始化,centos7使用systemd代替init
執行initrd.target全部單元,包括掛載/etc/fstab 後面的是吧6的啓動腳本替換爲target...
從initramfs根文件系統切換到磁盤根目錄
systemd執行默認target配置,配置文件/etc/systemd/system/default.target
systemd執行sysinit.target初始化系統及basic.target準備操做系統
systemd啓動multi-user.target下的本機與服務器服務
systemd執行multi-user.target下的/etc/rc.d/rc.local
Systemd執行multi-user.target下的getty.target及登陸服務
systemd執行graphical須要的服務
設置內核參數
設置內核參數,隻影響當次啓動
啓動時,在linux16行後添加systemd.unit=desired.target
systemd.unit=emergency.target
systemd.unit=rescue.target
rescue.target 比emergency 支持更多的功能,例如日誌等
systemctl default 進入默認target
啓動排錯
文件系統損壞
先嚐試自動修復,失敗則進入emergency shell,提示用戶修復
在/etc/fstab不存在對應的設備和UUID
等一段時間,如不可用,進入emergency shell
在/etc/fstab不存在對應掛載點
systemd 嘗試建立掛載點,不然提示進入emergency shell.
在/etc/fstab不正確的掛載選項
提示進入emergency shell
破解CentOS7的root口令方法一
啓動時任意鍵暫停啓動
按e鍵進入編輯模式
將光標移動linux16開始的行,光標跳到最後,添加內核參數rd.break
按ctrl-x啓動
mount –o remount,rw /sysroot ( 改成可讀可寫,從新掛載根爲sysroot)
chroot /sysroot(切根)
passwd root (設置口令)、
touch /.autorelabel 打標籤修復一下 若是getenforce這個是不啓動的,不用執行這一步
exit
reboot
破解CentOS7的root口令方法二
啓動時任意鍵暫停啓動
按e鍵進入編輯模式
將光標移動linux16開始的行,改成rw init=/sysroot/bin/sh
按ctrl-x啓動
chroot /sysroot
passwd root
touch /.autorelabel
exit
reboot
加密: 1cd /boot/grub2
2grub2-setpassword
回車輸入口令
3 cat user.cfg:查看生成的口令
4:reboot
5:破解口令須要輸入口令才能破解
6:光盤引導能夠破解口令,在沒有記住口令的時候
救援模式:Troubleshooting 回車第二項
7:選1
8:chroot /sysroot(切根)
9:cd /boot/grub2
rm -f user.cfg
10:exit
11: reboot
修復GRUB2
破壞grub1 階段
1:dd if=/dev/zero of=/dev/sda bs=1 count=446
2:光盤引導進入救援模式
3;選第一項
4:chroot /mnt/sysimage(切根)
5:grub2 install /dev/sda
6: exit
7:reboot
破壞grub2/
1:rm -rf /boot/grub2/
2:光盤引導進入救援模式
3;選第一項
4:chroot /mnt/sysimage(切根)
5:grub2 install /dev/sda
6: grub2-mkconfig > /boot/grub2/grub.cfg(生成grub.cfg.文件放到磁盤的目錄中)
7: exit
8:reboot
破壞 /boot/
1:rm -rf /boot/
2:光盤引導進入救援模式
3;選第一項
4:chroot /mnt/sysimage(切根)
5: mount 光盤mount /dev/sr0 /mnt
6:rpm -ivh /mnt/Packages/kernel---------(安裝內核)
7;grub2-install /dev/sda
8:exit
9:grub> 在這個界面輸入
10: grub2-mkconfig -o /boot/grub2/grub.cfg(網卡迴歸到傳統的eth0的命名方式)
GRUB「the Grand Unified Bootloader」
引導提示時可使用命令行界面
可從文件系統引導
主要配置文件 /boot/grub2/grub.cfg
修復配置文件
grub2-mkconfig > /boot/grub2/grub.cfg (生效)
修復grub
grub2-install /dev/sda BIOS環境
grub2-install UEFI環境
調整默認啓動內核
vim /etc/default/grub (模板)
GRUB_DEFAULT=0 (0表示第一個內核,1)
卸載編譯安裝的新內核