You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统如何通过bash脚本获取管理员权限修改hosts文件

问题根因
  • chmod是类Unix系统的权限修改命令,在Windows的bash环境(Git Bash、WSL、MSYS2等)中运行时,无法修改NTFS系统盘上hosts文件的Windows原生访问控制权限,执行报错属于正常情况。
  • 修改Windows系统目录下的hosts文件,核心前提是运行脚本的进程必须持有管理员权限,靠脚本内修改文件权限的思路完全走不通。
可用方案(运行时会弹出系统UAC权限确认弹窗,符合要求)

方案1:脚本内置自动提权逻辑

在脚本开头加入权限判断,非管理员状态下自动触发UAC提权重启脚本,用户确认权限后即可正常执行写入操作:

# 校验当前是否持有管理员权限
if ! net session > /dev/null 2>&1; then
    # 注意把下面的bash路径替换成你本地实际使用的bash程序路径,Git Bash默认路径参考如下
    exec powershell.exe -Command "Start-Process 'C:\Program Files\Git\bin\bash.exe' -ArgumentList '\"$0\"' -Verb RunAs"
    exit 0
fi

# 提权完成后直接写入即可,无需多余的chmod操作
echo "<ip_address>  <replacement>" >> /c/Windows/System32/drivers/etc/hosts

提示:在Windows的bash环境中,系统盘路径可以直接用/c/xxx的格式书写,不需要写双反斜杠转义,能避免很多路径识别错误。

方案2:调用系统自带工具直接提权写入

不需要写复杂的提权判断,直接调用PowerShell触发提权执行写入操作即可,运行时同样会弹出权限确认窗口:

powershell.exe -Command "Start-Process powershell.exe -Verb RunAs -ArgumentList '-Command', 'Add-Content -Path C:\Windows\System32\drivers\etc\hosts -Value \"<ip_address>  <replacement>\"'"
避坑说明
  • 不要对Windows系统盘下的受保护文件执行chmod操作,这类命令仅对bash环境自身虚拟的文件系统生效,对NTFS分区的系统受保护文件没有实际作用。
  • 正式写入前建议增加重复条目校验逻辑,避免多次运行脚本往hosts里写入重复的映射规则。

内容的提问来源于stack exchange,提问作者Michiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:06:51