
1. 项目概述为什么测试人员必须掌握Linux命令如果你是一名测试工程师或者正打算进入这个领域那么“Linux命令”这个词对你来说绝对不是一个可选项而是一项生存技能。我干了十多年测试从功能测试、自动化测试到性能测试几乎每一个关键环节都离不开Linux终端的那一方黑色窗口。很多新手尤其是刚从Windows环境转过来的朋友一看到命令行就发怵总觉得那是开发或者运维的专属领域。但我想告诉你恰恰相反测试人员可能是除了运维之外最需要和Linux服务器“亲密接触”的角色。为什么这么说想象一下这些场景你需要登录测试服务器查看最新的应用日志定位一个偶发的Bug你需要检查服务器的CPU、内存使用率判断是不是资源瓶颈导致了性能测试结果不达标你需要从一大堆文件中快速筛选出包含特定错误码的记录甚至当自动化测试脚本需要在服务器上部署和运行时你总得知道怎么启动、停止和查看进程状态吧这些日常高频操作如果每次都依赖开发或运维同事沟通成本高、效率低不说自己的技术视野也会被局限在“点点点”的层面难以深入问题本质。因此我结合自己多年的实战经验精心筛选并总结了测试人员最常用、最核心的20个Linux命令。这份清单不是大而全的“命令大全”而是针对测试工作流量身定制的“生存指南”。目标是让你哪怕是个Linux“小白”也能在半天内上手解决工作中80%的服务器端操作问题。我们不求成为系统管理员但求成为一个能独立排查问题、高效获取信息的专业测试人员。2. 测试人员Linux命令学习路径与核心思路学习Linux命令最忌讳的就是抱着一本厚厚的命令手册从头啃到尾。对于测试人员我们的学习路径必须有极强的针对性遵循“场景驱动问题导向”的原则。我的核心思路可以概括为四个层次连接与导航、信息检索与查看、文件与内容操作、系统监控与网络诊断。2.1 学习路径设计从登录到精通首先你需要能“进入”服务器这就是连接命令如ssh。进去之后你不能迷路得知道自己在哪、有什么文件这就需要导航与查看命令如pwd,ls,cd。接着测试工作核心是处理日志、配置等文件所以必须掌握文件操作如cat,grep,tail,vim和内容筛选命令。更深一层当出现性能问题或网络异常时你需要监控工具如top,ps,netstat来定位瓶颈。最后为了提升效率你需要一些“魔法”命令比如用管道|组合多个命令用tar或scp来打包传输文件。这个路径是递进的每一个命令都是为了解决一个具体的测试场景问题。比如你不是为了学grep而学grep而是为了从成百上千行的日志中瞬间找到那条“NullPointerException”的错误记录。2.2 工具选型与环境准备对于测试人员我们通常不需要在本地安装完整的Linux发行版。最常用的方式有两种使用虚拟机在个人电脑上安装VMware或VirtualBox然后安装一个CentOS或Ubuntu的镜像。这种方式环境独立可以随意折腾适合深入学习。从网络热词看“虚拟机安装linux系统”是很多人的起点。使用云服务器或公司测试服务器这是最贴近工作的方式。公司通常会提供测试环境的服务器账号你直接使用SSH客户端如Windows下的PuTTY、Xshell或者Mac/Linux自带的终端连接即可。网络热词中“linux镜像”常指的就是这些系统安装文件。注意对于纯粹想练习命令的新手甚至可以不需要安装任何东西。Windows 10及以上版本自带的WSL适用于Linux的Windows子系统就是一个绝佳选择。你可以在Microsoft Store中搜索安装Ubuntu获得一个几乎原生的Linux命令行环境。网络热词中“正在下载:适用于 linux 的 windows 子系统”指的就是这个如果下载慢可以考虑切换网络或使用其他镜像源。我个人的建议是初期可以在虚拟机上练习熟悉基本操作。工作中则直接使用SSH连接测试服务器。接下来我们就进入正题看看这20个命令如何融入你的测试日常工作。3. 核心命令解析与实战场景我将这20个命令分为五大类并会为每个命令说明其核心作用、常用参数以及在测试中的典型应用场景。3.1 连接与基础导航命令这类命令是你与Linux服务器建立联系和探索环境的基石。3.1.1 ssh远程登录的桥梁命令ssh作用安全地连接到远程Linux服务器。测试场景这是你每天工作的入口。你需要登录到部署了被测应用的测试环境服务器。常用用法ssh usernameserver_ip_address # 例如ssh tester192.168.1.100首次连接时会提示确认主机密钥输入yes即可。之后需要输入用户密码。实操心得为了免密登录特别在自动化脚本中常用可以使用SSH密钥对。使用ssh-keygen生成密钥然后用ssh-copy-id usernameserver_ip将公钥上传到服务器以后登录就不需要密码了。这在进行持续集成/持续部署CI/CD测试时至关重要。3.1.2 pwd, ls, cd你在哪有什么去哪命令pwd,ls,cd作用pwdPrint Working Directory显示当前所在目录的绝对路径lsList列出当前目录下的文件和文件夹cdChange Directory切换目录。测试场景登录后第一件事用pwd确认位置。通常你会在家目录如/home/tester。然后用ls看看有哪些日志目录或应用目录再用cd导航过去。常用用法pwd ls -la # -l以详情列表显示-a显示所有文件包括隐藏的.开头的文件 cd /var/log/app # 切换到绝对路径 cd .. # 返回上一级目录 cd ~ # 回到家目录注意事项ls -la的输出结果中第一列表示文件类型和权限如drwxr-xr-x这是一个重要信息。d代表目录-代表普通文件。权限关系到你能否读写执行在后续排查“权限不足”问题时需要查看这里。3.2 文件与内容查看命令测试人员大量的时间都在和日志文件、配置文件打交道。这类命令是你的主要“阅读工具”。3.2.1 cat, more, less查看文件内容命令cat,more,less作用都是查看文件内容但交互性不同。测试场景快速查看一个配置文件如application.properties的内容查看一个较小的日志文件。常用用法cat config.ini # 一次性输出整个文件内容到屏幕 more large_log.log # 分页查看按空格翻页Enter下一行q退出 less large_log.log # 比more更强大支持上下滚动、搜索/关键词q退出选择建议对于小文件cat最直接。对于动辄几十上百MB的日志文件绝对不要用cat否则刷屏到你怀疑人生。首选less因为它可以自由滚动和搜索效率最高。3.2.2 tail 与 head盯住日志的头尾命令tail,head作用tail查看文件末尾内容head查看文件开头内容。测试场景这是测试人员使用频率最高的命令之一。tail -f用于实时追踪日志输出当你执行一个测试用例时边操作边看日志打印无比直观。head常用于查看配置文件的前几行说明。常用用法tail -n 100 app.log # 查看app.log文件的最后100行 tail -f app.log # 实时追踪日志输出FollowCtrlC终止 head -n 20 app.log # 查看app.log文件的前20行实操心得tail -f在排查偶现Bug时是神器。你可以先清空日志文件 app.log谨慎操作然后开始复现操作同时开着tail -f app.log所有相关日志尽收眼底精准定位问题发生时间点的上下文。3.2.3 grep文本搜索之神器命令grep作用在文件中搜索指定的字符串模式。测试场景从海量日志中筛选出所有“ERROR”级别的日志查找包含特定用户ID或交易号的所有记录。常用用法grep NullPointerException app.log # 在app.log中搜索异常 grep -n ERROR app.log # 显示匹配行的行号-n grep -i timeout app.log # 忽略大小写搜索-i grep -r config /etc/myapp/ # 递归搜索目录下所有文件-r grep -v DEBUG app.log # 反向选择输出不包含“DEBUG”的行-v进阶技巧grep常与管道|和其他命令结合形成强大组合拳。例如cat app.log | grep “ERROR” | tail -n 50意思是先输出日志然后过滤出ERROR行最后只看最新的50条。网络热词中提到的scpi命令可能是scp文件传输的笔误而vim是强大的文本编辑器对于测试人员掌握基本打开、编辑、保存:wq和退出:q!就足够应对配置文件修改。3.3 文件与目录操作命令除了看还得会动。创建、复制、移动、删除是基本操作。3.3.1 mkdir, rm, cp, mv文件管理四件套命令mkdir,rm,cp,mv作用创建目录、删除文件/目录、复制文件/目录、移动/重命名文件/目录。测试场景为新的测试套件创建专属目录备份旧的日志文件将测试报告移动到指定归档位置。常用用法mkdir -p test_reports/2023-10 # -p参数可创建多级目录 rm old_log.txt # 删除文件系统会询问确认如果配置了别名 rm -rf temp_dir # -r递归删除目录-f强制删除无确认。**慎用** cp source.log backup/ # 复制文件到目录 cp -r source_dir/ backup_dir/ # 递归复制整个目录 mv old_name.log new_name.log # 重命名文件 mv file.log /archive/ # 移动文件血泪教训rm -rf /是著名的“删库跑路”命令-rf组合威力巨大一定要明确你在删除什么。尤其是在使用通配符*时如rm -rf *.log最好先ls *.log确认一下文件列表。建议在个人环境中为rm设置别名alias rm’rm -i’使其默认交互式询问。3.3.2 find按条件查找文件命令find作用在目录树中根据名称、类型、时间、大小等条件查找文件。测试场景查找服务器上所有超过7天的日志文件以便清理找到所有名为application.yml的配置文件。常用用法find /var/log -name *.log # 在/var/log下查找所有.log文件 find . -type f -size 100M # 在当前目录查找大于100MB的普通文件 find /home -mtime 7 -name *.tar.gz # 查找/home下7天前修改过的.tar.gz文件组合应用find的结果可以传递给其他命令处理例如删除7天前的日志find /var/log/app -name “*.log” -mtime 7 -exec rm {} \;。这个命令需要理解-exec参数新手可以先分两步先用find找到文件列表确认无误再执行删除。3.3.3 tar打包与解包命令tar作用将多个文件或目录打包成一个归档文件通常为.tar.gz或.tgz常用于备份和传输。测试场景将一整套测试日志和报告打包下载到本地分析将测试工具包上传到服务器后解压。常用用法tar -czvf reports.tar.gz ./test_reports/ # 压缩打包c创建z用gzip压缩v显示过程f指定文件名 tar -xzvf software.tar.gz -C /opt/ # 解压到指定目录x解压C指定目录记忆技巧参数看起来复杂可以这样记czvf“创建压缩啰嗦文件”。xzvf“解压压缩啰嗦文件”。记住f必须放在参数最后一位后面紧跟文件名。3.4 系统监控与进程管理命令当测试过程中发现系统变慢、应用无响应时这些命令能帮你快速定位问题。3.4.1 top 与 htop实时系统监控仪表盘命令top,htop需安装作用动态显示系统中各个进程的资源占用状况CPU、内存等类似于任务管理器。测试场景性能测试时监控服务器CPU和内存使用率是否达到瓶颈发现某个进程异常消耗资源。常用操作运行top后你会看到一个不断刷新的界面。关键信息行load average表示系统负载%Cpu(s)显示CPU使用情况。进程列表里按P可以按CPU使用率排序按M按内存排序。按q退出。工具推荐htop是top的增强版界面更友好支持鼠标操作和颜色高亮。如果你的测试服务器没有可以尝试用yum install htop或apt-get install htop安装。在性能测试中我习惯开一个终端运行htop实时观察资源变化。3.4.2 ps进程快照命令ps作用查看当前时刻的进程状态。top是动态监控ps是静态快照。测试场景查看某个Java应用如Tomcat的进程IDPID确认自动化测试脚本是否在后台正常运行。常用用法ps aux | grep java # 查看所有包含“java”的进程aux参数组合能显示详细信息 ps -ef | grep nginx # 另一种常用格式查看nginx进程输出中PID是进程号%CPU和%MEM是资源占用COMMAND是启动命令。获取PID后可以为后续操作如kill做准备。3.4.3 kill终止进程命令kill作用向指定进程发送信号默认是终止信号。测试场景停止一个无响应的测试服务重启应用。常用用法kill 1234 # 优雅地终止PID为1234的进程发送SIGTERM信号 kill -9 1234 # 强制终止进程发送SIGKILL信号无法被进程捕获或忽略重要原则永远优先使用不带-9的kill给进程一个清理资源、正常退出的机会。只有在进程对普通kill无响应时成为“僵尸进程”或“defunct”状态才使用kill -9。滥用kill -9可能导致数据丢失或状态不一致。3.4.4 df 与 du磁盘空间侦探命令df,du作用dfDisk Free查看文件系统的磁盘空间使用情况duDisk Usage估算文件或目录的磁盘使用量。测试场景测试执行失败报“No space left on device”用df -h快速查看哪个分区满了。然后用du -sh *在疑似目录下查看哪个子目录占用空间最大可能是日志文件没有做轮转清理。常用用法df -h # -h以人类可读的格式G, M显示 du -sh /var/log/ # -s总计-h可读格式查看/var/log/总大小 du -ah /home/tester | sort -rh | head -n 20 # 找出家目录下最大的20个文件3.5 网络诊断与信息获取命令测试离不开网络接口测试、性能压测都需要了解网络状态。3.5.1 ping 与 telnet基础连通性测试命令ping,telnet作用ping测试网络连通性和延迟telnet测试TCP端口的可达性。测试场景怀疑测试环境网络不通时先用ping网关或目标服务器IP。确认IP通后测试具体服务端口如数据库的3306端口Web服务的8080端口是否开放。常用用法ping 192.168.1.1 # 持续pingCtrlC停止 ping -c 4 www.baidu.com # 只ping 4次 telnet 192.168.1.100 8080 # 测试100服务器的8080端口注意事项很多现代Linux发行版默认不安装telnet客户端因为它本身是不安全的协议。但作为测试工具它非常有用。如果需要安装在CentOS/RHEL上使用yum install telnet在Ubuntu/Debian上使用apt-get install telnet。网络热词中“telnet命令怎么用”也说明了其关注度。如果telnet连接成功会进入一个空白界面然后你可以输入字符虽然没意义或直接按Ctrl]再输入quit退出。如果连接失败会显示“Connection refused”或超时。3.5.2 netstat 与 ss网络连接状态查看命令netstat,ss更推荐作用显示网络连接、路由表、接口统计等信息。测试场景查看服务器上哪些端口正在被监听确认你的测试应用是否成功启动了服务端口排查“Address already in use”错误看哪个进程占用了端口。常用用法netstat -tlnp # 查看所有TCP监听端口及对应的进程名/PID ss -tlnp # 功能类似但ss命令更快更高效语法略有不同 netstat -an | grep :8080 # 查看所有与8080端口相关的连接工具演进ss命令旨在替代netstat它直接从内核空间获取信息速度更快。建议新学者直接学习ss的用法。例如ss -tlnp和上述netstat命令效果类似。3.5.3 curl命令行下的HTTP客户端命令curl作用一个强大的利用URL规则在命令行下工作的文件传输工具支持HTTP、HTTPS、FTP等协议。对测试人员而言它是最简单的API测试工具。测试场景快速测试一个RESTful API接口是否返回预期结果在服务器上模拟请求无需打开浏览器或Postman。常用用法curl http://api.test.com/user/1 # 发送GET请求 curl -X POST -H Content-Type: application/json -d {name:test} http://api.test.com/user # 发送POST请求 curl -I http://api.test.com/ # 仅获取HTTP头部信息-I curl -v http://api.test.com/ # 显示详细请求/响应过程用于调试-v实操心得curl的-v参数在调试接口时极其有用你可以看到完整的请求头和响应头对于排查鉴权失败如401、403错误、内容类型不匹配等问题一目了然。结合grep和jq一个处理JSON的命令行工具你可以在Shell脚本中轻松实现简单的接口自动化测试。4. 命令组合与高效工作流单个命令是武器组合起来才能形成战斗力。Shell提供的管道|和重定向、是命令组合的粘合剂。4.1 管道 |让数据流动起来管道的作用是将前一个命令的标准输出作为后一个命令的标准输入。经典组合# 查找包含ERROR的日志并统计有多少行 grep -c ERROR app.log # 等价于 cat app.log | grep ERROR | wc -l # 找到最消耗CPU的进程 ps aux --sort-%cpu | head -n 5 # 实时监控日志并只过滤出包含特定交易ID的行 tail -f app.log | grep TX1234564.2 重定向 与 保存你的工作成果重定向用于将命令的输出保存到文件而不是显示在屏幕上。覆盖写入文件。如果文件不存在则创建存在则清空后写入。追加写入文件。在文件末尾添加内容。测试场景# 将当前目录的详细列表保存到文件 ls -la file_list.txt # 将接口测试的结果追加到日志文件中 curl -s http://api.test.com/health test_results.log # 将一个命令的错误信息保存到文件2代表标准错误流 some_command 2 error.log4.3 实战工作流示例定位一个接口响应慢的问题假设你负责的测试环境某个API接口突然变慢。你可以通过以下组合命令快速排查检查应用日志tail -f /var/log/myapp/app.log | grep “slow_api”实时观察该接口被调用时的日志。检查系统资源另开一个终端运行htop观察CPU、内存和负载情况。检查磁盘I/O如果日志显示数据库操作慢可以用iostat -x 2需安装sysstat查看磁盘利用率。检查网络连接ss -tnp | grep :8080查看8080端口的连接状态是否有大量TIME-WAIT或CLOSE_WAIT的连接这可能意味着连接未正常关闭。保存现场信息将关键的进程信息、网络连接状态保存下来供后续分析ps aux --sort-%cpu high_cpu.txt; ss -tnp connections.txt。这一套组合拳下来你基本上能对问题有一个初步定位是应用代码问题、数据库问题、服务器资源瓶颈还是网络问题。这就是掌握Linux命令带来的排查能力。5. 常见问题与排查技巧实录即使掌握了命令在实际操作中还是会遇到各种“坑”。这里记录了一些典型问题和我的解决思路。5.1 问题一命令找不到command not found现象输入一个命令如htop或telnet提示-bash: htop: command not found。原因该命令没有安装。排查先用which htop或type htop确认命令是否存在。如果不存在使用包管理器安装。对于CentOS/RHEL系sudo yum install htop。对于Ubuntu/Debian系sudo apt-get install htop。网络热词中“linux安装docker”等也属于此类都是通过包管理器解决。5.2 问题二权限不足Permission denied现象执行命令或操作文件时提示Permission denied。原因当前用户对该文件或目录没有相应的读r、写w、执行x权限。排查与解决ls -la filename查看文件权限。例如-rw-r--r--表示所有者可读写组用户和其他用户只可读。如果需要修改权限使用chmod命令。例如chmod x script.sh给脚本增加执行权限。重要原则不要轻易使用chmod 777 filename给所有用户所有权限这有严重的安全风险。尽量遵循最小权限原则。如果是需要访问系统级目录如/etc,/var/log可能需要sudo提权。但测试环境通常不建议给测试账号过高的sudo权限遇到此类问题应联系运维人员。5.3 问题三磁盘空间不足No space left on device现象创建文件或写入日志失败。排查步骤df -h查看哪个分区使用率100%。du -sh /可疑分区/* | sort -rh | head -n 10找出该分区下占用空间最大的前10个目录。通常问题出在日志目录/var/log或临时文件目录/tmp。进入占用大的目录继续用du命令向下钻取。确认是日志文件后可以清理旧的日志如rm *.log.2023-*但务必先确认这些日志是否还有用或者联系开发/运维配置日志轮转logrotate。5.4 问题四进程卡死或无响应现象应用不工作tail -f日志不更新。排查步骤ps aux | grep 应用名找到进程PID并观察其CPU和内存占用是否异常。top -p PID动态监控该进程的资源使用。如果进程占用资源过高或已“僵尸化”尝试kill PID优雅终止。如果kill无效使用kill -9 PID强制终止。检查应用是否有启动脚本尝试重启服务。5.5 问题五网络连接失败现象测试脚本无法连接数据库或下游服务。排查步骤ping 目标IP检查基础网络连通性。如果ping通telnet 目标IP 端口检查具体端口是否开放。如果telnet不通可能的原因有目标服务未启动、防火墙拦截、网络策略限制。在服务器本地测试telnet localhost 端口如果通说明服务已启动问题在外部网络或防火墙。如果不通说明服务本身有问题。检查防火墙规则CentOS 7用firewall-cmd --list-allUbuntu用ufw status。修改防火墙规则需谨慎最好有运维支持。掌握这些排查技巧意味着你不再只是一个问题的报告者而是一个问题的初步诊断者。这能极大提升你在团队中的价值和协作效率。最后我想说的是这20个命令只是一个起点和核心。Linux的世界博大精深网络热词里提到的git命令、sqlmap命令、vim命令、shell命令cd、arpspoof命令等都各自属于版本控制、安全测试、文本编辑、网络诊断等更专业的领域。当你熟练运用上述命令后自然会根据工作需要拓展到这些相关领域。记住最好的学习方式就是在实际工作中遇到问题然后带着问题去寻找和练习命令。现在打开你的终端开始练习吧。从pwd和ls开始一步一步你会发现自己对测试环境的掌控力越来越强。