Linux内部 每个人 *必须* 了解

发布: (2026年1月19日 GMT+8 03:29)
5 min read
原文: Dev.to

抱歉,我需要您提供要翻译的具体文本内容(文章正文)。请把需要翻译的文字粘贴在这里,我会在保持原始格式、代码块和链接不变的前提下,将其译成简体中文。

超越 “我懂 Linux”

如果你自称是 DevOps,Linux 不仅仅是操作系统——它是你的运行时、调试器、防火墙、调度器以及事后分析报告。了解内核暴露的文件系统和进程行为对于生产可靠性至关重要。

/proc & /sys – 内核的虚拟文件系统

Linux 将内部状态以文件形式暴露。两者都是虚拟文件系统(无磁盘 I/O),在启动时创建,反映当前内核状态。

关键 /proc 路径

PathDescription
/proc/cpuinfoCPU 架构、核心数
/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、驱动和容器用于控制硬件和内核交互。

PathExample 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 是:

  • 您的可观测性平台
  • 您的运行时安全层
  • 您的真实来源

基础会缓慢变化;掌握它们将产生永久的复利。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...