第4章 Linux基础与Shell编程考察点、回答框架、企业侧重点
本章聚焦阿里云自动化工程师面试中Linux基础命令与Shell脚本编程的核心考题。掌握系统排查、脚本调试、进程管理、权限控制等技能是必备能力。下面以知识总览开头,再展示回答框架与追问路径,最后通过三个高频问答卡片强化实战训练。
| 知识模块 | 核心考察点 | 企业侧重点 |
|---|---|---|
| 进程与服务管理 | ps/top/pgrep, 信号, systemctl, 守护进程 | 故障排查、自动化巡检脚本、服务自愈 |
| 文件与权限 | chmod/chown, umask, ACL, 特殊权限 | 安全基线、日志权限、多租户环境 |
| 文本处理 | grep/sed/awk, 管道与重定向, 正则 | 日志分析、配置生成、数据清洗 |
| Shell脚本编程 | 变量、条件分支、循环、函数、错误处理 | 可维护性、健壮性、性能优化、异常捕获 |
| 系统监控与排查 | CPU/内存/磁盘/网络, iostat/vmstat/ss | 性能瓶颈定位、资源倾斜、告警响应 |
问答卡片 1:服务自检与启动脚本
面试问题:写一个Shell脚本,检查Nginx服务是否运行,若未运行则启动它并记录日志到 /var/log/nginx_check.log。
面试官考察点:进程检测方式(pgrep/pidof)、条件判断与退出码、服务启动命令(systemctl)、日志重定向与时间戳、脚本健壮性(set -e)。
回答框架:
- 使用
pgrep -x nginx检查进程,捕获退出码。 - 若退出码非0,执行
systemctl start nginx。 - 将启动结果(含日期)追加到日志文件。
- 脚本头部加
#!/bin/bash和set -e。 - 添加判断逻辑:若启动失败则额外告警。
示例回答:使用 pgrep -x nginx 检测进程,若退出码非0则 systemctl start nginx,并将日期和状态追加到日志。脚本开头加 set -euo pipefail 确保错误中断。约85字。
可能追问:如何防止脚本重复执行导致多次启动?如何设置cron定时检查?如何记录启动失败的具体错误?
问答卡片 2:IP访问统计(awk/sort/uniq)
面试问题:请使用awk和管道统计 /var/log/access.log 中每个IP的访问次数,并输出前10个IP。
面试官考察点:awk提取字段、sort排序、uniq -c去重计数、逆序排序、head截取;对日志格式的理解。
回答框架:
- awk取第一列:
awk '{print $1}'; - 管道给
sort排序; uniq -c合并计数;sort -nr按数字降序;head -10取前十。
示例回答:awk '{print $1}' /var/log/access.log | sort | uniq -c | sort -nr | head -10。第一列是IP,先排序保证uniq正确,再逆序显示。约60字。
可能追问:如果日志是自定义格式,IP不在第一列怎么处理?如何排除内网IP?如何输出成CSV文件?
head -1 确认字段位置,防止解析错误。问答卡片 3:CPU飙高排查流程
面试问题:如果Linux系统CPU使用率持续100%,请写出排查步骤和涉及的命令。
面试官考察点:top排序、ps辅助、strace/perf定位、性能分析思路;生产环境操作谨慎。
回答框架:
- 执行
top按 CPU 排序(按P)找到PID; - 用
ps -p PID -o %cpu,pid,cmd确认进程详情; - 若需要,用
strace -cp PID统计系统调用耗时; - 或用
perf top -p PID看热点函数; - 根据分析结果决定重启或优化。
示例回答:先 top 按 P 找到最耗CPU的PID,再用 ps aux | grep PID 查看命令行。然后 strace -p PID -t 跟踪读/写调用,或 perf top -g -p PID 看调用栈。约90字。
可能追问:如何查看每个线程的CPU占用?如何分析内存或磁盘IO?如何在不影响业务的情况下降级?
kill -15 优雅终止。strace 会极大降低进程性能,生产慎用;可先尝试 ps -T -p PID 看线程级别。