主题
Linux技术栈总览
一句话定位:Linux 是免费开源的类 Unix 多用户、多任务操作系统,核心设计「一切皆文件」+「用户态/内核态双模式」;以 inode 索引文件、以 runlevel 划分运行态、以管道/信号/共享内存等 IPC 串联进程,是服务器与云原生的底座。
体系结构(用户空间 vs 内核空间)
| 空间 | 内容 | 权限 |
|---|---|---|
| 用户空间 | 应用程序、C 库 | 受限,通过系统调用访问内核能力 |
| 内核空间 | 系统调用接口、内核、架构相关代码 | 无限制访问指令/内存/IO |
- 分为两态的原因:现代 CPU 有不同工作模式,指令与寄存器访问权限不同;为了保护内核安全。
- 用户态 → 内核态转移只有两条路:系统调用 / 硬件中断。
核心机制
| 机制 | 说明 |
|---|---|
| 一切皆文件 | 硬件设备也是设备文件,用读写文件的方式访问硬件 |
| inode | 存储文件元信息(大小/所有者/权限/磁盘地址表)的索引节点;文件数据存在 block 中,inode 是「找到 block 的索引」 |
| 硬链接 | 指向同一 inode 的多个目录项;不能跨分区、不能链接目录;删除原文件不影响其他硬链接 |
| 软链接 | 独立 inode 保存原文件路径;可跨分区/跨机器;原文件移动后失效 |
| 交换空间 | RAM 不足时临时保存并发程序的内存空间 |
inode 细节:inode 节点 64 字节,含磁盘地址表(13 个块号)——文件按块号顺序读,把分散的物理块组织成逻辑文件。
目录结构(FHS 常见目录)
| 目录 | 用途 |
|---|---|
/bin /sbin | 常用命令 / root 才能用的系统管理命令 |
/etc | 系统管理与配置文件 |
/home /root | 普通用户主目录 / 超级用户主目录 |
/usr /opt | 系统应用程序 / 额外安装的可选应用(如 Tomcat) |
/proc | 虚拟文件系统,系统内存映射,读它拿系统信息 |
/dev | 设备文件 |
/boot | 系统引导文件 |
/var | 运行时变化数据、服务日志 |
/tmp | 公共临时文件 |
/mnt | 临时挂载点 |
/lost+found | 非正常关机留下的孤儿文件 |
开机启动流程
加电自检(BIOS) → 读 MBR 引导文件(GRUB/LILO) → 引导内核 → 运行第一个进程 init(PID=1) → 进入对应运行级别 → 运行终端登录运行级别(SysV):0=关机 · 1=单用户模式 · 2=字符多用户(无网络) · 3=字符多用户 · 4=未分配 · 5=图形多用户 · 6=重启。
进程状态(ps 符号)
| 状态 | 含义 | 备注 |
|---|---|---|
| R | 运行中/就绪队列 | 只有 R 状态能在 CPU 上运行 |
| S | 可中断睡眠 | 等待事件(socket/信号量) |
| D | 不可中断睡眠 | 通常等 IO;无法终止,只能等资源恢复或重启 |
| T | 暂停/被跟踪 | SIGSTOP 触发 |
| Z | 僵尸进程 | 已退出但父进程未 wait4() 回收 |
IPC 进程间通信(7 种)
管道(Pipe/命名管道 FIFO) · 信号(Signal) · 消息队列 · 共享内存(最快)· 信号量(同步)· 套接字(Socket,可跨机器) —— 详见 概念卡片:进程间通信与线程同步。
内核知识(驱动开发向)
- 内核锁:自旋锁(忙等,短临界区)vs 信号量(睡眠锁,长持有场景;中断上下文不能用信号量)。
- 模块:
insmod加载 /rmmod卸载;模块运行在内核空间,不能链接用户态库函数。 - 设备:字符设备(cdev)与块设备;主设备号=驱动、次设备号=设备实例(dev_t 32 位:12 位主 + 20 位次)。
- 软中断 vs 工作队列:软中断不能睡眠、处于中断上下文(上半部);工作队列在进程上下文、可睡眠(下半部)。
- TLB:页表缓存,加速线性→物理地址转换。
常见误解
- 以为硬链接/软链接删除行为一样 → 删除原文件:硬链接仍可访问,软链接失效。
- 以为 inode 存的是文件内容 → 存的是元信息 + 磁盘地址表,内容在 block。
- 以为只有系统调用能进内核 → 硬件中断也可以(如网卡收包)。
关联
- 命令与排障:概念卡片:Linux运维命令与排障
- 面试:面试题蒸馏卡:Linux与Shell
- 云原生底座:Kubernetes技术栈总览 · 容器隔离原理-Namespace与Cgroups
- OS 通用概念:操作系统技术栈总览