sublime 无法直接保存 hosts 文件因权限不足:linux/macos 需 root,windows 需管理员权限;正确做法是另存为本地文件后终端提权写入,并刷新 dns 缓存。

Sublime 直接保存 /etc/hosts 或 C:\Windows\System32\drivers\etc\hosts 为什么会失败?
因为这两个路径下的 hosts 文件默认受系统保护:Linux/macOS 要求 root 权限写入,Windows 则需管理员权限。Sublime 本身是普通用户进程,点击 Ctrl+S 时会弹出“权限不足”或静默失败(尤其 Windows 下常表现为“已保存”但内容没变)。
- 现象:编辑完按保存没报错,但终端执行
cat /etc/hosts或记事本打开原文件,发现改动未生效 - 根本原因:Sublime 没有以 elevated 权限运行,操作系统拒绝写入受保护路径
- 误区:右键 Sublime 图标选“以管理员身份运行”再打开
hosts—— 这看似可行,但会导致后续插件配置属主错乱、GUI 崩溃风险上升,不推荐长期使用
安全又可靠的保存方式:编辑 → 临时落盘 → 终端提权写入
这是最可控、无副作用的做法,适用于所有平台,且不改变 Sublime 的运行权限上下文。
- 在 Sublime 中正常编辑
hosts内容 - 不要直接保存,而是用
Ctrl+Shift+P→ 输入Save As,另存为一个你有完全权限的路径,例如:~/Desktop/hosts.new(macOS/Linux)或%USERPROFILE%\Desktop\hosts.new(Windows) - 打开终端(macOS/Linux)或命令提示符(Windows),执行提权写入:
sudo cp ~/Desktop/hosts.new /etc/hosts && sudo chmod 644 /etc/hosts
或 Windows(管理员权限的 PowerShell):Copy-Item "$env:USERPROFILE\Desktop\hosts.new" "C:\Windows\System32\drivers\etc\hosts" -Force
- 验证:执行
cat /etc/hosts或用记事本重新打开,确认内容已更新
想一键保存到 /etc/hosts?可以写个轻量插件,但别硬塞密码
有人用 Python 插件调 sudo cp 并把密码写死在代码里,这等于在项目里明文存 root 密码,严重违背最小权限原则。
- 更合理的方式是让系统弹出标准密码框(即利用
sudo -A或pkexec) - 插件中应调用
pkexec cp ...(Linux)或PowerShell Start-Process ... -Verb RunAs(Windows),交由系统授权机制处理 - 如果你只是偶尔改 hosts,手动走一遍「另存 + 终端」流程比调试插件更快、更安心
修改后 DNS 不生效?别忘了刷新缓存
改完 hosts 文件不代表浏览器立刻走新映射,系统和应用层可能还在用旧缓存。
- Linux:多数现代发行版无需手动刷新,但可执行
sudo systemd-resolve --flush-caches(systemd 系统)或sudo /etc/init.d/nscd restart(nscd 启用时) - macOS:运行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Windows:管理员命令提示符中执行
ipconfig /flushdns - 额外注意:Chrome / Edge 会自建 DNS 缓存,访问
chrome://net-internals/#dns点击 “Clear host cache”











