1. 这场笔试到底在筛什么样的人
先说结论:奇安信秋招运维方向的笔试卷,核心不是考你背了多少命令,而是考你在真实生产环境里踩过多少坑。
我当年拿到这份卷子的时候,第一反应是"怎么全是场景题"。后来跟几个上岸的同事聊了一圈,发现几乎所有运维岗的校招笔试都这个套路——给你一堆看似零散的问题,实际上是在模拟一个运维工程师日常会遇到的十分钟片段:某个服务挂了、某个磁盘满了、某个端口不通了、某条命令不敢敲了。你平时有没有真正处理过这些问题,一测就露馅。
这篇文章不是给你押题,而是把我对这份试卷背后考点的理解拆开讲清楚。试卷本身不会一模一样复现,但考点就那么几个方向:Linux基础与命令实操、网络排查思路、服务部署与故障恢复、自动化与脚本能力、安全运维意识、还有一部分企业级工具的理解(奇安信这类安全厂商尤其看重最后一点)。我会按照这些方向,把每类题背后的"为什么这么考"和"该怎么答"讲透。
不管你是正在准备秋招的应届生,还是想转运维的开发者,这篇文章的核心价值在于:让你知道面试官出这道题时脑子里在想什么,以及你平时应该怎么积累,才能不靠背题也能稳过。
2. Linux命令题:不是背选项,是背场景
2.1 文件与权限操作里藏着的坑
运维笔试里几乎必考文件操作,但真正的坑不在命令本身,而在你对权限模型的理解深度。
比如一道很典型的题:/tmp目录下有个脚本,普通用户执行时报Permission denied,问你怎么办。大多数人第一反应是chmod 777,但这在真实生产环境里是绝对不能接受的答案。正确的排查链路应该是:
- 先
ls -l看文件属主和权限位,确认是不是执行权限缺失(x位) getfacl看有没有ACL特殊权限- 确认挂载选项,
mount | grep /tmp看是不是noexec(很多安全加固过的服务器会把/tmp挂成 noexec,这时候就算有x位也执行不了) - 检查 SELinux 上下文:
ls -Z,有时候是 SELinux 拦截而不是权限位问题
这才是真正的解题思路。普通用户、root、sudoer 三种身份下我看到的问题完全不同,笔试考的就是你在权限报错时的第一反应是不是那三板斧。
另外一个高频点是chmod和chown配合使用的场景。比如你解压了一个 tar 包,发现所有文件属于uid 1000的未知用户,这时直接chown -R到目标用户。笔试可能会绕个弯:如果这个目录里有几千个文件,chown -R会不会太慢?这时候可以用tar --owner=root --group=root重新打包解压,或者用rsync -a --chown来带权限拷贝。这类"处理大量文件时如何避免逐条操作"的思想,才是阅卷人想看到的。
2.2 磁盘与日志排查:df、du、inode 的三重门
磁盘满是个经典场景,但笔试通常会升级难度:df -h显示磁盘还有空间,可应用就是报"no space left on device",问你怎么排查。
这里考的是inode 耗尽的概念。df -i一看,如果 Inodes 使用率100%,那问题就变成了"找出哪个目录下全是小文件":
# 统计各目录下文件数量,定位 inode 占用大户 for dir in /var/log /tmp /home /data; do echo "$dir: $(find $dir -type f 2>/dev/null | wc -l)" done定位之后再按时间批量清理,比如某天之前的日志全删:
find /var/log/myapp/ -type f -name "*.log" -mtime +7 -delete还有一种情况是文件被删除但空间没释放。lsof | grep deleted看一下是哪个进程还握着已删除文件的句柄,重启该进程或优雅重载即可。这个考点在服务类题目里特别常见,因为它涉及 Linux 文件系统底层机制(文件句柄与磁盘空间的关联),不是背命令能答出来的。
2.3 进程与系统状态:你用什么看 CPU 和负载
top、htop、mpstat、pidstat这些工具几乎是必考。但笔试真正想考的是你会不会从上到下定位问题:
- 先
uptime看 load average,判断系统整体压力 - 再
top -o %CPU按 CPU 排序,看是哪个进程在烧 - 然后
pidstat -p PID 1持续观察该进程的 CPU 和上下文切换 - 如果是多线程应用,
top -Hp PID看到线程级消耗
这里有个很多人不知道的小技巧:load average 高并不一定是 CPU 不够,也可能是不可中断睡眠(D状态)的进程太多,比如 NFS 挂死、磁盘 IO 卡住。这时候top里一堆 D 状态的进程,真正的问题出在磁盘阵列或网络存储上,而不是 CPU。
答这类题的时候,如果能主动提到 "先看vmstat的wa列来判断是否有 IO 瓶颈",分数会明显不一样。因为这说明你不是只会按一个键看 top,而是有完整的性能排查思路。
3. 网络排查:从 ping 不通到 DNS 解析异常的完整链路
3.1 分层排查的思维方式
网络题是运维笔试的送分题,也是送命题。送分是因为只要你有分层排查的思路,基本不会跑偏;送命是因为很多人一上来就ping,ping 不通就慌了,乱试一通。
正确的思路永远是从 OSI 模型从下往上走:
- 链路层:
ip link看网卡状态是不是 UP,ethtool eth0看协商速率 - 网络层:
ip addr确认 IP 配置,ping 网关判断是不是本网段通不了 - 传输层:
telnet IP 端口或nc -zv IP 端口判断目标端口是否开放 - 应用层:
curl -v或dig判断 HTTP、DNS 服务是否正常
笔试最容易考的是这个场景:内网服务器能 ping 通外网 IP,但域名解析不了。典型答案是 DNS 配置问题。cat /etc/resolv.conf看 nameserver,dig @8.8.8.8 domain.com手动指定 DNS 服务器测试。常见的坑是resolv.conf被 NetworkManager 覆盖,或者 DNS 配置了不可达的内网地址。
3.2 TCP 连接问题的深入排查
如果笔试再进阶一点,会问 "TCP 连接数过多怎么办"。这不是考netstat那两条命令,而是考你对TCP 状态机的理解。
ss -s可以看到当前系统各种 TCP 状态的数量。如果TIME_WAIT特别多,多半是短连接场景下没有开启连接复用:
# 查看当前 TCP 状态统计 ss -s # 内核参数调整(按需使用) net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15如果SYN_SENT很多,说明外联失败,可能是防火墙丢包,也可能是对方服务没起来。如果ESTABLISHED爆满但 CPU 不高,那可能是连接数限制或应用层漏配了ulimit -n。
这里特别想分享一个真实案例:有次某个服务频繁超时,所有人都在查网络,最后发现是文件描述符到了上限,新连接根本 accepted 不进来。ss -lnt看 Listen 队列溢出,ss -lnt | grep 'Recv-Q'里 Recv-Q 数值异常大,说明 accept 队列已满。这类问题在笔试里不会直接告诉你"是 fd 不够",但你要能从状态数据里反推。
3.3 HTTP 层排障的技巧
现在的业务基本都是 HTTP 协议,所以 curl 系列命令也常考。除了基础的curl -I看响应头,我认为这几个点才是高分关键:
curl -w自定义输出,看 DNS 解析时间、TCP 连接时间、TTFB时间,定位耗时瓶颈在网络还是后端curl -x走代理测试,判断是不是代理链路问题curl --resolve绕过 DNS 直接指定解析结果,适合测试域名切流场景
# 分阶段计时,定位 HTTP 请求耗时环节 curl -o /dev/null -s -w "DNS解析:%{time_namelookup}s TCP连接:%{time_connect}s TTFB:%{time_starttransfer}s 总耗时:%{time_total}s\n" https://example.com考这个不是为了让你背参数,而是考察你面对"页面打不开/打开慢"这类模糊问题时,有没有一套自己的定位顺序。
4. 服务部署与高可用:从 systemd 到负载均衡
4.1 systemd 管理的考察点
现在是个人都会systemctl start nginx,所以笔试早就不考这个了。它考的是你对 systemd 工作机制的理解。
比如:为什么服务启动失败,但journalctl -u里看不到任何日志?
可能的原因有三个,你得按顺序排查:
Type=forking配错了——主进程 fork 出去后,systemd 认为该 PID 不是预期的主进程PID,判定启动失败ExecStart里的命令失败但没输出到 journald,直接退出,日志打到了应用自己的文件里- SELinux 拦截,进程直接被杀,
/var/log/audit/audit.log里能看到avc: denied记录
写 service 文件的时候,我建议严格按这个模板来:
[Unit] Description=My Custom Service After=network.target Wants=network-online.target [Service] Type=simple User=myapp Group=myapp WorkingDirectory=/opt/myapp ExecStart=/usr/bin/python3 /opt/myapp/main.py Restart=always RestartSec=3 LimitNOFILE=65535 PrivateTmp=true [Install] WantedBy=multi-user.target笔试如果问"为什么要把 Restart 设成 always",你要答出两层:一是进程崩溃能自动拉起,缩短故障时间;二是要配合RestartSec防止频繁重启打爆系统日志。而LimitNOFILE配合高并发场景是必须调的,这个很多人会漏。
4.2 Nginx 与负载均衡的基础题
奇安信这类安全厂商笔试里,Nginx 考的不会很深,但基础配置必须会。比如:你如何给后端服务配置反向代理,并且做到 IP 哈希会话保持?
upstream backend_cluster { ip_hash; server 192.168.1.10:8080 weight=3; server 192.168.1.11:8080 weight=1; } server { listen 80; server_name ops.example.com; location /api/ { proxy_pass http://backend_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }考ip_hash就意味着你知道"轮询会导致用户的 session 在后端多个实例间跳来跳去"这个痛点。如果能顺手提一句"生产环境更推荐用 Redis 做 session 共享,而不是靠负载均衡绑定 IP",说明你不是只会抄配置的人。
4.3 数据备份与恢复:校招中最容易被低估的考点
运维笔试里如果出现数据库相关题,大概率是备份策略设计。比如:一台 MySQL 服务器,数据量 200G,要求 RPO 在 10 分钟内,RTO 在 1 小时内,你会怎么设计备份方案?
比较稳妥的答案是:每天凌晨全量备份(mysqldump或xtrabackup),每5分钟拉一次 binlog 增量日志存到异机。这样故障时先恢复最近的全量备份,再按时间点重放 binlog,RPO 就能控制在几分钟内。如果预算允许,再加一个从库做实时同步,主库挂了直接提升从库。
这里有个答题加分项:主动提"备份数据要定期做恢复演练"。光有备份但没验证过能不能恢复,等于没有备份。笔试里能写出这句话的人,大概率是真实做过运维的。
5. 自动化与脚本:Shell 和 Python 考察的潜台词
5.1 Shell 脚本里的高频考点
几乎所有运维笔试都有 Shell 脚本题,最常见的就是"写一个脚本批量处理日志文件"。这里考的其实不是语法,而是边界处理能力。
比如这个需求:写脚本清理/var/log/myapp下 7 天前的.log文件,保留最新 3 个文件,并要求输出每次删除的文件名。
一个完整答案应该是:
#!/bin/bash LOG_DIR=/var/log/myapp KEEP_DAYS=7 KEEP_COUNT=3 # 清理 7 天前的日志文件 find "$LOG_DIR" -type f -name "*.log" -mtime +$KEEP_DAYS -print -delete # 确保保留最新 3 个日志文件 cd "$LOG_DIR" || exit 1 ls -lt *.log 2>/dev/null | tail -n +4 | awk '{print $9}' | while read -r f; do rm -f "$f" echo "已删除旧日志: $f" done能写出set -e(出错即停)、能判断目录是否存在、能用-print确认删除内容,这在阅卷人眼里就是"干过活"的信号。还有一点:脚本里千万别用rm -rf去拼接变量,比如rm -rf $DIR/这种,DIR 为空时会删根目录,这是高危动作。这类题也是在考察安全意识。
5.2 Python 脚本题的隐藏考点
如果笔试出现 Python 题,一般不是让你实现算法,而是给你一段脚本让你找问题。比如下面这段:
import os import subprocess def get_cpu_usage(): result = subprocess.run(["top", "-bn1"], capture_output=True, text=True) # 这样写有什么问题? return result.stdout问题在哪?一是用top抓数据不是好办法,应该直接用psutil或读/proc/stat;二是top -bn1第一次执行的数据可能不准,最好取两次间隔的值;三是如果脚本以普通用户跑,某些环境变量、PATH 可能有问题,导致命令找不到。
笔试想看到的答案,是用/proc文件系统或psutil库去采集指标,并且考虑异常处理:
import psutil def get_cpu_percent(): # 间隔 1 秒采样两次,取平均 return psutil.cpu_percent(interval=1)这种"会用合适的工具做合适的事"的意识,比背标准库函数重要得多。
5.3 定时任务的细节坑
编写 crontab 时最容易踩的坑是环境变量问题。cron 执行脚本时的 PATH 很精简,和你在终端里敲命令时不一样。所以脚本里要写全路径,或者强制指定 PATH:
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin另外%在 crontab 里有特殊含义(表示换行),如果命令里需要date +%Y%m%d这类带百分号的写法,必须转义成\%Y\%m\%d,否则任务会出错或行为异常。笔试里如果有给 cron 排错的题,这几乎必考。
6. 安全运维意识:安全厂商笔试的隐藏重头戏
6.1 账号安全与权限管控
奇安信是安全公司,所以安全类题目占的比重会比一般互联网公司高。最常见的一类题是:一台 Linux 服务器被扫描到存在弱口令风险,你如何整改?
正规流程分几步:
- 修改所有用户密码,强制使用强密码策略
- 禁用 root 远程登录:
/etc/ssh/sshd_config里设PermitRootLogin no - 配置密钥登录,禁用密码登录:
PasswordAuthentication no - 设置失败锁定策略,比如
fail2ban或 PAM 的pam_tally2 - 排查
/etc/passwd里是否有 uid=0 的异常账号,以及空密码账号
还有一个容易被忽略的点:sudoers 配置。如果visudo里给了某个用户ALL=(ALL) NOPASSWD: ALL,这等于裸奔。笔试可能会给你一段 sudoers 配置让你找出风险,你要能指出"普通用户不应该有免密 root 权限"。
6.2 进程与启动项排查思路
描述一个安全事件场景:服务器 CPU 突然飙高,top 里看到一个不认识的进程叫 kworker-xyz(伪装内核线程名),你判断这是什么?
这种题考察两个层面:一是你能不能识别异常进程(名字像内核线程但实际是伪造的),二是你能不能找到异常的持久化方式。
排查链路:
ls -l /proc/PID/exe看执行的二进制真实路径cat /proc/PID/cmdline看完整命令行lsof -p PID看进程打开了什么文件、连接了哪些 IPsystemctl list-units --type=service查异常服务- 检查
/etc/rc.local、/etc/systemd/system/下的可疑 unit 文件 crontab -l查定时任务里有没有异常下载指令
如果文件的exe路径是/tmp/xxx,甚至exe后面标注(deleted),那基本可以确认是异常进程——攻击者通常会先删掉原始文件再运行进程。这个细节笔试如果问到,答出来就是加分项。
6.3 日志审计与溯源
安全运维里日志审计是基础能力。考察方式通常是给你一段secure日志或auth.log,让你找出异常登录。
比如lastb显示同一 IP 在短时间内大量尝试 root 登录失败,你会怎么处理:
lastb | awk '{print $3}' | sort | uniq -c | sort -rn统计失败尝试来源 IP- 用
iptables或firewalld封禁该 IP - 如果暴力破解来源是动态 IP 池,手动封不现实,部署
fail2ban自动封禁 - 检查该 IP 是否已经有过成功登录记录:
grep "Accepted" /var/log/secure | grep "IP地址"
还有一类题是给你日志文件路径,让你按时间、用户、事件类型做筛选。会灵活用grep、awk、sed、journalctl --since这几个命令的人,基本能过关。我见过不少人在笔试时写复杂的 Python 去筛日志,其实用 awk 三行就搞定了,这也反映出对文本处理工具的熟练度差距。
7. 企业级运维工具与奇安信特色考点
7.1 运维监控工具的选型逻辑
奇安信笔试可能会问监控系统设计。这里不是让你写 Prometheus 配置,而是考你对监控体系分层的理解:
- 基础层:CPU、内存、磁盘、网络(
node_exporter即可) - 应用层:接口延迟、QPS、错误率(需要业务埋点或 APM)
- 日志层:ELK/Loki 聚合系统日志,用于排障和分析
- 告警层:Alertmanager 负责告警路由和静默
回答这类题的时候,如果能结合"监控数据要设定合理阈值并定期调整",会显得你确实规划过生产监控。比如磁盘阈值设多少合理?不能等满到100%才告警,常规是80%就 warning、90% 就 critical。但如果日志盘本来就是大盘且定期清理,可以放宽到85%再告警。这种工程判断,比背工具名重要得多。
7.2 安全产品理解:EDR、堡垒机、漏扫
作为安全厂商,奇安信笔试里出现安全产品相关问题也不意外。主要涉及几个方向:
- EDR(终端检测与响应):你需要理解它的作用是"检测终端上的异常行为和入侵痕迹",而不是简单的杀毒软件。像奇安信天擎这类产品,在运维的日常工作中会涉及安全策略下发、病毒查杀、终端合规检查。
- 堡垒机(运维审计系统):核心价值是"让所有运维操作都有迹可循"——统一账号管理、操作录像、命令审批。
- 漏扫(漏洞扫描):用于定期发现系统与 Web 应用的漏洞,形成闭环:扫描-验证-修复-复扫。
如果笔试问"为什么企业需要堡垒机",你要答出的核心是:运维人员对生产服务器的操作需要可管可控可审计,避免误操作或恶意操作导致故障且无法追责。这不是技术问题,而是管理合规问题。
7.3 云计算与容器化的基础认知
现在的运维已经从"服务器物理机运维"扩展到"云原生环境运维",所以笔试里出现 Docker/Kubernetes 基础题也很常见。
常考的点:
- Docker 和虚拟机的区别——共享宿主机内核 vs 独立内核
- 容器为什么不适合跑有状态应用——数据在容器销毁后丢失,除非挂载卷
- Kubernetes 中 Pod 是调度最小单位,容器是运行最小单位
kubectl logs、kubectl exec、kubectl get events这类排障命令
这里有个安全方向的问题也常被问到:容器以 root 运行时有什么风险?答案是内核逃逸后攻击者直接获得宿主机 root 权限,所以生产环境必须配置runAsNonRoot: true,并使用只读根文件系统。奇安信这类安全公司对这个点会特别敏感。
8. 笔试题背后的复习建议与实战心态
8.1 校招运维考题的共性规律
把所有考点串起来看,我总结出三个共性:
第一,考察"最短路径解决问题的能力"。比如服务被 kill 了,是先查内存还是先看日志?有经验的运维会先dmesg | tail看是不是 OOM Killer 干的,而不是漫无目的地翻应用日志。这种"故障排除的顺序感",笔试通过场景题传达得很明显。
第二,考察"安全底线意识"。所有操作题,只要涉及删除、权限变更、防火墙重启,都要思考安全影响。比如清理解析日志时,你做的第一件事不是删,而是备份。哪怕笔试没问备份,你在答案里加上"操作前先备份"这句话,就赢了很多人。
第三,考察"知识面的广度"。从 Linux 命令到网络原理,从 Shell 脚本到安全基线,一道题可能横跨多个知识域。比如"某个端口突然不通"这个问题,涉及:防火墙规则、SELinux、iptables、路由、端口监听状态、云平台安全组等。你能说出几个层级,面试官就能判断你的经验深度。
8.2 我从这份卷子反推的复习路线
如果你准备时间有限,我建议按优先级做这几件事:
- 把 Linux 基础命令过一遍,但不要只看命令,要看使用场景。没条件搭真实服务器,就用虚拟机或云服务器,把服务部署、日志排查、权限管理完整走一遍。
- 自己手动搭建一个 Web 服务(Nginx + MySQL + 后端代码),然后故意把它搞坏再修好。比如手动把权限改成 000、把端口占用、把磁盘写满、把 iptables 规则删掉,再去定位问题。这个过程比看十遍教程都管用。
- 练熟 Shell 和 Python 的文本处理。给你一份中文访问日志,你能在 10 分钟内统计出 TOP 10 访问 IP、TOP 10 请求 URL、404 状态码总量。这几乎是笔试必考,也是日常运维的高频技能。
- 多读安全公告和运维事故复盘文章。理解真实世界的故障是怎么发生、怎么恢复的,这比背大量面试题库收益高得多。看的时候问自己"如果我在值班,能不能发现这个问题"。
8.3 考场上的答法技巧
笔试不只要会,还得会写。我的几个建议:
- 能写命令就写命令,比如回答排查思路时不写"我需要查看磁盘使用情况",而是直接写
df -h、df -i、du -sh *。这会让阅卷人一眼确认你是真做过。 - 答案要有顺序,按排查链路来,不要想到哪写到哪。比如"先确认服务状态
systemctl status xxx,再查看日志journalctl -u xxx,再检查端口ss -lntp",这就是一个可执行的排障步骤,而不是零散的知识点。 - 不确定的答案不要只给一个。如果这道题有多种可能原因,把可能性都列出来并说明你如何验证,阅卷人会认为你考虑周全。
- 涉及高危操作时,务必列出安全措施。比如封禁 IP 时先确认不要误封自己的跳板机,清理数据前先备份,改防火墙前先评估影响面。这是最容易被忽视但最加分的地方。
我当年面奇安信的时候,笔试里有一道服务起不来的题,我答了"先看 systemd 状态,再看 journalctl 日志,然后还原故障现场的完整链路"。后来面试官告诉我,那道题其实最想看到的就是"先确认服务是否在跑、再逐层查日志"的排障顺序,而不是直接甩一个命令。所以答题时别急,把思路写得跟你在真实环境里一步步操作时一样清楚。
8.4 最后说点实在的
运维这个岗位的门槛是"会命令",天花板是"能判断"。笔试只是检验你日常积累的片段,真正的功夫在每次排障中学到的链路和判断。准备的时候别纠结押题,把基础打扎实,遇到没见过的场景,你也能靠通用的排查思路拉出答案。
另外,如果现在还有时间,强烈建议你亲手搭一套实验环境:一台 Linux 虚拟机装好 Nginx,再用 Python 写一个简单的业务接口,然后模拟一次"从用户报障到定位根因"的完整过程。这个过程走一遍,你再看任何笔试场景题,都不会慌了。
一份试卷改变不了你的真实水平,但它能告诉你,接下来该往哪个方向补。希望这篇文章能帮你把复习的重心从"背命令"挪到"建链路"上——那才是运维工程师真正吃饭的本事。