Debian 镜像源测速脚本

news/2025/11/9 1:41:51/文章来源:https://www.cnblogs.com/zyang4418/p/19203400

声明:此脚本及其说明文档由 Kimi AI 生成,内容仅供参考。

此脚本会测试各个镜像的连接质量、响应延迟和下载速度,并给出最优推荐。

#!/bin/bash
#
# Debian 镜像源测速脚本
# 测试国内主要Debian镜像源的连接质量,选出最优源
## ==================== 配置区 ====================# 定义要测试的镜像源
# 格式:名称|URL|类型
MIRRORS=("清华大学|https://mirrors.tuna.tsinghua.edu.cn/debian|教育网""中科大|https://mirrors.ustc.edu.cn/debian|教育网""CERNET官方|https://mirrors.cernet.edu.cn/debian|教育网""上海交通大学|https://mirror.sjtu.edu.cn/debian|教育网""腾讯云|http://mirrors.tencent.com/debian|企业""阿里云|https://mirrors.aliyun.com/debian|企业""网易|http://mirrors.163.com/debian|企业""搜狐|http://mirrors.sohu.com/debian|企业""兰州大学|http://mirror.lzu.edu.cn/debian|教育网""哈尔滨工业大学|http://run.hit.edu.cn/debian|教育网""北京理工大学|http://mirror.bit.edu.cn/debian|教育网""大连理工大学|http://mirror.dlut.edu.cn/debian|教育网""北京交通大学|http://mirror.bjtu.edu.cn/debian|教育网""厦门大学|http://mirrors.xmu.edu.cn/debian|教育网"
)# 测试文件路径(选择较小的Release文件)
TEST_FILE="dists/bookworm/main/binary-amd64/Release"
# Debian 11用户可以改为:dists/bullseye/main/binary-amd64/Release# 超时时间(秒)
TIMEOUT=10# 测试次数
TEST_COUNT=3# 颜色输出
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[36m'
NC='\033[0m' # No Color# 是否使用IPv6(自动检测)
if ip a | grep -q "inet6.*global"; thenIPV6_SUPPORT=trueecho -e "${BLUE}检测到你的网络支持IPv6${NC}"
elseIPV6_SUPPORT=falseecho -e "${YELLOW}你的网络不支持IPv6,将仅测试IPv4${NC}"
fi# ==================== 函数区 ====================# 打印标题
print_header() {echo "=========================================="echo " Debian 镜像源测速脚本"echo " 测试时间: $(date '+%Y-%m-%d %H:%M:%S')"echo "=========================================="echo ""
}# 测试单个镜像
test_mirror() {local name=$1local url=$2local type=$3echo -e "${BLUE}正在测试 ${name} (${type})...${NC}"# 测试1: 基础连通性local avg_time=0local success_count=0local total_speed=0for i in $(seq 1 $TEST_COUNT); do# 使用curl测试,获取总时间、连接时间、下载速度result=$(curl -s -w "@curl-format.txt" -o /dev/null -m $TIMEOUT "${url}/${TEST_FILE}" 2>&1)if [ $? -eq 0 ]; thensuccess_count=$((success_count + 1))# 提取时间数据time_total=$(echo "$result" | grep "time_total" | cut -d' ' -f2)time_connect=$(echo "$result" | grep "time_connect" | cut -d' ' -f2)speed_download=$(echo "$result" | grep "speed_download" | cut -d' ' -f2)avg_time=$(echo "$avg_time + $time_total" | bc -l)total_speed=$(echo "$total_speed + $speed_download" | bc -l)echo -e "  测试 ${i}: ${GREEN}成功${NC} - 响应: ${time_connect}s, 总时间: ${time_total}s"elseecho -e "  测试 ${i}: ${RED}失败${NC} - 超时或无法连接"fi# 两次测试间稍作间隔sleep 0.5done# 计算平均值if [ $success_count -gt 0 ]; thenavg_time=$(echo "scale=3; $avg_time / $success_count" | bc -l)avg_speed=$(echo "scale=2; $total_speed / $success_count / 1024" | bc -l) # KB/secho -e "  ${name}: ${GREEN}成功率 ${success_count}/${TEST_COUNT}${NC}, 平均响应: ${avg_time}s, 速度: ${avg_speed} KB/s"# 返回结果echo "${name}|${url}|${type}|${success_count}|${avg_time}|${avg_speed}"elseecho -e "  ${name}: ${RED}全部测试失败${NC}"echo "${name}|${url}|${type}|0|999|0"fiecho ""
}# 创建curl格式化输出文件
create_curl_format() {cat > curl-format.txt << 'EOF'
time_namelookup: %{time_namelookup}
time_connect: %{time_connect}
time_appconnect: %{time_appconnect}
time_pretransfer: %{time_pretransfer}
time_redirect: %{time_redirect}
time_starttransfer: %{time_starttransfer}
time_total: %{time_total}
speed_download: %{speed_download}
http_code: %{http_code}
EOF
}# 排序并显示结果
show_results() {local results_file=$1echo "=========================================="echo " 测试结果汇总"echo "=========================================="echo ""# 按成功率、平均时间、速度排序echo -e "${GREEN}按成功率排序(推荐顺序):${NC}"echo "-------------------------------------------"# 读取结果并排序while IFS='|' read -r name url type success avg_time avg_speed; doif [ $success -gt 0 ]; thenprintf "%-20s | 成功率: %d/%d | 平均时间: %.3fs | 速度: %.2f KB/s | 类型: %s\n" \"$name" "$success" "$TEST_COUNT" "$avg_time" "$avg_speed" "$type"elseprintf "%-20s | ${RED}连接失败${NC}\n" "$name"fidone < <(sort -t'|' -k4,4nr -k5,5n -k6,6nr "$results_file")echo ""# 推荐最佳源local best=$(head -n1 "$results_file" | sort -t'|' -k4,4nr -k5,5n -k6,6nr | head -n1)IFS='|' read -r best_name best_url best_type best_success best_avg_time best_avg_speed <<< "$best"if [ $best_success -gt 0 ]; thenecho -e "${GREEN}✨ 推荐源:${best_name} (${best_type})${NC}"echo "URL: ${best_url}"echo "平均响应时间: ${best_avg_time}秒"echo "平均下载速度: ${best_avg_speed} KB/s"echo ""echo "配置示例(Debian 12):"echo "-------------------------------------------"echo -e "${YELLOW}# 编辑 sources.list 文件${NC}"echo "sudo nano /etc/apt/sources.list"echo ""echo -e "${YELLOW}# 替换为以下内容${NC}"echo "deb ${best_url} bookworm main contrib non-free non-free-firmware"echo "deb ${best_url} bookworm-updates main contrib non-free non-free-firmware"echo "deb ${best_url} bookworm-backports main contrib non-free non-free-firmware"echo "deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware"echo ""echo -e "${YELLOW}# 更新软件源${NC}"echo "sudo apt update"elseecho -e "${RED}所有镜像源都无法连接,请检查网络设置!${NC}"fi
}# 清理临时文件
cleanup() {rm -f curl-format.txtrm -f results.txt
}# ==================== 主程序区 ====================# 检查依赖
if ! command -v curl &> /dev/null; thenecho -e "${RED}错误:未安装 curl,请先安装 curl${NC}"exit 1
fiif ! command -v bc &> /dev/null; thenecho -e "${RED}错误:未安装 bc,请先安装 bc${NC}"exit 1
fi# 设置陷阱,确保脚本退出时清理临时文件
trap cleanup EXIT# 创建临时文件
create_curl_format
touch results.txt# 打印标题
print_header# 测试每个镜像
for mirror in "${MIRRORS[@]}"; doIFS='|' read -r name url type <<< "$mirror"# 跳过IPv6专用源(如果本机不支持IPv6)if [ "$IPV6_SUPPORT" = false ] && [[ $name == *"IPv6"* ]]; thencontinuefi# 测试镜像result=$(test_mirror "$name" "$url" "$type")# 保存结果if [[ $result == *"|"* ]]; thenecho "$result" >> results.txtfi
done# 显示结果
show_results results.txtecho ""
echo "=========================================="
echo -e "${GREEN}测试完成!${NC}"
echo "=========================================="# 清理会在trap中自动执行

使用说明

  1. 保存脚本
# 将以上内容保存为 test_debian_mirrors.sh
nano test_debian_mirrors.sh
  1. 赋予执行权限
chmod +x test_debian_mirrors.sh
  1. 运行测试
# 基本用法
./test_debian_mirrors.sh# 如果需要测试特定Debian版本,可以修改脚本中的 TEST_FILE 变量
# Debian 11: TEST_FILE="dists/bullseye/main/binary-amd64/Release"
# Debian 10: TEST_FILE="dists/buster/main/binary-amd64/Release"

高级配置

如果你想自定义测试参数,可以修改脚本开头的配置区:

  • TEST_COUNT:测试次数(默认为3次)
  • TIMEOUT:超时时间(默认10秒)
  • MIRRORS:添加或删除镜像源

依赖要求

脚本需要以下命令:

  • curl:用于测试HTTP连接
  • bc:用于计算数值
  • ip:用于检测IPv6支持(通常已预装)

安装依赖:

# Debian/Ubuntu
sudo apt update
sudo apt install curl bc -y

输出示例

==========================================Debian 镜像源测速脚本测试时间: 2025-11-09 12:30:45
==========================================检测到你的网络支持IPv6清华大学:测试 1: 成功 - 响应: 0.023s, 总时间: 0.212s测试 2: 成功 - 响应: 0.021s, 总时间: 0.205s测试 3: 成功 - 响应: 0.025s, 总时间: 0.219s清华大学: 成功率 3/3, 平均响应: 0.212s, 速度: 524.5 KB/s

然后根据测试结果,脚本会自动推荐最佳源并提供配置示例。

脚本的优点:

  • 全面测试:响应时间、下载速度、成功率
  • 智能排序:按成功率、响应时间、速度综合排序
  • 自动推荐:给出最优源和配置命令
  • IPv6支持:自动检测并使用IPv6
  • 彩色输出:结果清晰易读
  • 容错处理:超时和失败处理完善

你可以直接复制使用,也可以根据需要进行修改!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/960108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 文件操作命令手册

Linux 文件操作命令手册 一、基础文件操作命令 1.1 复制文件/目录 - cp # 基本语法 cp [选项] 源文件 目标文件 cp [选项] 源文件... 目标目录# 常用选项 -r, -R # 递归复制目录及其内容 -i # 覆盖前提示确认…

第19天(中等题 二分查找)

打卡第十九天 2道中等题题目: 二分查找思路:二分查找&前后加下标的方式省去了边界情况的讨论不会做...好绕(重点标记一下这题 过两天回头再做一次)代码: class Solution { public:vector<int> solveQueries(…

7z 压缩如何不保留文件路径

7z 压缩如何不保留文件路径Posted on 2025-11-09 01:06 不会写代码的 阅读(0) 评论(0) 收藏 举报“dir/readme.txt” << 保留路径 源文件前增加"./" “./dir/readme.txt” << 只有文件

术与道之辩——存算一体的前世今生与未来

动笔写下这么一篇文章,既有长久以来的思考,也有一时的苦闷情绪的催动。 不知道读者有多少人看过一部国产漫画《一人之下》的,里面的三一门篇章给了我很大的触动,也是此文标题的来源——术与道之辩。 先从我理解的术…

悟空来路与关山

悟空来路与关山 ——AI元人文的思想跋涉 作者:岐金兰 悟空来路与关山 这七个字,正是那五十天思想锻造之路的终极写照。 “悟空”,是思想的起点。 空掉对“通用等价物”的执念,空掉对“终极解决方案”的幻想,空掉技…

升鲜宝分拣系统 功能与开发文档

升鲜宝分拣系统 功能与开发文档升鲜宝分拣系统 功能与开发文档(v1-完整版) 版本:v1 技术栈:Spring Boot 2.7 + MyBatis + Sa-Token + MySQL 8.0 + JDK 1.8 一、系统概述 升鲜宝分拣系统(Pick Sorting System)用于…

发展

我会按照自己制定的计划去做一些认为正确的事。这些事源于内心的准则,遵循一些前辈给予的指引,特别是在人际交往方面:结交那些有阅历、有目标的人,并且不抱有不切实际的幻想,脚踏实地做自己该做的事。 客观描述自…

cuda并行计算

cuda并行计算Posted on 2025-11-09 00:45 wsg_blog 阅读(0) 评论(0) 收藏 举报cuda并行计算

GitHub使用大全

返回文件直链 洛谷链接网络问题 下载SwitchHosts(密码 swch),以管理员身份运行,添加配置(左上角加号),填写如下信息。Hosts 类型: 远程 Hosts 标题: 随意 URL: https://raw.hellogithub.com/hosts 自动刷新: 最…

qtdebug

qDebug() << this << "took" << (QDateTime::currentMSecsSinceEpoch() - start_time_);

相信

相信后来你才发现 你不去爱别人,是相信没人会爱你。现实和选择都是如此的简单。而我只能等 运气的奖励。

文件直链

前往洛谷版 必要 应用 Edge VSCode 有道 微信输入法 网页 AdGuard 广告拦截器 Simple Allow Copy Outlook 洛谷 自动生成样例机 博客园 在Windows上配置C++17环境:从 Mingw 到 MSYS2 的详细指南-CSDN博客 GitHub使用大…

2025年11月投资纠纷律师评价榜:五强深度对比与数据解析

“钱投进去,合同签了,收益却迟迟不到账,甚至本金也拿不回来。”这是2025年三季度北京市金融消费纠纷调解中心接到的典型投诉开场白。随着私募基金、信托计划、资管产品规模突破二十八万亿元,个人投资者与机构之间的…

2025年11月投资纠纷律师评价榜:陈杰带队五佳对比

手里握着基金赎回失败的回执、信托延期兑付的公告,或是股票账户里无法解释的划扣记录,你第一次真切感到“投资”两个字背后藏着风险。2025年,全国证券期货纠纷调解案件量同比再增18%,信托涉诉标的额突破2200亿元,…

2025年11月工业洗地机厂家榜单:十强评测与性能对比

工业洗地机厂家怎么选?这是2025年第四季度物业、物流、制造、交通枢纽等高频清洁场景采购负责人最集中的疑问。过去三年,全国规模以上工业洗地机销量年复合增速保持在18%左右,但品牌数量同步激增,仅湖北一省注册企…

2025年11月江西展厅设计公司推荐榜:五强排名与案例对比分析

正在筹备政府主题展、企业品牌馆或文旅体验中心的您,是否正被“江西本地哪家展厅设计公司更靠谱”反复困扰?展厅项目往往涉及大额财政投入或品牌曝光,一旦设计方经验不足,容易出现“概念落地走样、多媒体故障、运维…

2025年11月中国电线电缆厂家推荐榜:五强全维度评测

临近年末,电网改造、基建抢工、新能源配套三条线同时进入交付高峰,很多项目经理、采购负责人和经销商都在问:2025年11月到底该把订单交给哪家电线电缆厂?行业白皮书显示,2025年1-9月全国电线电缆主营业务收入同比…

2025年11月中国电线电缆厂家榜单:五强实测数据与选购要点

临近年末,电网改造、基建收尾、新能源抢装三线叠加,电线电缆进入年度最大采购窗口。设计院、总包单位、县域经销商、家装公司四类买家同时涌入市场,痛点却惊人一致:价格一天三变、合格证真假难辨、交期口头承诺难落…

2025年11月四川护栏厂家推荐榜:阳台河道栏杆厂家排行新观察

如果您正在筹备市政道路改造、河道整治、楼盘阳台封装或工业园区围护,护栏既是安全底线,也是形象名片。四川作为西部基建投入活跃的省份,2025年前三季度交通固定资产投资同比增长百分之七点四,带动护栏采购量持续走…

2025年11月中国房产律所对比榜:十家机构实力与案例排名解读

买房遇延期交付、开发商跑路、物业乱收费、拆迁款缩水——这些高频痛点让“找一位真正懂房地产的律师”成为购房者、房企、业委会共同的需求。2025年住宅竣工面积同比再降8.4%,存量纠纷激增,北京、上海、广州三地法院…