docs: 把削成单字的动词补回完整词语

装→安装、验→校验、起→启动、跑→运行 之类,脚本提示和 README 一起改。
This commit is contained in:
2026-08-09 18:36:59 +08:00
parent ab0476bd84
commit 0704a27bac
2 changed files with 103 additions and 103 deletions
+45 -45
View File
@@ -1,10 +1,10 @@
# mihomo-up
一个 bash 脚本,在 Linux 服务器上装好、配好、管住 [mihomo](https://github.com/MetaCubeX/mihomo) 内核(Clash.Meta 的继任者,MetaCubeX 维护的代理内核)。
一个 bash 脚本,在 Linux 服务器上安装好、配置好、管起来 [mihomo](https://github.com/MetaCubeX/mihomo) 内核(Clash.Meta 的继任者,MetaCubeX 维护的代理内核)。
一条命令从零到能用:下载内核 → 写 systemd 服务 → 用向导生成 `config.yaml` → 启动。之后改订阅、换端口、升级、回滚、卸载也都在同一个菜单里。
一条命令从零到能用:下载内核 → 写入 systemd 服务 → 用向导生成 `config.yaml` → 启动。之后修改订阅、更换端口、升级、回滚、卸载也都在同一个菜单里。
装完,这台机器上会多出这几样东西——**卸载时它们全都能一键清掉**:
安装完成后,这台机器上会多出这几样东西——**卸载时它们全都能一键清掉**:
| | 默认位置 |
|---|---|
@@ -21,22 +21,22 @@
- Linux + bash 4 以上
- 依赖命令:`curl`、`gzip`、`install`、`awk`、`sed`(一般发行版自带)
- 安装、升级、改配置、卸载都需要 **root**。非 root 也能进菜单,会先提醒一句
- 没有 systemd 的机器(容器等)也能用:脚本跳过服务相关步骤,只管内核和配置,你自己 `mihomo -d /etc/mihomo` 拉起来
- 安装、升级、修改配置、卸载都需要 **root**。非 root 也能进菜单,会先提醒一句
- 没有 systemd 的机器(容器等)也能用:脚本跳过服务相关步骤,只管内核和配置,你自己 `mihomo -d /etc/mihomo` 启动起来
交互输入读的是 `/dev/tty` 而不是标准输入,所以 `bash <(curl ...)` 这种 stdin 已被占用的跑法,菜单照样能按键。
交互输入读的是 `/dev/tty` 而不是标准输入,所以 `bash <(curl ...)` 这种 stdin 已被占用的运行方式,菜单照样能按键。
## 快速开始
**交互菜单**(推荐,装机和日常维护都用它):
**交互菜单**(推荐,首次安装和日常维护都用它):
```bash
bash <(curl -fsSL https://git.im0o.top/im0o/mihomo-up/raw/branch/main/mihomo-up.sh)
```
菜单第 1 项就是一键安装。跑完你会拿到:本机的 HTTP/SOCKS5 代理端口、一个 Web 面板地址和它的访问密钥、一个开机自启的 systemd 服务。
菜单第 1 项就是一键安装。运行完你会拿到:本机的 HTTP/SOCKS5 代理端口、一个 Web 面板地址和它的访问密钥、一个开机自启的 systemd 服务。
还会拿到一个 `mihomo-up` 命令——**以后直接敲它就能进菜单**,不用再翻上面这条 URL。
还会拿到一个 `mihomo-up` 命令——**以后直接输入它就能进菜单**,不用再翻上面这条 URL。
**命令行**:
@@ -44,41 +44,41 @@ bash <(curl -fsSL https://git.im0o.top/im0o/mihomo-up/raw/branch/main/mihomo-up.
chmod +x mihomo-up.sh
sudo ./mihomo-up.sh install # 一键安装:内核 + systemd + 配置向导 + 启动
./mihomo-up.sh check # 只查不改:当前版本 vs 最新版本
sudo ./mihomo-up.sh update # 只换内核二进制,配置和服务定义不动
sudo ./mihomo-up.sh config # 重新跑配置向导
./mihomo-up.sh check # 只查询不改动:当前版本 vs 最新版本
sudo ./mihomo-up.sh update # 只更换内核二进制,配置和服务定义不动
sudo ./mihomo-up.sh config # 重新运行配置向导
sudo ./mihomo-up.sh rollback # 内核回滚到上一个备份
sudo ./mihomo-up.sh uninstall # 卸载,会逐项问你配置和备份删不删
sudo ./mihomo-up.sh shortcut # 只装/刷新 mihomo-up 快捷命令
sudo ./mihomo-up.sh uninstall # 卸载,会逐项问你配置和备份要不要删除
sudo ./mihomo-up.sh shortcut # 只安装 / 刷新 mihomo-up 快捷命令
```
## 菜单里有什么
```
1. 一键安装 内核 + systemd + 配置,缺哪步补哪步
2. 检查更新 3. 升级内核 4. 装指定版本内核
2. 检查更新 3. 升级内核 4. 安装指定版本内核
5. 回滚内核 6. 查看内核备份
7. 配置管理 换订阅 / 改端口 / 局域网共享 / 面板密钥 / 导入配置 / 校验 / 编辑 / 备份还原
8. 服务控制 启停 / 重启 / 状态 / 最近日志 / 开机自启 / 重写服务文件
7. 配置管理 更换订阅 / 修改端口 / 局域网共享 / 面板密钥 / 导入配置 / 校验 / 编辑 / 备份还原
8. 服务控制 启动 / 停止 / 重启 / 状态 / 最近日志 / 开机自启 / 重写服务文件
9. 卸载
```
## 一键安装做了什么
1. **下内核**:按机器架构从 GitHub Releases 取对应的 `.gz` 并解压
2. **验内核**:新二进制必须能执行,且 `-v` 自报的版本号和目标一致,否则不落盘
3. **配文件**:没有 `config.yaml` 就跑配置向导;已经有了就保持不动,只问一句要不要重做
4. **写服务**:按 [MetaCubeX 官方文档](https://wiki.metacubex.one/startup/service/)的推荐写 `mihomo.service`。已存在且内容不同的话,旧文件先备份成 `.bak-<时间戳>`
5. **装快捷命令**:问一句,可以拒绝。它是什么见「快捷命令 `mihomo-up`」一节
6. **起服务**:`daemon-reload` → `enable`(开机自启)→ `restart`,起不来就提示你看 `journalctl`
1. **下载内核**:按机器架构从 GitHub Releases 下载对应的 `.gz` 并解压
2. **校验内核**:新二进制必须能执行,且 `-v` 自报的版本号和目标一致,否则不写入磁盘
3. **准备配置**:没有 `config.yaml` 就运行配置向导;已经有了就保持不动,只问一句要不要重做
4. **写入服务**:按 [MetaCubeX 官方文档](https://wiki.metacubex.one/startup/service/)的推荐写 `mihomo.service`。已存在且内容不同的话,旧文件先备份成 `.bak-<时间戳>`
5. **安装快捷命令**:问一句,可以拒绝。它是什么见「快捷命令 `mihomo-up`」一节
6. **启动服务**:`daemon-reload` → `enable`(开机自启)→ `restart`,启动不了就提示你看 `journalctl`
每一步都是「缺什么补什么」:已经装过的机器再跑一遍,不会覆盖你现有的配置。
每一步都是「缺什么补什么」:已经安装过的机器再运行一遍,不会覆盖你现有的配置。
装完会打印一段总结:代理端口怎么用、面板地址和密钥是什么、日志怎么看。
安装完成后会打印一段总结:代理端口怎么用、面板地址和密钥是什么、日志怎么看。
## 快捷命令 `mihomo-up`
一键安装会往 `/usr/local/bin/mihomo-up` 放一个启动器。它**不是脚本本体,而是每次执行都去拉最新脚本再跑**——你更新了仓库,机器上下次敲 `mihomo-up` 就自动用上新版,不需要谁去手动更新。
一键安装会往 `/usr/local/bin/mihomo-up` 放一个启动器。它**不是脚本本体,而是每次执行都去拉取最新脚本再运行**——你更新了仓库,机器上下次输入 `mihomo-up` 就自动用上新版,不需要谁去手动更新。
```bash
mihomo-up # 进菜单,参数原样透传
@@ -87,25 +87,25 @@ mihomo-up check --json # 子命令照样能用,退出码也透传
和纯粹的"每次重新下载"不同的是,它会把拉到的脚本落一份缓存到 `/var/lib/mihomo-up/`,并在这两种情况下回落到缓存:
- **拉不到**(网络断了、仓库挂了)。这条对代理管理脚本尤其要紧:你最需要它的时候,往往正是代理挂了、网络不正常的时候,那时候还得能进菜单重启服务、看日志。
- **拉取失败**(网络断了、仓库挂了)。这条对代理管理脚本尤其要紧:你最需要它的时候,往往正是代理挂了、网络不正常的时候,那时候还得能进菜单重启服务、看日志。
- **拉到的东西没通过 `bash -n` 语法检查**(上游推了个坏版本,或者中间设备塞回来一个门户登录页)。宁可用旧的,也不以 root 执行来路不明的半个脚本。
抓取带 5 秒连接 / 20 秒总超时,网络卡住不会让菜单一直转着等。
fork 之后想让快捷命令指向你自己那份,装的时候加 `--script-url <你的 raw 地址>`,或者设环境变量 `MIHOMO_UP_URL`。
fork 之后想让快捷命令指向你自己那份,安装的时候加 `--script-url <你的 raw 地址>`,或者设环境变量 `MIHOMO_UP_URL`。
> **cron 里别用它**:每次执行都联网拉脚本,等于给定时任务多加一个失败点。定时任务直接指向缓存那份 `/var/lib/mihomo-up/mihomo-up.sh`,或者你自己固定的副本。
> **cron 里别用它**:每次执行都联网拉取脚本,等于给定时任务多加一个失败点。定时任务直接指向缓存那份 `/var/lib/mihomo-up/mihomo-up.sh`,或者你自己固定的副本。
## 配置向导问什么
向导生成的是一份**最小可用配置**,够跑,不臃肿:
向导生成的是一份**最小可用配置**,够用,不臃肿:
| 问题 | 说明 |
|---|---|
| 订阅链接 | 机场给的 http(s) 地址,写成 `proxy-providers`,每 24 小时自动更新一次 |
| 本地代理端口 | `mixed-port`,HTTP 和 SOCKS5 共用,默认 7890 |
| 局域网共享 | `allow-lan`,开了同网段其它设备也能连(还要放行防火墙) |
| 管理接口 | 只允许本机 / 局域网公网可访问 / 不开。面板和 API 都连这里 |
| 管理接口 | 只允许本机 / 局域网公网可访问 / 不开启。面板和 API 都连这里 |
| 访问密钥 | 回车即自动生成随机串;管理接口开在 `0.0.0.0` 时务必设 |
| Web 面板 | 选是就写 `external-ui-url`,内核首次启动自己去下载 metacubexd |
| 分流规则 | 全部走代理(默认),或者指定某个国家/地区直连、其余走代理 |
@@ -114,22 +114,22 @@ fork 之后想让快捷命令指向你自己那份,装的时候加 `--script-u
选了「指定国家/地区直连」会额外写一条 `GEOIP,<两位国家代码>,DIRECT`,代码填 `CN`、`US`、`JP`、`DE` 都行,小写会自动转大写。
**改配置不用手写 YAML**:菜单「配置管理」能直接换订阅、改端口、开关局域网共享、改面板密钥。
**修改配置不用手写 YAML**:菜单「配置管理」能直接更换订阅、修改端口、开关局域网共享、改面板密钥。
每次改动之前自动备份成 `config.yaml.bak-<时间戳>`,改完立刻用内核 `-t` 校验。**校验不过会问你要不要还原**,服务在跑的话再问一句要不要重启生效。
每次改动之前自动备份成 `config.yaml.bak-<时间戳>`,改完立刻用内核 `-t` 校验。**校验不过会问你要不要还原**,服务正在运行的话再问一句要不要重启生效。
需要手写的复杂配置(DNS、TUN、自定义规则)请用菜单里的「手动编辑配置」,或者用「从 URL 导入完整配置」整份换掉——这两条路同样有备份、校验、还原兜底。
## 升级和回滚
`update` 只换内核二进制,不动你的配置和服务定义。替换前有两道闸门,任一不过就中止:
`update` 只更换内核二进制,不动你的配置和服务定义。替换前有两道闸门,任一不过就中止:
1. 新二进制能跑起来,且 `-v` 自报的版本号和目标一致
1. 新二进制能运行起来,且 `-v` 自报的版本号和目标一致
2. 用**新版本**去 `-t` 校验你**现有的**配置
第二道是为了挡住「新内核不认旧配置」这种升完才发现的问题。配置本来就有毛病、但你只想换内核时,加 `--skip-conf-check` 跳过它。
第二道是为了挡住「新内核不认旧配置」这种升完才发现的问题。配置本来就有毛病、但你只想更换内核时,加 `--skip-conf-check` 跳过它。
替换前旧内核备份到 `/var/backups/mihomo/`(保留最近 3 份)。升级后服务起不来会**自动回滚**到旧版并重启,然后提示你看 `journalctl -u mihomo -n 50`。
替换前旧内核备份到 `/var/backups/mihomo/`(保留最近 3 份)。升级后服务启动不了会**自动回滚**到旧版并重启,然后提示你看 `journalctl -u mihomo -n 50`。
任何一步失败都不会留下半个系统:要么没动,要么已回滚。
@@ -137,16 +137,16 @@ fork 之后想让快捷命令指向你自己那份,装的时候加 `--script-u
```bash
sudo ./mihomo-up.sh uninstall # 逐项确认
sudo ./mihomo-up.sh uninstall --purge # 全删,不问
sudo ./mihomo-up.sh uninstall --purge # 全部删除,不询问
```
直接删掉:内核二进制、`mihomo.service` 及其备份、`mihomo.service.d/` drop-in 目录、快捷命令和它的缓存。systemd 那边会先 stop 再 disable,然后 `daemon-reload` + `reset-failed` 把状态清干净。
会单独问你的两项:配置目录 `/etc/mihomo`(订阅、节点选择记录、面板文件都在里面)、内核备份目录 `/var/backups/mihomo`。留着的话下次重装能直接接上。
会单独问你的两项:配置目录 `/etc/mihomo`(订阅、节点选择记录、面板文件都在里面)、内核备份目录 `/var/backups/mihomo`。留着的话下次重新安装能直接接上。
## 在 cron / CI 里用
无参数运行时,脚本会看 stdin 是不是终端:是就进菜单,被管道或 cron 调用就安静地跑 `check`。
无参数运行时,脚本会看 stdin 是不是终端:是就进菜单,被管道或 cron 调用就安静地运行 `check`。
`check` 的退出码专为脚本化设计:
@@ -177,7 +177,7 @@ mihomo-up.sh check && exit 0
sudo ./mihomo-up.sh install --mirror https://ghfast.top/
```
带 `--mirror` 跑配置向导时,生成的配置里会额外写上走同一个镜像的 `geox-url`,免得内核首次启动下载 GeoIP 数据库时卡住。
带 `--mirror` 运行配置向导时,生成的配置里会额外写上走同一个镜像的 `geox-url`,免得内核首次启动下载 GeoIP 数据库时卡住。
## 选项一览
@@ -185,10 +185,10 @@ sudo ./mihomo-up.sh install --mirror https://ghfast.top/
|---|---|
| `-y, --yes` | 非交互确认,所有询问都当作同意 |
| `-n, --dry-run` | 只打印会做什么,不实际改动 |
| `--force` | 版本相同也重装 |
| `--force` | 版本相同也重新安装 |
| `--version <v>` | 指定内核版本,如 `v1.19.28` |
| `--no-restart` | 装完不启动服务 |
| `--purge` | `uninstall` 时连配置目录和备份一起删 |
| `--no-restart` | 安装完成后不启动服务 |
| `--purge` | `uninstall` 时连配置目录和备份一起删除 |
| `--skip-conf-check` | 升级时不用新版本预校验现有配置 |
| `--json` | `check` 时额外输出一行 JSON |
| `--arch <a>` | 覆盖自动识别的架构:`amd64` / `arm64` / `armv7` |
@@ -215,7 +215,7 @@ sudo ./mihomo-up.sh install --mirror https://ghfast.top/
| `/var/lib/mihomo-up`(脚本缓存) | `MIHOMO_UP_CACHE` |
| 仓库 raw 地址(快捷命令拉取源) | `MIHOMO_UP_URL` |
内核备份最多保留 3 份(脚本内常量 `KEEP=3`)。配置备份不自动清理,攒多了自己删 `config.yaml.bak-*`。
内核备份最多保留 3 份(脚本内常量 `KEEP=3`)。配置备份不自动清理,积累多了自己删除 `config.yaml.bak-*`。
## 参考