Linux 运维工程师面试题整理
整理日期:2026-10-24
共 32 题,覆盖:Linux 基础、网络、Nginx、Docker、监控自动化、故障排查、架构存储、HR 综合
标注说明:⭐ 掌握较好 | ⚠️ 薄弱需重点复习 | ❌ 易错点(已纠正)
一、网络与协议
1. 正向代理 vs 反向代理 ⭐
- 正向代理:替客户端去访问外网资源,服务端不知道真实客户端是谁,如科学上网代理。
- 反向代理:替后端服务接收用户请求,用户不知道背后真实的后端服务,由代理分发请求。
- 项目例子:Nginx Proxy Manager 就是反向代理,用户访问域名,不知道后面跑的是哪个容器。
2. TCP 三次握手 ⭐
- 第一次:客户端发送 SYN 报文,请求建立连接;
- 第二次:服务端收到,回复 SYN+ACK,同意连接并确认收到客户端请求;
- 第三次:客户端收到后回复 ACK,确认收到服务端报文,连接建立。
- 目的:同步双方序列号,保证双向收发正常(TCP 是全双工协议)。
- ❌ 易错点:不要说成浏览器专属,TCP 是传输层协议,不只是浏览器在用。
3. iptables filter 表的三个链 ⭐
- INPUT:处理进入本机的数据包(别人访问这台服务器)。
- OUTPUT:处理从本机发出去的数据包(服务器向外发起请求)。
- FORWARD:处理经过本机转发的数据包(本机既不是源也不是目标,只是转发,如服务器当路由器、容器跨主机转发)。
- 口诀:进本机、出本机、路过本机。
二、Linux 基础
4. $? 是什么 ⭐
- 代表上一条命令的退出状态码(不是输出内容)。
0表示执行成功,非0表示失败。- 用途:脚本里通过它判断命令是否正常,再决定是否输出告警。
5. 进程与线程 ⭐
- 进程:程序运行起来后的独立实例,拥有独立的内存空间、文件描述符等资源,进程间相互隔离。
- 线程:进程内部的执行单元,同一进程内多个线程共享进程资源(内存、文件句柄),线程本身只有少量栈资源。
- 结论:进程是资源分配的最小单位,线程是 CPU 调度的最小单位。
6. 软链接与硬链接 ⭐
- 硬链接:多个文件名对应同一个 inode,指向磁盘上同一份数据。删除源文件只是链接计数减一,只要还有硬链接,数据不丢失;不能跨分区、不能链接目录。
- 软链接(符号链接):是独立文件,里面存的是源文件路径。删除源文件后软链接失效(坏链接);支持跨分区、可链接目录。
7. 后台运行:& 与 nohup ⭐
- 后台运行:进程脱离当前终端的前台控制,在后端继续执行,终端可继续输入其他命令。
&:把进程放到后台,但仍与当前 shell 关联,关闭终端时进程被 SIGHUP 信号终止。nohup:忽略 SIGHUP 信号,配合&使用(nohup 命令 &),关闭终端后进程仍运行,日志默认输出到 nohup.out。- 进阶:更可靠可用
setsid或 systemd 管理。
8. swap 是什么 ⭐
- swap 是磁盘上划分出来的一块空间,当作虚拟内存。
- 物理内存不足时,系统把暂时不用的内存数据换到 swap,腾出物理内存给正在运行的程序。
- 缺点:基于磁盘,速度远慢于物理内存,大量使用会导致系统卡顿、IO 飙升。
- 定位:swap 只是应急缓冲,不能当物理内存用。
9. Linux 开机流程 ⚠️
- BIOS/UEFI 自检(POST):检查 CPU、内存、硬盘等基本硬件,按启动顺序找启动设备;
- 加载引导程序 GRUB:显示菜单,加载内核镜像 vmlinuz 和 initramfs;
- 内核启动:接管系统,初始化硬件驱动,挂载根文件系统(/),启动 1 号进程 init;
- systemd 接管:按 target 启动各项系统服务和依赖(网络、日志、挂载);
- 进入登录界面:服务启动完毕,用户可登录。
- 口诀:BIOS 自检 → GRUB 引导 → 内核加载 → systemd 启动服务 → 登录界面。
10. 查看日志常用命令 ⭐
dmesg:查看内核日志,OOM、硬件、磁盘异常等内核问题优先看它;journalctl -u 服务名:查看 systemd 托管服务的日志;tail -f:实时跟踪日志;less:分页翻看,搭配 grep 过滤;grep:筛选异常关键字(error、fail)。
11. logrotate 日志轮转 ⭐
- Linux 自带的日志轮转工具,防止日志持续写占满磁盘。
- 可按大小或时间(天/周)配置,自动分割、重命名、压缩旧日志,设置保留份数,超出自动删除。
- 轮转后可通知应用重新加载日志,保证正常输出。
- ❌ 易错点:防的是磁盘被占满,不是内存。
12. awk 与 sed 的区别 ⭐
- awk:按列处理文本,擅长字段提取、统计(打印某几列、求和、计数)。
- sed:按行处理,最常用行内字符串替换,也可做删除、新增、筛选。
- 口诀:awk 管列和统计,sed 管行和替换。
13. 服务器负载:负载高一定 CPU 繁忙吗 ⭐
- 负载:排队等待 CPU 调度的进程数量,包含正在运行和等待资源的进程。
- 负载高 ≠ CPU 繁忙。负载统计还包含等待 IO(磁盘读写)的进程。
- 典型场景:磁盘 IO 瓶颈,进程卡在等磁盘,us、sy 不高,但 wa(IO 等待)很高,负载数字飙升。
- 结论:看负载要结合 top 里的 us、sy、wa 一起判断。
14. Linux 安全加固 ⚠️
核心原则:最小权限、最小暴露。
1. 账号权限:日常用普通用户,必要时 sudo;限制 root 直接远程登录;
2. SSH 加固:禁用密码登录改用密钥,改默认 22 端口,限制可登录用户和来源 IP;
3. 端口与防火墙:只开放必需端口,firewalld/iptables 限制访问,关闭无用服务;
4. 系统更新:及时打安全补丁;
5. 访问控制:敏感服务(如数据库)不监听公网,只允许内网访问;
6. 审计监控:登录日志、操作审计,监控异常登录。
- ❌ 易错点:「删除文件前先查看」属于操作习惯,不算加固,应归到「操作前备份、避免误操作」的变更安全意识。
三、Nginx
15. Nginx 403 的原因 ⭐
403 Forbidden:服务器收到请求但拒绝提供访问。
1. 文件/目录权限不足,nginx 运行用户没有读权限;
2. 目录下没有默认首页文件,且配置了禁止目录浏览;
3. 配置里写了 IP 访问控制,当前 IP 被拉黑;
4. SELinux 开启,阻止 nginx 读取网站目录;
5. 防盗链配置拦截了请求。
16. Nginx worker 进程模型,为什么性能好 ⚠️
- master-worker 架构:master 负责读配置、管理 worker,不处理业务;worker 才真正处理请求。
- 每个 worker 是单线程,但基于事件驱动、非阻塞 I/O(epoll),一个 worker 可同时监听成千上万连接,靠事件循环异步处理,而不是每连接开一个线程。
- 高性能原因:多进程充分利用多核 + 单进程内异步非阻塞处理海量连接,对比 Apache 每连接一进程/线程,内存占用和上下文切换开销小得多。
- 三个关键词:master-worker、epoll、异步非阻塞。
17. 热加载:为什么用 reload 而不是 restart ⭐
reload是平滑重载:master 不重启,重新读配置,启动新 worker 处理新连接;旧 worker 处理完存量连接后优雅退出。整个过程服务不中断、用户无感知。restart是彻底关闭再启动,会造成短暂服务中断,线上业务不可接受。- 结论:reload 优雅重载、连接不断;restart 重启进程、服务中断,线上改配置优先 reload。
四、Docker 与容器
18. 容器启动后立刻退出,排查思路 ⚠️
- 优先看容器日志
docker logs 容器名,日志通常直接报程序报错; - 检查启动命令、compose 配置,command、环境变量、挂载路径是否写错;
- 确认主进程是否前台运行(前台进程一结束容器就退出);
- 检查权限:挂载目录权限不足、SELinux 限制;
- 看服务器资源:内存不够被 OOM 杀掉;
- 用
docker run单独手动启动,脱离 compose 复现问题。
- 一句话重点:优先看 logs。
19. 镜像与容器的区别 ⭐
- 镜像:静态模板,打包了程序、依赖、配置、运行环境,只读,不能直接运行。
- 容器:镜像启动后产生的运行实例,有独立的读写层,是正在运行的进程。
- 同一个镜像可启动多个独立容器。
20. Docker 镜像分层的好处 ⚠️
- 镜像是分层存储,每条 Dockerfile 指令生成一层只读层。
- 好处:
1. 复用:多个镜像的相同基础层(如 centos/ubuntu)宿主机只存一份,节省磁盘;
2. 增量拉取:已存在的层不重复下载,提升拉取速度;
3. 只读安全:镜像本身不可修改,改动只能在容器上层加读写层。 - 口诀:复用、增量下载、镜像只读安全。
五、监控与自动化
21. Prometheus 监控体系架构 ⭐
- 核心是 Prometheus Server,通过 pull 模型主动抓取各监控目标暴露的指标,存入自带的时序数据库(TSDB),用 PromQL 查询分析。
- 组件:
1. Exporter:被监控端采集器(node_exporter 采主机、mysqld_exporter 采数据库),暴露 /metrics 接口;
2. Prometheus Server:定时抓取、存储、PromQL 查询;
3. Alertmanager:触发告警,分组、去重、静默,发送到邮件/钉钉;
4. Grafana:可视化大盘;
5. Pushgateway:短任务主动推送指标。 - 链路:Exporter 采集 → Server 拉取存储 → PromQL 查询 → Alertmanager 告警 → Grafana 展示。
- 项目:Prometheus + node_exporter + Grafana,采集主机 CPU/内存/磁盘并配告警。
22. 对运维自动化的理解 ⭐
- 把大量重复、标准化的操作交给脚本或工具执行(巡检、备份、状态检查)。
- 人工重复操作耗时、易漏检、易误操作。
- 自动化价值:降低人为失误、提升效率、标准化(多台机器保持一致)。
- 项目例子:自己写的主机巡检脚本就是自动化的落地实践。
23. Ansible vs Shell 脚本 ⚠️
- Ansible 是自动化运维工具,无 Agent 架构,通过 SSH 管理多台机器,被控端无需装软件。
- 与 Shell 的区别:
1. 幂等性:模块先判断目标状态,已满足就不重复执行;Shell 重复执行易出错;
2. 标准化模块:装包、改配置、起服务有现成模块,可读性强;
3. 清单管理:inventory 主机清单分组,YAML 写 playbook,可版本化、复用。 - ❌ 易错点:Shell 不是只能管理本机,也能通过 SSH 批量执行,但要自己写循环、处理认证和错误,繁琐。
24. 什么是幂等性 ⭐
- 同一操作执行一次或多次,最终结果相同,不会产生重复数据、重复启动或报错。
- 系统已是目标状态 → 执行后不变;不是目标状态 → 执行一次就变成目标状态。
- 例子:
useradd tom非幂等(重复执行报"用户已存在");幂等写法先判断再创建。 - 重要性:自动化任务常失败重试、重复执行,幂等保证重复执行安全、多机状态一致、异常重跑不搞坏系统。
六、故障排查
25. 拿到陌生业务服务器第一步 ⭐
- 不直接修改任何配置。
- 先摸清现状:系统版本、内核、CPU/内存/磁盘资源;
ss看监听端口、确认跑了哪些服务;看系统日志、确认备份策略。 - 优先找运维交接文档,梳理业务链路,搞清服务器用途。
- 未确认业务影响、未备份前,不做任何变更。
26. 磁盘满了怎么排查 ⭐
df -h查看磁盘空间使用率,定位哪个分区满;df -i看 inode 是否耗尽(空间还有但 inode 用完也无法新建文件);du -sh /*逐级查找大目录,定位日志/备份包/容器数据;- 找到大文件后用
lsof确认是否仍被进程占用(避免直接删日志但空间不释放); - 处理:不重要日志清理,重要日志先备份再转移,配置 logrotate 防止再满。
27. CPU 使用率高,如何定位进程 ⚠️
uptime看负载,判断突发还是持续;top看 CPU 构成:us 高查用户进程、sy 高查内核态、wa 高查磁盘 IO;- top 按 P 按 CPU 排序、按 M 按内存排序,定位高占用进程;
top -Hp 进程PID定位具体哪个线程;- wa 高时
iostat -x确认磁盘 %util,iotop/pidstat -d定位高 IO 进程; - 结合应用日志判断进程在做什么(死循环、异常计算、任务堆积)。
- ❌ 易错点:找磁盘读写用iostat -x/iotop,不是df -h(df 看空间占用)。
28. MySQL 突然变慢怎么排查 ⚠️
- 系统层:CPU、内存、磁盘 IO(iostat 看 wa)、swap,排除资源瓶颈;
- 慢查询日志:开启 slow_query_log,找耗时长的 SQL,看是否没走索引、全表扫描;
- 连接与锁:
show processlist看连接堆积、锁等待、死锁; - 缓存与内存:缓存命中率、buffer pool 配置是否合理;
- 大事务、主从延迟、binlog 写入压力。
- 顺序:系统资源 → 慢 SQL → 连接与锁 → 配置参数。
七、架构与存储
29. 什么是高可用,核心服务怎么做高可用 ⚠️
- 高可用(HA):通过冗余和自动切换,保证故障时服务依然可用,目标是提升可用性(如 99.9%)。
- 分层设计:
1. 应用层:多实例部署 + 负载均衡(Nginx/LVS),一台挂了流量自动切走;
2. 数据层:数据库主从复制,主库故障自动切换(MHA、MGR),定期备份和灾备;
3. 监控告警:Prometheus + 告警,健康检查自动剔除故障节点;
4. 故障演练:定期模拟故障验证切换流程。 - 核心:消除单点 + 自动切换 + 可监控。
30. RAID 0 / 1 / 5 区别 ⚠️
RAID(磁盘阵列):把多块硬盘组合成一块逻辑盘,目的是提速或冗余。
| 类型 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| RAID 0 | 数据条带化,分散写多块盘 | 读写性能高,容量全用 | 无冗余,坏一块全丢 |
| RAID 1 | 两块盘互为镜像,写两份 | 冗余强,坏一块数据还在 | 容量减半,成本高 |
| RAID 5 | 条带 + 分布式校验(至少 3 块盘) | 性能与冗余兼顾 | 坏盘重建期间风险高 |
- 选择逻辑:安全优先选 1,性能优先选 0,两者兼顾选 5。
八、HR / 综合类
31. 为什么从 ERP 实施转 Linux 运维 ⭐
- 做 ERP 驻场实施时经常对接服务器部署、排查系统故障,因此接触到 Linux。
- 实施更多是固定业务流程,可发挥的技术空间有限;自己对服务器、自动化、故障排查更感兴趣。
- 后续系统学习 Linux 运维,在云服务器落地了整套容器和监控项目,打算长期深耕。
- 要点:不是贬低 ERP,而是发现兴趣在系统技术侧,主动选择运维。
32. 项目只是个人实验环境,和生产差距大怎么回答 ⚠️
- 承认差距:单台云服务器实验环境,生产有多节点、高可用、安全规范、备份校验、告警收敛、变更流程,这些暂时没实战机会;
- 证明可迁移:底层技术原理、排查思路、工具使用是一样的(OOM 排查、Nginx 反代、容器排错、监控采集);
- 体现安全意识:入职后严格遵守变更流程,先备份、先看文档、小范围验证,不随意改线上,跟着团队学习生产规范。
- 逻辑:承认差距 + 底层能力可迁移 + 体现运维安全意识。
复习优先级(薄弱点)
🔴 重点补:答不上来 / 不完整
- [ ] 高可用设计(第 29 题)
- [ ] Linux 开机流程(第 9 题)
- [ ] RAID 0/1/5(第 30 题)
- [ ] Docker 镜像分层(第 20 题)
🟡 纠正认知:有小错误
- [ ] 磁盘 IO 用
iostat -x/iotop,不是df -h(第 27 题) - [ ] MySQL 慢排查顺序:系统资源 → 慢 SQL → 连接锁 → 配置(第 28 题)
- [ ] 容器启动退出:第一优先
docker logs(第 18 题) - [ ] 安全加固:最小权限 / SSH 密钥 / 最小端口 / 补丁 / 监控(第 14 题)
- [ ] Ansible 是「无 Agent」,Shell 也能通过 SSH 批量(第 23 题)
- [ ] logrotate 防的是磁盘占满,不是内存(第 11 题)
🟢 已掌握,保持
幂等性、软硬链接、awk/sed、镜像与容器、负载 wa、swap、进程线程、nohup、Prometheus pull、TCP 握手、iptables 三链。
评论