GitHub 打不开?hosts 文件 24 小时自动更新脚本(Windows bat + Linux shell 双版本)

一、为什么 GitHub 总是打不开?

在国内访问 GitHub,几乎人人都遇到过这样的场景:

  • github.com 主页转圈半天,最后显示”连接超时”;
  • git clone 一个仓库,下载速度只有几 KB/s,甚至直接失败;
  • 浏览器能开,但 raw.githubusercontent.comcodeload.github.com 等资源域名经常 404 或超时。

根本原因:GitHub 的服务器在海外,国内网络环境下 DNS 解析经常被污染或指向了高延迟的节点,导致连接不稳定。

二、为什么修改 hosts 文件能解决问题?

hosts 是操作系统自带的本地域名解析文件,优先级高于 DNS 服务器。我们在里面手动指定 GitHub 各域名的 IP 地址,浏览器和 Git 客户端就会跳过 DNS 查询,直接连接到这个 IP。

当 IP 正确且网络线路可达时,GitHub 的访问速度会有质的提升——这也是为什么”改 hosts”成了最经典、最轻量的 GitHub 加速手段。

三、手动改 hosts 的三大痛点

手动改 hosts 虽然有效,但体验极差:

痛点说明
IP 频繁变动GitHub 的 CDN 节点 IP 经常调整,改完几天就失效,需要反复折腾
重复劳动每次都要打开文件 → 找到旧记录 → 删除 → 粘贴新记录 → 刷新 DNS 缓存,一套操作繁琐且容易出错
跨平台麻烦Windows 和 Linux 的 hosts 路径、修改方式、刷新命令都不一样,每台机器都要手动维护

于是,我写了一套全自动的 hosts 更新脚本,解决以上全部痛点。

四、方案介绍:24 小时自动更新 hosts

脚本核心思路很简单:

┌─────────────┐     ┌──────────────┐     ┌─────────────────┐
│  定时触发    │ ──▶ │  拉取最新数据  │ ──▶ │  更新/插入本地   │
│ (每24小时)  │     │  (GitHub源)  │     │  hosts 文件     │
└─────────────┘     └──────────────┘     └─────────────────┘

脚本功能一览

  1. 自动下载:从 GitHub 拉取最新的 hosts 数据源文件;
  2. 智能判断:读取数据源第二行的 #Update Time: 2026-08-12 更新时间,与本地 hosts 中已有的 #Update Time 日期对比,如果相同说明本地已是最新版本,直接跳过,避免无意义的重复写入;
  3. 精准替换:检查本地 hosts 是否已存在 #Github Hosts Start / #Github Hosts End 标记:
  • 已存在 → 只替换两个标记之间的内容,保留你自己添加的其他 hosts 条目;
  • 不存在 → 换行后自动追加全部内容,不影响原有配置;
  1. 定时执行:通过系统自带的任务计划(Windows 计划任务 / Linux crontab)每天自动运行一次,相当于每 24 小时同步一次。

五、Windows 版使用教程(github-hosts.bat)

1. 保存脚本

github-hosts.bat 保存到任意目录,例如 D:\Tools\

2. 手动执行一次

右键 bat 文件 → “以管理员身份运行”(修改 hosts 需要管理员权限)。

看到如下输出即表示成功:

[INFO] 正在从 GitHub 下载 hosts 文件...
[INFO] 远程更新时间:2026-08-12
[INFO] 本地已有更新时间:2026-08-12
[INFO] 本地 hosts 已是最新,跳过更新

3. 安装每日定时任务

以管理员身份打开 CMD,执行:

D:\Tools\github-hosts.bat install

脚本会自动通过 schtasks 创建一个名为 GitHubHostsUpdater 的计划任务,每天 10:00 以最高权限自动运行,从此无需任何手动操作。

卸载定时任务:

D:\Tools\github-hosts.bat uninstall

六、Linux 版使用教程(github-hosts.sh)

1. 保存脚本并赋予执行权限

sudo cp github-hosts.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/github-hosts.sh

2. 手动执行一次

sudo /usr/local/bin/github-hosts.sh

3. 安装每日定时任务

sudo /usr/local/bin/github-hosts.sh install

脚本会自动向 crontab 写入每日 10:00 的执行任务,日志输出到 /var/log/github-hosts.log,方便排查问题:

tail -f /var/log/github-hosts.log

卸载定时任务:

sudo /usr/local/bin/github-hosts.sh uninstall

七、修改后如何验证生效?

Windows

ipconfig /flushdns
ping github.com

Linux/macOS

sudo systemctl restart nscd   # 或 sudo dscacheutil -flushcache (macOS)
ping github.com

看到 GitHub 相关域名能正常解析并 ping 通,就说明配置生效了。

八、常见问题(FAQ)

Q1:运行脚本提示”需要管理员权限”怎么办?
Windows 请右键选择”以管理员身份运行”;Linux 请在命令前加 sudo

Q2:下载失败、提示网络错误?
数据源在 GitHub 上,需要确保本机网络可以访问 raw.githubusercontent.com。如果直连失败,建议配置代理或使用加速镜像后重试。

Q3:修改 hosts 会影响我的其他配置吗?
不会。脚本只在 #Github Hosts Start#Github Hosts End 两个标记之间操作,你自己添加的其他 hosts 条目(如内网域名、测试站点)会原样保留。

Q4:为什么设置了定时任务还要每天跑一次?
GitHub 的 IP 会动态变化,每天同步一次可以保证解析始终指向最新、最快的节点,防止”改完几天就失效”。

Q5:脚本会不会覆盖系统默认的 hosts 内容?
不会。首次使用时是”追加插入”,之后的每次更新都是”定向替换”,系统默认的 localhost 等条目不受影响。

九、写在最后

这套脚本我已经在实际环境(Windows 10 / Ubuntu 22.04)上验证过:插入、更新、幂等跳过三种场景全部通过测试。你只需要部署一次 + 安装定时任务,之后 GitHub 的 hosts 配置就会每天自动保持最新,彻底告别手动改文件、清缓存的重复劳动。

如果你有更好的思路或踩到了坑,欢迎在评论区交流讨论。


文章中的脚本及数据源为个人维护的开源方案,使用前请自行评估风险。修改 hosts 属于系统级配置操作,请以管理员/root 权限执行。

本文文章脚本下载地址:

分享名称: GitHub加速
分享链接: https://kb.itpno.com/#s/ED-MsOLZ
提取密码: nu8H

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Source: https://github.com/MengXi2021/Argon-Emoji-DailyNotes
Source: https://github.com/Ghost-chu/argon-huhu-emotions
https://github.com/qs5667/argon_bilibili_emoji
https://github.com/qs5667/argon_bilibili_emoji
https://github.com/qs5667/argon_bilibili_emoji
https://github.com/qs5667/argon_bilibili_emoji
Source: github.com/zhheo/Sticker-Heo
颜文字
Emoji
小恐龙
花!
每日手帐
呼呼
B站基础表情
B站节日表情
B站游戏表情
B站活动表情
Heo
上一篇