一、Linux操作系统引导过程【☆】
Linux引导过程概括起来说就是加载硬件驱动程序,内核把init进程加载到内存中运行的过程。
1. Linux主要的5个引导过程
①开机自检:根据主板BIOS中的设置,检查硬件设备,检测出第一个能够引导系统的设备(如硬盘或光驱等);
②MBR引导:运行MBR扇区里的GRUB主引导程序;
③启动GRUB菜单(或启动Boot lodader):系统读取gurb配置文件/boot/grub2/grub.cfg,获取内核的设置和位置,并在屏幕上显示GRUB菜单页面;
④加载Linux内核:基于配置文件加载内核到内存,由内核接管Linux系统的控制权;
⑤init进程初始化:内核将init进程加载到内存中运行,并把init进程作为系统的第一个进程
系统初始化:启动内核模块,执行运行级别的脚本,执行/etc/rc.d/rc.local里的命令等
2. init进程
init进程文件位置:/sbin/init ->/lib/systemd/systemd,init进程PID号固定为1,是系统中其他所有进程的父进程。
3.systemd
centOS7开始默认的启动方式为systemd,开机服务程序并行启动,启动效率较快;centOS6及以前的版本的启动方式为sysVinit,开机服务程序是通过串行启动/etc/init.d/目录下的shell脚本实现的,容易阻塞,启动效率较慢。常见的systemd单元类型主要记住:service、target等。
Linux系统的运行级别及对应的systemd目标【☆】
运行级别 | 说明 | 对应的systemd单元 | 临时切换命令 |
0 | 关机 | poweroff.target | init 0 或systemctl isolate 对应单元 |
1 | 单用户模式 | rescue.target | |
2 | 字符界面多用户模式(无网络) | multi-user.target(默认等同于3) | |
3 | 字符界面多用户模式(完整的,有网络) | multi-user.target | |
4 | 字符界面多用户模式(保留) | multi-user.target(默认等同于3) | |
5 | 图形界面多用户模式 | graphical.target | |
6 | 重启 | reboot.target |
二、排除启动类故障【☆】
故障修复先做好备份文件应对后续故障,备份文件单独存放一个硬盘,恢复时安装光盘引导进入急救模式,从备份文件中恢复。
1.MBR整个扇区数据被破坏了,导致系统无法正常启动,如何修复?
模拟MBR扇区整个扇区数据被破坏:dd if=/dev/zero of=/dev/sda bs=512 count=1,重启后无法正常进入系统。
备份:dd if=/dev/sda of=备份文件 bs=446 count=1
还原:dd if=备份文件 of=/dev/sda
2.MBR上的GRUB引导程序被破坏了,导致系统无法正常启动,如何修复?
模拟MBR扇区中GRUB主引导程序被破坏:dd if=/dev/zero of=/dev/sda bs=446 count=1,重启后无法正常进入系统。
chroot /mnt/sysimage
grub2-install /dev/sda
3.MBR上的GRUB配置文件被删了了,导致系统无法正常启动,如何修复?
模拟grub引导程序故障:rm -f /boot/grub2/grub.cfg
①重启后手动敲入配置:不建议,略过
②重启进入急救模式,进行重建引导程序
chroot /mnt/sysimage
grub2-mkconfig -o /boot/grub2/gurb.cfg
4. root登录密码忘记了,如何找回?
①急救模式修改,重启电脑加载时迅速按ESC键,选择CD光驱启动。
chroot /mnt/sysimage
passwd root
②进入启动菜单后,按E键进入grub菜单配置中,在内核行内容后面添加 rw single init=bin/bash,再按住ctrl +x保存进入bash环境,敲入passwd root,设置密码即可。如果你没有设置过永久关闭Linux安全功能,这里还需要再添加几行设置:touch /.autorelabel, exec /sbin/init执行重启系统。(补充:之前安装操作系统时执行的setenforce 0,只是临时关闭Linux安全功能,重启系统后还是会开启,想要永久关闭,vim /etc/sysconfig/selinux,把SELNUX=设置为disabled。)
三、系统服务管理操作
CentOS7之后:systemctl start/stop/restart/reload/status/is-active 服务名[.service可加可不加],前提是确保在/usr/lib/systemd/system/中有对应的服务文件(.service);
CentOS6之前:service 服务名 start/stop/restart/reload/status,前提是确保在/etc/init.d/中有对应的服务文件(.service)
1. 设置系统的运行级别【★】
runlever #查看上一次运行级别和当前运行级别
systemctl get-default #查看当前默认的运行级别
systemctl set-default [multi-user.target|graohical.target] #永久设置默认的运行级别
等效于做软链接ln -s -f /usr/lib/systemd/system/multi-user.target|graohical.target /etc/system/default.target
2.设置服务开机自启管理【★】
systemctl is-enabled [服务] #查看某项服务是否开机自启
systemctl is-active [服务] #查看某项服务当下是开启还是关闭的状态
①两条命令配合使用,实现永久开启或关闭某个服务
systemctl enable/disable [firewalld.service] #设置开机自启/关闭开机自启防火墙
systemctl start/stop [firewalld.service] #开启/关闭防火墙服务
②一条命令关闭或开启服务
systemctl [disable/enable] --now [forewalld.service]
③ntsysv命令可以进入图形化界面批量设置开机自启
④chkconfig命令修改服务开机自启的方法
chkconfig --add 服务名 #服务名就是/etc/init.d/目录下的脚本文件名,必须一致
chkconfig --leverl 指定运行级别 服务名 on/off #设置开启或者关闭服务在哪些运行级别下开机自启
chkconfig --list 指定服务名 #查看自启状态
3.其他
①查看系统默认的运行级别
systemctl get-default
②设置永久运行级别
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
或
systemctl set-default multi-user.target
③永久修改主机名
hostnamectl set-hostname newname
查看主机名的状态
hostnamectl status
④设置系统语言为中文
localectl set-locale LANG=zh_CN.utf8
查看当前系统使用的语言
localectl [status]
字符集编码
ASCII 127个字符
GBK 中国字符集编码
UTF-8 万国字符集编码hostnamectl set-hostname XXX
localectl set-locale LANG=语言.字符集
⑤查看系统启动耗时
systemd-analyze