你好,我是小志。
Linux,一个开源且高度灵活的操作系统,对于测试工程师来说,意味着拥有一个稳定、可定制且强大的测试环境。但是刚入行的小伙伴很多都只会几个基础命令——ls查看文件,cd切换目录,ps看进程,然后就没了。
不管是对于面试中还是工作中这显然不够看,比如面试官问:“线上CPU飙到100%,你怎么定位是哪个进程、哪行代码的问题?”,还有日常工作中,搭建测试环境要看日志,接口报错要查服务状态,性能测试要监控资源,线上问题要快速定位...都需要非常熟练的掌握它。
一、基础命令:别只会ls、cd,要会“组合拳”
面试官问:“怎么统计access.log里每个IP的访问次数,并倒序排列?”
初级回答:不知道,或者只说用grep。
能拿分的回答:“我会先用awk提取IP列(假设日志格式是常见的,IP在第一列),然后用sort排序,再用uniq -c统计,最后sort -rn倒序排列。具体命令是:awk '{print $1}' access.log | sort | uniq -c | sort -rn。”
这个回答里,你用到了awk、sort、uniq,还知道管道符把命令串起来,面试官一听就知道你是真的用过。
再比如,查找当前目录下所有包含“ERROR”的日志文件,可以用grep -l "ERROR" *.log。如果要递归查找所有子目录,就用grep -r "ERROR" 。这些组合用法才是面试官想听的。
小建议:别死记硬背命令,多想想“如果我要完成这个任务,需要哪几步,每个步骤用什么命令”。平时工作中多练,自然就熟了。
二、文件处理:权限、查找、压缩,一个都不能少
文件处理是Linux的基础,也是面试常客。常见问题有:
怎么修改文件权限?chmod 755 和 chmod u+x 有什么区别?
怎么查找一个文件?find / -name "test.log" 2>/dev/null 知道为什么要加 2>/dev/null 吗?(把错误输出重定向到空设备,避免显示无权限的目录)
怎么打包压缩?tar -czvf 和 tar -xzvf 的区别,zip和unzip怎么用?
这里有个坑点:很多人会用tar,但不知道各种参数的含义。面试官一问“-czvf分别代表什么”,就答不上来。其实-c是创建,-z是gzip压缩,-v是显示过程,-f是指定文件。理解了含义,就不会记混。
另外,软链接和硬链接的区别也常被问到。软链接相当于快捷方式,可以跨文件系统,删除原文件后链接失效;硬链接是文件的多个入口,只能在同一文件系统内,删除原文件链接还在。用ln -s创建软链接,用ln创建硬链接。
三、进程管理:从top到jstack,定位问题一条龙
进程管理是Linux面试的重头戏,尤其是性能排查场景。比如开头说到的面试场景:“CPU飙到100%怎么定位”,就是典型考题。
面试官其实想考察你有没有一套完整的排查思路。我们可以这样回答:
先用top命令找到CPU占用最高的进程PID。top进入后按P(大写)按CPU排序,记下PID。
如果需要看这个进程里的线程情况,用top -Hp [PID],找到占用高的线程TID。
把TID转换成16进制:printf "%x\n" [TID]。
用jstack [PID] | grep -A 20 [16进制TID](如果是Java进程)查看线程堆栈,定位到具体代码行。
如果是非Java进程,可以用strace跟踪系统调用,或者用gdb调试。
这个回答里,你用到了top、top -Hp、printf、jstack,还知道不同场景用不同工具,面试官一听就知道你是有实战经验的。
另外,ps命令也是必问的。ps -ef 和 ps aux 有什么区别?其实差不多,只是输出格式略有不同,aux是BSD风格,-ef是System V风格。但要注意,用ps aux | grep [进程名] 时,grep本身也会出现在结果里,通常用 ps aux | grep [进程名] | grep -v grep 来排除。
四、网络命令:排查问题必备
测试工作中,网络问题太常见了:接口不通、连接超时、端口被占用……所以网络命令也是面试重点。
常见问题:
怎么查看某个端口是否被占用?netstat -tlnp | grep [端口号] 或者 ss -tlnp | grep [端口号]。netstat和ss的区别要知道,ss更快。
怎么测试网络连通性?ping 看是否能通,telnet [ip] [port] 测试端口是否开放,curl 测试HTTP接口。
怎么抓包分析?tcpdump -i eth0 -nn port 80 -w dump.pcap,然后用Wireshark分析。
面试官可能会问:“线上某个接口突然变慢,你怎么排查网络层面?”可以这样答:“我会先用ping看延迟和丢包率,再用curl -w 查看请求各阶段耗时(DNS解析、连接、传输等),同时用tcpdump抓包分析是否有重传或丢包。如果是跨机房调用,还会用mtr看路由节点情况。”
五、日志分析:grep、awk、sed三剑客
日志分析是测试的日常工作,也是Linux面试的高频考点。上面提到的统计IP只是入门,更复杂的场景比如:
找出某段时间内的错误日志:grep "2025-03-11 10:" app.log | grep "ERROR"
统计每个错误类型出现的次数:grep "ERROR" app.log | awk '{print $NF}' | sort | uniq -c | sort -rn(假设错误类型在最后一列)
提取特定字段并计算平均值:比如统计接口响应时间,可以用awk '{sum+=$NF} END {print sum/NR}' access.log
sed常用于替换文本,比如 sed -i 's/old/new/g' file.txt。awk功能更强大,可以做条件判断、循环等。面试时能说出awk的常用内置变量(如NF、NR、$0、$1等)会很加分。
六、性能监控:不只是top,要理解指标含义
性能测试时,我们需要监控服务器资源,面试官会问:“你怎么判断系统是不是有瓶颈?看哪些指标?”
常见命令:top、vmstat、iostat、free、df、sar。
比如vmstat可以看CPU上下文切换、内存swap、IO等待等。如果r(运行队列)长期大于CPU核数,说明CPU不够;如果si/so(swap in/out)持续不为0,说明内存不足。
iostat看磁盘IO,如果%util接近100%,说明磁盘是瓶颈。free看内存使用,注意buff/cache和available的区别。
面试官可能会问:“CPU idle很高,但TPS上不去,可能是什么原因?”这时候要考虑锁等待、网络IO、数据库连接池等,不能只盯着CPU。
七、脚本能力:简单的shell脚本要会写
现在测试要求越来越高,会写简单的shell脚本是加分项。比如自动备份日志、批量启动服务、定时任务等。
面试官可能会问:“写一个脚本,每天凌晨备份/var/log目录下的所有日志,保留最近7天,超过的删除。”
你可以说:“我会用crontab设置定时任务,脚本里用tar打包当天日志,然后用find /backup -name '*.tar.gz' -mtime +7 -delete 删除7天前的备份。”
如果能说出用tar、find、crontab,就已经很不错了。如果再考虑日志切割(logrotate),那就更深入了。
写在最后
Linux真的是测试的基石,无论是日常的日志排查,还是性能测试的监控分析,甚至自动化脚本的编写,都离不开它。面试官问Linux,其实也是在考察你的基本功和解决问题的能力。
如果你正在准备面试,建议把上面这些点都过一遍,不懂的命令就用man查,然后自己敲一敲。相信我,把这些搞懂了,Linux面试这块绝对能稳。
最后,需要Linux面试资料或者简历模板的,可以加我微信(公众号菜单栏有),备注“Linux”就行。我也会在朋友圈分享一些日常遇到的Linux问题和排查技巧,欢迎大家围观。
还没有关注我宝藏公众号的朋友,可以点个关注,后台回复“简历”获取模板,回复“基础”获取详细路线图,回复“面试”获取最新面试题库。让我们一起在测试的路上,越走越远!
我是小志,我们路上见。
-------------------------------


