2. Linux基础高频问题与回答框架

本章聚焦文件管理、权限控制、进程调度、性能调优四大方向,提炼标准化回答框架与避坑策略。掌握“现象→定位→方案→验证”闭环,应对面试中80%的Linux实操题。

Linux基础高频问题 · 回答框架 现象 → 定位 → 方案 → 验证 文件管理 权限控制 进程调度 性能调优 回答三步走 ① 确认场景/症状 ② 关联底层机制 ③ 输出操作/命令 面试加分点 主动提边界条件(如文件过大、权限冲突、僵尸进程、CPU亲和性) 结合 /proc、/sys、strace、perf 等影子工具 能用“单机→集群”视角扩展,体现工程意识

📁 面试问题一:如何排查磁盘空间不足?请列出常用命令和步骤。

考察点磁盘空间管理、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 配置未生效,导致日志从不轮转
面试高频追问
  1. 如何在不重启进程的情况下释放被占用的日志文件?
  2. logrotate 的 copytruncate 和 create 模式区别?什么时候用 copytruncate?
  3. 设计一个日志清理策略,既要保留7天又要防止日志风暴。
  4. 磁盘报警阈值怎么定?会考虑哪些指标?
可迁移回答话术

“我在电商大促期间遇到过类似问题。首先通过 du -sh /data/logs/* 快速定位最大目录,用 lsof +L1 找出已删除但未释放的日志,采用 cat /dev/null > /proc/<PID>/fd/<N> 清空而不重启进程。然后修复 logrotate 配置(增加 copytruncate 选项)并测试轮转。最后在 Prometheus 添加磁盘增长速率告警,提前发现异常。这个方法论可以复用到任何‘磁盘满’场景——先止血释放,再根因修复,最后自动化防护。”

💡 复习提示: 建议将本章四个方向结合 Linux 内核基础(如 inode、进程状态、调度算法)串联记忆。面试时将命令、原理、边界条件打包输出,即可体现“实战+深度”。