1. Linux命令面试题的价值与定位
作为一名在Linux运维领域摸爬滚打8年的老鸟,我深知面试时被问到"如何用find命令批量修改文件权限"或"怎么分析nginx日志访问量Top10"时的窘迫。这套100题清单正是我根据自己参与过的47场技术面试(包括被面和面人)整理而成,覆盖了实际工作中90%的高频场景。
不同于网上那些零散的题目集合,这里每个问题都经过真实生产环境验证。比如"用awk统计TCP连接状态"这道题,直接取材自去年我们服务器遭遇SYN Flood攻击时的排查过程。题目按难度分为三个梯队:
- 基础必会(30题):文件操作、权限管理等生存技能
- 进阶核心(50题):进程调度、网络调试等高手分水岭
- 专家级(20题):系统调优、内核参数等架构师必备
2. 基础命令篇精要解析
2.1 文件操作三板斧
find命令的-exec参数是面试官最爱挖的坑。很多人知道find /var/log -name "*.log",但遇到"找到7天前的日志并压缩"就卡壳。正确解法是:
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;这里有几个关键点:
{}代表find找到的每个文件\;表示命令结束(注意转义)- 使用
-mtime +7而非-atime,因为日志更关注修改时间
踩坑提醒:在
-exec中调用sed/awk时,务必用单引号包裹脚本,避免shell提前解释特殊字符
2.2 权限管理深度剖析
当被问到"如何让新建文件自动继承目录权限"时,仅回答chmod是不够的。完整的解决方案应该包括:
chmod g+s /shared_dir # 设置SGID位 setfacl -d -m g::rwx /shared_dir # 设置默认ACL我曾见过某企业NAS因为漏设SGID,导致研发团队互相覆盖代码。面试时能提到ACL和特殊权限位,绝对能拉开与普通候选人的差距。
3. 系统管理核心题库
3.1 进程监控实战技巧
ps aux --sort=-%mem | head -n 5这个命令看似简单,但90%的候选人说不清这些字段含义:
- VSZ:虚拟内存大小(包含共享库)
- RSS:实际物理内存占用
- %MEM:RSS占总内存百分比
更专业的回答应该包含对/proc/[pid]/smaps的分析技巧。比如发现Java应用内存泄漏时,我会用:
grep -B 1 heap /proc/$(pgrep java)/smaps | awk '{sum+=$2} END {print sum/1024"MB"}'3.2 网络调试组合拳
被问"如何判断端口不可用的原因"时,建议按这个排查链回答:
telnet 127.0.0.1 80→ 测试连通性ss -tulnp | grep 80→ 检查监听状态iptables -L -n -v→ 查看防火墙规则dmesg | grep rejected→ 内核级排查
去年我们遇到个经典案例:某服务端口明明显示LISTEN状态,但无法连接。最终发现是/etc/hosts.deny里设置了全局拒绝规则。这种实战经验会让面试官眼前一亮。
4. Shell编程高频考点
4.1 变量作用域陷阱
这道题淘汰了60%的面试者:
count=0 cat file.txt | while read line; do ((count++)); done echo $count # 输出什么?正确答案是0,因为管道会创建子shell。解决方案有三种:
- 改用进程替换:
while read line; do ... done < <(cat file.txt) - 使用
lastpipe特性(bash4.2+):shopt -s lastpipe - 临时文件法:
count=$(wc -l < file.txt)
4.2 信号处理必知必会
当被问到"如何让脚本优雅退出"时,至少要展示这样的结构:
trap 'cleanup; exit 1' SIGINT SIGTERM cleanup() { rm -f /tmp/lockfile kill -TERM $child_pids 2>/dev/null }我曾用这个技巧处理过K8s Pod的优雅终止,避免了一半的"僵尸进程"问题。
5. 磁盘与日志分析进阶
5.1 磁盘I/O瓶颈定位
iostat -dx 1输出中这些指标最关键:
%util> 70% 表示磁盘饱和await> 10ms 说明延迟过高svctm与await差值大可能存在队列堆积
高级技巧是用blktrace定位具体进程:
blktrace -d /dev/sda -o - | blkparse -i - | grep "D [RW]"5.2 日志分析四件套
统计Nginx 500错误率的完整命令链:
awk '$9==500{count++} END{print count/NR*100"%"}' access.log更专业的分析应该包含:
- 时间维度分布:
awk -F'[: ]' '{print $2":"$3}' - 关联错误模式:
grep -A 3 -B 3 " 500 " - 地理信息解析:
geoipupdate + awk匹配
6. 系统调优终极挑战
6.1 OOM Killer调优
当被问到"如何防止关键进程被OOM Killer杀死"时,应该提到:
echo -1000 > /proc/$$/oom_score_adj # 当前shell sysctl -w vm.panic_on_oom=1 # 极端情况下直接panic某次MySQL被误杀后,我们通过/var/log/kern.log中的oom-kill日志,发现是某Java应用的oom_score_adj设置不合理导致的。
6.2 内核参数优化
TCP连接复用这个知识点,要能说清这些参数的关系:
sysctl -w net.ipv4.tcp_tw_reuse=1 # 快速回收TIME_WAIT sysctl -w net.ipv4.tcp_fin_timeout=30 # 缩短FIN等待 sysctl -w net.core.somaxconn=65535 # 增大连接队列实际调优时要配合ss -s和netstat -s监控效果。
7. 面试实战技巧
7.1 问题拆解方法论
遇到"服务器突然变慢怎么排查"这种开放性问题,建议按这个框架回答:
- 快速定位瓶颈点(CPU/内存/IO/网络)
- 展示诊断命令链(top→vmstat→iostat→netstat)
- 结合业务场景分析(如数据库连接池爆满)
7.2 场景模拟应答策略
当面试官给出具体错误现象时,采用"现象→可能原因→验证方法"的三段式:
现象:无法SSH连接 可能原因: 1. 网络中断(ping测试) 2. sshd服务崩溃(systemctl status sshd) 3. 最大连接数限制(ss -lnp|grep ssh)8. 持续学习建议
保持竞争力的三个途径:
- 每天精读
/proc下的一个文件(比如/proc/interrupts) - 定期分析
strace -f -p PID的输出 - 参与Linux内核邮件列表讨论
这套题库每年会更新20%的内容,最近新增了systemd和cgroup v2相关题目。建议配合man proc和info coreutils进行拓展阅读。