刚入行软件测试那会儿,我吃过不少没整理好Linux笔记的亏。面试被问到“你怎么查看tomcat报错日志”,脑子里只有ping和cd;后来自己搭测试环境、部署被测系统,权限不对、端口占用、日志刷屏,每一步都在被Linux教育。如果你也在软件测试学习阶段,或者正准备在简历上写“熟悉Linux”,这篇笔记大概率能帮你少踩几个坑。
这份“Linux笔记(软件测试学习)”不是什么操作系统大百科,而是把测试工作里真正会用到的那部分Linux知识,按场景重新串了一遍。包括测试人员为什么要学Linux、常用命令的测试用法、怎么从零搭一套测试环境、动手排查问题,以及面试题怎么答、简历怎么写。内容尽量保持“拿来就能用”的节奏,不考系统原理,只讲干活。
1. 测试人为什么要系统整理Linux笔记
1.1 看懂测试工作里Linux的真实占比
先做个简单盘点:大多数被测系统的服务器,跑的是Linux。就算你所在的公司用Windows Server,一到微服务、容器化、CI/CD这些环节,底层也基本绕不开Linux环境。测试工作里最常见的场景是这几类:
- 搭建测试环境:Linux服务器上装MySQL、Redis、Tomcat、Nginx,把被测系统跑起来。
- 排查缺陷:研发说“环境没问题”,测试得自己去服务器上翻日志、查进程、看端口。
- 准备测试数据:连接数据库、批量插入数据、清理脏数据,命令操作比挨个点界面快得多。
- 执行自动化脚本:很多自动化项目的执行机就是Linux,脚本要能在上面跑、定时跑。
- 性能测试:压测时看CPU、内存、IO、负载,Linux自带命令就是第一手的监控工具。
所以“测试要不要学Linux”这个问题的答案很直接:不是要不要,而是早晚要。早点整理一套自己的命令笔记,后面每次部署环境、排查问题,都能照着抄。
1.2 不同测试方向的Linux能力清单
功能测试、自动化测试、性能测试、测试开发,对Linux的要求层次不一样。我根据自己的经历,把常见方向的能力要求整理成了一张清单:
| 测试方向 | Linux能力要求 | 典型操作 |
|---|---|---|
| 功能测试 | 能查看日志、能部署环境、能定位问题 | tail/grep/less、tar解压、systemctl服务管理 |
| 自动化测试 | 能在Linux上跑脚本、处理文件、调接口 | Python环境、venv、pip、curl |
| 性能测试 | 会看系统资源、会采集监控数据 | top/free/iostat/vmstat、脚本统计 |
| 测试开发 | 能搭建测试平台、用容器管理环境 | Docker、shell脚本、日志分析 |
别被这个清单吓到。功能测试阶段,真正高频的命令就那么二三十个;自动化阶段再加几个。真正需要的不是“背熟命令”,而是“知道排查问题时该往哪个方向走”。
2. 测试最常用的Linux命令,照着记就行
2.1 文件操作:找目录、拷文件、防误删
测试人员操作文件,主要不是开发代码,而是找配置文件、拷日志、传安装包。我常用的几个场景:
pwd # 看当前目录 ls -l # 列目录,带权限、大小、修改时间 cd /opt/test # 切换目录 cp config.txt config.txt.bak # 改配置前先备份 mkdir -p /home/test/logs # 递归创建目录 find / -name "*.log" # 全盘找某个文件这里最想提醒的是rm命令。清理临时文件没问题,但不要用rm -rf /这种组合拳,尤其不要在root用户下顺手敲。我见过不止一次因为rm -rf /opt/少打了一级目录,把整个项目环境删掉的惨案。稳妥做法是先用ls确认路径,再删;能不用-rf就不用。
2.2 日志排查三板斧:less、tail、grep
日志操作是测试人员频率最高的Linux动作。接口报500了、页面白屏了、数据没写入,第一反应都应该是去看日志。三板斧分别是:
tail -f app.log # 实时跟踪日志,复现bug时开一个窗口盯输出 tail -100 app.log # 看最后100行 less app.log # 分页查看,在less里按 / 输入关键字定位,按q退出 grep -n "Exception" app.log # 按关键字找关键行实际排查时,很少单独用一条命令,而是组合起来。比如我先grep -n "2025-06-18" app.log | grep "ERROR"过滤出某天所有错误,再根据行号到less里细看上下文。这里有个经验:日志量大的时候,不要直接cat整个日志文件,终端会直接卡死,less和tail更安全。
2.3 进程端口和资源占用排查
测试中常见的几种情况:程序启动失败但没报错、端口被占用、服务器内存飙升。对应命令是:
ps aux | grep java # 看Java进程是否存在 netstat -tlnp | grep 8080 # 谁占用了8080端口 kill -9 PID # 强制结束某个进程 top # 实时看CPU、内存、负载 free -h # 看内存 df -h # 看磁盘我喜欢把ps aux | grep和netstat -tlnp | grep理解为测试环境的标准体检动作。部署完一个服务,先看进程在不在,再看端口有没有监听;两条都通过,服务基本就起来了。排查端口占用时,有时候同一个端口被两个进程占着,别急着kill,先看看进程是什么,避免把自己刚起的环境杀掉。
2.4 权限修改:把403/500问题从根上解决
Linux的权限逻辑,一开始容易把人绕晕。最常用的两个点是:文件权限和文件属主。权限字符串分成三组,分别代表:属主、属组、其他人,每组是读(r=4)、写(w=2)、执行(x=1)之和。
chmod 755 script.sh # 属主可读可写可执行,其他人可读可执行 chmod 644 config.conf # 属主可读写,其他人只读 chown -R test:test /opt/app # 把目录属主改成test用户测试环境里最常见的报错是“Permission denied”。比如Tomcat启动脚本没有执行权限,解决方案就是chmod +x;日志目录属主不对导致没法写入,方案是chown。给权限不要去记所有组合,记住“自己最常用的服务目录755、配置文件644、脚本加执行权限”基本够用。
3. 从零搭建一套Linux测试环境
3.1 虚拟机方案:资源分配与蓝屏避坑
没有独立服务器的时候,虚拟机是测试学习阶段最靠谱的方案。常用组合是 VirtualBox 或 VMware Workstation Player,加上 Ubuntu Server 或 CentOS Stream。虚拟机里装Linux,资源分配不是越大越好,我对新手推荐这样的配置:
CPU:2核 内存:4GB 磁盘:40GB(动态分配) 网络:NAT模式内存给4GB是折中方案。给太少,编译或跑服务时会卡;给太多,宿主机自己先卡了。网络模式默认NAT就能上网,适合练习;如果要在局域网内通过IP访问虚拟机里的测试服务,需要改成桥接模式。
不少人在Windows下安装Linux虚拟机遇到蓝屏,最常见的三个原因:BIOS里没开启虚拟化、Windows的Hyper-V和VirtualBox/Vmware冲突、内存分配过大。解决方向是:进BIOS打开Intel VT-x或AMD-V;关闭“启用Hyper-V”和内核隔离的“内存完整性”;把虚拟机内存降到4GB或以下。蓝屏跟“虚拟机软件不好”关系不大,基本是环境冲突。
3.2 更轻量的WSL方案及更新问题处理
如果不想装完整虚拟机,只要练命令、跑脚本,Windows自带的WSL是个轻量选项。WSL 2跑的是真实内核,日常测试学习完全够用。
wsl --list --online # 查看可用发行版 wsl --install -d Ubuntu # 安装Ubuntu wsl -d Ubuntu # 进入Ubuntu环境WSL经常遇到的问题是启动时提示“WSL needs updating”。这个提示出现时,先跑wsl --update;更新不了,多半是Windows系统版本过旧。可以到“设置 -> 应用 -> 可选功能”里确认“虚拟机平台”是否开启,或者把Windows更新到较新版本后再看。还有一点容易被忽略:WSL的发行版默认是完整系统,装多了也会占C盘空间,可以在“应用和功能”里查看VHD大小。
3.3 部署被测系统:MySQL、Nginx、Tomcat一条龙
环境搭建是测试的基本功。我习惯把一次完整的部署任务拆成三步:装软件、改配置、验证服务。以Ubuntu为例,装MySQL和Nginx:
sudo apt update sudo apt install -y mysql-server nginx systemctl status mysql systemctl status nginxMySQL安装完成后,默认情况下只允许本机连接。测试需要远程连数据库时,要改配置文件里的 bind-address,常见路径是/etc/mysql/mysql.conf.d/mysqld.cnf,把bind-address = 127.0.0.1改成0.0.0.0,然后重启MySQL。这个操作经常被新手忽略,折腾半天连不上,其实改一行配置重启就行。
Java项目的部署也很固定:从CI系统拉包或者用scp把war包传到服务器,放进Tomcat的webapps目录,重启Tomcat后看catalina.out日志。验证服务是否可用,我习惯用:
curl -I http://127.0.0.1:8080/app能返回200,说明Web服务通了,再让研发配合看业务接口。
3.4 用Docker避免“在我电脑上好好的”
学Linux到一定阶段后,一定要接触Docker。Docker解决的是环境不一致问题:同一套镜像,在谁机器上跑结果都一样。这对测试来说实在太重要了,省去了“在我电脑上好好的”这类垃圾沟通。
在Linux上安装Docker:
curl -fsSL https://get.docker.com | sh systemctl start docker systemctl enable docker日常测试经常用Docker起中间件,比如临时要一个MySQL实例:
docker run -d --name mysql-test -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0 docker run -d --name redis-test -p 6379:6379 redis:7这里建议大家用-p把容器端口映射到宿主机时,尽量避开宿主已有端口。比如本机已经跑了3306的MySQL,再启MySQL容器就会端口冲突。真正熟练之后,你会发现Docker配合测试环境管理,比手搓虚拟机高效得多。
4. Linux在测试实战中的完整应用场景
4.1 日志定位Bug:一个登录报错的手把手案例
理论讲再多,不如看一个完整案例。假设被测系统是“登录接口突然报500”,测试人员在Linux服务器上的操作路径一般是:
# 第一步:先看应用日志实时输出 tail -f /opt/app/log/app.log # 第二步:用测试账号复现登录,观察日志变化 # 第三步:看到异常后,过滤关键字 grep -n "login" /opt/app/log/app.log | grep "ERROR" # 第四步:按行号到文件中看上下文 sed -n '2380,2395p' /opt/app/log/app.log这条链路里,tail -f负责捕捉实时输出,grep把异常行捞出来,sed按行号取上下文。大多数bug定位都能被这套组合覆盖。我自己遇到过联调环境偶发报错、日志却没打全的情况,这时候就往更早的时间段查,把关键日志级别调成debug让研发重新打点。测试会看日志的另一个价值,就是能准确告诉研发“在第几行出现了什么异常”,而不是描述“好像报了个错”。
4.2 把自动化脚本部署到Linux定时跑
自动化用例在本地跑通了,不代表在Linux上能跑。很多测试同学在Windows上写脚本,提交上去才发现少依赖、路径不对、编码问题。Linux上跑Python自动化,我习惯的流程是:
# 安装Python及pip sudo apt install -y python3 python3-pip # 进入项目目录,创建虚拟环境 python3 -m venv .venv source .venv/bin/activate # 安装依赖 pip install -r requirements.txt # 跑用例 pytest tests/ -v --html=report.html虚拟环境是个好习惯,为什么?因为多个项目依赖版本可能冲突,各装各的互不影响。跑通之后还能结合crontab做定时冒烟测试:
crontab -e # 每天凌晨2点跑自动化用例 0 2 * * * cd /opt/autotest && .venv/bin/pytest tests/ >> run.log 2>&1cron表达式初次接触有点难,记住“分 时 日 月 周”这个顺序就不会乱。另一个坑是定时任务里的环境变量跟手动执行不一样,脚本里要尽量写绝对路径,或者执行前先source /etc/profile。
4.3 接口联调用curl排查网络问题
接口测试不一定非要用Postman,Linux自带的curl非常能打。接口联调的时候,我常用的参数是:
curl -i http://127.0.0.1:8080/api/login curl -X POST -H "Content-Type: application/json" \ -d '{"username":"test","password":"123"}' \ http://127.0.0.1:8080/api/login curl -v https://api.example.com/ping-i能带出响应头,-v能打印握手过程,-X指定方法,-d发请求体。网络不通时,curl的报错信息能帮我们区分是哪层出问题:连接不上是服务或端口问题,超时是网络或防火墙问题,响应乱码是编码问题。如果只想确认某个端口通不通,可以用nc -vz 192.168.1.10 8080。
4.4 被压测的时候Linux怎么看指标
做性能测试时,Linux的命令行是最直观的监控窗口。压测过程中我一般盯四个指标:
top # 看整体负载、CPU、内存 free -h # 看内存有没有耗尽 iostat -x 1 # 看磁盘IO是否有瓶颈 ss -s # 看连接数状态top返回里的load average需要重点看:三个数分别代表1分钟、5分钟、15分钟平均负载。如果1分钟大于CPU核数很多,而15分钟不高,说明是当前压测流量造成的短时冲击;如果15分钟也高,说明系统可能一直处于高位。测试报告里如果能给出这些真实数据,比只说“服务撑不住”有价值得多。
5. 软件测试面试里的Linux高频题
5.1 面试题背后其实在考什么
软件测试面试题里,Linux是仅次于数据库的高频考点。面试官通常不会直接问“你知道哪些Linux命令”,而是问“你怎么查看日志”“你怎么确认端口被占用”“你怎么让一个Shell脚本开机自启”。背后考的是你有没有在真实环境里干过活。
所以我反复提醒自己:背命令没意义,要背场景。比如“如何不重启Tomcat查看实时日志”,答案可以拆成三步:ps aux | grep tomcat找到进程,tail -f 对应的catalina.out看输出,grep过滤关键字。面试官听到的是“你有线上排查经验”,而不是“你会敲tail”。
5.2 高频命令行问答速查
下面这组是我根据面试题和自己的项目经验整理的高频问答,可以直接作为笔记保存:
| 面试问题 | 参考答案要点 | 对应场景 |
|---|---|---|
| 查看Linux日志用什么命令 | tail -f、tail -n、less、grep | 定位bug |
| 如何查看端口被占用 | netstat -tlnp 或 ss -tlnp + grep端口 | 服务启动失败 |
| 如何给脚本加可执行权限 | chmod +x script.sh | 运行测试脚本 |
| 如何查看Java进程 | ps aux | grep java | 确认被测服务存活 |
| 如何查找指定日期的ERROR日志 | grep "2025-06-18" app.log | grep "ERROR" | 异常分析 |
| Shell脚本里如何传参数 | $1、$2,shift | 自动化脚本入参 |
| 如何解压tar.gz包 | tar -zxvf xxx.tar.gz | 部署环境 |
| 如何远程拷贝文件 | scp local user@host:/path | 传安装包 |
这些题目本身不难,难的是回答时要带上下文。比如答“netstat -tlnp”的时候,补一句“先找到PID,再ps aux | grep PID看是什么进程”,面试官会愿意多听几句。
5.3 简历上怎么具体写“熟悉Linux”
很多人写简历就一句“熟悉Linux”,太虚了。建议把“熟悉Linux”展开成可被验证的行为描述,比如:
熟悉Linux环境下测试环境部署,能独立完成Web应用、MySQL、Nginx的安装配置 熟练使用日志定位、进程管理、端口排查等常用命令,能快速定位测试环境问题 能编写Shell/Python脚本完成测试数据处理与自动化任务这样写的好处是,面试官可以从你写的内容里挑一个点问下去,而你真做过的话完全接得住。包装没有意义,做过才算数。
6. 真实环境里的常见问题与经验教训
6.1 排查速查表:报错、原因、解决
运维和测试环境里,有些问题反复出现。我把它们整理成一张速查表:
| 现象 | 常见原因 | 处理方式 |
|---|---|---|
| 虚拟机安装Linux蓝屏 | 未开虚拟化、Hyper-V冲突 | BIOS开启VT-x/AMD-V,关闭Hyper-V |
| 连接服务器提示密码过期 | 密码策略设置了有效期 | 登录后按提示修改密码,或管理员设置不过期 |
| 权限不足 Permission denied | 属主/属组不对、没执行权限 | chmod +x / chown 调整属主 |
| 端口被占用 Address already in use | 残留进程 | netstat查看PID,确认后kill |
| 环境变量改了不生效 | 没source | source /etc/profile 或重新登录 |
| 日志文件把磁盘占满 | 日志轮转没配好 | logrotate配置、清理历史日志 |
| 定时任务不执行 | crontab路径/环境变量问题 | 使用绝对路径,手动执行脚本确认 |
表里的问题,每一个我都踩过。特别是“密码过期”这个坑,测试环境常碰上:连服务器提示密码过期,其实改一下密码就能进,但如果你不知道怎么回事,就会误以为环境挂了。
6.2 让我花过冤枉时间的老坑
最后分享几个让我印象深刻的老坑,希望你别再踩一遍。
第一个坑是修改了配置文件忘记重启服务。Tomcat改端口、Nginx改代理指向、MySQL改bind-address,改完没有重启,服务一直用的是旧配置。现在我对任何“改了没生效”的问题,第一步都是确认服务是否重启了、日志是否刷了新的启动时间。
第二个坑是磁盘占满导致服务莫名假死。有次测试环境突然连不上,top看CPU也不高,最后df -h发现根分区100%,罪魁祸首是Tomcat不停写日志,而且没有做日志轮转。后来我在所有测试环境上都加了一个固定动作:定期清理历史日志,或者配置logrotate。
第三个坑是crontab脚本里写相对路径。手动执行好好的,定时执行就是找不到文件。因为cron环境里的PATH十分精简,很多命令路径都没包含。后来写脚本统一用绝对路径,连Python解释器都用/opt/.venv/bin/python,问题再没出现过。
我到现在还保持着整理Linux笔记的习惯,但记的不是命令列表,而是“场景+命令+踩坑记录”。每次遇到新问题,解决完就补一条,日积月累就成了自己的命令字典。建议你也试试这个思路,学命令时多问自己一句:这个操作在软件测试里什么时候用得上?一旦把命令和场景挂钩,记起来会牢固得多。