Linux内部 每个人 *必须* 了解
抱歉,我需要您提供要翻译的具体文本内容(文章正文)。请把需要翻译的文字粘贴在这里,我会在保持原始格式、代码块和链接不变的前提下,将其译成简体中文。
超越 “我懂 Linux”
如果你自称是 DevOps,Linux 不仅仅是操作系统——它是你的运行时、调试器、防火墙、调度器以及事后分析报告。了解内核暴露的文件系统和进程行为对于生产可靠性至关重要。
/proc & /sys – 内核的虚拟文件系统
Linux 将内部状态以文件形式暴露。两者都是虚拟文件系统(无磁盘 I/O),在启动时创建,反映当前内核状态。
关键 /proc 路径
| Path | Description |
|---|---|
/proc/cpuinfo | CPU 架构、核心数 |
/proc/meminfo | 内存统计信息 |
/proc/loadavg | 负载平均值(1、5、15 分钟) |
/proc/<pid>/fd | 进程的打开文件描述符 |
/proc/<pid>/maps | 进程的内存映射 |
生产洞察
ls -l /proc/<pid>/fd | wc -l # count open file descriptors
即时检测描述符泄漏。
关键 /sys 路径
由 udev、驱动和容器用于控制硬件和内核交互。
| Path | Example Use |
|---|---|
/sys/class/net/eth0/speed | 查询网络接口速度 |
/sys/block/sda/queue/scheduler | 查看或设置 I/O 调度器 |
要点
/proc= 当前正在发生的事情/sys= 硬件与内核的连接方式
进程生命周期:fork → exec → zombie
理解进程创建和终止是区分初级和高级工程师的关键。
fork(); // child process created
exec("/bin/java"); // replace child with new program
wait(); // parent collects exit status
如果父进程没有调用 wait(),子进程会变成 僵尸:
ps aux | grep Z # shows zombie processes
Interview gold line: “僵尸进程不占用内存,但会耗尽 PID 空间。”
负载平均值
uptime
# output: 1.2, 0.9, 0.7
这三个数字分别是最近 1、5、15 分钟内可运行或等待的进程平均数。
| 负载 | 解释(在 4‑核系统上) |
|---|---|
| 4 | 正常(≈每核 1 个) |
| 10 | 过载 |
高负载但 CPU 使用率低通常表明存在 I/O 瓶颈。
内存指标
free -m
关注 available 列,而不是 “free”。Linux 会积极地将空闲内存用于缓存;使用率高是正常的。
有用的工具:
vmstat 1
iostat -x
top
htop
这些工具可以关联 CPU 等待时间、磁盘延迟和运行队列长度。
套接字 – IP + 端口 + 协议
ss -tulnp
示例输出
LISTEN 0 128 0.0.0.0:8080 java
| 状态 | 含义 |
|---|---|
| LISTEN | 等待连接 |
| ESTABLISHED | 活动连接 |
| TIME_WAIT | 正常关闭 |
| CLOSE_WAIT | 应用程序错误(连接泄漏) |
套接字卡在 CLOSE_WAIT 状态表明应用程序没有正确关闭连接。
SELinux – 强制访问控制
仅靠文件权限不足。检查 SELinux 模式:
getenforce
# Enforcing | Permissive | Disabled
常见的生产环境故障:Unix 权限设置正确,但 SELinux 上下文错误。
故障排查步骤
ausearch -m avc -ts recent # 查找最近的拒绝记录
semanage fcontext -a -t <type> <path>
restorecon -v <path>
高级准则:绝不要在生产环境中禁用 SELinux;应修正相应的策略。
systemd – 服务监督
systemd 负责进程监督、日志记录、依赖管理以及自动重启。
示例单元文件
[Service]
ExecStart=/app/start.sh
Restart=always
MemoryMax=2G
检查最近的故障:
journalctl -u myapp --since today
特性:
- 内置看门狗
- CGroup 资源限制
- 确定性的启动顺序
面试官可能不会问 “解释 /proc”,而会问 “为什么负载高但 CPU 空闲?” 或者 “应用已重启但端口仍被占用?” 熟练掌握这些内部机制可以让你自然地回答此类问题。
结论
Linux 是:
- 您的可观测性平台
- 您的运行时安全层
- 您的真实来源
基础会缓慢变化;掌握它们将产生永久的复利。