面试测试岗位,有一类问题出现的概率高得离谱:“你平时用Linux多吗?”“线上日志怎么看?”“如果日志疯狂刷ERROR,你怎么定位?”如果你心里有点发虚,这篇文章就是写给你的。作为多年在一线做接口、性能和线上回归测试的工程师,我可以负责任地说:Linux命令在测试场景里真正的作用,不是让你去跟运维抢活,而是让你在环境异常、接口报错、数据对不上的时候,有办法把问题快速缩小到具体模块。这30个命令,是我按面试高频考点和日常排障价值筛出来的,分成日志文本处理、进程资源、网络排查、文件环境操作四条线。这30个不是让你背参数表,而是让它们成为你排查问题的底牌。
1. 先搞清楚一件事:测试工程师掌握Linux的场考点在哪
1.1 面试官到底想考察什么
很多刚转测试或者工作一两年的同学,对Linux命令的理解还停留在“会cd、ls、cat就行”。但面试官问Linux,根本不是考你命令拼写,而是考两样东西。
第一,你有没有真正在Linux环境里干过活。如果只是Windows下点点点,你讲出来的命令组合会是生硬的、断层的。比如你说会用tail,但让你实时盯日志,你知不知道要加-f?让你按关键词过滤,你知不知道要接grep?这些都是“看在眼里”的实战痕迹。
第二,你遇到问题时的排查路径是否清晰。面试官经常会出场景题:“线上某个接口突然变慢了,你怎么查?”这时候不是让你回答一条命令,而是看你能不能把top找进程、free看内存、tail看日志、netstat看连接这些动作串联起来。命令本身不值钱,值钱的是你面对乱局时的思路。
所以这篇文章虽然叫“30个命令”,但本质上是在帮你建立一套“问题定位思维框架”。
1.2 测试工作流里Linux的典型场景
测试工程师和生产环境的接触频率,其实比很多人想象得高。发布验证、线上回归、问题复现、日志抓取、数据订正,哪一样都绕不开服务器。
最常见的几个场景是:
- 发布完之后验证服务是否正常启动,进程在不在、端口通不通。
- 测试环境或预发环境出问题,需要自己上去看日志、看报错栈。
- 接口返回数据不对,需要到服务器上确认请求有没有到达后端,响应里到底返回了什么。
- 造数据和清理数据,需要操作数据库或者文件系统。
- 排查偶现问题,需要同时观察多个日志文件,甚至要看历史日志。
这些场景如果只靠找运维帮忙,效率会非常低。你掌握命令之后,很多问题自己五分钟就能定位到方向,运维配合起来也轻松很多。面试时你把这些真实发生过的工作流程讲出来,比干巴巴背参数强十倍。
2. 30个命令全景清单:建议直接照着练
2.1 分组速览与学习路线
我按测试场景的使用频率,把30个命令分成四组。第一组是日志与文本处理,这是测试人员的日常工作;第二组是进程与系统资源,排查性能问题和环境异常时必备;第三组是网络排查,接口联调和环境连通性检查的主力;第四组是文件与环境操作,基本功中的基本功。
| 分组 | 命令 | 核心用途 |
|---|---|---|
| 日志与文本处理 | cat head tail less grep sed awk sort uniq wc cut | 查看、过滤、统计、编辑日志和文本 |
| 进程与系统资源 | ps top free df du kill | 定位进程、监控资源、清理环境 |
| 网络与外联排查 | ping curl netstat lsof | 连通性、接口请求、端口与连接排查 |
| 文件与环境操作 | ls cd pwd cp mv rm mkdir find tar | 文件管理、路径定位、打包备份 |
建议的学习路线是先攻日志与文本处理组,再学进程和网络,最后补全文件操作。理由很简单:日志处理在测试日常中的出现频率最高,而且学完马上就能用;进程和网络命令帮你解决“服务到底好没好”的问题;文件操作相对基础,可以穿插着掌握。
2.2 查看命令帮助本身就是一项技能
很多人忽略了一个加分的习惯:不会用命令时,先查帮助。man、--help、type这三个是小工具,虽然不计入30个主清单,但它们决定了你能不能快速上手任何一台新服务器。
man ls会显示完整手册,适合深挖;ls --help是精简提示,日常够用;type能告诉你某个命令是内部的还是外部的,是哪个路径下的程序。
面试时如果你能说出“我一般先ls --help看参数,复杂命令再man”,这本身就是一种工程素养的体现。毕竟技术更新快,你不可能把所有参数都记死,但你知道怎么快速找到答案,这才重要。
3. 第一梯队:日志与文本处理命令(测试日常频率最高)
3.1 tail、head、cat、less:日志界四件套
tail:测试生涯里最重要的一个命令。默认查看文件末尾10行,配合-f实现实时跟踪。线上日志现场排查时,tail -f app.log是最经典的操作。还有一个细节:如果日志文件被切割轮转,-f会盯住旧文件,要改用-F才能跟随新文件。这个点面试偶尔会问,很多老手都会翻车。
head:看文件开头。日志切割后,你想确认这条日志从哪开始,用head -50 app.log就行了。它还能配合管道过滤,比如查某个请求的日志片段开头。
cat:直接输出整个文件内容。文件小的时候没问题,文件大就卡。所以实际工作中,我更多是配合grep用:cat app.log | grep ERROR,不过直接grep ERROR app.log更高效。
less:大文件阅读神器。less -N app.log带行号;按Shift+G直接跳到最后;输入/关键字搜索。看几百MB日志时vi会卡,less却能流畅翻页。需要注意,less在终端里是交互式界面,退出用q。
3.2 grep:日志过滤的灵魂
grep不是简单的“查关键字”,它是一整套过滤体系。测试面试题里“统计日志里ERROR出现的次数”,答案就是grep -c ERROR app.log。grep -i忽略大小写,grep -v排除匹配行,grep -A 5、-B 5分别显示匹配行后5行和前5行。这组参数在查异常栈时非常有用。
比如一条报错前后几行的上下文,你直接grep -A 10 -B 5 "NullPointer" app.log就能把上下文一起揪出来,比单看一行报错强得多。
grep还支持正则。比如想找所有包含IP地址的日志行,可以用grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' app.log。面试问到“你会用正则吗”,这算一个基础证明。
3.3 awk、sed、sort、uniq、wc、cut:文本处理三板斧
awk:按列处理文本的神器。日志里常是“时间 IP 接口 状态码”的格式,awk '{print $1, $4, $5}' app.log就能把关键列拎出来。更进阶一点,awk '$5 >= 500 {print}' app.log能筛选出所有5xx状态码的日志行。
很多人怕awk,其实测试岗位不需要写多复杂的awk,掌握$1到$NF的列引用就够用。我面试时会问“看日志里Top10的请求来源IP”,会用awk '{print $1}' app.log | sort | uniq -c | sort -nr | head -10的人基本就过关了。
sed:按行做替换和编辑。sed -n '20,50p' app.log只打印20到50行,sed 's/old/new/g' file做全局替换。它和awk的分工是:awk看列,sed看行。
sort:排序。测试里常用于给状态码、耗时、IP排序。sort -n按数值排序,-r倒序,-k指定列。
uniq:去重统计。需要先sort才能生效,因为连续重复才去重。sort ip.txt | uniq -c | sort -nr是经典的统计Top IP组合拳。
wc:统计行数、词数、字节数。wc -l app.log统计日志行数,是验证“今天有多少请求”的快速方式。
cut:按分隔符切列。cut -d' ' -f1可以替代awk做简单列提取。它比awk轻量,适合在不需要复杂逻辑时使用。
3.4 一个组合实战:从日志里统计5xx错误接口
把上面这些命令串起来,才能真正解决测试问题。假设你想统计今天线上哪个接口报5xx最多,可以这样操作:
grep "2025-06-01" app.log | grep "HTTP/1.1\" 5" | awk '{print $7}' | sort | uniq -c | sort -nr | head -20这条命令的意思是:先过滤出当天日志,再匹配返回5xx的行,然后提取第7列(通常是请求路径),再去重统计后按次数倒序。一行命令下来,出错最频繁的接口就浮出水面了。这叫“组合拳”,也是面试时最有利的武器。
4. 第二梯队:进程与系统资源命令(定位环境异常底牌)
4.1 ps、top:找到正在运行的进程和异常CPU消耗者
ps:查看进程快照。ps -ef | grep java是测试环境最常用的操作,确认服务是否启动、拿到PID。ps aux能额外显示CPU和内存占用,定位某个进程是否吃满资源。
与ps搭配的是pgrep,不过那算扩展命令。面试时回答“怎么查进程”,ps -ef | grep 服务名是标准答案,你把PID抓出来后续就能配合kill或top操作。
top:实时刷新进程CPU、内存、负载。面试场景题“服务变慢”的排查标准开场就是top,先按shift + P按CPU降序、按shift + M按内存降序,一眼看出哪条进程在搞事。
top还有一个妙用:按c键展示完整命令行,看到进程的具体启动参数。这在判断“是哪个服务、什么环境跑的jar包”时很有用。
4.2 free、df、du:内存与磁盘到底还剩多少
free:查看内存使用情况。free -h按人类可读单位输出,看available列比看free列更靠谱,因为Linux会把内存拿去做缓存。很多内存告警其实是误报,看available才能真正判断是否吃紧。
df:查看磁盘整体占用。df -h按目录级别显示各分区的占用比例。磁盘写满会导致日志写不进去、服务直接雪崩,所以“线上写日志失败”时要先跑一下df -h。
du:查看具体目录或文件占用多少空间。du -sh *按目录汇总大小,是找“哪个目录悄悄吃满磁盘”的利器;du -sh log/则直接看日志目录总量,判断日志增长是否正常。
这三兄弟在性能测试和线上问题排查中搭配非常顺畅:top看CPU,free看内存,df/du看磁盘,一套下来硬件层面基本摸清。
4.3 kill、nohup:进程控制与后台运行
kill:终止进程。kill -9 PID是强制杀死,kill -15 PID是优雅退出。测试环境上重启服务前,要先拿到PID,然后kill -9,再重新拉起。注意:有些服务被强杀会导致数据不一致,能优雅退出就先优雅。
nohup:使进程在终端关闭后继续运行。nohup java -jar app.jar > app.log 2>&1 &是一条经典的测试环境启动命令。它把标准输出写到日志文件,同时返回后台运行。这个命令几乎必考,因为发布脚本里全是它。
kill和nohup的组合使用是运维测试一体化的基础能力,掌握它们之后,你再也不会因为“窗口关了服务就没了”而烦恼。
5. 第三梯队:网络排查命令(接口联调离不开)
5.1 ping、curl:从网络连通到接口验证
ping:测试网络连通性。ping -c 4 目标IP发4个包就停。注意:ping通只代表网络通,不代表服务端口通、更不代表接口正常。很多新人拿ping当万能药,这是不对的。
curl:接口请求神器。curl -i http://localhost:8080/api/test可以看完整返回头;curl -X POST -H "Content-Type: application/json" -d '{"name":"测试"}' http://localhost:8080/api/trade模拟POST请求;curl -I只取响应头,判断服务是否在线。接口联调时,后端说“我能跑”,你直接在服务器上curl一下,就知道对方到底有没有在撒谎。
curl配合-v还能看到TLS握手、DNS解析、请求发送细节,是排查接口超时和证书问题的利器。
5.2 netstat、lsof:端口与连接状态排查
netstat:查看系统网络连接、路由、端口监听状态。面试问“8080端口被谁占了”,标准答案就是netstat -tlnp | grep 8080。其中-t是TCP,-l是listen,-n是数字端口,-p是显示进程。还有netstat -an查看全量连接,TIME_WAIT、ESTABLISHED这些状态一眼就能扫出来。
lsof:列出当前打开的文件,但最常用的是找端口对应进程。lsof -i :8080比netstat多一层:直接显示PID和进程名。如果服务端口起不来,优先用lsof -i:端口查端口是不是被占,再用netstat看连接明细。
这两条命令可以交叉验证。面试时你说出“先用netstat -tlnp看监听,再用lsof确认进程”这种组合思路,比单纯背命令更能拿分。
6. 第四梯队:文件与环境操作命令(基本功中的基本功)
6.1 ls、cd、pwd、find:在服务器上不迷路
ls:列出目录内容。ls -l看权限和大小,ls -a看隐藏文件,ls -lh人类可读文件大小。查日志时我常配合ll(如果服务器有别名)快速定位最新文件。
cd:切换目录。cd -回到上一个目录,cd ~回家目录。这个命令本身简单,但和find配合起来能让你在迷路时迅速回位。
pwd:显示当前路径。排查问题时你总得知道自己在哪,尤其是要跟同事描述“日志在这个路径下”时,一句pwd就能给出准确答案。
find:按名称、时间、大小找文件。find /home/logs -name "app*.log"按通配符找日志;find /home/logs -mtime -3找最近三天修改过的文件;find . -size +10M找超过10MB的大文件。磁盘满时它就是你的搜救队。
6.2 cp、mv、rm、mkdir:文件操作里的坑
cp:复制文件和目录。cp -r递归复制目录。注意:复制大量文件时会覆盖目标同名文件而不提醒,所以先ls看清再动手。
mv:移动或重命名。它和cp的区别是mv会改变文件的位置,常用于把日志切走、临时改名备份配置。mv在同一文件系统下是原子操作,比较安全。
rm:删除文件或目录。rm -rf dir能递归强删,但也是最危险的一条。删除前我强烈建议先ls确认路径,分布式环境里误删测试数据非常致命。
mkdir:创建目录。mkdir -p a/b/c一次创建多层目录,不用一层一层mkdir。脚本里创建日志目录、临时目录时超好用。
6.3 tar:日志归档和代码包解压必会
tar:打包和解包。tar -czvf logs.tar.gz logs/压缩归档,tar -xzvf logs.tar.gz解压。测试环境上传报告、备份日志、解压发布包全用它。面试问“日志太多了想打包发给开发”,标准思路就是这条命令。
-z指gzip压缩,-c创建,-x解压,-v显示过程,-f指定文件名。你把这五个参数记住,tar就算掌握了。如果涉及大型包,可以去掉-v减少输出,这不影响功能。
7. 面试现场实操:三连套题让你拿分
7.1 场景一:线上接口突然返回500,你怎么排查
这是一道高频场景题。我建议按顺序答:先确认服务进程在不在,ps -ef | grep 服务名;再curl -I看服务端口通不通;然后tail -f日志看有没有报错栈;最后free、df -h看资源和磁盘是否被撑爆。
这四步对应四个不同层面的可能性,且顺序合理。如果进程没了,那就是宕机或被杀;端口不通,可能是监听挂掉;报错栈在,那是业务或代码问题;资源爆了,那是环境容量问题。面试官听到这种层层递进的思路,基本就给你加分了。
7.2 场景二:磁盘满告警,如何定位大文件
接到告警别慌。第一步df -h确认哪个分区满了;第二步du -sh /某个目录/*找出占空间大的目录;第三步进入目录后继续du -sh *逐层缩小范围;第四步用find /路径 -size +500M把大文件揪出来。
这个套路其实就是一个循环:“看整体、找大块、再细分”。在面试中,你把这个思维讲清楚了,说明你真的处理过类似问题。
7.3 场景三:进程被kill后自动拉起问题排查
有时测试环境服务会自动退出,查出来不是人为操作。这时候先看进程在不在:ps -ef | grep java;如果每次起来一会儿就死,去看日志:tail -100 app.log;再用dmesg看内核是否OOM杀进程;配合free -h确认内存是否不够。
这个问题更偏进阶了,但排查思路和命令依然是那些日常命令。面试时能把“先看进程、再看日志、再看系统”这个链条讲出来,你已经超过平均分。
8. 常见问题速查表与一点个人心得
8.1 常见问题速查
| 问题症状 | 可能原因 | 核心命令 |
|---|---|---|
| 接口超时 | 网络不通或服务负载高 | ping、curl、top |
| 日志不写入 | 磁盘满或权限问题 | df -h、ls -l |
| 端口被占用 | 已有进程在监听 | lsof -i:8080、netstat -tlnp |
| 服务启动失败 | jar包损坏或端口占用 | tail -f app.log、lsof |
| 日志增长过快 | 日志级别过低或死循环 | du -sh log/、top |
| 内存不足 | 进程泄漏或机器配置低 | free -h、ps aux |
| 请求返回500 | 代码异常或配置错误 | grep ERROR app.log |
| 找不到日志文件 | 路径不一致或命名规则不同 | find / -name "applog*" |
8.2 个人心得:退一步看测试工程师的Linux能力
我自己带过不少测试新人,也面试过很多人,最大的感受是:大部分人输在“不理解为什么”,而不是“记不住命令”。
你问我awk '{print $1}'是什么意思,我讲一遍你就能懂;但遇到“日志里出现大量401,你怎么定位”这种问题,光会命令是不够的,你得知道401是鉴权失败,得看日志里的token校验,得知道去哪个文件找相关记录。命令是工具,排查路径才是能力。
所以我最后想给的建议是:不要孤立地背这30个命令,而是去服务器上真实操作一遍。你可以自己搭个测试环境,故意制造一次端口冲突、一次磁盘写满、一次服务崩溃,然后用命令去定位和解决。这种“自找麻烦”式的练习,比刷十遍面试题都管用。
我在实际工作中还有一个习惯:把高频的组合命令存成小脚本或记在笔记里。比如“查5xx排行”“查IP访问次数”“查Java进程资源占用”这些常用套路,写顺手了,面试时随口就能说出完整命令串。这样背下来的不是参数,是你的肌肉记忆。
Linux这块,面试最大的坑就是把“用过”说成“会了”。真正会了的表现,是你拿到一台陌生的服务器,面对一个模糊的问题,能自然地敲出第一条命令,并且越查越清晰。30个命令只是起点,顺着这条线练下去,你会发现自己比想象中能查的问题要多得多。