1. 寻址机制与工作目录(Home Directory)优先级
Mihomo 并不依赖单一的固定路径,而是遵循以下分层查找顺序:
1. **命令行显式指定(最高优先级)**:
通过 `-d /your/custom/dir` 参数传入时,内核完全锁定该目录;
2. **环境变量寻址**:
如果设置了 `CLASH_HOME` 或 `MIHOMO_HOME` 环境变量,内核会优先读取环境变量指向的文件夹;
3. **平台默认用户目录(缺省回退)**:
- **Linux / macOS**:`$HOME/.config/mihomo/config.yaml`;
- **Windows**:`C:\Users\<用户名>\.config\mihomo\config.yaml`;
- **嵌入式软路由**:通常直接将当前执行目录设为工作路径。
💡 在编写自动化部署脚本时,强烈建议永远使用 `-d` 显式声明绝对路径,避免由于运行身份(root vs 普通用户)切换导致找不到配置文件。
2. 工作目录完整静态资源拓扑拆解
一个完整健全的 Mihomo 运行目录结构包含以下核心文件:
```text
/etc/mihomo/
├── config.yaml # [核心] 用户主配置文件
├── Country.mmdb # [数据] MaxMind 格式全球 IP 地理定位二进制数据库
├── geoip.dat # [数据] MetaCubeX 扩展增强版 IP 库
├── geosite.dat # [数据] 增强型域名分类规则数据库
├── cache.db # [动态] BoltDB 键值缓存(保存 Fake-IP 映射与测速记录)
└── ruleset/ # [可选] 存放外部 rule-providers 下载的 mrs 规则文件
```
### 静态数据库的作用与自动更新:
- **Country.mmdb**:用于规则中 `GEOIP,CN,DIRECT` 的归属地快速判定;
- **geosite.dat**:用于 `GEOSITE,google,PROXY` 等域名集命中;
- **cache.db**:内核运行时动态创建,无需手动编辑,删除该文件不会破坏配置,仅会清空历史延迟缓存。
bash
# 手动拉取最新版 GeoIP 与 GeoSite 数据库(解决国内启动自动下载卡死问题)
wget -O /etc/mihomo/Country.mmdb https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb
wget -O /etc/mihomo/geosite.dat https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat 3. 自动下载机制与离线静默启动配置
默认情况下,若工作目录中缺失 `Country.mmdb`,Mihomo 会尝试从官方 GitHub 仓库下载该文件。但在国内网络环境下,直连 GitHub 极易超时中断,造成内核卡在启动阶段甚至抛出 fatal error。
### 生产级推荐配置:配置自定义镜像加速源与自动更新
yaml
# 在 config.yaml 顶层指定可靠的国内加速镜像与自动更新周期
geodata-mode: true
geo-auto-update: true
geo-update-interval: 48 # 每 48 小时自动更新一次
geox-url:
geoip: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
geosite: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
mmdb: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb" 4. 经典路径与权限踩坑实录
### 故障 1:`open cache.db: permission denied`
- **根因**:之前曾使用 `sudo mihomo` 运行过服务,导致生成的 `cache.db` 文件属主归属于 root;后续换用普通用户运行时无法写入。
- **修复**:修正目录权限属主:`sudo chown -R $USER:$USER ~/.config/mihomo`。
### 故障 2:多配置文件共存时的混淆
- 很多用户在 `~/.config/mihomo` 中放了 `config.yaml`、`sub.yaml`、`test.yaml`。如果不带 `-f` 参数,Mihomo **永远只会读取名为 `config.yaml` 的主文件**,修改其他文件完全不会生效。
❓ 常见疑问与排查步骤
可以不下载 Country.mmdb 正常启动吗?
可以。如果在 rules 规则中完全没有使用 GEOIP 规则(全部使用 DOMAIN 或 MRS 规则集),内核即便没有 mmdb 库也可以正常转发流量。
GUI 客户端(如 Clash Verge)的配置文件保存在哪里?
桌面客户端通常将配置保存在自身应用数据目录中,例如 Windows 位于 `%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\profiles`。
删除 cache.db 会导致订阅失效吗?
不会。cache.db 仅记录 Fake-IP 映射记录与节点最近一次的 Ping 延迟测试数值,删除后内核在启动时会自动重新生成。