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

CentOS 6 系统初始化

image-20220526063038363

BIOS 初始化

  • 负责计算机硬件检测
  • 确定启动引导顺序
  • 从可引导设备中加载和执行引导程序(如磁盘主引导分区MBR)
  • 确定从哪里可以引导并启动操作系统
  • 引导成功后,交由内核负责

GRUB 加载

GNU GRUB(Grand Unified Bootloader)是一个将引导装载程序安装到主引导记录(MBR)的程序
用户在此步可以开始操作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数
GRUB支持命令交互工具,提供非常方便的引导程序修复功能,并支持引导菜单的加密保护

内核初始化

内核初始化

  1. 硬件设备的检测
  2. 设备驱动程序的初始化
  3. 只读方式挂载根文件系统
  4. 启动第一个应用进程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。

内核初始化启动的第一个应用进程为 systemdinit 进程被 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

image-20220526065936502

VFS并不是一个实际的文件系统,只存在于内存,系统启动时建立,系统关闭时消亡。

VFS功能包括:

  • 记录可用文件系统的类型
  • 将设备与对应的文件系统联系起来
  • 处理面向文件的通用操作
  • 涉及到针对文件系统的操作时,把他们映射到相关的物理文件系统

设备挂载

Linux系统中有一个/mnt目录,专门用作挂载点(mount point)目录
在挂载设备时首先查看挂载点目录是否存在,如果不存在必须首先创建该目录,否则mount命令无法正常执行。

1
2
mount
unmount

挂载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
2
yum install -y at
service atd [ start | status | stop ]

指定在将来的某个时间点执行某些命令
用法: 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
2
3
4
5
6
7
# 打开crontab文件
crontab -ucentos -e
crontab -e
# 每隔一分钟发送一次时间到邮箱
*/1 0-23/1 * * * date
# 查看用户邮件
vi /var/spool/mail/username

Command: ps

显示当前进程的状态
格式:ps [选项]

参数 作用
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-e 显示所有进程
-f 采用全格式显示
1
2
3
4
# 全格式、所有进程
ps -ef
# 所有使用者进程
ps -aux

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
2
3
4
top
top -c
top -n 2
top -d 3

Command: free

显示内存状态,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等

格式:free [选项]

-b 以Byte为单位显示内存使用情况
-k 以KB为单位显示内存使用情况
-m 以MB为单位显示内存使用情况
-h 以合适的单位显示内存使用情况,使得数值部分最大为三位数
-o 不显示缓冲区调节列
-s<间隔描述> 持续观察内存使用状况
-t 显示内存总和