DevOps实习生面试宝典 - 第3节

第3章 Linux与网络技术深度:高频命令、文件系统、网络故障排查、面试考察点

本章聚焦 DevOps 实习生最常被问到的 Linux 和网络基础。面试官通过命令熟练度、文件系统理解、网络故障排查思路三个维度评估你的动手能力和底层认知。掌握结构化回答比背命令更关键。

网络故障排查 · 面试回答框架 连通性检查 ping / traceroute DNS 解析 nslookup / dig 路由跟踪 route / ip route 端口/防火墙 ss / netstat / iptables 日志分析 /var/log/messages 面试加分:每步关联工具命令 + 实际输出解读 + 边界情况判断

📌 面试问题 1:请描述你会如何排查一台 Linux 服务器的网络不通问题?

面试官考察点逻辑排查思维(从链路层到应用层);常用网络命令熟练度;能否区分“网络不通”的不同场景(丢包、延迟、拒绝连接)。
回答框架1. 确认本机网络状态(ip a / ifconfig)→ 2. 测试网关连通性(ping 网关)→ 3. 检查 DNS 解析(dig/nslookup)→ 4. 路由跟踪(traceroute)→ 5. 检查目标端口(telnet/ss)→ 6. 查看防火墙/iptables 规则 → 7. 查看系统日志。
简短示例回答我会先 `ip a` 确认网卡有 IP,再 `ping 8.8.8.8` 测外网,不通则 `ping 网关` 定位。然后用 `dig` 检查 DNS,`traceroute` 看路由跳转,最后 `ss -tlnp` 和 `iptables -L` 检查端口与防火墙。整个过程从底层到顶层逐步缩小范围。
可能追问① 如果 ping 通但业务端口不通,你会怎么排查?② 如何判断是网络丢包还是应用层故障?③ 你用过 mtr 吗?它的优势是什么?
⚠️ 避坑提醒避免直接背诵命令列表而不讲逻辑顺序;不要只说 “ping、traceroute” 而不说明判断条件;注意 `ping` 不通时先确认是否禁止 ICMP。

📌 面试问题 2:Linux 下 `df -h` 和 `du -sh` 的区别是什么?什么时候用它们?

面试官考察点文件系统视图理解;命令差异理解(磁盘块 vs 文件内容);能否根据场景选择正确命令。
回答框架1. 描述 df 看分区已用/可用,基于文件系统超级块(显示的是已分配块数)→ 2. du 计算实际文件占用大小,遍历目录统计 → 3. 当磁盘报警但 du 统计总和小于 df 时,说明有已删除但未释放文件的进程(lsof | grep deleted)→ 4. 举例:排查 /tmp 目录空间。
简短示例回答`df -h` 查看分区总容量和可用量,适合快速判断磁盘是否满。`du -sh *` 计算当前目录下各文件/目录实际大小,用于找大文件。有一次磁盘报警但 `du` 总和小于 `df`,我用 `lsof +L1` 找到删除但未释放的日志文件,kill 进程后空间恢复。
可能追问① inode 满了怎么处理? ② 什么是硬链接和软链接?对 df/du 结果有影响吗? ③ 如何监控某个目录的实时写入?
⚠️ 避坑提醒不要混淆“分区大小”和“文件大小”;回答时明确说明 `df` 显示的是块设备视角,`du` 是文件系统视角。

📌 面试问题 3:你用过哪些 Linux 性能排查命令?请举例说明一次排查 CPU 高负载的经历。

面试官考察点常用性能命令熟练度(top、htop、vmstat、iostat、perf);关联分析能力;能否区分 CPU 使用率高 vs I/O 等待高。
回答框架1. `top` 看整体负载和占用 CPU 的进程 PID → 2. `top -Hp PID` 看线程级 → 3. `strace -p PID` 跟踪系统调用(定位频繁 syscall)→ 4. 如果是 Java 进程,用 `jstack` 打印堆栈 → 5. 结合 `vmstat 1` 看上下文切换和中断 → 6. 如果是 I/O 等待高,换 `iostat -x 1`。
简短示例回答曾遇到一个 Java 服务 CPU 持续 90%,先 `top` 找到进程 PID,`top -Hp` 发现多个线程占用高,用 `jstack` 导出堆栈发现某接口循环写入日志。优化后 CPU 降至 10%。平时排查还会用 `vmstat` 看上下文切换,`strace` 追踪系统调用。
可能追问① 如何判断是 CPU 瓶颈还是锁竞争? ② perf 的采样原理是什么? ③ 遇到 CPU 空闲但系统慢怎么排查?
⚠️ 避坑提醒不要只说 “用 top 看”,必须给出具体字段(us/sy/id/wa);注意区分用户态 CPU 和内核态 CPU;I/O 等待高时不要误判为 CPU 问题。

📁 项目案例:基于 Nginx + Flask 的日志收集系统部署与调优

项目名称内网日志实时收集与可视化平台
业务背景运维团队需要统一收集 200+ 台后端服务器的访问日志和错误日志,实时分析异常并生成报表。前期使用 rsyslog 直接写盘,查询慢且无告警。
规模指标日均处理日志 500GB;峰值 TPS 约 8000;部署节点数:1 台收集服务器 + 5 台 Filebeat 客户端;总数据量 2TB+。
技术栈Linux (CentOS7) + Nginx (反向代理) + Flask (日志处理 API) + Redis (缓冲) + Filebeat (采集) + Logstash (过滤) + Elasticsearch (存储) + Kibana (展示)。
核心难点① 海量写入导致 Nginx 连接数打满,需调优 worker_connections 和 keepalive;② Filebeat 在部分旧服务器上因 inotify 限制无法监控文件变更,改用 backoff 轮询;③ 日志格式不统一,使用 Logstash 的 grok 模式多次调整正则。
面试高频追问① Nginx 的 worker_processes 和 worker_connections 如何计算?② 如果日志写入突然暴涨,你会怎么限流?③ Filebeat 和 Logstash 的区别?什么时候不用 Logstash?④ Elasticsearch 的索引分片如何设置?
可迁移回答话术“当时我通过 `ulimit -n` 先确认系统最大文件句柄数,再同步调整 Nginx 的 `worker_rlimit_nofile` 和 `worker_connections`。对于日志格式解析,我先把常见日志样本导出,用 Logstash 的 grok 调试器逐个验证,最后合并为多个 match 分支,处理效率提升 30%。”
项目高频追问关联图 日志收集项目 Nginx 参数调优 限流策略 Filebeat vs Logstash ES 索引分片设置 每个分支均可结合项目经历展开回答,体现“调优-问题-解决”闭环
💡 面试提示: 项目案例中提到的 `ulimit`、`worker_connections`、`grok` 都是 DevOps 面试高频考点。建议你亲手在虚拟机中搭建一次 ELK + Nginx 的小型实验,加深对参数变化的理解。
📚 核心命令速查表(本章涉及)
命令用途常用参数
ping测试连通性与延迟-c 4, -i 0.5
traceroute路由跳数探测-n (不解析主机名)
ss查看 socket 统计-tlnp (TCP、listen、numeric、pid)
df -h查看分区使用量-i (inode)
du -sh查看目录实际大小--max-depth=1
top进程实时监控-H (线程模式), -bn1 (批处理)
strace跟踪系统调用-p PID, -c (统计)