Linux 6 —— 系统初始化过程及设备进程管理
CentOS 6 系统初始化

BIOS 初始化
- 负责计算机硬件检测
- 确定启动引导顺序
- 从可引导设备中加载和执行引导程序(如磁盘主引导分区MBR)
- 确定从哪里可以引导并启动操作系统
- 引导成功后,交由内核负责
GRUB 加载
GNU GRUB(Grand Unified Bootloader)是一个将引导装载程序安装到主引导记录(MBR)的程序
用户在此步可以开始操作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数
GRUB支持命令交互工具,提供非常方便的引导程序修复功能,并支持引导菜单的加密保护
内核初始化
内核初始化
- 硬件设备的检测
- 设备驱动程序的初始化
- 以只读方式挂载根文件系统
- 启动第一个应用进程init
第一个初始进程init启动
当内核启动之后,通过启动用户级程序init来完成引导进程的内核部分。
init总是第一个进程(PID=1)。
init进程扮演了终极父进程的角色,失去了父进程的子进程就会以init作为它们的父进程。
确定系统运行级别
读取配置文件 /etc/inittab
,这是一个系统初始化脚本程序,用于确定系统启动的运行级别,定义系统常规功能。
运行系统初始化脚本
/etc/rc.d/rc.sysinit
是系统的初始化脚本,系统的大部分功能都由这个脚本实现。
运行指定级别目录内的脚本
每一个特定的运行级别都会有一个与之相对应的目录,共有7个运行级别
每一个运行级别的目录内都有一些可执行脚本
运行用户自定义脚本
/etc/rc.d/rc.local
是用户的初始化脚本,用户通过修改其中的内容来增加自己需要的功能。
激活系统中常规使用的终端
串行端口终端(/dev/ttySn)
伪终端(/dev/pty/)
控制终端(/dev/tty)
控制台终端(/dev/ttyn,/dev/console)
虚拟终端(/dev/pts/n)
CentOS 7 系统初始化
BootLoader 使用 GRUB2。
内核初始化启动的第一个应用进程为 systemd
,init
进程被 systemd
进程所替代。
不再使用 inittab
配置文件来进行初始化,转而使用 systemd
来设置,通过 systemctl get-default
来获取当前的运行级别,通过 systemctl set-default TARGET.target
来设置当前的运行级别。将会修改 /etc/systemd/system
目录下的 default.target
文件,系统启动时,会进入到同一目录下的 multiuser.target.wants
来搜索,当前运行级别下哪些服务启动开机启动。
设备管理
Linux 系统中设备都被抽象为设备文件来表示的,设备文件集中放置在 /dev
目录下,一般有几千个。不管有没有对应的真实设备,Linux系统在安装的时候都会自动预先创建。
Linux系统磁盘设备命名方式遵循一定的规则。
前两个字母表示分区所在设备的类型
- hd:IDE硬盘
- sd:SCSI硬盘(U盘,移动硬盘等)
第三个字母表示分区在哪个设备上
- hda:第一块IDE硬盘
- sda:第一块SCSI硬盘
- sdb:第二块SCSI硬盘
数字表示分区的次序
- hda1:第一块IDE硬盘第一分区
- sdb2:第二块SCSI硬盘第二个分区
挂载的文件系统类型
常见的文件系统:FAT、NTFS、ExtFAT、ext2、ext3、 ext3、 xfs、APFS
可使用 cat /proc/filesystems
查看 Linux 支持的文件系统
虚拟文件系统 VFS
VFS并不是一个实际的文件系统,只存在于内存,系统启动时建立,系统关闭时消亡。
VFS功能包括:
- 记录可用文件系统的类型
- 将设备与对应的文件系统联系起来
- 处理面向文件的通用操作
- 涉及到针对文件系统的操作时,把他们映射到相关的物理文件系统
设备挂载
Linux系统中有一个/mnt目录,专门用作挂载点(mount point)目录
在挂载设备时首先查看挂载点目录是否存在,如果不存在必须首先创建该目录,否则mount命令无法正常执行。
1 | mount |
挂载Linux系统外的文件
格式:mount [选项] <挂载设备名称> <挂载点>
参数 | 作用 |
---|---|
-t | 指定文件系统的型态,通常不必指定。mount 会自动选择正确的型态 |
-L | 将含有特定标签的硬盘分割挂上 |
-o auto、 -o noauto | 打开/关闭自动挂上模式 |
-o defaults | 使用预设的选项 rw, suid, dev, exec, auto, nouser, and async |
-o ro | 用唯读模式挂上 |
-o rw | 用可读写模式挂上 |
把指定的设备格式为指定的文件系统
格式:mkfs [选项][-t <文件系统类型>] [设备名称] [区块数]
1 | mkfs –t ext3 /dev/hda4 |
自动挂载
使用配置文件 /etc/fstab
来自动挂载存储设备。
Command: df
查看磁盘空间使用情况
格式:df [选项] [路径]
参数 | 作用 |
---|---|
-a | –all 包含所有的具有 0 Blocks 的文件系统 |
-h | –human-readable 使用人类可读的格式 |
-i | –inodes 列出 inode 资讯,不列出已使用 block |
-l | –local 限制列出的文件结构 |
-t | –type=TYPE 限制列出文件系统的 TYPE |
-T | –print-type 显示文件系统的形式 |
Command: du
统计目录或文件所占磁盘空间大小
格式:du [选项/参数] [目录名…]
参数 | 作用 |
---|---|
-a | 递归显示制定目录中各个文件及下级目录中各文件占用的数据块数 |
-h | 以友好直观方式显示信息,即以KB或MB为单位 |
-b | 以字节为单位列出磁盘空间使用情况 |
-m | 以MB为单位显示 |
-s | 对每个目录参数只给出占用的数据块总数 |
进程的概念
Linux系统上所有运行的东西都可以称之为一个进程,如每个用户任务、每个系统管理任务
- 程序只是一个静态的指令集合,不占系统的运行资源,只占用磁盘空间
- 进程是一个随时都可能发生变化的、动态的、使用系统运行资源(cpu,内存等)的程序
一个程序可以启动多个进程
进程分类
交互进程: 由shell启动的进程
批处理进程: 这种进程和终端没有联系,是一个进程序列
守护进程: 在后台持续运行的进程
命令结尾 + & 可以使命令在后台运行:
- jobs:查看所有后台进程列表
- ctrl+z:前台 -> 后台,并暂停执行
- fg <number>: 将后台进程调至前台执行
- bg <number>: 继续执行一个后台已暂停进程
at
1 | yum install -y at |
指定在将来的某个时间点执行某些命令
用法: at [选项] [时间]
参数 | 作用 |
---|---|
-m | 当 at 工作完成后,无论命令是否输出,都用 E-mail 通知执行 at 命令的用户。 |
-c 工作标识号 | 显示该 at 工作的实际内容。 |
-t 时间 | 在指定时间提交工作并执行,时间格式为 [[CC]YY]MMDDhhmm。 |
-d | 删除某个工作,需要提供相应的工作标识号(ID),同 atrm 命令的作用相同。 |
-l | 列出当前所有等待运行的工作,和 atq 命令具有相同的额作用。 |
-f 脚本文件 | 指定所要提交的脚本文件。 |
Crontab
cron 命令在系统启动时由一个 shell 脚本自动启动,进入后台,crond 守护进程 (/etc/init.d/crond)
cron 启动后搜索 /var/spool/cron
目录,寻找以 /etc/passwd
文件中的用户名命名的 crontab
文件,被找到的这种文件将载入内存
如果没有 crontab
文件,就转入“休眠”状态,释放系统资源
cron
每分钟“醒”过来一次,查看当前是否有需要运行的命令
如果发现某个用户设置了 crontab
文件,它将以该用户的身份去运行文件中指定的命令。命令执行结束后,任何输出都将作为邮件发送给 crontab
的所有者,或者 /etc/crontab
文件中 MAILTO
s环境变量中指定的用户。
1 | # 打开crontab文件 |
Command: ps
显示当前进程的状态
格式:ps [选项]
参数 | 作用 |
---|---|
-A | 列出所有的进程 |
-w | 显示加宽可以显示较多的资讯 |
-au | 显示较详细的资讯 |
-aux | 显示所有包含其他使用者的行程 |
-e | 显示所有进程 |
-f | 采用全格式显示 |
1 | # 全格式、所有进程 |
Command: pstree
1 | yum install psmisc |
以树形结构查看进程信息
用法: pstree [选项] [pid | user]
-a | 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等 |
---|---|
-c | 显示的进程中包含子进程和父进程 |
-p | 显示某进程信息 |
-u | 显示某用户信息 |
Command: Kill
删除执行中的程序或工作
格式:
kill [-s <信息名称或编号>][程序]
kill [-l <信息编号>]
1 (HUP) | 重新加载进程 |
---|---|
9 (KILL) | 杀死一个进程 |
15 (TERM) | 正常停止一个进程 |
Command: top
实时进程列表,实时监视系统资源
格式: top [选项]
-d | 改变显示的更新速度 |
---|---|
-q | 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行 |
-c | 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称 |
-i | 不显示任何闲置 (idle) 或无用 (zombie) 的进程 |
-n | 更新的次数,完成后将会退出 top |
1 | top |
Command: free
显示内存状态,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等
格式:free [选项]
-b | 以Byte为单位显示内存使用情况 |
---|---|
-k | 以KB为单位显示内存使用情况 |
-m | 以MB为单位显示内存使用情况 |
-h | 以合适的单位显示内存使用情况,使得数值部分最大为三位数 |
-o | 不显示缓冲区调节列 |
-s<间隔描述> | 持续观察内存使用状况 |
-t | 显示内存总和 |