测试老鸟总结:这15个Linux命令,解决了我们90%的定位问题

在软件测试领域,问题定位能力是衡量一个测试工程师专业度的重要标尺。当我刚入行时,最头疼的就是面对一个复杂问题却不知从何下手。经过多年的摸爬滚打,我逐渐发现,掌握了下面这15个Linux命令,就能解决我们工作中90%的问题定位需求。

为什么Linux命令如此重要?

在分布式系统和云计算成为主流的今天,绝大多数服务器都运行在Linux环境下。测试人员需要通过命令行与远程服务器交互,查看日志、分析性能、诊断问题。图形界面虽然友好,但命令行才是最高效、最直接的问题定位工具。

让我们先从系统整体状态的命令开始,逐步深入到具体问题定位。

一、系统整体状态查看

1. top - 实时系统监控

top命令是Linux下最常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。

top - 14:30:25 up 45 days,  8:12,  3 users,  load average: 0.52, 0.58, 0.49Tasks: 231 total,   1 running, 230 sleeping,   0 stopped,   0 zombie%Cpu(s):  2.3 us,  1.2 sy,  0.0 ni, 96.4 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 stMiB Mem :  15985.4 total,   512.3 free,   8125.6 used,   7347.5 buff/cacheMiB Swap:   2048.0 total,   1024.3 free,   1023.7 used.   7458.9 avail Mem  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND 1125 mysql     20   0 12.145g 4.832g  23488 S  12.3  30.2 333:45.67 mysqld 2238 www-data  20   0  402948  78264  15232 S   2.3   0.5  12:34.89 nginx

使用技巧:

  • 按数字"1"可以显示每个CPU核心的详细使用情况

  • 按"P"按CPU使用率排序,"M"按内存使用率排序

  • 按"z"切换彩色/黑白显示

2. htop - 增强型系统监控

htop是top的增强版,提供了更直观的界面和更多的操作选项。

htop

优势:

  • 支持鼠标操作,可以直接点击选择进程

  • 垂直和水平滚动视图,查看完整的命令行

  • 支持进程树状展示,清晰显示父子进程关系

3. uptime - 系统运行时间与负载

uptime命令可以快速查看系统运行时间、用户数和平均负载。​​​​​​​

uptime14:32:45 up 45 days,  8:14,  3 users,  load average: 0.52, 0.58, 0.49

负载解读:

  • 三个数字分别代表1分钟、5分钟和15分钟的平均负载

  • 对于单核CPU,负载超过1.0表示系统过载

  • 对于多核CPU,负载应该除以核心数来评估是否过载

二、磁盘与内存分析

4. df - 磁盘空间检查

df命令用于显示磁盘分区上的可用和已用空间。​​​​​​​

df -hFilesystem      Size  Used Avail Use% Mounted on/dev/sda1        50G   35G   15G  70% //dev/sdb1       200G  150G   50G  75% /datatmpfs           7.8G     0  7.8G   0% /dev/shm

常用参数:

  • -h:以人类可读的格式显示(GB、MB)

  • -i:显示inode使用情况而非块使用情况

5. du - 文件目录大小分析

du命令用于查看文件或目录的磁盘使用情况。​​​​​​​

# 查看当前目录下各子目录大小du -h --max-depth=12.5G    ./logs15G     ./data500M    ./cache18G     .# 查找大文件find /data -type f -size +100M -exec du -h {} \; | sort -rh | head -10

实战场景: 当收到磁盘空间告警时,先用df确定哪个分区满了,然后用du深入分析具体是哪些目录或文件占用了大量空间。

6. free - 内存使用情况

free命令显示系统内存的使用情况,包括物理内存、交换分区等。​​​​​​​

free -h              total        used        free      shared  buff/cache   availableMem:           15Gi        12Gi       1.2Gi       0.0Ki       2.3Gi       2.8GiSwap:         2.0Gi       1.5Gi       512Mi

关键指标:

  • available:可用内存,这是评估内存是否充足的关键指标

  • buff/cache:缓存内存,在需要时可以被回收使用

三、网络连接分析

7. netstat/ss - 网络连接查看

netstat曾经是网络连接分析的主力,现在逐渐被更高效的ss命令替代。​​​​​​​

# 查看所有已建立的TCP连接ss -t -aState      Recv-Q Send-Q Local Address:Port               Peer Address:PortESTAB      0      0      192.168.1.100:ssh                192.168.1.50:52432ESTAB      0      0      192.168.1.100:http               192.168.1.60:42351# 查看监听端口ss -lntpState     Recv-Q Send-Q Local Address:Port               Peer Address:PortLISTEN    0      128          *:22                       *:*                   users:(("sshd",pid=1234,fd=3))LISTEN    0      128          *:80                       *:*                   users:(("nginx",pid=5678,fd=6))

常见用途:

  • 确认服务是否在指定端口监听

  • 查看异常连接或过多连接,排查DDoS攻击

  • 分析连接状态分布(ESTABLISHED、TIME_WAIT等)

8. ping - 网络连通性测试

ping是最基础但必不可少的网络诊断工具。​​​​​​​

# 基本用法ping example.com# 指定次数和间隔ping -c 5 -i 0.5 example.com# 带时间戳记录(适合长时间测试)ping example.com | while read pong; do echo "$(date): $pong"; done

9. traceroute/mtr - 网络路径追踪

当网络连通性出现问题时,这两个命令可以帮助定位问题发生的网络节点。​​​​​​​

# 传统traceroutetraceroute example.com# 更强大的mtr(实时刷新)mtr example.com

mtr优势: 结合了ping和traceroute的功能,提供实时刷新的统计数据,更容易发现网络抖动和丢包问题。

四、进程与性能分析

10. ps - 进程状态查看

ps命令用于显示当前进程的状态信息,是进程分析的基础工具。​​​​​​​

# 查看指定进程的详细信息ps -ef | grep nginx# 查看进程树ps -ejHps axjf# 查看指定用户进程ps -u www-data# 自定义输出格式ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10

实用技巧: 通过ps auxf可以以树形结构显示所有进程,清晰展示进程间的父子关系。

11. lsof - 列出打开文件

lsof命令用于列出当前系统打开的文件,在Linux中"一切皆文件",所以这实际上可以查看进程打开的各种资源。​​​​​​​

# 查看某个进程打开的文件lsof -p 1234# 查看某个端口被哪个进程占用lsof -i :8080# 查看某个用户打开的文件lsof -u username# 恢复被删除但仍被进程占用的文件lsof | grep deleted# 然后通过 /proc/pid/fd/fd_num 恢复文件

实战案例: 当无法卸载磁盘时,通常是因为有进程仍在访问磁盘上的文件。使用lsof /mount/point可以找出这些进程。

五、日志分析神器

12. tail/head - 日志首尾查看

最基本的日志查看命令,看似简单但使用频率极高。​​​​​​​

# 查看日志最后100行tail -100f application.log# 实时跟踪日志增长tail -f application.log# 查看日志开头100行head -100 application.log# 多文件同时跟踪tail -f log1.log log2.log

13. grep - 文本搜索

grep是文本搜索的瑞士军刀,在日志分析中不可或缺。​​​​​​​

# 基本搜索grep "ERROR" application.log# 显示前后上下文grep -A 5 -B 5 "ERROR" application.log# 递归搜索目录grep -r "login failed" /var/log/# 使用正则表达式grep -E "5[0-9]{2}" access.log  # 搜索5xx错误# 排除某些内容grep -v "DEBUG" application.log  # 不显示DEBUG日志

高级技巧: 使用grep -o只输出匹配的部分,结合sort | uniq -c | sort -nr可以统计错误出现的频率。

14. awk - 文本处理

awk不仅仅是一个命令,更是一门编程语言,在日志分析中极为强大。​​​​​​​

# 提取特定字段(例如nginx访问日志的第7字段:状态码)awk '{print $7}' access.log# 统计状态码出现次数awk '{print $9}' access.log | sort | uniq -c | sort -rn# 计算95百分位响应时间awk '{print $NF}' access.log | sort -n | awk '{all[NR] = $0} END{print all[int(NR*0.95)]}'# 过滤出响应时间大于1秒的请求awk '$(NF-1) > 1 {print}' access.log

15. sed - 流编辑器

sed适合对日志进行批量处理和转换。​​​​​​​

# 替换文本(将ERROR替换为CRITICAL)sed 's/ERROR/CRITICAL/g' application.log# 提取特定时间范围的日志sed -n '/2023-01-01 14:00:00/,/2023-01-01 15:00:00/p' application.log# 删除空行sed '/^$/d' application.log# 显示特定行范围(例如100-200行)sed -n '100,200p' application.log

六、组合使用:实战案例

单独掌握这些命令很重要,但真正发挥威力的是将它们组合使用。

案例1:诊断高CPU占用问题​​​​​​​

# 找到CPU占用最高的进程top -bn1 | head -10# 查看该进程的线程情况ps -Lp <pid> -o tid,pcpu,time | sort -k2 -rn | head -10# 查看该进程的堆栈信息,进一步定位问题代码jstack <pid>  # 如果是Java进程pstack <pid>  # 如果是C/C++进程

案例2:分析接口响应慢问题​​​​​​​

# 实时统计接口响应时间tail -f access.log | awk '{print $NF}' | \awk '{if(NR%100==0){printf "Avg: %.2f Max: %.2f\n", sum/100, max; sum=0; max=0}      sum+=$1; if($1>max)max=$1}'# 分析慢请求的分布grep "slow" application.log | awk '{print $4}' | cut -d: -f1 | \uniq -c | sort -k2 > request_distribution.txt

案例3:排查内存泄漏​​​​​​​

# 定时记录内存使用情况while true; do  date >> memory.log  ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10 >> memory.log  echo "======================================" >> memory.log  sleep 60done# 对比分析内存增长趋势awk '/^==/ {if (prev) print prev " -> " mem; prev=$0; mem=0}      /java/ {mem+=$4} END{print prev " -> " mem}' memory.log

七、进阶技巧与工具

掌握了基础命令后,可以进一步学习这些进阶技巧:

  1. 命令组合技巧:管道符|、重定向>>>、后台运行&

  2. 正则表达式:提升grep、sed、awk的使用效果

  3. 脚本化:将常用的排查流程编写成脚本,提高效率

  4. 性能监控:学习使用vmstat、iostat、sar等更专业的性能工具

总结

作为测试工程师,问题定位能力是我们的核心竞争力。掌握这15个Linux命令,并不意味着我们要成为系统管理员,而是为了在遇到问题时能够快速自主地获取信息、分析定位,而不是盲目求助于他人。

这些命令我已经使用了十年,至今仍然每天都在使用。它们看起来简单,但组合起来却能解决绝大多数问题定位需求。建议各位测试同仁不仅要了解这些命令的基本用法,更要理解其原理和适用场景,通过实际案例不断练习,最终形成自己的问题定位方法论。

记住,最好的工具不是最复杂的,而是你最熟悉、最能灵活运用的。希望这些经验分享能帮助你在测试道路上越走越远,越走越顺!

你在问题定位过程中有哪些心得或困惑?欢迎在评论区分享交流~

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员二黑.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值