一、Linux内核启动流程
1.1 Systemd启动流程
- UEFi或BIOS初始化,运行POST开机自检
- 选择启动设备
- 引导装载程序, centos7是grub2,加载装载程序的配置文件:/etc/grub.d/,/etc/default/grub ,/boot/grub2/grub.cfg
- 加载initramfs驱动模块(可以实现根文件系统的挂载)
- 加载虚拟根中的内核
- 虚拟根的内核初始化,Centos7使用systemd代替init,第一个进程
- 执行initrd.target 所有单元,包括挂载 /etc/fstab
- 从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需要的服务
1.2 grub工作流程
grub启动分为2个主要阶段,其中一阶段又分为2个小阶段,存储位置和功能如下:
第一阶段上半部分:存储在0磁道0扇区的446字节空间内。
第一阶段下半部分:存储在1扇区到2047扇区,存储2阶段的文件系统驱动,保证2阶段的文件可读。
第二阶段:存储在/boot/grub/grub.conf
1.3 Linux内核设计及特点
内核自身初始化过程:
- 探测可识别到的所有硬件设备
- 加载硬件驱动程序(借助于ramdisk加载驱动)
- 以只读方式挂载根文件系统
- 运行用户空间的第一个应用程序:/sbin/init
Linux内核特点:
- 支持模块化:ko(内核对象),如:文件系统,硬件驱动,网络协议等。
- 支持内核模块的动态装载和卸载。
内核组成部分:
- 核心文件:/boot/vmlinuz-VERSION-release
- 模块文件:/lib/modules/VERSION-release
1.4 systemd服务配置文件
systemd的服务配置文件通常由三部分组成:
字段 | 说明 |
[Unit] | 定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等。 |
[Service] | 与特定类型相关的专用选项;此处为Service类型 |
[Install] | 定义由“systemctl enable”以及"systemctl disable"命令在实现服务启用和禁用时用到的一些选项。 |
[Unit]字段中常用的选项:
字段 | 作用 |
Description | 描述信息 |
Documentation | 帮助信息 |
After | 定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反。 |
Before | 定义unit的启动次序,表示当前unit应该早于哪些unit启动,其功能与After相反。 |
Requires | 依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活 |
Wants | 依赖到的其它units,弱依赖 |
Conflicts | 定义units间的冲突关系 |
[Service]字段中常用的选项:
字段 | 选项 |
Type | 定义影响ExecStart及相关参数的功能的unit进程启动类型 |
EnvironmentFile | 环境配置文件 |
PIDFile | 指明生成进程文件路径 |
ExecStartPre | ExecStart前运行,可以有多条 |
ExecStart | 指明启动unit要运行命令或脚本的绝对路径 |
ExecStartPost | ExecStart后运行,可以有多条 |
ExecReload | 指明重新加载unit配置要运行的命令或脚本 |
ExecStop | 指明停止unit要运行的命令或脚本 |
KillSignal | 以何信号杀死进程,默认SIGTERM |
killMode | 以何种方式杀死进程control-group | process | mixed | none |
Restart | 当守护进程意外杀死时,是否自动重启。 |
二、AWK
2.1 工作原理和流程
awk是文本处理三剑客重要的指令之一。其执行流程如下:
- 执行BEGIN{...}内的语句块;
- 从文件标准输入中读取一行;
- 以这行为输入执行awk指令内的语句;
- 判断是否到达文件末尾,如果未到达则重复步骤2和3;
- 执行END{...}内的语句块。
其中BEGIN和END都是可选语句块。
2.2 awk命令
awk命令格式:
awk [options] '[command]' [file]
常用选项:
-f [progfile] # 从文件中读入
-F [fs] # 指定分隔符
-v var1=aa var2=bb # 指定变量
示例:
以: 为分隔符,对