ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

测试工程师必备的20个Linux命令:从日志分析到性能排查实战指南

2026/8/25 9:26:29 拓冰建站 浏览量
测试工程师必备的20个Linux命令:从日志分析到性能排查实战指南 1. 测试人员为什么需要掌握Linux命令如果你是一名测试工程师或者正在向这个方向发展你可能会发现身边的同事或者招聘要求里总会出现“熟悉Linux操作系统”、“掌握常用Linux命令”这样的字眼。这绝不是一句空话。在今天的软件开发和测试环境中无论是Web应用、移动App、还是后端服务它们的“家”绝大多数都安在Linux服务器上。这意味着当我们需要定位一个线上Bug、查看实时的日志、分析服务器的性能瓶颈或者仅仅是部署一个测试环境时我们都绕不开那个黑色的命令行窗口。很多刚入行的测试同学面对Linux终端Terminal可能会感到一丝畏惧觉得那是开发或者运维的专属领域。但我想告诉你测试人员掌握Linux命令不是为了成为系统管理员而是为了让自己变得更高效、更专业、更有话语权。想象一下这些场景开发说“我本地是好的你那边看看日志”如果你只会说“我看不懂”沟通就卡住了性能测试时服务器CPU飙高如果你能快速登录服务器用几个命令定位到是哪个进程、哪个线程的问题你提交的Bug报告将极具说服力自动化测试脚本需要在Linux环境下运行如果你连基本的文件操作和权限管理都不会脚本的调试将举步维艰。所以这20个命令不是让你去死记硬背的“考试题”而是你工具箱里趁手的“螺丝刀”和“万用表”。它们能帮你打开服务器的大门直接与系统对话获取第一手的信息。从查看文件、搜索日志到监控进程、分析网络这些命令将贯穿你测试工作的始终。掌握它们你将从“功能表面的点击者”转变为“能够深入系统内部探查的侦探”这对你职业能力的提升是实实在在的。2. 文件与目录操作测试数据的基石测试工作离不开大量的测试数据、日志文件和配置文件。高效地管理这些文件是开展测试的第一步。这部分命令是你与服务器文件系统交互的基础。2.1 导航与查看pwd,ls,cd当你通过SSH登录一台陌生的Linux服务器第一件事就是搞清楚“我在哪”以及“这里有什么”。pwd(Print Working Directory) 命令是最简单的定位工具。它直接告诉你当前所在的绝对路径。比如你登录后执行pwd可能会返回/home/tester。这让你心里有底知道后续操作的文件相对位置。ls(List) 命令则是你的“眼睛”。单纯输入ls会列出当前目录下的文件和目录名。但它的强大在于各种参数ls -l: 以长格式列出包含文件权限、所有者、大小、修改时间等详细信息。测试中经常需要确认文件的权限是否正确比如一个配置文件是否可读一个脚本是否可执行。ls -a: 显示所有文件包括以点.开头的隐藏文件。很多程序的配置文件如.bashrc,.env都是隐藏文件排查环境问题时必须看到它们。ls -lh:-h参数让文件大小以人类可读的形式K, M, G显示结合-l使用非常方便特别是在查看日志文件大小的时候。ls -t: 按修改时间排序最新的排在最前面。当你要找最新的日志文件时这个命令能帮你快速定位。cd(Change Directory) 用于切换目录。cd /var/log进入系统日志目录cd ..返回上一级目录cd ~或直接cd回到你的家目录。熟练地在目录树中穿梭是高效工作的前提。2.2 内容探查cat,less,head,tail测试中最常打交道的就是日志文件。如何查看它们的内容大有讲究。cat命令适合查看小文件它会一次性将整个文件内容输出到屏幕。例如cat config.ini查看配置文件。但对于动辄几百MB的日志用cat会刷屏到让你崩溃。less命令是查看大文件的利器。它允许你上下翻页、搜索。less app.log进入浏览模式按空格向下翻页按b向上翻页输入/error可以搜索“error”关键词按q退出。在追踪错误链时less的搜索功能无可替代。head和tail用于查看文件的开头或结尾部分这在测试中极其常用。head -n 20 app.log: 查看日志文件的前20行常用于确认日志格式或程序启动信息。tail -n 50 app.log: 查看日志文件的最后50行这是查看程序最新输出、尤其是错误信息的标准操作。tail -f app.log: 这是实时日志追踪的神器。-f(follow) 参数会让命令持续运行并实时显示文件新增的内容。当你进行一个测试操作并需要立刻在日志中看到对应输出时请在一个终端窗口执行此命令它就像给你的日志文件装了一个“直播摄像头”。2.3 文件操作cp,mv,rm,find测试过程中我们经常需要备份数据、移动文件或清理空间。cp(Copy) 用于复制文件或目录。cp source.log backup/将日志复制到backup目录。cp -r source_dir/ dest_dir/可以递归复制整个目录-r参数。mv(Move) 用于移动或重命名文件。mv old_name.log new_name.log是重命名。mv error.log /tmp/是将文件移动到/tmp目录。rm(Remove) 用于删除但请务必谨慎Linux下删除后一般难以恢复。rm file.txt删除文件。rm -r directory/删除目录及其内容。一个安全的小技巧是先使用ls确认要删除的内容然后再用rm。对于重要目录甚至可以先用mv移动到临时位置确认无误后再删除。find命令是文件搜索的瑞士军刀。测试环境文件众多用它来定位文件非常高效。find /home/project -name “*.log”: 在/home/project目录下查找所有以.log结尾的文件。find . -type f -mtime -1: 在当前目录.下查找所有普通文件-type f并且修改时间在1天以内-mtime -1的文件。这常用于查找今天刚生成的测试日志或报告。find /var/log -size 10M: 在/var/log下查找大小超过10MB的文件便于进行日志清理。3. 文本处理与搜索从海量日志中提炼信息查看文件只是第一步从成千上万行日志中快速找到关键错误信息、统计错误次数、或者提取特定格式的数据才是测试分析的核心能力。这组命令是你的“数据分析工具箱”。3.1 模式搜索grep家族grep是文本搜索的绝对核心其名字源于“全局正则表达式打印”。它的基本用法是在文件中搜索包含指定模式的行。grep “ERROR” app.log: 在app.log文件中搜索所有包含“ERROR”字符串的行并打印出来。这是定位错误最直接的方法。grep -n “Exception” app.log:-n参数会显示匹配行所在的行号方便你快速定位到日志文件的具体位置。grep -i “timeout” app.log:-i参数忽略大小写这样“Timeout”、“TIMEOUT”、“timeout”都能被搜到。grep -r “connection refused” /var/log/:-r参数递归搜索在/var/log/目录及其所有子目录的文件中搜索“connection refused”。当你不确定错误日志在哪个具体文件时这个命令能帮你大忙。grep -v “INFO” app.log:-v参数反向选择输出所有不包含“INFO”的行。这在你想过滤掉大量普通信息日志只看警告和错误时非常有用。grep -A 2 -B 2 “NullPointer” app.log:-A 2(After) 输出匹配行及其后2行-B 2(Before) 输出匹配行及其前2行。这能让你看到错误发生的上下文对于理解错误原因至关重要。一个更强大的组合是grep与管道符|一起使用。例如tail -f app.log | grep “ERROR”可以实现实时日志并只过滤显示错误信息这在监控测试执行时效率极高。3.2 流编辑器sed的基本运用sed(Stream Editor) 是一个流编辑器用于对文本进行过滤和转换。对于测试人员我们不需要掌握它复杂的脚本编写但有几个简单用法非常实用。sed ‘s/old/new/g’ file.txt: 这是最常用的替换操作。将file.txt中所有的“old”字符串替换为“new”。s表示替换g表示全局一行内所有匹配。例如你可以用它来批量修改配置文件中某个IP地址。sed -n ‘10,20p’ app.log: 打印app.log文件中第10行到第20行的内容。这比用head和tail组合更直接用于查看文件的特定片段。结合管道使用cat app.log | grep “ERROR” | sed ‘s/^/\[发现错误\] /’。这个命令链先找出所有错误行然后在每一行的开头加上“[发现错误]”标记使得输出更清晰。3.3 文本分析awk的简单统计awk是一个强大的文本分析工具它擅长处理按列字段组织的文本。日志文件通常有固定的格式比如“时间 级别 [类名] 信息”这就非常适合用awk来分析。awk ‘{print $1}’ access.log: 打印access.log文件的第一列默认以空格或制表符分隔。如果你的日志第一列是时间这就提取出了所有时间戳。awk -F‘,’ ‘{print $2}’ data.csv:-F‘,’指定使用逗号作为字段分隔符处理CSV文件然后打印第二列。awk ‘/ERROR/ {count} END {print count}’ app.log: 这是一个经典的统计用法。它遍历app.log的每一行如果包含“ERROR”计数器count就加1。处理完所有行后END打印出count的值。这个命令能直接告诉你日志里出现了多少次错误对于编写测试报告、评估系统稳定性非常有用。awk ‘$2 “WARN” {print $0}’ app.log: 假设你的日志第二列是日志级别这个命令会找出所有级别为“WARN”的行并打印整行$0代表整行。实操心得不要试图一次性记住grep、sed、awk的所有参数。我的建议是熟练掌握grep的基础和-r、-n、-A、-B这几个常用参数足以解决80%的搜索问题。对于sed和awk先学会上面提到的这几个“一招鲜”用法。在实际工作中当你遇到更复杂的需求时再去查阅资料或使用man命令如man grep查看手册边用边学记忆最深刻。4. 系统状态与进程管理定位性能问题的钥匙测试尤其是性能测试和稳定性测试经常需要关注服务器的健康状况。应用响应慢、测试用例失败很多时候根源不在应用本身而在服务器资源。这组命令帮你快速给系统做“体检”。4.1 系统监控三剑客top,htop,freetop命令是Linux下最经典的实时系统监控工具。运行top后你会看到一个动态刷新的界面包含大量信息第一行系统当前时间、运行时间、登录用户数、系统平均负载1分钟、5分钟、15分钟。平均负载是一个关键指标如果长期高于CPU核心数说明系统过载。第二行任务进程总数及各种状态运行、睡眠、停止等的数量。第三行CPU使用率百分比包括用户空间、系统空间、空闲等。如果%id(idle) 很低说明CPU繁忙。第四行物理内存使用情况总量、已用、空闲、缓存。第五行交换分区Swap使用情况。如果used持续很高说明物理内存不足系统开始使用硬盘做内存性能会急剧下降。下方列表每个进程的详细信息包括PID进程ID、用户、CPU占用、内存占用、命令等。默认按CPU使用率排序。在top界面中你可以按M让进程列表按内存使用排序按P切回按CPU排序按1可以展开显示每个CPU核心的详细使用情况。按q退出。htop是top的增强版界面更友好支持鼠标操作颜色区分查看进程树也更方便。如果系统没有预装通常可以用yum install htop或apt-get install htop安装。对于测试人员我强烈推荐使用htop信息呈现更直观。free命令用于快速查看内存使用情况。free -h是最常用的方式-h参数让结果以G、M为单位显示一目了然。重点关注available列它表示系统可用的内存量。如果available很少即使free也不多就可能需要关注内存泄漏问题。4.2 进程操控ps,kill,pkillps(Process Status) 用于查看当前进程的快照。最常用的组合是ps aux。ps aux | grep java: 这个组合拳极其常用。ps aux列出所有用户的所有进程详细信息然后通过管道|用grep过滤出包含“java”的行。这样你就能找到所有Java进程的PID、CPU/内存占用、启动命令等。在排查“哪个Java应用吃掉了资源”时这是第一步。kill命令用于向进程发送信号最常用的信号是SIGTERM(15) 和SIGKILL(9)。kill PID: 发送SIGTERM信号要求进程正常终止。进程可以捕获这个信号进行一些清理工作再退出。这是首选的结束进程方式。kill -9 PID: 发送SIGKILL信号强制立即终止进程。进程无法捕获或忽略此信号。这是一个强制手段只有在进程无响应“卡死”使用普通kill无效时才使用。因为强制终止可能导致数据丢失或状态不一致。操作顺序先ps aux | grep 进程名找到PID再kill PID。如果几分钟后进程还在再考虑kill -9 PID。pkill是kill的“智能版”它允许你通过进程名来结束进程而无需先查找PID。pkill -f “my_app.jar”:-f参数表示匹配完整的命令行。这条命令会结束所有命令行中包含“my_app.jar”的进程。在清理测试环境时非常方便。但使用时要格外小心确保不会误杀其他重要进程。4.3 网络状态探查netstat与ss测试网络应用、接口服务时经常需要确认服务是否在监听、端口是否被占用、有哪些连接。netstat(Network Statistics) 是一个传统的网络工具。netstat -tlnp: 这是一个黄金组合参数。-t: 显示TCP连接。-l: 仅显示监听Listening状态的套接字。-n: 以数字形式显示地址和端口号不进行域名解析速度更快。-p: 显示正在使用套接字的进程/程序名和PID。执行这个命令你可以清晰地看到服务器上所有正在监听的TCP端口以及是哪个进程在监听。例如你可以确认你的8080端口是否被Tomcat正确监听。ss(Socket Statistics) 是netstat的现代替代品速度更快信息更详细。语法与netstat类似。ss -tlnp: 功能与netstat -tlnp相同但输出更简洁高效。ss -s: 显示套接字统计摘要可以快速查看总的TCP、UDP连接数等。踩坑实录有一次做压力测试模拟用户登录的接口大量报错“连接被拒绝”。我首先用ps aux | grep app确认服务进程是活着的。然后用ss -tlnp | grep :8080发现8080端口确实在监听。接着用tail -f app.log看日志没有明显错误。最后我执行了ss -s发现“TCP orphaned”孤儿套接字数量极高接近上限。原因是压力测试脚本没有正确关闭连接导致服务器端积累了大量的半开连接耗尽了资源。通过调整系统的tcp_max_orphans参数解决了问题。这个案例说明ps,ss,tail这几个命令组合使用是定位复杂问题的标准流程。5. 权限、归档与帮助保障操作与提升效率最后这部分命令关乎操作的安全边界、数据的打包转移以及最重要的——当你忘记命令用法时如何自救。5.1 权限管理chmod与chownLinux的权限系统是安全基石。测试中你可能需要执行一个脚本或者修改一个配置文件经常会遇到“Permission denied”的错误。chmod(Change Mode) 用于修改文件或目录的权限。权限分为读(r4)、写(w2)、执行(x1)对应所有者(u)、所属组(g)、其他人(o)。chmod x script.sh: 给script.sh文件添加可执行权限这是运行Shell脚本的前提。chmod 755 dir_name/: 将目录权限设置为755即所有者可读可写可执行(rwx)组和其他人可读可执行(r-x)。这是一个常见的目录权限。chmod 644 config.file: 将文件权限设置为644即所有者可读可写组和其他人只读。适用于配置文件。chown(Change Owner) 用于修改文件的所有者和所属组。chown tester:testgroup file.log: 将file.log的所有者改为tester所属组改为testgroup。当你用特定用户如tomcat启动服务而日志文件被其他用户创建时可能需要这个命令来修改归属以便服务有权限写入。5.2 压缩与解压tar在传输测试报告、备份日志、分发测试包时压缩是必不可少的。tar命令原本用于归档打包常与压缩工具结合使用。打包并压缩tar -czvf backup.tar.gz /path/to/folder/: 创建一个gzip压缩的tar包。-c创建-z通过gzip压缩-v显示过程-f指定文件名。tar -cjvf backup.tar.bz2 /path/to/folder/: 使用bzip2压缩压缩率更高。解压tar -xzvf backup.tar.gz: 解压.tar.gz文件。-x解压。tar -xjvf backup.tar.bz2: 解压.tar.bz2文件。tar -xvf backup.tar: 解压未压缩的.tar包。仅查看内容tar -tzvf backup.tar.gz不解压直接列出压缩包内文件列表。5.3 寻求帮助man与--help命令太多参数记不住怎么办Linux系统自带最权威的说明书。man command: 查看命令的完整手册页manual。例如man grep会显示grep命令的详细说明、所有参数及示例。虽然内容可能比较技术化但它是终极参考。按空格翻页按q退出。command --help: 大多数命令都支持这个参数它会输出一个简洁的使用帮助列出常用参数和简要说明。比如grep --help。这通常是快速查阅的首选。掌握如何寻求帮助比死记硬背所有命令更重要。它意味着你拥有了自主学习任何新命令的能力。6. 实战场景串讲一条命令链定位典型问题纸上得来终觉浅让我们把这些命令组合起来模拟几个测试工作中真实的排查场景看看它们是如何协同工作的。场景一服务启动失败端口被占用你尝试启动一个Spring Boot应用在8080端口但日志显示“Address already in use”。第一步确认谁在占用ss -tlnp | grep :8080或netstat -tlnp | grep :8080。输出会显示监听8080端口的进程PID和名字。第二步确认进程详情假设PID是12345执行ps aux | grep 12345查看这个进程的详细启动命令确认它是不是上一个未退出的测试实例。第三步终止进程如果是无用进程kill 12345。如果普通kill无效再kill -9 12345。第四步重新启动你的应用。场景二性能测试中服务器响应变慢执行压测脚本后响应时间越来越长。第一步快速系统体检打开一个终端运行htop或top观察CPU和内存使用情况。如果某个进程的CPU或内存占用异常高记下它的PID。第二步定位该进程如果htop里看到Java进程占用高可以用ps aux | grep PID再次确认其启动命令判断是哪个应用。第三步分析该应用日志根据进程信息找到其日志文件路径。用tail -f app.log | grep -A 5 -B 5 “ERROR”实时追踪并过滤错误看是否有异常堆栈。第四步检查磁盘I/O可选如果CPU和内存不高但系统负载Load Average很高可能是磁盘I/O瓶颈。可以安装并使用iostat命令查看磁盘读写状况。场景三清理过期测试日志测试环境磁盘空间告警需要清理7天前的日志文件。第一步查找目标文件find /var/log/myapp -name “*.log” -mtime 7。这个命令在/var/log/myapp目录下查找所有.log文件且修改时间在7天以前-mtime 7。第二步安全确认非常重要先执行find /var/log/myapp -name “*.log” -mtime 7 | head -20列出前20个找到的文件人工确认这些日志是否可以删除。第三步执行删除确认无误后执行find /var/log/myapp -name “*.log” -mtime 7 -delete。-delete参数会直接删除找到的文件。更谨慎的做法是先使用-exec rm {} \;或将其移动到临时目录。第四步确认空间释放执行df -h查看磁盘空间使用情况确认空间已释放。这些场景串联了文件查找、进程管理、日志查看、文本搜索等多个命令。实际操作中你很少会只用一个命令解决问题而是像搭积木一样把合适的命令用管道|连接起来形成一条高效的“侦查流水线”。刚开始可能需要对照着笔记操作但经过几次实战你就会形成肌肉记忆排查问题的速度和精准度会远超那些只会点点点的测试人员。记住命令是工具解决问题的思路才是核心。