2. Linux基础高频问题与回答框架
本章聚焦文件管理、权限控制、进程调度、性能调优四大方向,提炼标准化回答框架与避坑策略。掌握“现象→定位→方案→验证”闭环,应对面试中80%的Linux实操题。
📁 面试问题一:如何排查磁盘空间不足?请列出常用命令和步骤。
| 考察点 | 磁盘空间管理、du/df 命令熟练度、inode 概念、大文件定位能力 |
| 回答框架 |
现象确认 → 用 df -h 检查分区使用率 → 用 du -sh /* 逐层定位 → 特殊情况用 df -i 看 inode → 清理方案(日志轮转、删除临时文件)→ 验证。 |
| 示例回答 |
先用 df -h 找到使用率超90%的分区,再用 du -sh /data 等逐级缩小到具体目录。若 df 显示满但 du 合计小,用 lsof | grep deleted 查出被删除但未释放的文件句柄并重启进程。最后用 logrotate 设置自动轮转。 |
| 可能追问 | inode 满怎么办?du 和 df 结果不一致的原因?如何查找超过1G的大文件? |
| 避坑提醒 | 不要直接 rm -rf /data,先确认业务影响;谨慎使用 find -exec rm 避免误删;日志清理建议保留至少7天。 |
🔐 面试问题二:如何配置一个只能被特定用户访问的共享目录?
| 考察点 | Linux 用户/组管理、文件权限(ugo/acl)、umask、setuid/setgid/sticky bit |
| 回答框架 |
创建组 → 添加用户到组 → 修改目录组归属 → 设置权限(2770 或 ACL)→ 粘滞位保护 → 测试验证。 |
| 示例回答 |
创建组 groupadd dev,将用户 Alice、Bob 加入 usermod -aG dev alice。目录 /project 执行 chown root:dev /project; chmod 2770 /project,使组内可读写、新文件继承组。设置粘滞位 chmod +t /project 防止互删。 |
| 可能追问 | setuid 和 setgid 对目录的作用?ACL 和 chmod 权限冲突时优先谁?如何查看一个命令的权限位? |
| 避坑提醒 | 不要给 chmod 777——面试直接扣分;注意 root 用户不受权限限制;生产环境谨慎使用 setuid 脚本。 |
⚙️ 面试问题三:生产服务器 CPU 使用率持续 100%,如何定位和解决?
| 考察点 | 进程调度状态、top/htop、strace/perf、负载与 CPU 关系、中断/上下文切换 |
| 回答框架 |
top 确认哪个进程(PID)→ top -H -p PID 定位线程 → strace -p PID 看系统调用 → perf top 看热点函数 → 若用户态高查代码逻辑,若内核态高查 IO/网络 → 优化方案(降频、增加 worker、限流)。 |
| 示例回答 |
先 top 看到 nginx worker CPU 99%,top -H 发现单线程忙等。用 strace -c -p PID 统计系统调用,发现大量 epoll_wait 空转。检查配置发现 worker_connections 过低导致事件处理循环过快,调大后恢复正常。 |
| 可能追问 | 用户态 vs 内核态 CPU 高分别怎么排查?上下文切换过高怎么办?如何看进程是 IO 密集还是 CPU 密集? |
| 避坑提醒 | 不要只看 %CPU 忽略负载;注意 top 默认 Irix mode 和 Solaris mode 差异;生产环境谨慎使用 strace 可能让进程更卡。 |
🏗️ 项目案例:电商大促日志盘满故障——从排查到治理
| 项目名称 | 保障业务连续性的日志盘满紧急响应与自动化治理 |
| 业务背景 | 双11大促期间,业务日志量暴增10倍,导致日志盘(/data/logs)使用率飙升至98%,引发业务写入阻塞。 |
| 规模指标 | 100+ 应用节点,单个节点日产生日志约 80GB,总集群峰值 60 万 TPS。 |
| 技术栈 | CentOS 7, logrotate, rsyslog, crontab, du/df, lsof, awk, Python 脚本, Prometheus + Alertmanager。 |
| 核心难点 |
- 短时间内无法扩容磁盘,需立即释放空间
- 部分历史日志正被 Java 进程占用(
lsof 显示 deleted)无法直接删除
- logrotate 配置未生效,导致日志从不轮转
|
| 面试高频追问 |
- 如何在不重启进程的情况下释放被占用的日志文件?
- logrotate 的 copytruncate 和 create 模式区别?什么时候用 copytruncate?
- 设计一个日志清理策略,既要保留7天又要防止日志风暴。
- 磁盘报警阈值怎么定?会考虑哪些指标?
|
| 可迁移回答话术 |
“我在电商大促期间遇到过类似问题。首先通过 du -sh /data/logs/* 快速定位最大目录,用 lsof +L1 找出已删除但未释放的日志,采用 cat /dev/null > /proc/<PID>/fd/<N> 清空而不重启进程。然后修复 logrotate 配置(增加 copytruncate 选项)并测试轮转。最后在 Prometheus 添加磁盘增长速率告警,提前发现异常。这个方法论可以复用到任何‘磁盘满’场景——先止血释放,再根因修复,最后自动化防护。”
|
💡 复习提示: 建议将本章四个方向结合 Linux 内核基础(如 inode、进程状态、调度算法)串联记忆。面试时将命令、原理、边界条件打包输出,即可体现“实战+深度”。