第3章:Linux基础命令与系统管理高频面试

本章聚焦面试中最高频的Linux命令与系统管理题目:文件权限管理、进程控制、系统启动流程。掌握这些基础模块不仅能通过技术面,还能在系统故障排查和自动化脚本编写中快速加分。面试官通常通过一个命令考察你的“深度”(选项细节)和“广度”(实战场景)。

🧩 通用回答框架:命令类题目四步法

① 功能定位 说清楚命令 ② 常用选项 举2-3个核心参数 ③ 实战场景 贴一个真实用例 ④ 注意事项 踩坑点+安全提示 面试官期待:从“我用过”到“我理解原理并能在生产环境正确使用”

🔍 追问路径图:文件权限专项

文件权限 查看:ls -l / stat 权限位含义 修改:chmod / chown 数字法与符号法 默认权限:umask 计算最终权限 特殊权限:SUID/SGID/Sticky 举例 /usr/bin/passwd ACL:setfacl / getfacl 精细权限控制 安全上下文:chcon / restorecon SELinux相关 面试节奏:从基础命令 → 深入原理 → 安全加固 → 故障排查

📌 问答卡片 1:文件权限管理

面试题:如何修改一个文件的所有者和权限?请举出一个生产环境中的典型案例。

简短示例:

# 将 app.log 的所有者改为 webadmin 组改为 webgroup
sudo chown webadmin:webgroup /var/log/app.log
# 设置权限为 rw-r----- (640)
chmod 640 /var/log/app.log
# 验证
ls -l /var/log/app.log

追问:

  • chmod 的符号模式(u+x, g-w, o=r)和数字模式(750)如何换算?
  • 如果目录有多层,如何递归修改而不错改权限?
  • 特殊权限 SUID 对文件安全性有什么影响?
⚠️ 避坑:
  • 不要对系统二进制文件随意 chmod 777,会破坏安全模型。
  • 递归修改时需谨慎使用 -R,配合 --preserve-root 保护根目录。
  • 使用 umask 控制新建文件默认权限,生产环境通常 umask 027 或 077。

📌 问答卡片 2:进程管理

面试题:CPU 使用率过高时,你怎么定位并处理?请描述完整步骤。

简短示例:

# 1. 查看进程列表,按 CPU 排序
top -o %CPU
# 或使用 ps aux --sort=-%cpu | head -5

# 2. 确认进程 PID 后,查看详细资源
cat /proc/[PID]/status

# 3. 如果确认异常进程,发送信号终止
kill -9 [PID]     # 强制终止(慎用)
kill -15 [PID]    # 优雅停止(推荐)

# 4. 或者通过 systemd 管理
systemctl stop service-name

追问:

  • kill -9 和 kill -15 的区别?什么场景下必须用 -9?
  • 僵尸进程如何产生?怎么清理?
  • 如何让一个进程在终端关闭后继续运行?nohup vs screen vs systemd?
⚠️ 避坑:
  • 生产环境尽量先使用 kill -15 发送 SIGTERM,让进程自行清理。
  • 不要频繁 kill -9,可能造成数据丢失或文件损坏。
  • 检查父进程是否为 init(PID 1)的僵尸进程无法通过 kill 清除,需重启系统或修复父进程。

📌 问答卡片 3:系统启动流程

面试题:Linux 系统从加电到登录界面经历了哪些阶段?请简述 systemd 启动目标。

简短示例:

启动阶段:
1. BIOS/UEFI → 引导加载程序(GRUB2)
2. 内核加载 → 初始化硬件、挂载根文件系统
3. systemd 作为第一个进程(PID 1)启动
4. systemd 解析 default.target → multi-user.target 或 graphical.target
5. 并行启动服务 → 到达登录提示

# 查看当前启动目标
systemctl get-default
# 切换启动目标(临时)
systemctl isolate multi-user.target

追问:

  • 如何修改默认启动目标为命令行模式?
  • systemd 服务单元(Unit)有哪些类型?如何编写一个简单的 .service 文件?
  • 如果 systemd 卡在某个服务,如何进入紧急模式修复?
⚠️ 避坑:
  • 不要随意修改 /etc/systemd/system 下的文件,使用 systemctl edit 创建覆盖片段。
  • 误设 default.target 为 rescue.target 可能导致无法正常进入系统,可通过内核参数 systemd.unit= 临时覆盖。
  • 理解 systemctl enable 和 systemctl start 的区别:enable 是创建符号链接以实现开机自启。

🏢 公司侧重点

公司类型关注点
互联网(BAT/TMD)性能调优、大规模进程管理、自动化脚本(Shell/Python)
金融/银行权限最小化、审计日志、安全加固(SELinux/AppArmor)
云计算/容器(K8s)systemd 与容器基础、Namespace、cgroups 资源隔离
传统企业系统启动流程、运维标准化、故障恢复流程

👤 面试官画像

  • 身份:资深运维/安全工程师,通常有5年以上经验。
  • 考察方式:先问“你用过的命令”,然后深入追问底层机制(如 /proc 文件系统、信号处理)。
  • 打分标准:命令正确性(30%)、场景合理性(30%)、安全意识(20%)、扩展知识(20%)。
  • 常见陷阱:候选人口头背出一条命令但不知其副作用,或混淆不同命令的适用场景。

📋 命令排查流程(以“文件权限问题”为例)

  1. 现象确认:用户反馈无法写入 /var/log/app.log,报错 Permission denied。
  2. 检查权限:ls -l /var/log/app.log → 查看 owner、group、mode。
  3. 检查进程用户:ps aux | grep app → 确认运行用户。
  4. 临时修复:chmod 666 或 chown appuser:appgroup(根据最小权限原则)。
  5. 根因分析:检查 umask、父目录权限、ACL。
  6. 持久化方案:修改 systemd service 的 User= 和 UMask= 或调整日志配置。
💡 加分技巧:回答任何命令时,主动说出“我在生产环境遇到过XX问题,当时用xxx解决的”,可大幅提升印象分。面试官喜欢有故障排查经验的候选人。