你好,我是小牛。
今天聊一个被问烂了、但还是有很多人翻车的话题—Linux面试题。
说实话,每次给同学做模拟面试,Linux这块基本是必问的。但奇怪的是,很多工作了两三年的测试,Linux还是只会几个ls、cd、mkdir……问到稍微深一点的命令,就开始支支吾吾,脑子一片空白。
这就很被动了。
我自己当年备战平安秋招那段时间,把Linux命令啃了好几遍。后来进京东做大促性能测试,每次线上压测,监控CPU飙升、内存告警、接口响应变慢,第一时间全靠这些命令排查定位,用的多了自然就刻进脑子里了。
所以今天这篇,不只是罗列命令,而是结合面试真实考点和工作场景,帮大家系统梳理一遍,干货直接上,不废话。
一、文件与目录操作
这类题面试里属于送分题,但偏偏有人送不出去。
面试官问的最多的是这几类:怎么查找文件、怎么实时追踪日志、怎么统计内容。
查找大于1M的文件,用find命令加-size参数:find . -size +1M。查找当前目录下所有.py文件:find . -name "*.py"。这两个考点几乎每次都考,必须记住。
查看文件内容,cat用来看全文,more和less用来翻页看大文件。head -n 20看文件前20行,tail -n 50看最后50行,这些细节面试官会直接让你写命令。
二、查日志必备:grep和tail
这两个命令是测试人员日常用的最频繁的,面试也是必考。但很多同学搞不清楚两者的使用场景和区别,面试一问就露馅了。
先说tail。
tail最核心的用法是 tail -f 文件名,实时追踪日志文件的新增内容。你在测试环境发了一个接口请求,想看服务端实时打印了什么日志,就用 tail -f app.log,终端会一直刷新显示最新追加的内容,直到你手动Ctrl+C停止。
tail -n 100 app.log 查看最后100行,这个用来快速看最近的日志记录,不用把整个文件都打开。
tail -f 还支持同时追踪多个文件,tail -f app.log error.log,两个文件有新内容都会实时显示,而且会用文件名标注是哪个文件的输出,这个在排查问题时很好用。
再说grep。
grep是从文件里搜索包含特定关键字的行,它是静态搜索,面对的是已有的文件内容。
grep "ERROR" app.log 找出所有包含ERROR的行。grep -i "error" app.log 忽略大小写。grep -n "error" app.log 显示行号,定位问题更方便。grep -r "error" /var/log/ 递归搜索目录下所有文件,这个在日志文件分散在多个子目录时特别好用。
grep -v "INFO" app.log 是反向过滤,排除包含INFO的行,只看非INFO级别的日志,这个用法很实用。
grep -A 5 "ERROR" app.log 显示匹配行及其后5行,grep -B 3 "ERROR" app.log 显示匹配行及其前3行,grep -C 5 "ERROR" app.log 前后各5行都显示。
为什么要用这个?因为你找到一行报错,但光看这一行往往不够,你需要看前后的上下文才能判断问题根因,这个参数非常实用,面试能答出来直接加分。
两者的核心区别是什么?
tail关注的是时间维度,看最新的、实时的内容,适合服务正在运行时跟踪日志动态。grep关注的是内容维度,从已有内容里过滤匹配,适合服务出了问题后回溯分析。
实际工作中两者经常配合使用:tail -f app.log | grep "ERROR",实时追踪日志的同时只显示ERROR级别的内容,过滤掉大量INFO干扰,排查线上问题时效率提升几倍。这个组合面试官特别喜欢问,一定要记住。
三、Linux三剑客
三剑客是grep、awk、sed,三个各有侧重,面试官特别喜欢考区别和应用场景。
grep主要做文本搜索和过滤,上面已经讲了很多,不再重复。
awk擅长处理结构化文本,按列提取、统计、计算都是它的强项。比如统计Nginx访问日志里每个接口的请求次数:awk '{print $7}' access.log | sort | uniq -c | sort -rn,这个命令在工作里用的非常多。面试官考awk,核心是考你对列处理的理解,要会用$1、$2、NR、NF这些内置变量。
sed主要做文本替换和行操作,批量替换文件里的某个字符串、删除指定行、提取某几行内容。比如批量把配置文件里的测试环境地址替换成生产地址,用sed -i 's/test-url/prod-url/g' config.txt,一行搞定。
面试官问这三个,考点不只是概念,更多是考你有没有真正用过。建议大家平时查日志、分析数据的时候,有意识地练这三个命令,比单纯背命令效果好十倍。
四、性能监控命令
这块是面试区分度最高的地方。普通功能测试可能比较薄弱,但如果你简历上写了性能测试,这些不会就非常尴尬了,面试官基本会直接pass。
CPU监控用top命令,重点看%CPU、%MEM、load average三个指标。load average是一分钟、五分钟、十五分钟的平均负载,超过CPU核数就说明系统压力大了。top -Hp PID可以查看某个进程下所有线程的CPU占用,这个在排查Java进程CPU飙高时必用。
vmstat 1 5每秒刷新一次、采集5次,可以看到CPU的us(用户态)、sy(内核态)、wa(IO等待)、id(空闲)占比,还能看内存的swap使用情况和上下文切换次数。上下文切换cs数值如果特别高,说明线程数太多,系统调度压力大。
iostat -x 1用来看磁盘IO,重点关注%util指标,接近100%说明磁盘快撑不住了,还要看await(IO平均等待时间),超过20ms就要引起注意。
netstat -tlnp查看端口监听情况,netstat -an | grep ESTABLISHED | wc -l统计当前TCP建立连接数,netstat -an | grep TIME_WAIT | wc -l查TIME_WAIT连接数,TIME_WAIT过多是测试里很常见的问题,说明短连接太多,需要优化。
sar命令是历史数据查看的利器。压测结束后,用sar -u回溯CPU历史数据,sar -r回溯内存,sar -d回溯磁盘IO,用来做事后分析非常方便。在京东做大促性能测试的时候,sar是必备工具之一。
查看JVM的命令也要会:jps看Java进程列表,jstack PID看线程堆栈(排查线程死锁、线程阻塞必用),jmap -heap PID看堆内存使用情况,jstat -gcutil PID 1000 10每秒打印一次GC情况,观察GC频率和耗时。面试官问内存泄漏怎么排查、线程死锁怎么定位,答案里这几个命令必须出现。
五、进程管理
ps -ef | grep 进程名查某个进程是否在运行,这个最基础。ps -aux --sort=-%cpu | head -10按CPU占用倒序排列,找出最耗CPU的前10个进程,这个用法很实用。
kill -9 PID强制杀进程,kill -15 PID是优雅停止,让进程自己收尾,这两个区别要清楚,面试偶尔会问。
nohup command & 后台运行命令,防止终端关闭后进程退出,这个在测试里部署脚本、启动服务时常用。
lsof -i :8080查看占用8080端口的进程,这个排查端口冲突时必用。lsof -p PID查看某进程打开的所有文件和网络连接,排查文件句柄泄漏的场景会用到。
六、权限管理
chmod 755,数字表示法要会解释:7是所有者拥有读写执行权限(4+2+1),5是组用户和其他用户只有读和执行权限(4+1),没有写权限。字母表示法:chmod u+x给所有者加执行权限,chmod o-w去掉其他用户写权限。
chown user:group file改文件所有者和所属组,chown -R递归修改目录下所有文件,这个在部署测试环境时经常用到。
七、shell脚本,加分项
面试官一般会问:你用过shell吗?说一下应用场景。
如果你做过自动化或者性能测试,基本都涉及shell。定时跑自动化的cron任务、批量处理日志文件、自动化部署测试环境,这些都是真实场景。
crontab的格式是五个时间字段加命令:分钟、小时、日期、月份、星期。比如每天凌晨2点跑一次回归测试:0 2 * * * /path/to/test.sh,这个格式要背下来,面试有时候直接让你写。
shell脚本的核心三要素:变量赋值和使用、if-else条件判断、for和while循环。掌握这三个,基本的运维脚本都能写。
即使你平时写的不多,也要能说出两三个自己用过的真实场景,而不是只说了解,了解在面试官眼里基本等于不会。
八、其它高频考点
软链接和硬链接的区别,这个几乎每次都考。软链接类似Windows快捷方式,删掉原文件软链接失效;硬链接是指向同一个inode的另一个入口,删掉原文件硬链接还能访问数据。
查看磁盘空间用df -h,查看目录大小用du -sh目录名,这两个经常被混淆,记清楚。du -sh * | sort -rh可以按大小倒序列出当前目录下所有文件,排查磁盘占用时非常好用。
curl是接口测试神器,curl -X POST发POST请求,-H加请求头,-d传请求体,-v看完整请求响应头,测试人员必须熟练。
/etc/hosts文件的作用,做测试经常需要配置本地域名解析,绕过DNS把域名指向测试环境IP,这个要熟悉。
Linux这个东西,看一遍记不住,用多了自然就记住了。我在京东那两年,每次大促前全链路压测,tail -f追日志、grep过滤报错、top看CPU、jstack排查线程问题,这些命令天天用,早就刻进肌肉记忆里了。
如果你现在平时完全用不到Linux,建议买一个云服务器,一年也就十几块钱,部署个测试项目,每天刻意练这些命令,坚持一个月,面试这块基本稳了。
还有一点要强调:面试官考Linux,很多时候不只是考你背命令,更考你有没有结合实际场景用过。能在面试官面前说出我在做XXX测试的时候,用这个命令定位过XXX问题,比背一百个命令有用得多。
以上。
-------------------------------
最后,小牛原创编写了一本测试工程师生存指南手册,全册110+篇干货,共计13万左右文字。微信识别下图二维码购买,限时10元,一顿早餐,永久买断!
手册涵盖了测试工程师从校招到社招跳槽大厂,应该如何制作简历以及如何面试,以及如何渡过35岁中年危机等全部问题!
未来不仅仅是AI的时代,更是个人ip,超级个体的时代,锻炼测试技术能力,提升商业认知!共同打破测试工程师35岁职场魔咒!
购买同学请一定添加小牛微信ceshixiaoniu 发支付截图,拉内部vip交流群~
附手册目录: