系统引导过程和控制
文章目录
一、引导过程
- 开机自检BIOS
通电测试硬件
- MBR引导
加载启动程序列表
- GRUB菜单
用户需求来启动的自定义的程序,包含默认启动程序
- 加载内核
内核、镜像加载到内存准备启动使用
- init进程初始化
加载系统默认进程程序,例如驱动,加载到内存中,准备提供给用户使用
二、系统初始化进程
init是系统中第一个进程
init进程的PID号永远为1
systemd
是init软件
第一个进程/lib/systemd/systemd
systemd单元类型
单元类型 | 扩展名 | |
---|---|---|
service | .service | 描述一份系统服务 |
socket | .socket | 描述一个进程间通信的套接字 |
device | .device | 描述一个内核识别的设备文件 |
mount | .mount | 描述一个文件系统的挂载点 |
systemd目标
运行级别 | systemd的target | 说明 |
---|---|---|
0 | target | 关机状态使用该级别会关闭主机 |
1 | rescue.target | 单用户模式不需要密码即可登录多用于系统维护 |
2 | multi-user.target | |
3-5 | ||
6 | ||
三个实验
1.MBR扇区故障
1.备份MBR扇区数据到其它磁盘( /dev/sdb1)
mkdir /backup #创建备份文件夹
mount /dev/sdb1 /backup #挂载带有备份文件的分区
dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1 #备份mbr引导文件
2.模拟破坏MBR引导扇区
dd if=/dev/zero of=/dev/sda bs=512 count=1 #复制空文件填补
3.引导界面进入急救模式,选择"Troubleshooting"选项再选择"Rescue a CentOS Linux system"选项,进入急救模式选择“1"选择Continue并按两次Enter键
mkdir /backup #创建备份文件夹
mount /dev/sdb1 /backup #挂载带有备份文件的分区
dd if=/backup/mbr.bak of=/dev/sda #恢复备份数据
exit #执行exit命令退出临时Shell环境,系统将会自动重启
2.GRUB配置文件
引导界面进入急救模式,重建GRUB菜单配置文件
rm -rf /boot/grub2/grub.cfg #删除grub菜单
重启,然后输入exit进入急救模式
chroot /mnt/sysimage #加载光盘镜像,切换到系统根环境
grub2-install /dev/sda #重新将GRUB引导程序安装到第一块/dev/sda的MRB扇区
grub2-mkconfig -o /boot/grub2/grub.cfg #重新构建GRUB菜单的配置文件
exit #退出chroot环境
reoot #重启
3.修改密码
进入急救模式
chroot /mnt/sysimage #加载光盘镜像,切换到系统根环境
passwd root #重设root密码
三、进程和计划任务管理
- 程序
静态的保存在介质中可执行代码和数据
- 进程
动态的在cpu和内存中可执行的程序代码,每个程序可以创建多个子进程
1.静态进程信息 ps
-a 显示终端下所有进程信息
-u 以用户为主格式输出进程信息
-x 显示当前用户在所有终端下的进程信息
ps -aux #简单列表形式显示进程信息
-
VSZ 虚拟内存
-
RSS 物理内存
-
TTY 在那个终端上运行
-
STAT 进程状态:S休眠状态 T停止状态 Z僵尸进程
R 该程序正在运行
S 该程序在睡眠当中
Z 该程序父程序无法终止它
< 进程运行在高优先级上
N 进程运行在低优先级上
L 进程有页面锁定在内存中
s 进程是控制进程
l 进程是多线程
+当前运行在前台
D 系统守护进程不可中断状态
T 调试、程序执行 一般停止
- 快捷键
ctrl+c 发送sigint信号终止一个进程
ctrl+z 发送sigstop信号挂起一个进程
ctrl+d 表示eof ,代表输入完成或者注销
ps -elf #长格式显示系统的进程信息
-e 显示系统内的所有进程信息
-l 使用长格式显示进程信息
-f 使用完整格式显示进程信息
tail -f /var/log/messages
2.查看进程动态信息 top
up 系统运行时间 users 当前登录用户
load average:0.05,0.03,0.05系统负载,分别为1分钟、5分钟、15分钟cpu负载平均值
系统任务tasks信息: total:总进程数 running: 正在运行的进程数 sleeping :休眠进程
stopped:终止的进程 zombie:僵尸进程
us:用户占用 sy:内核占用 ni:优先级 id:空闲
wa:I/O等待占用 hi:硬件中断占用 si:软件中断占用 st:虚拟化占用
Mem:total 总内存空间 free 空闲内存 used 已用内存 buff/cache 物理内存和交换内存的缓冲区
Swap:total 总交换空间 free 空闲交换空间 used 已用交换空间 avail Mem 可用物理空间
PIN 进程id USER 进程所有者用户 PR 优先级 NI 调优先级 VIRT 虚拟内存 RES 物理使用内存
SHR 共享内存大小
S 进程状态 D不可中断的睡眠状态 R 运行中 S睡眠中 T已跟踪/已停止 Z僵尸状态
%CPPU 上次更新到现在的cpu时间占用比
%MEM 进程使用的物理内存占比
TIME+ 进程使用的cpu时间
COMMAND 命令名/命令行
- 快捷键
P:按CPU排序 M:按内存排序 T:按内存排序
p:加进程id查看某个进程状态 N:根据启动时间排序 q:退出
3.查询进程PID pgrep
-l 输出对应的进程名以及pid
-U 查询特定用户的进程
-t 查询在特定终端运行的进程
4.以树形结构展示 pstree
-p 列出对应的pid号
-u 列出对应的用户名
-a 列出完整的命令信息
pstree -aup #查看系统的进程树
终止进程
kill 7095 #正常结束进程
kill -9 7095 #强制终止进程
针对程序名终止
killall -9 vim #终止该程序多个进程
针对用户和终端
pkill -l -u #针对于用户
5.后台任务 jobs
jobs -l #查看后台任务列表 并显示pid号
fg 1 #将后台程序调入前台使用
CTRL+z将程序后台挂起 CTRL+c强制中断前台运行的程序
四、计划任务 at
1.一次性计划 at
-
data时间
-
atq查询未执行的计划任务
at 11:11 2022-5-27 #在2022.5.27 11:11建立计划任务
at> pgrep -U root | wc -l > /tmp/ps.root #将系统运行的总数量统计在ps.root文件中
at> <EOT><EOT> #添加结尾然后ctrl+d提交
2.周期性计划 crontab
- crontab 周期性任务设置
/etc/crontab 配置文件地址
分 时 日 月 周
分钟 取值为从0到59之间的任意整数
小时 取值为从0到23之间的任意整数
日期 取值为从1到31之间的任意整数
月份 取值为从1到12之间的任意整数
星期 取值为从0到7之间的任意整数,0或7代表星期日
*表示该范围内的任意时间
,表示间隔的多个不连续时间点
-表示一个连续的时间范围
/指定间隔的时间频率
-e 编辑计划任务
which echo #查询echo命令绝对路径
crontab -e #编辑周期计划任务
*/1 * * * * /usr/bin/echo "this is a test" >> /opt/test_ky20.txt #每一分钟将数据写入txt文件中
-l 查看crontab详细内容
-u 指定一个用户执行周期计划
-r 删除周期计划
数
星期 取值为从0到7之间的任意整数,0或7代表星期日
*表示该范围内的任意时间
,表示间隔的多个不连续时间点
-表示一个连续的时间范围
/指定间隔的时间频率
-e 编辑计划任务
which echo #查询echo命令绝对路径
crontab -e #编辑周期计划任务
*/1 * * * * /usr/bin/echo "this is a test" >> /opt/test_ky20.txt #每一分钟将数据写入txt文件中
-l 查看crontab详细内容
-u 指定一个用户执行周期计划
-r 删除周期计划