萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 命令行測網速神器:speedtest-cli 安裝與進階用法全攻略

沒有圖形界面的服務器、嵌入式設備、CI/CD 流水線節點,如何快速測試上下行帶寬?Speedtest.net 官方提供的 Python 腳本 speedtest-cli 完美解決這個痛點:無需瀏覽器、無需 Flash、單文件部署、支援指定測速節點、可生成分享圖片鏈接。本文涵蓋安裝、基礎測速、指定節點、結果分享、自動化腳本集成全流程。

安裝 speedtest-cli (三種方式任選一)

方式一:pip 安裝 (推薦,跨平台、易更新)

sudo pip3 install speedtest-cli
# 或用戶級安裝
pip3 install --user speedtest-cli

方式二:系統包管理器 (版本可能較舊)

# Debian/Ubuntu
sudo apt update && sudo apt install speedtest-cli
# CentOS/RHEL/Fedora (EPEL)
sudo dnf install epel-release && sudo dnf install speedtest-cli
# Arch
sudo pacman -S speedtest-cli

方式三:手動下載單文件 (無 Python 環境/極簡環境)

wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
sudo mv speedtest-cli /usr/local/bin/

基礎測速:一鍵出結果

speedtest-cli
# 輸出示例:
# Retrieving speedtest.net configuration...
# Testing from China Telecom (202.101.x.x)...
# Retrieving speedtest.net server list...
# Selecting best server based on ping...
# Hosted by China Telecom (Shanghai) [1.23 km]: 4.567 ms
# Testing download speed................................................................................
# Download: 487.32 Mbit/s
# Testing upload speed................................................................................................
# Upload: 42.15 Mbit/s

speedtest-cli 基礎測速輸出

進階用法:精準控制測試條件

1. 列出所有可用測速節點 (按延遲排序)

speedtest-cli --list | head -20
# 輸出:ID) Sponsor (City, Country) [距離 km]
# 1234) China Telecom (Shanghai, China) [1.23 km]
# 5678) China Unicom (Beijing, China) [1024.56 km]

--list 節點列表示例

2. 指定節點測試 (用 ID)

speedtest-cli --server 1234
# 強制使用上海電信節點,排除自動選擇誤差

指定節點測試

3. 生成分享圖片鏈接 (社交/工單證據)

speedtest-cli --share
# 輸出包含:Share results: https://www.speedtest.net/result/123456789.png

--share 生成分享圖
Speedtest.net 分享結果頁面

4. 單位制選擇

speedtest-cli --bytes          # 顯示 Bytes/s (而非 bits/s)
speedtest-cli --simple         # 精簡輸出:Ping: 4.567 ms, Download: 487.32 Mbit/s, Upload: 42.15 Mbit/s
# 適合腳本解析、Zabbix/Prometheus 采集

5. 來源 IP 綁定 (多網卡服務器)

speedtest-cli --source 10.0.1.5   # 指定出口 IP

6. 安全/代理環境

# 忽略 TLS 證書驗證 (企業內網代理常見)
speedtest-cli --insecure
# 指定 HTTPS 代理
speedtest-cli --proxy https://proxy.example.com:3128

自動化集成:腳本化采集與告警

Shell 腳本示例:定時測速 + 閾值告警

#!/bin/bash
# /usr/local/bin/speedtest_monitor.sh
THRESHOLD_DOWN=100   # Mbps
THRESHOLD_UP=20
LOG="/var/log/speedtest.log"
RESULT=$(speedtest-cli --simple 2>/dev/null)
PING=$(echo "$RESULT" | grep Ping | awk '{print $2}')
DOWN=$(echo "$RESULT" | grep Download | awk '{print $2}')
UP=$(echo "$RESULT" | grep Upload | awk '{print $2}')

echo "$(date '+%F %T') Ping:${PING}ms Down:${DOWN}Mbps Up:${UP}Mbps" >> $LOG

# 閾值告警 (需配置 mailx 或 webhook)
if (( $(echo "$DOWN < $THRESHOLD_DOWN" | bc -l) )); then
    echo "⚠️ 下行帶寬低於 ${THRESHOLD_DOWN}Mbps: ${DOWN}Mbps" | mail -s "帶寬告警" admin@example.com
fi

加入 crontab:0 * * * * /usr/local/bin/speedtest_monitor.sh (每小時測一次)。

Python 直接調用 (更靈活)

import speedtest
st = speedtest.Speedtest()
st.get_best_server()          # 自動選最優
# st.get_servers([1234])      # 或指定節點列表
down = st.download() / 1e6    # 轉 Mbps
up = st.upload() / 1e6
ping = st.results.ping
print(f"Ping: {ping:.2f}ms, Down: {down:.2f}Mbps, Up: {up:.2f}Mbps")
# 直接寫入 InfluxDB / 發送到 Prometheus Pushgateway

常見問題與優化

問題原因/解決
測速極慢/超時目標節點擁塞/防火牆攔截/MTU 問題。嘗試 --server 指定其他節點,檢查 iptables -L -n、mtu 設置。
結果與瀏覽器 Speedtest.net 差異大瀏覽器用多線程/WebSocket,CLI 單線程 TCP。CLI 結果更保守,更接近單流下載實際體驗。
Python 版本報錯需 Python 3.6+。舊系統升級 Python 或用單文件版 (內嵌依賴)。
IPv6 測試speedtest-cli --ipv6 強制使用 IPv6 節點 (需節點支援)。

總結

speedtest-cli 讓「測網速」從瀏覽器走向命令行,從手工操作走向自動化。掌握 --list 選節點、--server 定節點、--share 出圖、--simple 給腳本、--source 綁出口這五大核心參數,配合 crontab/Python 腳本,即可構建「全時段、多節點、可追溯」的帶寬質量監控體系。下次機房割接、運營商投訴、上雲驗收,一條命令拿數據說話!

copyright © 萬盛學電腦網 all rights reserved