在现代服务器管理和网络运维中,对网络连接质量的实时监控与精确测量至关重要,对于广泛使用的 CentOS 系统而言,拥有一款轻量、高效且功能强大的命令行测速工具,是系统管理员和开发者的必备技能。speedtest-cli 正是这样一款工具,它将广受欢迎的 Ookla Speedtest.net 服务带到了终端界面,让用户无需图形浏览器即可进行精准的带宽测试,本文将全面介绍如何在 CentOS 系统上安装、配置及使用 speedtest-cli,并探讨其在实际工作场景中的高级应用。

speedtest-cli 的核心价值
speedtest-cli 是一个用 Python 编写的命令行界面工具,它利用 Speedtest.net 的全球服务器网络来测试互联网连接的性能,其主要价值体现在以下几个方面:
- 无图形界面依赖:对于服务器环境,尤其是没有安装桌面环境的 CentOS 系统,
speedtest-cli提供了唯一的原生测速方案。 - 自动化与脚本化:作为命令行工具,它可以轻松地集成到 Shell 脚本、定时任务(如 Cron)或监控系统中,实现网络性能的自动化、周期性监控与数据记录。
- 资源占用低:相较于复杂的图形化应用,它运行时消耗的系统资源极少,几乎不会对服务器上运行的其他服务产生影响。
- 数据输出灵活:支持多种输出格式,包括人类可读的文本、CSV(便于数据分析)以及生成可分享的在线结果图片链接,满足不同场景的需求。
在 CentOS 上安装 speedtest-cli
在 CentOS 上安装 speedtest-cli 主要有两种主流方法:通过 Python 包管理器 pip 安装,或直接下载 Python 脚本,两种方法各有优势,用户可根据自身环境选择。
使用 pip 安装(推荐)
这是最标准、最便捷的安装方式,能够方便地进行版本管理和更新,确保系统已安装 pip。
对于 CentOS 7/8/9:
CentOS 7 默认使用 Python 2,而 CentOS 8/9 则推荐使用 Python 3,我们强烈建议使用 Python 3 的 pip3。
-
安装 EPEL 仓库及 pip3:
sudo yum install -y epel-release sudo yum install -y python3-pip
-
使用 pip3 安装 speedtest-cli:
pip3 install speedtest-cli
安装完成后,
speedtest命令通常会被添加到系统的 PATH 中,可以直接在终端调用。
直接下载 Python 脚本
这种方法无需 pip,适合于环境受限或希望快速使用单个文件的场景。
-
下载脚本: 使用
wget或curl命令从 GitHub 仓库下载最新的脚本文件。wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
-
赋予执行权限:

chmod +x speedtest-cli
-
运行脚本: 由于脚本不在系统 PATH 中,你需要通过指定路径来运行它。
./speedtest-cli
或者,你可以将其移动到
/usr/local/bin目录下,以便像系统命令一样全局调用。sudo mv speedtest-cli /usr/local/bin/speedtest speedtest
speedtest-cli 基本用法详解
安装完成后,即可开始使用,以下是一些最常用的命令和参数。
执行基本测速
直接运行命令,speedtest-cli 会自动选择距离最近且延迟最低的服务器进行测试。
speedtest-cli
输出结果通常包含三部分:
- Ping:客户端与测试服务器之间的往返延迟时间(毫秒)。
- Download:下载速度(通常以 Mbit/s 为单位)。
- Upload:上传速度(通常以 Mbit/s 为单位)。
指定测试服务器
有时,你可能需要测试到特定地区或特定 ISP 的连接质量,这时,可以先列出所有可用服务器,然后指定其 ID 进行测试。
-
列出所有服务器:
speedtest-cli --list
这会生成一个很长的列表,按地理位置排序,每个服务器前面都有一个唯一的 ID。
-
根据 ID 测试: 假设你想测试 ID 为
12345的服务器,可以执行:speedtest-cli --server 12345
生成分享链接
如果你想将测试结果分享给他人,可以使用 --share 参数,测试完成后,它会生成一个 URL,打开后是一个包含测试结果的图片。
speedtest-cli --share
以 CSV 格式输出
为了便于数据分析和日志记录,可以使用 --csv 参数输出结果,这对于自动化监控脚本来说是非常有用的。

speedtest-cli --csv
配合 --csv-header 可以在第一行输出表头。
高级应用与脚本化
speedtest-cli 的真正威力在于其可脚本化能力,以下是一个简单的表格,汇总了常用的高级参数,并附上一个脚本示例。
| 参数 | 描述 | 示例 |
|---|---|---|
--simple |
简化输出,只显示核心数值 | speedtest-cli --simple |
--bytes |
以字节/秒(B/s)为单位显示速度,而非比特/秒 | speedtest-cli --bytes |
--server SERVER_ID |
指定测试服务器 ID | speedtest-cli --server 5402 |
--share |
生成一个可分享的结果图片链接 | speedtest-cli --share |
--csv |
以 CSV 格式输出结果 | speedtest-cli --csv >> speed_log.csv |
--source IP |
绑定服务器的特定 IP 地址(适用于多网卡服务器) | speedtest-cli --source 192.168.1.100 |
脚本示例:定时记录网络速度
下面的 Bash 脚本可以每小时执行一次网络速度测试,并将结果以 CSV 格式追加到日志文件中,同时记录时间戳。
#!/bin/bash # 定义日志文件路径 LOG_FILE="/var/log/network_speed.log" # 检查日志文件是否存在,如果不存在则创建并写入 CSV 表头 if [ ! -f "$LOG_FILE" ]; then echo "Timestamp,Ping,Download,Upload" > "$LOG_FILE" fi # 获取当前时间戳 TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") # 运行 speedtest-cli 并获取 CSV 输出(跳过表头) RESULT_CSV=$(speedtest-cli --csv --simple) # 将时间戳和结果追加到日志文件 echo "$TIMESTAMP,$RESULT_CSV" >> "$LOG_FILE" echo "[$TIMESTAMP] Speed test completed and logged to $LOG_FILE"
你可以将此脚本保存为 /usr/local/bin/log_speed.sh,赋予其执行权限,然后通过 Cron 定时任务来运行它:
# 编辑 crontab crontab -e # 添加一行,表示每小时执行一次 0 * * * * /usr/local/bin/log_speed.sh
相关问答 FAQs
Q1: 为什么 speedtest-cli 的测试结果与我用浏览器访问 Speedtest.net 的结果不一致?
A1: 这种差异是正常的,可能由以下几个因素导致:
- 服务器选择不同:
speedtest-cli默认选择“的服务器(基于延迟),而网页版可能默认选择你的 ISP 提供的服务器或你上次选择的服务器,不同服务器的负载和网络路径会直接影响测试结果。 - 网络拥堵瞬间:互联网流量是动态变化的,两次测试间隔几秒钟,就可能遇到不同的网络拥堵情况,导致速度波动。
- 多线程与单线程:网页版测速通常使用多线程连接以最大化利用带宽,而
speedtest-cli的某些版本或默认配置可能使用单线程,你可以通过查看文档或源码了解如何调整线程数,但默认值通常是经过权衡的。 - 系统资源限制:在服务器上运行时,CPU 或内存资源紧张,也可能间接影响测速结果。
要获得可比较的结果,建议在 speedtest-cli 中使用 --server 参数指定与网页版相同的服务器进行测试。
Q2: 我可以在一个完全没有外网连接的私有内网服务器上使用 speedtest-cli 来测试内网带宽吗?
A2: 不可以。speedtest-cli 的设计初衷是测试你的服务器连接到公共互联网的速度,它必须能够访问 Speedtest.net 的服务器列表和实际的测速服务器,这些都在公网上,如果你需要测试内网中两台服务器之间的带宽,应该使用其他工具,iperf3。iperf3 需要在内网的一台服务器上作为服务端运行,在另一台服务器上作为客户端连接,从而精确测量两者之间的 TCP 或 UDP 吞吐量,这是内网性能测试的标准方法。