资讯中心

软件测试工程师必学的20个Linux核心命令与实战场景解析

📅 2026/8/23 4:56:06
软件测试工程师必学的20个Linux核心命令与实战场景解析
1. 项目概述为什么测试人员必须掌握Linux命令在软件测试这个行当里混了十几年我见过太多测试同学尤其是刚入行的新人面对Linux服务器时那种手足无措的样子。要么是开发扔过来一个日志文件路径让你自己看要么是线上环境出了个诡异问题需要你连上去抓包复现又或者是自动化测试脚本跑在Linux环境里报错了你只能干瞪眼。这时候如果你只会点点鼠标那基本就等于“武功全废”。所以今天我不讲那些天花乱坠的测试理论也不扯复杂的自动化框架就扎扎实实地跟你聊聊测试人员必须掌握的20个Linux命令。这20个命令是我从无数个深夜排查、线上救火、环境搭建的实战中提炼出来的“生存技能包”。它们不是什么高深莫测的“屠龙技”而是你每天都会用到的“瑞士军刀”。掌握了它们你就能独立完成很多基础运维工作和开发、运维沟通时不再“鸡同鸭讲”排查问题的效率也能提升好几个档次。无论你是手动测试、自动化测试还是测试开发这套命令组合拳都适用。简单来说这些命令能帮你解决三大类问题查看与分析日志、进程、网络、文件与目录操作找文件、看内容、改权限、系统与进程管理监控资源、启停服务。下面我们就一个个拆开揉碎了讲保证你看了就能懂懂了就能用。2. 核心命令解析与实战场景2.1 文件与目录操作你的“导航仪”和“放大镜”测试工作中绝大部分时间都在和文件打交道查看日志、定位配置文件、检查部署包。以下几个命令是你探索Linux文件系统的基石。pwd- 打印当前工作目录这个命令简单到令人发指但至关重要。当你通过SSH登录一台陌生的服务器或者在一个复杂的目录结构中跳转多次后很容易迷失。pwdPrint Working Directory能立刻告诉你当前所处的绝对路径。$ pwd /home/tester/project/logs实操心得在写自动化脚本时尤其在cd切换目录前后用pwd确认一下当前位置能避免很多因路径错误导致的脚本执行失败。ls- 列出目录内容这是你使用频率最高的命令之一。但别只会用ls它的参数才是精髓。ls -l以长格式显示包含文件权限、所有者、大小、修改时间。测试中常用来确认文件是否更新、权限是否正确。ls -a显示所有文件包括以.开头的隐藏文件如.bashrc,.env配置文件。ls -lh-h参数将文件大小以人类可读的形式K, M, G显示结合-l使用查看日志文件大小特别方便。ls -t按修改时间排序最新的排在最前面。快速定位刚刚生成的日志或错误文件。# 查看当前目录下所有文件的详细信息按时间倒序排列并人性化显示大小 $ ls -lth total 2.3G -rw-r--r-- 1 tester tester 1.2G Mar 10 15:30 app_error.log -rw-r--r-- 1 tester tester 800M Mar 10 14:22 system_out.log drwxr-xr-x 2 tester tester 4.0K Mar 10 10:05 archive/cd- 切换目录切换目录配合Tab键自动补全路径效率翻倍。几个特殊符号要记牢cd ~或cd回到当前用户的家目录如/home/tester。cd -在两个目录间快速来回切换非常实用。cd ..返回上一级目录。find- 查找文件当你要在茫茫文件海中定位一个特定的日志文件、配置文件或JAR包时find是你的终极武器。按名称查找find /path/to/search -name *.log按类型查找find . -type f找文件find . -type d找目录。按时间查找测试常用find /var/log -name *.log -mtime -1查找/var/log下过去24小时内修改过的所有日志文件。组合查找并执行操作find . -name core.* -exec rm {} \;查找并删除所有core dump文件。# 实战场景项目日志目录杂乱需要找到今天产生的所有包含“ERROR”关键词的日志文件 $ find /opt/app/logs -type f -name “*.log” -mtime 0 -exec grep -l “ERROR” {} \;这个命令组合了find和grep先找到今天修改过的日志文件再从中筛选出包含“ERROR”的文件名打印出来。grep- 文本搜索“grep”是测试人员的“救命稻草”。从海量日志中筛选关键错误信息、检查配置项是否生效全靠它。基础搜索grep “NullPointerException” app.log显示行号grep -n “error” logfile方便你快速定位到日志文件的第几行。忽略大小写grep -i “timeout” logfile递归搜索grep -r “connection refused” /opt/app/在整个目录树中搜索。上下文显示grep -A 5 -B 5 “Exception” logfile显示匹配行及其前后各5行内容。这对于分析异常发生时的上下文状态至关重要。正则表达式grep -E “(ERROR|FATAL)” logfile匹配ERROR或FATAL。# 复杂实战统计某个微服务今天接口超时Timeout的错误数量 $ grep -c “TimeoutException” /opt/service/logs/app.date %Y-%m-%d.log2.2 文件内容查看与编辑读懂系统的“日记”找到文件后下一步就是查看和编辑内容。在测试服务器上通常没有图形化编辑器全凭命令行。cat- 连接并打印文件内容适合查看小文件。cat filename查看整个文件。cat -n filename显示行号。注意千万不要用cat查看巨大的日志文件比如几个G会导致终端卡死。大文件请用less或tail。less/more- 分页查看文件内容查看大文件的标配。less比more功能更强可以向前翻页推荐使用less。less huge_file.log进入less后常用操作空格键向下翻一页。b键向上翻一页。/关键词向下搜索。?关键词向上搜索。q键退出。tail- 查看文件尾部内容这是测试人员查看实时日志的黄金命令没有之一。tail -f app.log持续跟踪日志输出。当你在进行测试尤其是接口测试或自动化测试时开一个终端窗口执行tail -f所有系统打印的日志都能实时滚动显示错误一目了然。tail -n 100 app.log查看文件最后100行。默认是最后10行。tail -f -n 50 app.log持续跟踪并且从倒数第50行开始显示。# 经典组合一边执行测试用例一边在另一个终端窗口监控日志 $ tail -f /opt/application/logs/console.loghead- 查看文件头部内容与tail对应查看文件开头部分。常用于检查配置文件的头部信息或日志文件的起始标记。head -n 20 config.yml查看配置文件的前20行。vim/vi- 文本编辑器虽然对于新手来说有点门槛但学会vim的基础操作是必须的因为它是几乎所有Linux发行版的标配编辑器。你至少需要会vim filename打开文件。i键进入编辑模式Insert mode。ESC键退出编辑模式回到命令模式。:wq保存并退出。:q!不保存强制退出。/搜索词在命令模式下搜索。 当需要快速修改一个配置文件如nginx.conf,application.properties时vim是你的唯一选择。2.3 系统进程与资源监控洞察系统状态的“仪表盘”测试过程中经常需要确认服务是否启动、进程是否存活、服务器资源CPU、内存是否吃紧。这些命令帮你快速诊断环境问题。ps- 报告当前进程快照查看进程信息。最常用的组合是ps aux或ps -ef。ps aux | grep java查找所有Java进程。aux选项能显示最全的信息包括进程所有者、CPU内存占用、启动命令等。ps -ef | grep nginx查看nginx进程及其父进程ID。 输出中的几个关键列USER: 进程所有者。PID: 进程ID用于后续的kill操作。%CPU/%MEM: CPU和内存占用率。COMMAND: 启动命令。top/htop- 动态实时监控系统资源top是Linux自带的实时系统监控工具像一个动态的“仪表盘”。运行top后你会看到系统负载、CPU使用率、内存使用、以及进程列表。按P大写按CPU使用率排序按M按内存使用率排序。这对于定位测试时哪个进程在疯狂消耗资源非常有用。htop是top的增强版界面更友好支持鼠标操作和颜色高亮如果系统有安装优先使用htop。kill- 终止进程当某个测试进程卡死、无响应或者你需要重启一个服务时就需要kill。首先用ps或top找到目标进程的PID。kill PID发送默认的TERM信号15请求进程正常终止。kill -9 PID发送KILL信号9强制立即终止进程。这是最后的手段因为进程无法捕获此信号可能导致数据丢失或状态不一致。# 标准操作流程先尝试正常结束不行再强制 $ ps aux | grep my_buggy_script tester 12345 0.0 0.1 ... /bin/python my_buggy_script.py $ kill 12345 # 先发TERM信号 # 等待几秒如果进程还在 $ kill -9 12345 # 再发KILL信号netstat/ss- 查看网络连接测试接口连通性、检查端口占用情况时必备。ss命令比netstat更快速推荐使用。ss -tlnp查看所有监听的TCP端口以及对应的进程。-t表示TCP-l表示监听-n表示以数字显示端口-p显示进程信息。ss -tlnp | grep :8080检查8080端口是否被占用被谁占用。netstat -an | grep ESTABLISHED | wc -l查看当前已建立的网络连接数netstat在某些场景下仍有用。# 场景你的自动化测试需要启动一个服务在8080端口但启动失败。先检查端口 $ ss -tlnp | grep :8080 LISTEN 0 128 *:8080 *:* users:((java,pid4567,fd42)) # 输出显示8080端口已被一个Java进程PID 4567占用你需要决定是否杀掉它。2.4 压缩归档与传输测试数据的“打包工”测试中经常需要下载日志、备份测试数据、传输文件到不同环境。tar- 打包与解包Linux下最常用的归档工具。打包压缩tar -czvf archive_name.tar.gz /path/to/folderc: 创建归档。z: 使用gzip压缩。v: 显示详细过程。f: 指定文件名。解压tar -xzvf archive_name.tar.gzx: 解压。仅查看内容tar -tzvf archive_name.tar.gz# 将当前所有日志打包压缩方便下载到本地分析 $ tar -czvf test_logs_$(date %Y%m%d).tar.gz *.logscp- 安全复制基于SSH在服务器与服务器之间或服务器与本地之间安全地传输文件。从本地复制到远程scp local_file.txt userremote_host:/remote/directory/从远程复制到本地scp userremote_host:/remote/path/file.log ./复制整个目录scp -r local_dir userremote_host:/remote/path/# 将线上服务器的错误日志拉到本地分析 $ scp testerprod-server:/opt/app/logs/error.log ./Desktop/2.5 权限与用户管理守护系统的“门卫”测试环境有时需要你临时修改文件权限或者切换用户执行某些操作。chmod- 修改文件权限Linux权限分为读r4、写w2、执行x1。chmod用于修改这些权限。数字模式chmod 755 script.sh7所有者421可读、可写、可执行。5所属组401可读、不可写、可执行。5其他人401可读、不可写、可执行。符号模式chmod ux script.sh给文件所有者增加执行权限。注意事项给脚本文件如.sh添加执行权限(x)是常见操作。但修改系统关键文件或目录权限要极其谨慎错误的权限可能导致服务无法启动或安全漏洞。sudo- 以超级用户权限执行命令普通用户执行需要root权限的命令时使用。测试中安装软件、修改系统配置可能需要sudo。sudo yum install nginx以root权限安装nginx。sudo systemctl restart mysqld重启MySQL服务。重要使用sudo要清楚自己在做什么误操作可能破坏系统。which/whereis- 查找命令位置which python显示python命令的完整路径。用于确认你使用的是哪个版本的Python系统自带还是虚拟环境里的。whereis java查找java命令的二进制文件、源码和手册页的位置。3. 测试专属场景命令组合拳掌握了单个命令就像学会了单词。要把它们组成句子才能解决实际问题。下面结合几个典型的测试场景展示命令的组合用法。3.1 场景一快速定位与统计日志中的错误问题今天上午10点后生产环境日志中出现了大量“数据库连接超时”错误需要快速统计次数并提取样本。解决方案# 1. 首先定位今天的日志文件。假设日志按天切割命名为app.YYYY-MM-DD.log $ cd /opt/app/logs $ ls -l app.*.log # 2. 使用grep查找特定时间点后的错误并统计次数 $ grep -c “Connection timed out” app.date %Y-%m-%d.log # 如果日志是单个大文件可以用时间范围过滤需要日志有时间戳 $ sed -n ‘/2024-03-10 10:00:00/,/2024-03-10 11:00:00/p’ app.log | grep -c “Connection timed out” # 3. 提取前5条错误的详细上下文用于分析 $ grep -A 3 -B 3 “Connection timed out” app.date %Y-%m-%d.log | head -20 /tmp/error_samples.txt # 4. 查看错误发生前后系统的资源状况假设有监控日志或你当时记录了top快照 $ grep -B 10 -A 5 “Connection timed out” app.log | grep -E “(CPU|Memory|threads)” -i3.2 场景二部署测试环境后验证服务状态问题刚刚在一台新服务器上部署了你的测试服务需要验证服务是否正常启动、端口是否监听、进程是否健康。解决方案# 1. 检查进程是否存在 $ ps aux | grep -v grep | grep “your-application.jar” # 输出应有你的Java进程信息 # 2. 检查服务监听的端口假设是8080 $ ss -tlnp | grep :8080 # 应看到LISTEN状态并显示你的进程PID # 3. 检查服务日志看是否有启动错误假设日志输出到console.out $ tail -n 50 /opt/your-app/logs/console.out # 查看最后50行关注“Started”, “ERROR”, “Exception”等关键词 # 4. 简单接口连通性测试如果服务是HTTP的 $ curl -I http://localhost:8080/health # 查看返回的HTTP状态码200表示健康检查通过3.3 场景三清理测试服务器磁盘空间问题自动化测试跑了一周服务器磁盘报警需要快速清理过期的日志文件和临时数据。解决方案# 1. 首先查看磁盘使用情况定位哪个目录最占空间 $ df -h # 查看各分区使用情况 $ du -sh /opt/* | sort -rh | head -10 # 查看/opt下各目录大小并排序 # 2. 假设是日志目录 /opt/app/logs 过大进去查看 $ cd /opt/app/logs $ ls -lhS # 按文件大小排序 # 3. 安全删除7天前的日志文件先确认再删除 $ find . -name “*.log” -mtime 7 # 先列出7天前的文件确认无误 $ find . -name “*.log” -mtime 7 -delete # 确认后执行删除 # 4. 清理空目录和临时文件 $ find . -type d -empty -delete # 删除空目录谨慎使用 $ rm -f *.tmp *.temp # 删除临时文件 # 5. 再次确认磁盘空间释放情况 $ df -h .4. 常见问题排查与避坑指南即使命令用得很熟在实际操作中还是会踩坑。下面是一些我亲身经历或看到新手常犯的错误及解决方法。4.1 命令执行报“Permission denied”问题执行脚本或访问文件时提示权限不足。原因与解决文件没有执行权限用ls -l查看如果脚本文件没有x权限用chmod ux script.sh添加。目录没有进入或读取权限同样用ls -l查看目录权限。可能需要用sudo提权或者联系管理员修改目录权限。使用sudo如果确定操作需要root权限在命令前加sudo。但切记sudo rm -rf /这种命令是毁灭性的。4.2grep搜索不到内容问题明明感觉日志里有这个错误但grep就是搜不出来。排查思路检查关键词拼写和大小写用grep -i进行不区分大小写搜索试试。文件编码问题日志文件可能是非UTF-8编码如GBK。尝试grep -a将二进制文件视为文本或先用iconv命令转换编码。特殊字符转义搜索内容包含正则表达式元字符如.*[]时需要用grep -F进行固定字符串搜索或者用反斜杠\转义。搜索范围不对确认你grep的文件路径是否正确文件是否更新。可以用tail -f先看看文件是否有新内容写入。4.3tail -f监控日志时终端无响应或卡住问题使用tail -f跟踪日志突然不刷新了或者CtrlC无法退出。原因与解决日志文件被移动或删除有些日志切割工具会重命名原日志文件如app.log-app.log.1然后新建一个app.log。此时tail -f可能仍然跟踪着旧的文件描述符。解决方法中断命令重新执行tail -f。网络断开如果是通过SSH连接远程服务器执行tail -f网络中断会导致命令挂起。解决方法重新连接用ps aux | grep tail找到旧的tail进程并kill掉。使用less F替代less F filename也能实现类似tail -f的实时跟踪效果并且支持在跟踪模式下用CtrlC暂停进行搜索、翻页等操作再按F键继续跟踪。我个人更推荐这种方式灵活性更高。4.4 误删除文件或目录问题执行rm命令后发现删错了。预防与缓解黄金法则执行rm -rf前永远先执行一遍ls确认路径。养成ls和rm分开打的习惯。使用别名在~/.bashrc中设置别名alias rm‘rm -i’让rm在删除前交互式询问。但注意对于脚本自动化这可能导致问题。没有回收站Linux命令行删除是直接删除很难恢复。对于重要数据删除前可以先tar打包备份到别处或者使用mv命令移到临时目录观察一段时间再彻底删除。终极方案——快照如果是在虚拟机或支持快照的云服务器上操作在执行高风险操作前打一个快照。4.5 磁盘空间莫名被占满但du找不到大文件问题df显示磁盘使用率100%但用du逐层查找统计的大小远小于磁盘使用量。原因通常是因为有文件被删除但仍有进程在打开它比如被tail -f或某个服务打开。在Linux中文件被删除后如果其文件描述符还被某个进程持有磁盘空间就不会释放直到该进程关闭文件。排查与解决# 1. 使用lsof命令查找被删除但仍被进程占用的文件 $ lsof | grep deleted # 输出会显示进程PID和已被删除的文件路径标记为deleted # 2. 根据PID决定是重启该进程如应用服务还是直接kill掉该进程来释放空间。 # 例如发现是某个Java进程占用了巨大的已删除日志文件 $ kill PID # 或重启对应的服务这个场景在测试环境非常常见比如日志切割后旧日志文件被删除但应用进程没有重启导致空间不释放。掌握这20个命令及其组合用法足以让你在Linux测试环境中游刃有余。但记住命令是工具解决问题的思路才是核心。每次操作前先明确目标遇到报错先看提示修改配置先做备份。多动手多思考把这些命令变成你的肌肉记忆你的测试效率和问题排查能力一定会获得质的飞跃。最后善用man命令如man grep去查看命令的官方手册那里有最权威、最详细的参数说明这是你从“会用”到“精通”的必经之路。