测试工程师必备Linux命令手册:日志排查与性能监控实战

测试工程师必备Linux命令手册:日志排查与性能监控实战 测试工程师要不要会 Linux这个问题在面试里基本没有悬念。不管你是做功能测试、接口测试、自动化测试还是性能测试工作中总会遇到要登录服务器查日志、看进程、确认端口、跑脚本的场景。不会 Linux线上出问题时你只能把日志截图发给开发然后排队等别人定位会 Linux你可以在几分钟内自己找到异常记录再决定提单还是直接跟开发确认。两种工作状态面试官一眼就能看出来。这篇文章不做泛泛的“Linux 入门”而是围绕“测试 Linux”整理一份可以直接照着用的命令手册覆盖文件查看、日志跟踪、进程排查、性能观察、网络联通、批量任务和脚本化操作最后一章放面试高频考点。内容上尽量贴合真实工作场景比如接口 500 了怎么查、压测时 CPU 飙高怎么看、日志文件太大怎么快速过滤。读完之后建议你在自己的测试环境里把每条命令跑一遍形成肌肉记忆。1. 核心能力图谱先给一张总表把测试工作中最常用的命令模块串起来。下面每一类都会在后续章节展开。模块高频命令典型测试场景文件与目录ls、cd、du、find、tree确认部署目录、查找日志文件、看磁盘占用文本处理grep、awk、sed、sort、uniq过滤日志关键词、统计错误占比、提取接口耗时日志查看tail、head、less、tail -f实时跟踪日志、定位报错堆栈进程管理ps、top、kill、pkill、nohup查看被测服务进程、停止僵死进程、后台启动任务性能监控top、free、df、iostat、vmstat判断 CPU、内存、磁盘、IO 是否成为瓶颈网络排查netstat、ss、ping、telnet、curl、tcpdump确认端口监听、接口连通性、抓包分析权限与用户chmod、chown、useradd、sudo管理脚本执行权限、处理环境部署权限问题定时任务crontab定时执行测试脚本、定时清理日志远程与传输ssh、scp、rsync登录服务器、分发测试包、同步测试脚本批量处理for、while、xargs批量查服务器、批量执行命令、批量处理日志文件对测试工程师来说真正拉开差距的不是背了多少命令而是遇到一个具体问题时能否在“查什么—怎么查—怎么解”这条链路上给出完整操作。后面的章节就是按这个思路写的。2. 测试工程师为什么要学 Linux2.1 功能测试逃不开日志排查功能测试中Bug 的最终证据往往藏在服务端日志里。前端页面报错如果只是截图给开发开发还是要自己去服务器翻日志。你要是能直接在服务器上执行tail -f跟踪日志再配一个grep关键字过滤大概率能把问题收敛到一个具体的异常堆栈提单质量完全不同。2.2 接口测试与自动化测试依赖 Linux 环境接口测试脚本、自动化测试用例最终要在 Linux 测试环境跑。测试环境的部署、服务启停、依赖安装都需要基础 Linux 操作。比如接口测试脚本用 Python 写的你要能在服务器上建虚拟环境、安装依赖、启动 pytest 执行。这一套能力在团队里非常实用。2.3 性能测试需要性能监控性能测试不能只看压测工具面板上的 TPS 和响应时间还需要同时观察被测服务器的 CPU、内存、磁盘 IO 和网络。top、free、iostat这些都是性能测试报告里“环境资源情况”那一章的数据来源。不会看这些性能测试报告的专业度会差很多。2.4 面试环节直接考察测试岗位面试中Linux 几乎是必问项。初级岗位问常用命令中级岗位问日志分析和进程排查高级岗位会问性能监控和 Shell 脚本。与其到面试前临时背题不如在平时工作中把每类命令用熟。3. 环境准备与工具选择3.1 本地练习环境建议优先准备一个 Linux 环境方式可以选下面任意一种。Windows 下启用 WSLWindows Subsystem for Linux打开 PowerShell 执行wsl --install安装 Ubuntu 子系统。使用虚拟机软件安装 CentOS Stream 或 Ubuntu Server适合完整模拟服务器环境。购买一台云服务器直接用 SSH 登录练习最接近真实测试环境。在本机装 Git Bash 或通过 Docker 启动一个 Linux 容器适用于快速练习命令。3.2 远程连接工具工作中登录测试服务器通常用 SSH 客户端。选择标准是支持记住密码或密钥、支持 SFTP 传文件、日志回显清楚。Windows 自带的 PowerShell 直接执行ssh命令也可以但如果你需要同时打开多个会话建议用专门的终端工具管理按自己习惯选一款即可。3.3 连接服务器的基础操作# 使用密码连接远程服务器实际使用时替换 IP 和用户名 ssh testuser192.168.1.100 # 指定端口连接 ssh -p 2222 testuser192.168.1.100 # 退出登录 exit第一次连接时如果出现主机指纹确认提示输入yes即可。连接成功后先用下面三条命令快速确认自己处于什么环境。# 查看当前用户 whoami # 查看当前路径 pwd # 查看系统发行版信息 cat /etc/os-release4. 高频命令模块速查这一部分按命令模块组织每条命令都优先标注测试工作里的使用场景。4.1 文件与目录操作测试人员需要经常确认文件是否存在、目录结构是什么样子。# 列出当前目录文件-l 显示详细信息-h 把大小显示为 K/M/G ls -lht # 查看当前目录总大小du 适合排查磁盘占用 du -sh /home/test/logs # 查找文件名包含 error 的文件从根目录开始 find / -name *error* -type f 2/dev/null # 查找最近 7 天内修改过的日志文件 find /home/test/logs -mtime -7 -type f # 按文件大小排序快速找出大文件 find /home/test/logs -type f -size 500M下面是实际测试中的组合用法先看目标目录结构再定位超过 500MB 的大文件然后用tail查看其内容。一条链路下来基本能判断日志是否因为没做切割把磁盘占满了。# 查看目录下按大小排序的前 10 个文件 du -ah /home/test/logs | sort -rh | head -104.2 文本处理命令日志文件往往有几十万行直接打开不现实。三剑客grep、awk、sed主要用来干这件事。# 精确过滤包含 Exception 的行 grep Exception app.log # 过滤关键字并显示前后 5 行上下文 grep -n -A 5 -B 5 NullPointerException app.log # 统计某个关键字出现的次数常用于统计错误次数 grep -c ERROR app.log # 递归过滤目录下所有日志文件 grep -r ERROR /home/test/logs/ # 提取接口路径为 /api/login 的第 4 列耗时数据 grep /api/login access.log | awk {print $4} # 对所有耗时排序找出最大耗时 grep /api/login access.log | awk {print $4} | sort -n | tail -1 # 把文件中的 old.domain.com 替换成 new.domain.com并写回文件 sed -i s/old.domain.com/new.domain.com/g nginx.conf # 只打印文件第 100 到 200 行 sed -n 100,200p app.log文本处理的核心思路是先用grep缩小范围再用awk提取字段最后用sort、uniq做统计。测试人员在验证“某个接口在一段时间内的错误率”时这种组合最常用到的。4.3 日志查看命令这是测试人员点开频率最高的一组命令。# 只查看文件最后 100 行 tail -100 app.log # 实时跟踪日志新增内容联调期间保持这个窗口 tail -f app.log # 跟踪日志同时过滤关键字避免日志刷新太快刷屏 tail -f app.log | grep --line-buffered ERROR # 查看文件开头部分比如查看启动横幅或配置说明 head -50 app.log # 用 less 打开大日志文件支持上下翻页和搜索 less app.log在实际联调中一个很实用的姿势是开两个终端一个实时刷服务端应用日志另一个执行接口请求或点击页面操作。通过tail -f app.log | grep --line-buffered ERROR可以只保留错误信息避免被大量 INFO 日志淹没。4.4 进程与服务管理被测服务没有正常启动、服务进程异常退出、端口被占用这类问题都要查进程。# 查看 Java 进程信息 ps -ef | grep java # 查看指定服务进程并以树状显示父子关系 ps -ef --forest | grep tomcat # 动态查看进程资源占用 top # 按 CPU 使用率倒序只看前 10 行 top -b -n 1 | sort -k9 -r | head -10 # 结束指定进程先用 ps 确认 PID再执行 kill kill -9 12345 # 按进程名称结束注意 pkill 可能误杀同名进程实际运维中先看清楚匹配范围 pkill -f java -jar test-service.jar # 退出 SSH 后仍保持进程运行适合远程启动自动化测试服务 nohup java -jar test-service.jar service.log 21 nohup和是后台启动服务的标配。测试人员自己部署测试环境时这条命令能保证断开 SSH 后服务不退出。日志重定向到具体文件也方便后续用tail查看。4.5 性能监控压测过程中需要实时关注被测服务器的资源使用情况。# CPU 和内存总体情况 top # 查看内存使用 free -h # 查看磁盘空间 df -h # 查看具体目录占用 du -sh /home/test # 每秒刷新一次 CPU 队列信息观察 load average vmstat 1 5 # 查看磁盘 IO 读写情况需要 sysstat 包支持 iostat -x 1 3 # 查看网络连接状态统计 ss -s性能测试时有个常见的误区只看接口响应时间不看服务器资源。比如压测中接口变慢一条可能的原因是 CPU 已经跑满另一条可能是由于磁盘 IO 等待过高。通过top确认 CPU 占用再通过iostat -x看%util是否接近 100% 才能给性能结论找到依据。4.6 网络排查接口不通时按下面的顺序排查最快。# 检查目标主机是否可达 ping www.baidu.com # 检查端口是否能连通telnet 适合测 TCP 通不通 telnet 192.168.1.100 8080 # 查看本机所有监听的端口 netstat -tlnp # 查看某个端口是否被监听 netstat -tlnp | grep 8080 # 查看某个端口对应的进程 PID lsof -i :8080 # 模拟 HTTP 请求-I 只看响应头 curl -I http://192.168.1.100:8080/api/health # 带请求头和 JSON 体调用接口 curl -X POST -H Content-Type: application/json \ -d {username:admin,password:123456} \ http://192.168.1.100:8080/api/login # 跟踪接口经过的路由节点确认网络路径 traceroute 192.168.1.100接口测试岗位尤其要熟悉curl。很多线上问题排查场景没有前端页面直接curl一个接口通过返回码和响应体就能判断是网络层问题、服务端问题还是参数问题。压测前的环境连通性检查也推荐用循环curl快速验证多台服务器。4.7 权限与用户管理测试人员经常需要处理脚本没有执行权限、创建临时用户、切换账号执行命令等问题。# 给脚本添加执行权限 chmod x run_test.sh # 设置目录权限为 755也就是 rwxr-xr-x chmod 755 /home/test/scripts # 修改文件属主 chown testuser:testgroup /home/test/app.log # 创建测试用户 useradd -m tester # 设置用户密码 passwd tester # 切换到其他用户执行命令 su - tester # 以管理员权限执行无需切用户 sudo systemctl status nginx执行chmod时要先评估影响范围对文件、目录还是整个项目递归操作。权限过大容易埋下安全风险权限过小会导致脚本启动报 “Permission denied”。一个稳妥的做发是先确认当前用户身份和文件属主再同步调整属主与权限。4.8 远程与文件传输测试包分发、日志拉取、脚本同步都依赖这组命令。# 将本地文件上传到服务器 scp local/auto_test.py testuser192.168.1.100:/home/test/scripts/ # 从服务器下载文件到本地 scp testuser192.168.1.100:/home/test/logs/app.log ./ # 将本地目录完整同步到服务器-r 递归 -t 保留时间 rsync -avt /home/scripts/ testuser192.168.1.100:/home/scripts/ # 在远程服务器执行单条命令无需登录后再操作 ssh testuser192.168.1.100 uptime free -hrsync做增量分发比scp更适合同步大目录。迭代测试过程中自动化测试脚本经常改动每次全量上传既慢又容易覆盖配置用rsync只同步变更部分效率提升明显。5. 测试场景实战从日志定位问题下面用三个真实类型的场景把上面的命令串起来。5.1 场景一接口返回 500怎么定位当页面某操作返回 500 时按以下步骤执行。第一步找应用日志文件路径。# 常见日志目录直观过滤 ls -lht /home/test/app/ | head -5第二步实时跟踪日志然后让开发或自己重新触发一次请求。tail -f /home/test/app/app.log第三步发现错误后保留关键字上下文。grep -n -A 20 -B 10 2025-06-18 14:22:31 /home/test/app/app.log第四步提取异常堆栈关键词确认是空指针、数据库连接超时还是参数校验失败。此时提单已经能带上精确的堆栈信息。5.2 场景二压测时 CPU 飙高怎么快速判断先执行top按 P 键按 CPU 排序找到消耗最高的进程号再用ps -ef | grep PID确认是哪个应用如果是 Java 应用进一步用jstack抓线程快照但这项一般由开发参与分析。测试人员要做的是把 CPU 高、内存高、磁盘 IO 高的时间段和压测数据对应起来写进性能测试报告。# 记录 CPU 使用率最高的 5 个进程 top -b -n 1 | head -20 # 查看当前系统负载 uptime5.3 场景三定时任务没跑成功查看 crontab 是否配置正确再查看 cron 日志或任务日志。# 查看当前用户的定时任务 crontab -l # 编辑定时任务 crontab -e # 查看 cron 执行日志确认任务是否触发 grep auto_test /var/log/cron如果任务是脚本优先看脚本有没有执行权限脚本里的命令是否依赖环境变量。crontab 默认环境变量较少脚本里最好写成绝对路径避免“手动执行成功、定时执行失败”这类问题。6. 批量任务与脚本化基础单独执行命令还不够测试中大量任务是重复性的。下面给几个可以直接用的脚本片段。6.1 批量查看多台服务器状态新建check_servers.sh内容如下。#!/bin/bash # 要检查的服务器清单可换成自己环境的 IP SERVERS(192.168.1.101 192.168.1.102 192.168.1.103) for server in ${SERVERS[]}; do echo $server ssh testuser$server uptime free -h | head -3 echo done给脚本加执行权限后运行。chmod x check_servers.sh ./check_servers.sh6.2 批量清理超过 7 天的日志文件# 这条命令要谨慎使用执行前先用 find 列出会清理的文件 find /home/test/logs -name *.log -mtime 7 -exec ls -lh {} \; # 确认无误后再替换为删除 find /home/test/logs -name *.log -mtime 7 -exec rm -f {} \;批量删除前务必先执行不带rm的命令把待处理文件列出来确认。日志清理不可逆一旦误删可能影响问题追溯。6.3 多文件批量替换 IP把 20 个配置文件中的旧的 IP 批量替换成新 IP用sed加find组合。find /home/test/config -type f -name *.properties -exec \ sed -i s/192.168.1.10/192.168.1.20/g {} \;6.4 自动化测试中的 Shell 调用自动化测试框架通常是 Python 或 Java实际执行时仍然依赖 Shell 做环境准备先启动服务再等端口就绪然后执行测试最后归档报告。#!/bin/bash # auto_run.sh # 启动被测服务 nohup java -jar test-service.jar service.log 21 # 等待端口就绪循环探测 30 次 for i in $(seq 1 30); do if curl -s http://127.0.0.1:8080/actuator/health; then echo service ready break fi sleep 2 done # 执行自动化测试 pytest tests/ --htmlreport/index.html --self-contained-html # 记录执行结果 echo exit code: $?7. 面试高频考点整理把这几年测试岗位面试中重复出现的 Linux 考点整理成一张表适合面试前快速过一遍。面试问题命令答案备注怎么查看端口被哪个进程占用netstat -tlnp | grep 8080或lsof -i :8080注意 Windows 下没有 lsof需要换命令怎么实时查看日志tail -f app.log常和grep --line-buffered搭配怎么查一个进程是否存在ps -ef | grep java注意 grep 本身也会出现在结果里怎么统计日志中 ERROR 出现次数grep -c ERROR app.log也可以加wc -l怎么找出目录下前 10 大文件du -ah dir | sort -rh | head -10常见于磁盘排查问题怎么查看系统负载uptime或top关注 load average 三个值怎么设置定时任务crontab -e要会用分钟、小时、日、月、周的五个字段怎么给脚本加执行权限chmod x script.sh面试还常问 754、755、644 的区别怎么后台启动服务并保持运行nohup command app.log 21 常问21的含义怎么从服务器下载文件scp 用户IP:远程路径 本地路径反向执行即可上传有一道高频题值得单独说明chmod 754的含义。7、5、4 分别对应属主、属组、其他用户。7 是 421代表读、写、执行5 是 41代表读、执行4 只有读。面试时把这三组数字解释清楚比背命令更能体现基本功。另一道高频题是crontab每分钟执行一次脚本怎么设置。格式为* * * * *这五个字段依次是分、时、日、月、周。比如每天凌晨 2 点 30 分执行写法是30 2 * * *每 10 分钟执行一次写法是*/10 * * * *。8. 常见问题与排查方法问题现象可能原因排查方式解决方案执行脚本提示 Permission denied脚本没有可执行权限执行ls -l script.sh查看权限位执行chmod x script.shtail 日志没有输出服务没写日志或日志文件路径不对执行ls -l 日志路径确认文件更新时间确认服务进程是否存活使用ps -ef查看服务启动后访问不了页面端口未监听或防火墙拦截netstat -tlnp | grep 8080确认监听地址或检查防火墙规则curl 报 Connection refused服务未启动或端口不对telnet 127.0.0.1 8080测试端口检查进程状态并确认端口配置执行free -h内存显示很少缓存占用显示为 used观察 available 列这是正常情况缓存可被回收不必紧张top 里 CPU 使用率超过 100%多核 CPU 汇总显示按 1 查看每个核的情况说明多核资源被利用结合具体进程判断crontab 任务没执行脚本路径或环境变量问题查看/var/log/cron日志脚本中使用绝对路径并重定向日志误删了文件日志被直接删除立即停止写入确认是否有备份日志建议先压缩归档再定期清理grep 不到关键字日志乱码或编码问题执行file app.log查看编码使用tail -f直接查看原始输出必要时确认编码格式批量任务执行一半失败网络超时或命令不兼容循环内加set -x打印执行过程增加超时重试机制并保留输出日志9. 最佳实践与测试工作建议9.1 先搭一套稳定的练习环境不要只看文档建议在 WSL 或虚拟机上把环境搭起来把第 4 章的每个命令模块至少跑一遍。重点是感受命令的输入输出形成“问一个场景能答出命令和预期结果”的状态。9.2 建立自己的命令速查笔记本文是一份速查手册但每个团队的日志路径、服务名、端口都不一样。第一次遇到新的服务时把路径、用户、启动命令记录下来之后排查问题的速度会明显加快。用自己的实践产物比背别人的笔记更有价值。9.3 批量操作前先列出影响范围清理日志、批量改配置、批量传文件这类操作不可逆先打印出来确认再执行真正的变更。9.4 关注命令的适用边界不同发行版自带命令有差异CentOS 和 Ubuntu 在包管理、防火墙命令上就不完全一致。如果换了新环境先执行cat /etc/os-release确认基础环境。9.5 安全与授权边界要明确服务器权限、测试账号、配置文件里的敏感信息都要按团队规范管理。不要随意拿生产服务器演练涉及数据库、生产日志的查询要确认权限和审批流程脚本中不要硬编码密码构造测试请求时不要对未授权系统发起压力测试。使用 SSH 登录时优先使用密钥代替密码退出前确认history中没有残留敏感命令。9.6 把命令串联成脚本复用手动执行一次命令解决的是一次问题。把高频动作写成脚本比如“服务健康检查”“日志归档”“批量跑冒烟测试”下次直接执行脚本还能输出规范日志。测试团队的效率往往就是这么一点一点提上来的。10. 总结测试工程师学 Linux不是为了成为运维专家而是为了在遇到问题的时候不掉链子服务起不来能自己查日志接口报错能自己抓请求接口慢能看服务器指标重复操作能写脚本批量处理。这份手册覆盖的每一个模块都是从真实测试场景里提炼出来的第一优先级是把第 4 章的命令过一遍第二优先级是动手写一个能用的 Shell 脚本。等你能在面试时对着“端口被占用怎么查”“日志怎么实时跟踪”这类问题直接给出命令和场景解释时Linux 就不再是简历上的一行字而是你独立排查问题的一种能力。建议先把这篇文章收藏备用平时遇到具体问题再回来对照查。