Linux 核心概念
参考文档:
偏「体系化 + 运维/架构视角」 的Linux 系统 · 核心概念 / 基础理论总览。
覆盖 RHEL / AlmaLinux 与 Debian / Ubuntu 系列。
+----------------------------------------------------+
应用程序 / 服务
Nginx / MySQL / Docker / Kubernetes
+----------------------------------------------------+
用户空间 (User Space)
shell / libc / systemd / PAM / udev
+----------------------------------------------------+
内核空间 (Kernel)
进程管理 / 内存管理 / 文件系统 / 网络子系统 / 设备与驱动
cgroups / namespaces / 虚拟化 / NUMA / security
+----------------------------------------------------+
硬件 (CPU / RAM / Disk / NIC / GPU)
+----------------------------------------------------+
👉 Linux ≠ 发行版
- Linux:内核
- RHEL / Ubuntu:内核 + 工具链 + 策略集合
Linux 内核空间五大核心子系统总览
┌──────────┐
进程 ← 谁在跑?什么时候跑?
├──────────┤
内存 ← 用多少内存?怎么用?会不会 OOM?
├──────────┤
网络 ← 数据怎么进出机器?
├──────────┤
文件系统 ← 数据怎么存、怎么读?
├──────────┤
设备驱动 ← 怎么跟硬件说话?
└──────────┘
一句话总结:
- 进程管“时间”
- 内存管“空间”
- 文件系统管“持久”
- 网络管“流动”
- 设备驱动管“硬件抽象”
负责处理进程的创建、调度、终止以及进程间通信(IPC)
决定“哪个程序在什么时候用 CPU 跑多久”
| 职责 | 说明 |
|---|---|
| 进程/线程管理 | fork / exec / exit / wait |
| CPU 调度 | 谁先跑、跑多久 |
| 上下文切换 | 进程/线程切换 |
| 信号机制 | kill、SIGTERM、SIGKILL |
| 进程间通信 | pipe / socket / shm / futex |
- 调度器(Scheduler)
- CFS(Completely Fair Scheduler)
- 调度单位:线程(task_struct)
- 调度类
- CFS(普通进程)
- RT(实时进程)
- 状态机
- running / sleeping / zombie / stopped
| 现象 | 根因 |
|---|---|
| load 很高但 CPU 空闲 | IO 阻塞 |
| 进程卡死 | D 状态(不可中断睡眠) |
| CPU 抢占严重 | 调度不公平 / cgroups |
- PID / PPID
- fork / exec
- 调度器(CFS)
- 优先级(nice / prio)
ps aux
top / htop
pstree
负责管理物理内存和虚拟内存,为每个进程提供独立的虚拟地址空间
决定“内存怎么分配、怎么回收、怎么映射”
职责 | 说明 虚拟内存 | 每个进程都有独立地址空间 物理内存 | RAM 管理 页缓存 | 加速文件 IO 内存回收 | reclaim / swap OOM | 内存耗尽时杀进程
- 虚拟内存
- VA -> PA 映射
- 页表(page table)
- 页(Page)
- 4K / HugePage
- 缓存
- Page Cache
- Buffer Cache
- NUMA
- 本地内存 / 远端内存
| 现象 | 根因 |
|---|---|
| free 看着有内存却 OOM | 可回收内存不足 |
| IO 慢 | Page Cache 抖动 |
| 数据库性能不稳 | NUMA 跨节点访问 |
| swap 抖动 | swappiness 不合理 |
- 虚拟内存
- 页(Page)
- 缓存(Page Cache)
- Swap
- OOM Killer
RSS / VSZ / SHMEM
Buffer / Cache
free -m
vmstat
smem
提供对存储设备上数据的组织、存储和访问能力
统一“文件”这一抽象,让程序不关心底层存储
| 职责 | 说明 |
|---|---|
| 文件抽象 | 一切皆文件 |
| 目录结构 | 树状结构 |
| 权限管理 | UID / GID / mode |
| 缓存 | 加速 IO |
| 挂载 | 多文件系统统一 |
- VFS(虚拟文件系统)
- 统一接口
- inode
- 文件元数据
- dentry
- 目录缓存
- page cache
- 文件读写性能核心
| 现象 | 根因 |
|---|---|
| 小文件多 IO 慢 | inode / dentry 压力 |
| df 有空间却写不了 | inode 用尽 |
| 数据丢失 | writeback 未完成 |
| Docker 层慢 | overlayfs copy-on-write |
- VFS(虚拟文件系统)
- inode
- dentry
- superblock
| FS | 场景 |
|---|---|
| ext4 | 通用 |
| xfs | 大文件 / 高并发 |
| overlayfs | 容器 |
df -Th
df -i
mount
实现各种网络协议,使 Linux 能够进行网络通信
负责“数据包如何进入、处理、发送出系统”
| 职责 | 说明 |
|---|---|
| 协议栈 | TCP/IP/UDP/ICMP |
| Socket 抽象 | 应用统一接口 |
| 路由 | 数据包去哪 |
| 防火墙 | netfilter / nftables |
| QoS | 限速、队列调度 |
- 协议栈
- L2 -> L7
- Socket
- 用户态 ↔ 内核态接口
- 队列
- tx_queue / rx_queue
- 中断 & NAPI
- 网络包处理性能关键
| 现象 | 根因 |
|---|---|
| 高并发 TCP 连接慢 | backlog / somaxconn |
| 丢包 | 网卡队列满 |
| 网络抖动 | 中断绑核不合理 |
| 容器网络复杂 | namespace + veth |
- TCP/IP 栈
- Socket
- netfilter
- 路由表
ip a
ip r
ss -lntup
内核与硬件设备通信的桥梁
让内核“能和硬件说话”
Linux内核中数量最多的代码就是设备驱动
| 职责 | 说明 |
|---|---|
| 硬件抽象 | 屏蔽硬件差异 |
| 驱动管理 | 加载/卸载 |
| 中断处理 | IRQ |
| DMA | 高效数据传输 |
| 设备模型 | sysfs / udev |
- 驱动模型
- bus / device / driver
- 中断
- IRQ / MSI-X
- DMA
- 零拷贝
- 字符 / 块设备
- /dev/xxx
| 现象 | 根因 |
|---|---|
| IO 抖动 | 中断集中 |
| 网卡性能低 | IRQ 未绑核 |
| 磁盘慢 | I/O scheduler 不匹配 |
| 启动慢 | 驱动加载阻塞 |
- 字符设备 / 块设备
- udev
- /dev
lsblk
udevadm info
以 MySQL 一次查询 为例:
MySQL 进程
↓
进程调度(CPU 时间片)
↓
内存管理(Buffer Pool / Page Cache)
↓
文件系统(VFS -> ext4 / xfs)
↓
块设备层
↓
设备驱动(NVMe / SATA)
↓
硬件
网络请求则会多走一条:
网卡 -> 驱动 -> 网络栈 -> Socket -> MySQL
- 进程:谁跑、什么时候跑
- 内存:用多少、放哪、回不回
- 网络:包怎么进、怎么出
- 文件系统:数据怎么存、怎么读
- 设备驱动:硬件怎么用
| 项目 | 说明 |
|---|---|
| bash / sh | 命令解释 |
| PATH | 命令查找 |
| env | 环境变量 |
echo $PATH
env
- coreutils:ls、cp、mv
- util-linux:mount、fdisk
- procps:ps、top
systemd 管什么?
| 模块 | 功能 |
|---|---|
| systemd | init |
| journald | 日志 |
| networkd | 网络 |
| resolved | DNS |
| timedated | 时间 |
target ≈ runlevel
| target | 含义 |
|---|---|
| multi-user.target | 服务器模式 |
| graphical.target | 桌面 |
| rescue.target | 单用户 |
| emergency.target | 紧急 |
| 项目 | 工具 |
|---|---|
| 包管理 | rpm |
| 前端 | dnf |
| 仓库 | BaseOS / AppStream |
| 第三方 | EPEL |
dnf install nginx
dnf update
| 项目 | 工具 |
|---|---|
| 包管理 | dpkg |
| 前端 | apt |
| 仓库 | main / universe |
| 第三方 | PPA |
apt install nginx
apt upgrade
| 目录 | 含义 |
|---|---|
| / | 根 |
| /etc | 配置 |
| /var | 变化数据 |
| /usr | 程序 |
| /bin /sbin | 基础命令 |
| /proc | 进程 |
| /sys | 内核接口 |
rwx rwx rwx
- UID / GID
- suid / sgid / sticky
- 登录认证
- sudo
- ssh
| 系统 | 发行版 |
|---|---|
| SELinux | RHEL / AlmaLinux |
| AppArmor | Ubuntu |
BIOS/UEFI
↓
GRUB
↓
Kernel
↓
initramfs
↓
systemd
↓
services
| 系统 | 日志 |
|---|---|
| journal | systemd |
| rsyslog | 传统 |
| /var/log | 文本 |
journalctl
journalctl -u sshd
- NetworkManager
- nmcli
- netplan
- systemd-networkd
| 技术 | 核心 |
|---|---|
| namespace | 隔离 |
| cgroup | 资源 |
| overlayfs | 存储 |
| KVM | 虚拟化 |
- ulimit
- cgroup
- sysctl
ulimit -n
sysctl -a
| 维度 | RHEL / AlmaLinux | Debian / Ubuntu |
|---|---|---|
| 稳定性 | 极高 | 高 |
| 更新频率 | 慢 | 快 |
| 默认安全 | SELinux | AppArmor |
| 企业支持 | 强 | 强 |
可以把 Linux 能力分成 5 层:
- 系统结构
- 资源管理
- 服务管理
- 安全模型
- 故障排查
Linux 的本质是:内核负责“规则”,用户空间负责“使用规则”,发行版负责“默认策略”。