启动流程和内核管理

本章内容
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
 
以 “#” 开头的行后面的内容会被认为是注释
相关布尔值,1、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)
卸载编译安装的新内核
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/wang-jin/p/9309465.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值