ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

测试工程师必备的20个Linux核心命令:从日志排查到性能监控

测试工程师必备的20个Linux核心命令:从日志排查到性能监控 1. 为什么测试工程师必须懂点Linux干了这么多年测试从功能点点点到性能压测再到现在的自动化、持续集成我越来越觉得一个测试工程师如果完全不懂Linux就像战士上战场不带枪。你可能觉得测试不就是点点按钮、看看界面、写写用例吗这话放在十年前也许成立但现在测试的战场早就从“前端”延伸到了“后端”从“界面”深入到了“服务器”。想想这些场景你负责的Web应用突然在测试环境报500错误开发让你帮忙看看服务器日志你写的自动化脚本需要在Linux服务器上定时执行你要搭建一个临时的测试环境比如MySQL、Redis或者Docker容器性能测试时你需要监控服务器的CPU、内存、网络IO看看瓶颈到底在哪里。这些时候如果你只会对着Windows的图形界面发呆或者只会说“我连不上服务器了”那沟通成本会非常高解决问题的效率也会大打折扣。Linux命令就是你和服务器“对话”的语言。它不像图形界面那么直观但一旦掌握效率是指数级提升的。你不用再等开发帮你查日志自己tail -f一下就能实时看到错误信息你不用再手动打包上传文件一个scp命令就搞定你甚至可以通过grep、awk、sed这些文本处理“三剑客”从海量日志中快速定位到关键线索。今天我就结合自己这些年在测试工作中高频使用的场景给你梳理20个最实用、最核心的Linux命令。这不是一个面面俱到的“大全”而是一份“生存指南”。目标是让你哪怕是个Linux“小白”也能在遇到问题时知道该敲哪几个命令看懂返回结果的大概意思从而快速推进工作。我们不求成为运维专家但求成为一个“能自理”的、高效的测试工程师。2. 环境探查与基础信息获取当你第一次登录一台陌生的测试服务器或者需要了解当前环境的基本状况时下面这几个命令是你的“望远镜”和“地图”。2.1 看清“我是谁我在哪”pwd,whoami,hostname这三个命令简单到几乎不用学但却是所有操作的起点。pwd(Print Working Directory)打印当前工作目录。你打开终端第一件事就应该知道自己在哪个文件夹里。比如输出/home/tester/project这意味着你后续的所有相对路径操作如cat log.txt都是基于这个目录进行的。whoami显示当前登录的用户名。在权限管理严格的服务器上知道自己是谁至关重要。很多操作如安装软件、修改系统文件需要特定权限如果你不是root用户可能就需要在命令前加sudo。hostname显示主机名。它能帮你确认你连接的是不是目标服务器尤其是在同时操作多台测试机时避免“张冠李戴”。有些公司的服务器命名有规则比如perf-test-01,staging-db-02看一眼主机名就能知道它的角色。2.2 洞察系统状态uptime,free,df测试时服务器卡顿先看看整体负载和资源情况。uptime这个命令的输出信息量很大。例如10:30:15 up 45 days, 2:15, 2 users, load average: 0.08, 0.03, 0.01它告诉我们系统当前时间、运行了多久45天说明很稳定、当前登录用户数以及最重要的——系统平均负载。后面三个数字分别代表过去1分钟、5分钟、15分钟的平均负载。对于单核CPU负载1.0意味着完全利用对于4核CPU负载4.0才是满负荷。如果1分钟负载远高于15分钟负载说明系统刚刚经历了一个压力高峰可能是你刚跑完一波测试。持续高负载比如长期CPU核数是性能瓶颈的明显信号。free -h查看内存使用情况。-h参数表示以人类可读的格式G, M显示。重点关注available列它表示系统可用内存。如果available非常小而buff/cache很大不一定代表内存不足因为Linux会利用空闲内存做缓存以提高性能。但假如available和free都几乎为0同时swap交换分区使用量在持续增长那就要警惕了说明物理内存已耗尽开始使用硬盘做虚拟内存性能会急剧下降。df -h查看磁盘空间使用情况。测试中经常需要下载安装包、生成日志文件、拉取Docker镜像磁盘很容易被撑满。-h同样是人性化显示。重点关注Use%列如果某个分区尤其是/根分区或/home使用率超过90%就需要清理了。日志文件/var/log和临时文件/tmp是常见的“磁盘杀手”。3. 文件与目录操作核心命令测试工作离不开和各种文件打交道查看日志、配置环境、部署脚本。这部分命令是你的“文件管理器”。3.1 浏览与查找ls,findls列出目录内容。光用ls只能看到文件名我强烈推荐几个组合ls -l以长格式显示包含权限、所有者、大小、修改时间。权限信息是重点比如-rw-r--r--第一个字符-代表普通文件d代表目录。后面9个字符每3个一组分别代表文件所有者(u)、所属组(g)、其他人(o)的读(r)、写(w)、执行(x)权限。测试中遇到的“Permission denied”错误多半是权限问题。ls -lh-h与-l结合文件大小以K、M、G显示更直观。ls -la显示所有文件包括以.开头的隐藏文件如.bashrc配置文件。ls -ltr按时间倒序排列最新修改的文件在最后。查日志时找最新文件非常方便。find强大的文件查找工具。语法是find 路径 条件 动作。基本查找find /home/tester -name *.log在指定目录下按文件名查找。按类型查找find . -type f -name test_*.py在当前目录查找普通文件。按时间查找测试常用find /var/log -mtime -1查找过去24小时内修改过的文件。-mtime 7查找7天前修改的文件可用于清理旧日志。结合执行动作find . -name core.* -exec rm {} \;找到所有core dump文件并删除。{}代表找到的文件名\;是命令结束符。3.2 查看与编辑文件内容cat,less,tail,vimcat连接文件并打印到标准输出。适合查看小文件内容如配置文件。cat config.yaml。但千万别用它看大日志文件会刷屏到让你崩溃。less分页查看文件内容。这是查看大文件的正确姿势。less huge_log.log进入浏览模式可以用方向键、PageUp/PageDown翻页按/键后输入关键词搜索n向下找N向上找按q退出。比more命令功能更强。tail查看文件尾部内容测试查日志的绝对主力。tail -f app.log实时追踪日志输出。当你重现一个bug或者启动一个服务时打开另一个终端执行此命令就能像看直播一样看到日志滚动第一时间发现错误信息。这是动态测试和问题排查的利器。tail -n 100 app.log查看文件最后100行。通常最新的错误就在最后面。tail -n 500 app.log从第500行开始显示到文件末尾。vim/vi文本编辑器。虽然学习曲线陡峭但在只有命令行界面的服务器上它是编辑配置、脚本的唯一选择。对于测试人员掌握最基础的几个操作就够用了vim file.txt打开文件按i进入插入模式开始编辑按Esc退出插入模式输入:wq保存并退出输入:q!不保存强制退出。在编辑自动化脚本或CI/CD的配置文件时你会用到它。3.3 文件操作cp,mv,rm,chmodcp复制。cp source.log backup/将文件复制到目录。cp -r source_dir/ dest_dir/递归复制整个目录。mv移动或重命名。mv old_name.txt new_name.txt重命名。mv file.txt /tmp/移动文件。rm删除。危险命令请谨慎使用rm file.txt删除文件。rm -r directory/递归删除目录及其内容。永远不要尝试rm -rf /或rm -rf /*这会删除根目录下的所有文件导致系统瘫痪。一个血的教训在删除前先用ls命令确认路径是否正确或者先rm -r不加f强制试试系统会提示确认。chmod修改文件权限。这是解决“Permission denied”的关键。数字模式chmod 755 script.sh。755是常用权限代表所有者可读可写可执行(7)所属组和其他人可读可执行(5)。74(r)2(w)1(x)54(r)1(x)。符号模式chmod ux script.sh给所有者增加执行权限。更直观。 测试中如果你自己写了一个Shell脚本下载后可能需要chmod x test.sh给它执行权限才能运行。4. 网络诊断与连通性测试测试应用本质上是测试网络服务。接口是否通端口是否开服务是否响应这些命令是你的“网络听诊器”。4.1 连通性检查ping,telnet,ncping检查网络层连通性。ping 192.168.1.1或ping www.baidu.com。它发送ICMP包看目标主机是否可达。如果测试环境部署在内网ping是第一步。如果ping不通可能是网络配置、防火墙或主机问题。注意有些云服务器或容器默认禁ping所以ping不通不代表服务一定挂了。telnet检查TCP端口连通性和应用层握手。这是测试人员必须掌握的命令虽然telnet本身是一个古老的远程登录协议但我们常用它来快速测试某个服务器的特定端口是否开放甚至模拟简单的客户端发送数据。用法telnet host port示例telnet 127.0.0.1 8080。如果连接成功会显示类似Connected to 127.0.0.1.并进入一个空白界面说明该端口是开放的TCP连接建立成功。此时你可以输入一些HTTP请求比如GET / HTTP/1.1然后按两下回车看服务端是否有响应从而判断HTTP服务是否正常。按Ctrl]然后输入quit退出。如果连接失败会显示Connection refused服务未监听该端口或Connection timed out网络不通或防火墙拦截。nc(netcat)被称为“网络瑞士军刀”功能比telnet更强大。它可以创建任意TCP/UDP连接监听端口传输文件等。端口扫描nc -zv 192.168.1.100 80 443 8080快速扫描目标主机多个端口是否开放。简易HTTP测试echo -e GET / HTTP/1.1\nHost: localhost\n\n | nc localhost 80发送一个HTTP GET请求并打印响应。监听端口模拟服务端nc -l 9999在本地9999端口监听可用于测试客户端连接。4.2 网络状态与路由追踪netstat/ss,traceroutenetstat或ss查看网络连接、路由表、接口统计等信息。ss是netstat的现代替代品速度更快。查看端口占用netstat -tlnp或ss -tlnp。这是排查“端口冲突”问题的神器。-t显示TCP-l显示监听端口-n以数字形式显示端口不解析服务名-p显示进程名/ID。当你启动一个服务报错“Address already in use”时用这个命令找出是哪个进程占用了端口比如8080然后决定是杀掉进程还是换端口。查看所有连接ss -tan显示所有TCP连接ESTABLISHED, TIME-WAIT等在性能测试时观察连接数很有用。traceroute(Linux) /tracert(Windows)追踪数据包从源到目的经过的路由路径。当测试跨地域、跨网络的服务出现延迟或不通时可以用它来定位问题出在哪一跳网络节点。traceroute www.google.com。输出会显示每一跳的IP和延迟。如果某一行之后全是*说明网络在该节点出现了问题。5. 进程管理与系统监控测试时你需要启动服务、监控资源、在出问题时“杀”掉进程。这部分命令让你成为系统的“管理员”。5.1 进程查看与控制ps,top,killps查看当前进程快照。最常用的组合是ps aux或ps -ef。ps aux显示所有用户的进程信息更全包括CPU、内存占用率。输出列中%CPU和%MEM直观反映了进程资源消耗。COMMAND列显示了启动命令方便你找到自己的测试程序或服务。ps -ef | grep java管道符|将ps的输出传给grep命令进行过滤这是最常用的组合之一用于查找包含“java”关键词的进程比如你的Java应用服务。top动态、交互式地查看进程和系统资源占用情况。相当于一个实时更新的任务管理器。运行top后你会看到一个不断刷新的界面。关键信息区第一行同uptime显示负载。第二、三行显示CPU使用情况。%us用户空间%sy内核空间%id空闲。如果%id持续很低说明CPU是瓶颈。第四、五行物理内存和交换分区使用情况。下方列表实时进程列表。默认按CPU使用率排序按P键也可以按内存排序按M键。在这里你可以看到哪个进程最“吃”资源。按q退出。kill向进程发送信号用于终止进程。kill PID发送默认的TERM信号15请求进程正常终止。进程可以捕获这个信号进行清理工作后退出。kill -9 PID发送KILL信号9强制立即终止进程。进程无法捕获或忽略此信号。这是最后的手段因为强制终止可能导致数据丢失或状态不一致。正确的做法是先尝试kill如果进程不响应变成“僵尸进程”或“defunct”再使用kill -9。如何获取PID用ps或top命令查看。5.2 后台运行与任务管理,nohup,jobs,fg,bg在测试中我们经常需要让一个脚本或服务在后台长期运行。在命令末尾加上可以让命令在后台运行。例如python3 long_running_test.py 。这样终端不会被阻塞你可以继续输入其他命令。但如果你关闭了终端这个后台进程通常也会被终止。nohup让进程忽略挂断信号SIGHUP这样即使你退出终端进程也不会被终止。通常与结合使用nohup python3 server.py server.log 21 。这个命令需要解释一下nohup保证进程不随终端关闭而退出。 server.log将标准输出重定向到server.log文件。21将标准错误也重定向到标准输出即错误日志也写入同一个文件。放入后台运行。 执行后会返回一个进程号。服务日志会实时写入server.log你可以用tail -f server.log查看。jobs,fg,bg管理后台任务。jobs列出当前终端会话中的所有后台任务并显示其编号如[1], [2]。fg %1将编号为1的后台任务调到前台运行。bg %1将暂停的任务比如用CtrlZ暂停的放到后台继续运行。6. 文本处理与数据提取“三剑客”这是Linux命令中最强大、也最能体现效率的部分。测试中会产生大量日志、报告手动查看是不可能的。grep,awk,sed这三个工具能帮你从文本海洋中精准捕捞你需要的信息。6.1 模式搜索grepgrep在文件中搜索匹配指定模式的行。使用频率可能排第一。基本搜索grep ERROR app.log在文件中查找包含“ERROR”的行。显示行号grep -n NullPointerException error.log显示匹配行及其行号方便定位。递归搜索grep -r login failed /var/log/在目录及其子目录下所有文件中搜索。反向搜索grep -v DEBUG app.log显示不包含“DEBUG”的行用于过滤掉调试信息。正则表达式grep -E 5[0-9]{2} access.log使用扩展正则表达式查找状态码为5xx服务器错误的请求。-E启用扩展正则。高阶技巧组合使用。tail -f app.log | grep -E (ERROR|WARN)实时追踪日志但只显示错误和警告行信息更聚焦。6.2 文本分析awkawk不仅仅是一个命令更是一门编程语言擅长对结构化文本如CSV、空格/制表符分隔的日志进行逐行处理和分析。对于测试人员掌握其基本字段切割和计算功能就非常有用。awk的基本工作模式是awk pattern {action} file。对于每一行如果匹配pattern就执行action。默认pattern为空即对所有行执行action默认action是{print $0}即打印整行。最常用的功能是基于分隔符切割字段默认以空格或制表符分割。$1,$2, ...$NF分别代表第1、2、最后一个字段。$0代表整行。示例假设access.log格式为IP - - [时间] 请求 状态码 响应大小awk {print $1} access.log打印所有IP地址。awk $9500 {print $0} access.log打印所有状态码为500的请求行。awk {sum$10} END {print 总流量:, sum/1024/1024, MB} access.log计算第10个字段假设是响应大小的总和并在处理完所有行后打印出总流量转换为MB。这在分析性能测试产生的访问日志时非常实用。6.3 流编辑器sedsed流编辑器用于对文本进行过滤和转换。它按行处理可以将匹配的行输出、删除、替换等。最常用的功能是替换sed s/old/new/g file.txt将文件中所有的old替换为new。s表示替换g表示全局一行中所有匹配项。不加g则只替换每行的第一个匹配项。示例sed s/127.0.0.1/localhost/g config.yaml new_config.yaml将配置文件中的IP替换为localhost并保存到新文件。就地编辑危险但有用sed -i.bak s/foo/bar/g file.txt。-i表示直接修改原文件.bak表示在修改前先创建一个备份文件file.txt.bak。务必先备份否则替换错了无法恢复。另一个常用功能是删除行sed /^#/d config.txt删除所有以#开头的注释行。sed 10,20d file.txt删除第10到20行。这三个命令可以组合成强大的管道pipe操作。例如从一个复杂的日志文件中提取某个时间点后的错误信息并统计数量grep ERROR app.log | awk -F[ $2 01/Dec/2023:12:00:00 | wc -l假设时间在第二个字段且用[分隔这个命令先过滤出错误行再用awk按时间过滤最后用wc -l统计行数。7. 压缩归档与文件传输测试中经常需要打包日志、传输测试报告或部署包。7.1 压缩与解压tar,gzip/gunziptar打包命令将多个文件或目录合并成一个文件归档本身不压缩。创建归档tar -cvf archive.tar /path/to/folder。-c创建-v显示过程-f指定文件名。查看归档内容tar -tvf archive.tar。解压归档tar -xvf archive.tar。-x解压。通常tar会与压缩工具结合使用打包并压缩gziptar -czvf archive.tar.gz /path/to/folder。-z表示用gzip压缩。解压.tar.gztar -xzvf archive.tar.gz。打包并压缩bzip2压缩率更高tar -cjvf archive.tar.bz2 /path/to/folder。-j表示用bzip2。解压.tar.bz2tar -xjvf archive.tar.bz2。7.2 安全文件传输scpscp基于SSH的安全拷贝用于在本地和远程服务器之间或两台远程服务器之间传输文件。这是测试人员在不同环境间同步脚本、配置、日志的必备工具。基本语法scp [选项] 源文件 目标路径从本地复制到远程scp ./test_report.pdf userremote-server:/home/user/reports/。需要输入远程用户的密码或配置了密钥免密。从远程复制到本地scp userremote-server:/var/log/app.log ./。复制整个目录scp -r ./test_results/ userremote-server:/tmp/。-r表示递归复制目录。指定端口如果远程SSH服务不是默认的22端口用-P指定scp -P 2222 local_file userhost:/path。注意scp在传输大量小文件时效率较低因为每次传输都要建立连接。对于这种情况可以先在本地用tar打包压缩成一个文件再传输会快很多。8. 权限提升与软件管理8.1 超级用户权限sudosudo以超级用户root或其他用户的权限执行命令。测试中安装软件、修改系统配置、查看某些受保护的文件如/var/log下的系统日志时经常需要。sudo apt-get update更新软件包列表Ubuntu/Debian。sudo systemctl restart nginx重启Nginx服务。sudo cat /etc/shadow查看系统密码文件需要root权限。使用sudo时系统会要求输入当前用户自己的密码而不是root密码。这比直接切换到root用户su更安全因为所有操作都会被记录在案。8.2 软件包管理apt-get/yum不同的Linux发行版使用不同的包管理工具。测试环境搭建时安装依赖软件是常事。Debian/Ubuntu系列使用apt-getsudo apt-get update更新本地软件包索引必须首先执行。sudo apt-get install package_name安装软件包如sudo apt-get install net-tools安装netstat等网络工具。sudo apt-get remove package_name卸载软件包保留配置文件。sudo apt-get purge package_name卸载软件包并删除配置文件。CentOS/RHEL/Fedora系列使用yum(CentOS 7及以前) 或dnf(CentOS 8/Fedora)sudo yum update更新所有软件包。sudo yum install package_name安装软件包。sudo yum remove package_name卸载软件包。知道你的测试服务器是什么系统cat /etc/os-release然后用对应的命令安装你需要的工具比如curl,wget,vim,telnet,lsof等。9. 实战场景串讲一次完整的接口测试问题排查让我们把这些命令串起来模拟一个真实的测试场景你负责的订单服务接口在测试环境突然响应超时。初步感知与连通性检查你首先用curl或Postman调用接口发现超时。第一步确认网络和基础服务是否正常。ping order-service-host检查服务器是否可达。telnet order-service-host 8080检查服务的8080端口是否开放。如果Connection refused说明服务进程可能挂了。登录服务器查看服务状态用SSH登录到订单服务所在的测试服务器。ps aux | grep order-service查找订单服务的进程。如果没找到说明服务已停止需要启动。如果进程在用top或htop查看该进程的CPU和内存占用。如果CPU占用100%或内存异常高可能是代码死循环或内存泄漏。查看应用日志定位错误服务日志是排查问题的核心。cd /path/to/service/logs进入日志目录。ls -ltr按时间倒序列出日志文件找到最新的日志文件。tail -f application.log实时追踪最新日志。同时你尝试复现问题发送请求。观察日志中是否有异常堆栈信息如OutOfMemoryError,TimeoutException, 数据库连接错误等。如果日志刷屏太快用grep过滤tail -f application.log | grep -E (ERROR|Exception|Timeout)。检查系统资源与依赖如果应用日志没有明显错误可能是系统资源或下游依赖问题。free -h查看内存是否耗尽Swap是否被大量使用。df -h查看磁盘空间特别是日志所在分区是否已满磁盘满会导致写日志失败进而引发其他问题。netstat -tlnp | grep 3306检查MySQL数据库的3306端口是否可访问。或者用telnet db-host 3306测试。如果依赖Redis同样检查Redis端口。分析历史日志寻找模式如果问题是间歇性的需要分析更早的日志。grep Timeout application.log.1 application.log.2在历史日志中搜索超时关键词。使用awk进行统计awk $9504 {print $4} access.log | cut -d: -f2 | sort | uniq -c假设是Nginx访问日志第9字段是状态码第4字段是时间。这个命令可以统计504网关超时错误在哪个小时发生得最多寻找规律。收集信息提交缺陷根据以上排查你可能会发现数据库连接池耗尽、某个下游API响应慢、服务器内存不足等原因。将关键的日志片段用sed或vim抹去敏感信息、top和free的输出截图、以及你的分析一并提交给开发人员一个清晰的问题描述能极大提升修复效率。这个过程几乎涵盖了上面提到的大部分命令。你看Linux命令行不是一个个孤立的单词而是一套完整的“侦查-分析-定位”工具箱。掌握它们你就不再是那个只会说“接口报错了”的测试而是能提供“接口超时疑似因为下午3点数据库连接数达到峰值同时服务器内存可用率低于10%”这样有价值信息的合作伙伴。这种能力的提升对于你的测试职业生涯绝对是质的飞跃。
返回列表