├── README.md └── lhosts /README.md: -------------------------------------------------------------------------------- 1 | **除脚本外,其他工具已迁移至 [HostsTools](https://github.com/HostsTools)(不含 Hozz)** 2 | 3 | ## 简介 4 | 5 | ### Windows 6 | - [终端工具](https://github.com/HostsTools/Windows)(C++ 编写) 7 | 8 | ### Mac OS 9 | - [HostsToolforMac](https://github.com/HostsTools/OSX) 10 | - Mac 环境下的 hosts 自动部署应用 (适用于 OS X 10.10 或以上, Swift 编写) 11 | 12 | ### Android 13 | - [后司](https://github.com/mcxinyu/HouSi) 14 | - 后司 是一个可以简单修改 hosts 的 Android 应用,本应用与其代码由 @mcxinyu 创作或维护 15 | - [AndroidGoogleHost](https://github.com/HostsTools/Android) 16 | - [Daedalus](https://github.com/iTXTech/Daedalus) 17 | - 免 Root 使用第三方DNS服务器,自定义hosts和DNSMasq规则(适用于Android 4.0.3 或以上,纯Java编写) 18 | 19 | ### 跨平台 20 | - [HostsTool](https://github.com/HostsTools/cross-platform-Qt)(采用 Qt 框架开发) 21 | - [Haskell-Console](https://github.com/HostsTools/Haskell-Console) 22 | - 终端工具(Haskell 编写) 23 | - **Hozz** 24 | - 拥有一个不错的图形化界面,Javascripts 编写。维护者 [@ppoffice](https://github.com/ppoffice) 25 | - **Hozz** [首页](http://ppoffice.github.io/Hozz) 26 | - **Hozz** on [Github](https://github.com/ppoffice/Hozz) 27 | 28 | ### 工具 29 | 30 | - [**Windows.zip**](https://github.com/HostsTools/Windows/releases) 31 | - 代替脚本的可执行程序版本,比脚本稍大但是更有鲁棒性 32 | - 贡献者:[@Too-Naive](https://github.com/Too-Naive) 33 | - Homepage:[HostsTools/Windows](https://github.com/HostsTools/Windows) 34 | 35 | - [**lhosts**](lhosts) 36 | - Linux 平台更新 hosts 脚本,请使用 `./lhosts -h` 命令获取帮助信息。 37 | -------------------------------------------------------------------------------- /lhosts: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Update hosts file from: 3 | # https://github.com/googlehosts/hosts 4 | # 5 | 6 | myname=${0##*/} 7 | 8 | HOSTS="/etc/hosts" 9 | BACKUP_FILE="/etc/hosts.bak" 10 | REMOTE_FILE="/tmp/hosts.rmt" 11 | 12 | MAIN="https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts" 13 | MIRROR="https://coding.net/u/scaffrey/p/hosts/git/raw/master/hosts-files/hosts" 14 | HOSTS_URL="$MAIN" 15 | 16 | QUIET_MODE= 17 | RANGE= 18 | 19 | BEGIN_MARK="# 远程 hosts 开始标记,请在 上方 添加其他内容" 20 | END_MARK="# 远程 hosts 结束标记,请在 下方 添加其他内容" 21 | 22 | usage() 23 | { 24 | cat < 范围模式 (无视范围标记) 39 | -u, --url 自定义 hosts 源地址 40 | -h, --help 显示帮助信息并退出 41 | 42 | 退出状态: 43 | 0 正常 44 | 1 命令行参数错误 45 | 2 文件下载失败 46 | 47 | 范围模式: 48 | 将本地 hosts 指定范围的内容,保存到下载的 hosts 内,例如: 49 | 50 | $myname -mr "1,20" 更新时,本地 hosts 1~20 行保存到下载的 hosts 中 51 | 52 | 自定义源: 53 | $myname -u $MIRROR 54 | 55 | EOL 56 | } 57 | 58 | get_hosts() 59 | { 60 | local swp="/tmp/hosts.swp" 61 | local downer="curl ${HOSTS_URL} -#o ${REMOTE_FILE}" 62 | 63 | if [ "$QUIET_MODE" = "on" ]; then 64 | ${downer} -s 65 | else 66 | echo "正在更新 hosts..." 67 | ${downer} 68 | fi 69 | 70 | if [ $? -ne 0 ]; then 71 | echo "hosts 下载失败" >&2 72 | exit 2 73 | fi 74 | 75 | # Add range mark 76 | sed -e '1i\'$'\n'"$BEGIN_MARK" -e '$a\'$'\n'"$END_MARK" "$REMOTE_FILE" > "$swp" 77 | 78 | mv -f "$swp" "$REMOTE_FILE" 79 | } 80 | 81 | backup_hosts() 82 | { 83 | sudo cp -f "$HOSTS" "$BACKUP_FILE" 84 | } 85 | 86 | update_hosts() 87 | { 88 | local swp="/tmp/hosts.swp" 89 | 90 | if [ ! -z "$RANGE" ]; then 91 | # Range mode on 92 | sed -n "$RANGE"p "$HOSTS" > "$swp" 93 | else 94 | # Range mode off, handle marker in the local hosts file. 95 | if grep -q "$BEGIN_MARK" "$HOSTS"; then 96 | sed "/$BEGIN_MARK/,/$END_MARK/d" "$HOSTS" >> "$swp" 97 | else 98 | echo "警告: $HOSTS 中没有发现此脚本所作标记," \ 99 | "更新后会清空之前的所有内容。" >&2 100 | echo "请从 $BACKUP_FILE 中手动恢复需要的 hosts 记录" >&2 101 | fi 102 | fi 103 | 104 | cat "$REMOTE_FILE" >> "$swp" 105 | sudo cp -f "$swp" "$HOSTS" 106 | 107 | rm -f "$swp" "$REMOTE_FILE" 108 | } 109 | 110 | LONGOPTS="mirror,quiet,url:,range:,help" 111 | CMD=$(getopt -o mqu:r:h --long $LONGOPTS -n "$myname" -- "$@") || exit 1 112 | 113 | eval set -- "$CMD" 114 | 115 | while true; do 116 | case "$1" in 117 | -m|--mirror) 118 | HOSTS_URL="$MIRROR" 119 | shift 120 | ;; 121 | -q|--quiet) 122 | QUIET_MODE="on" 123 | shift 124 | ;; 125 | -r|--range) 126 | RANGE="$2" 127 | shift 2 128 | ;; 129 | -u|--url) 130 | HOSTS_URL="$2" 131 | shift 2 132 | ;; 133 | -h|--help) 134 | usage 135 | exit 0 136 | shift 137 | ;; 138 | --) 139 | shift 140 | break 141 | ;; 142 | esac 143 | done 144 | 145 | get_hosts 146 | backup_hosts 147 | update_hosts 148 | --------------------------------------------------------------------------------