参数谁说了算:命令行、环境变量与配置文件的优先级
三层覆盖关系
同一参数在多处设置时,官方手册写明的覆盖顺序:
| 层级 | 例子 | 优先级 |
|---|---|---|
| 命令行参数 | aria2c --all-proxy=… | 最高 |
| 环境变量 | http_proxy、all_proxy、no_proxy | 覆盖配置文件 |
| 配置文件 | aria2.conf 里的同名行 | 兜底 |
以代理为例(官方手册原话的规则):配置文件里写了 http-proxy=…,终端里又 export 了 http_proxy 环境变量——环境变量生效;命令行再给 --http-proxy——命令行生效。
其他参数没有环境变量形态,实际就是"命令行覆盖配置文件"两层。
混合场景的排错思路
行为不符合预期时按这个顺序排查:
- 命令行里是不是带了同名参数( alias 里藏参数是常见坑);
- 环境变量里有没有 proxy 类变量在悄悄生效;
- 配置文件是不是被
--conf-path或--no-conf改道/禁用; - 都没有时才是默认值起作用。
临时排除配置干扰:aria2c --no-conf …;看当前实际生效的全局参数,RPC 开启时调 aria2.getGlobalOption(见 RPC 方法速查)。
单任务参数是第四个维度
-i 清单里写在任务地址下一行的参数(缩进行)只对该任务生效,覆盖全局配置,见批量下载。RPC 的 aria2.changeOption 同理可对单任务覆盖。
运行中改参数
全局参数还可在服务运行中热改:RPC aria2.changeGlobalOption,改完立即生效不用重启。但注意个别参数(如与 netrc 相关的)只在启动时读取,运行中改不生效——以官方手册各参数页的说明为准。
常用默认值对照
拿不准"不写参数是什么行为"时,本站各功能页都附了默认值表,也可以直接查官方手册对应参数的 Default 行。