☰
Linux命令在测试面试与线上排障中的30个实战用法
2026/10/20 6:15:20 网站建设 项目流程

面试测试岗位,有一类问题出现的概率高得离谱:“你平时用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个命令只是起点,顺着这条线练下去,你会发现自己比想象中能查的问题要多得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询