Snapcast 0.35.0 配置参数详解

Snapcast 0.35.0 配置参数逐段详解:官方默认配置全文、-hh 默认值总览、七类音源 URI、buffer/codec 调节规律、snapclient 全参数要点与两套生产模板。

SnapcastSnapcast音频流媒体2026/10/30

Snapcast 0.35.0 配置参数详解

目标:逐段吃透 /etc/snapserver.conf 全部配置段(server/stream/ssl/tcp-streaming/tcp-control/http/streaming_client/logging)与 snapclient 全部命令行参数的默认值与生效行为,并给出两套可直接落地的生产配置模板。已在 Debian 12(x86_64)实测 Snapcast 0.35.0 全部参数段。

一、环境信息

本文所有参数与回显均在以下实测环境采集:

  • 操作系统:Debian GNU/Linux 12 (bookworm)
  • 架构:x86_64
  • Snapserver / Snapclient:v0.35.0 (rev f1237347),deb 安装
  • 配置文件:/etc/snapserver.conf(deb 默认路径,随包分发)
  • 服务端口:1704(流)/ 1705(TCP 控制台)/ 1780(HTTP 控制台)
  • 溯源数据日期:2026-10-30

二、前置条件

  • 已按 deb 方式安装 snapserver(apt-get install -y ./snapserver_0.35.0-1_amd64_bookworm.deb),版本验证回显:
snapserver v0.35.0 (rev f1237347)
  • deb 随包分发的默认配置文件与相关路径(dpkg -L snapserver 节选,实测):
/etc/default/snapserver
/etc/snapserver.conf
/lib/systemd/system/snapserver.service
/usr/bin/snapserver
/usr/share/snapserver/plug-ins/meta_go-librespot.py
/usr/share/snapserver/plug-ins/meta_librespot-java.py
/usr/share/snapserver/plug-ins/meta_mopidy.py
/usr/share/snapserver/plug-ins/meta_mpd.py
/usr/share/snapserver/sandbox
/usr/share/snapserver/snapweb/index.html

三、参数查看与修改方式

3.1 配置文件 /etc/snapserver.conf

deb 默认配置共 248 行,所有值以注释形式给出默认值,去掉注释即生效。官方默认文件全文(实测原样提取,default values are commented):

[server]
#threads = -1
#pidfile = /var/run/snapserver/pid
#user = snapserver
#group = snapserver
#datadir =

[ssl]
#certificate =
#certificate_key =
#key_password =
#verify_clients = false
#client_cert =
#client_cert =

[http]
#enabled = true
#bind_to_address = ::
#port = 1780
#publish_http = true
#ssl_enabled = false
#ssl_bind_to_address = ::
#ssl_port = 1788
#publish_https = true
doc_root = /usr/share/snapserver/snapweb
#host = <hostname>
#url_prefix = https://<hostname>

[tcp-control]
#enabled = true
#bind_to_address = ::
#port = 1705
#publish = true

[tcp-streaming]
#enabled = true
#bind_to_address = ::
#port = 1704
#publish = true

[stream]
source = pipe:///tmp/snapfifo?name=default
# default_source = default
#plugin_dir = /usr/share/snapserver/plug-ins
#sandbox_dir = /usr/share/snapserver/sandbox
#sampleformat = 48000:16:2
#codec = flac
#chunk_ms = 20
#buffer = 1000
#send_to_muted = false

[streaming_client]
#initial_volume = 100

[logging]
#sink =
#filter = *:info

💡 说明:上表为去掉注释与空行后的有效行集合(与 248 行原文件逐行对应);唯一默认未注释的键是 [http] doc_root(指向内置 Snapweb 网页控制台)与 [stream] source(默认 pipe 源)。bind_to_address = :: 表示 IPv6 双栈监听(IPv4 映射地址同样生效)。

3.2 命令行覆盖 --<section>.<name>=<value>

配置文件里每个键都有等价命令行形式,格式 --<section>.<name>=<value>,命令行优先于配置文件。官方默认配置文件头部的说明原文:

# Settings can be overwritten on command line with:
#  "--<section>.<name>=<value>", e.g. --server.threads=4

systemd 场景修改配置建议直接改 /etc/snapserver.conf(snapserver.service 经 EnvironmentFile=/etc/default/snapserver 透传 $SNAPSERVER_OPTS,也可在 /etc/default/snapserver 里追加命令行覆盖),改完重启生效:

systemctl restart snapserver

3.3 查看生效参数:-hh 与 JSON-RPC

-hh 会把配置文件全部选项连同真实默认值打印出来(snapserver -hh 输出节选,实测):

Allowed options
  -h, --help                          Produce help message, use -hh to show options from config file
  -v, --version                       Show version number
  -d, --daemon [=arg(=0)]             Daemonize
                                      optional process priority [-20..19]
  -c, --config arg (=/etc/snapserver.conf)
                                      Path to the configuration file

Overridable config file options
  --server.threads arg (=-1)          number of server threads
  --server.pidfile arg (=/var/run/snapserver/pid)
                                      pid file when running as daemon
  --server.user arg (=snapserver)     the user to run as when daemonized
  --server.datadir [=arg(=)]          directory where persistent data is stored
  --server.mdns_enabled arg (=1)      enable mDNS to publish services
  --http.enabled arg (=1)             enable HTTP Json RPC (HTTP POST and websockets)
  --http.port arg (=1780)             which port the server should listen on
  --tcp-control.port arg (=1705)      which control port the server should listen on
  --tcp-streaming.port arg (=1704)    which streaming port the server should listen on
  --stream.source arg (=pipe:///tmp/snapfifo?name=default)
                                      URI of the PCM input stream.
                                      Format: TYPE://host/path?name=NAME
                                      [&codec=CODEC]
                                      [&sampleformat=SAMPLEFORMAT]
  --stream.sampleformat arg (=48000:16:2)
                                      Default sample format
  --stream.codec arg (=flac)          Default transport codec
                                      (flac|ogg|opus|pcm)[:options]
  --stream.chunk_ms arg (=20)         Default stream read chunk size [ms]
  --stream.buffer arg (=1000)         Buffer [ms]
  --stream.send_to_muted arg (=0)     Send audio to muted clients
  --streaming_client.initial_volume arg (=100)
                                      Volume [percent] assigned to new streaming clients
  --logging.filter arg (=*:info)      log filter <tag>:<level>[,<tag>:<level>]*

运行中的流参数(codec/sampleformat/chunk_ms 的实际生效值)经 JSON-RPC 查询最直接(实测):

curl -s http://127.0.0.1:1780/jsonrpc -H 'Content-Type: application/json' \
  -d '{"id":1,"jsonrpc":"2.0","method":"Server.GetStatus"}'
"streams": [
    {
        "id": "SineTest",
        "status": "playing",
        "uri": {
            "query": {
                "chunk_ms": "20",
                "codec": "pcm",
                "name": "SineTest",
                "sampleformat": "44100:16:2"
            },
            "raw": "pipe:///serverdata/snapfifo?chunk_ms=20&codec=pcm&name=SineTest&sampleformat=44100%3A16%3A2",
            "scheme": "pipe"
        }
    }
]

四、参数总览

按配置段汇总全部参数与默认值(默认值取自 snapserver -hh 实测输出):

段参数默认值作用一句话
serverthreads-1工作线程数(<0 按核数自适应:2 或 4)
serverpidfile/var/run/snapserver/pid守护模式 pid 文件
serveruser / groupsnapserver / snapserver守护模式降权运行账号
serverdatadir(空=按运行模式推导)server.json 持久化目录
servermdns_enabledtruemDNS 服务发布开关
sslcertificate / certificate_key(空)TLS 证书与私钥(PEM)
sslkey_password(空)私钥解密口令
sslverify_clientsfalse是否校验客户端证书
sslclient_cert(空,可多次)客户端 CA 列表
httpenabled / porttrue / 1780HTTP JSON-RPC + WebSocket
httpbind_to_address::监听地址(可多次)
httpssl_enabled / ssl_portfalse / 1788HTTPS 控制面
httpdoc_root(注释态;deb 默认 /usr/share/snapserver/snapweb)静态网站根目录(Snapweb)
httphost / url_prefix<hostname> / (空)封面图外链主机名 / 反代 URL 前缀
httppublish_http / publish_httpstrue / truemDNS 发布开关
tcp-controlenabled / porttrue / 1705TCP JSON-RPC 控制台
tcp-streamingenabled / porttrue / 1704音频流分发端口
streamsourcepipe:///tmp/snapfifo?name=default音源 URI(可配置多行)
streamdefault_source(首个非 meta 源)新客户端默认接入流
streamplugin_dir / sandbox_dir/usr/share/snapserver/plug-ins · /sandboxmeta 插件与可执行源沙箱目录
streamsampleformat48000:16:2默认采样格式
streamcodecflac默认传输编码
streamchunk_ms20源读取/编码时间片(ms)
streambuffer1000端到端同步缓冲(ms)
streamsend_to_mutedfalse静音客户端是否仍推流
streaming_clientinitial_volume100新客户端初始音量
loggingsink(空=daemon 用 system,前台用 stdout)日志出口
loggingfilter*:info日志级别过滤

关键差异解读:三个「行为分水岭」参数是 buffer(同步时延)、codec(CPU/带宽权衡)、source(音源拓扑),其余多为监听面与安全面开关;先定这三者,再按需调其余。

五、核心参数分类详解

5.1 [server] 服务基础段

  • threads = -1:附加工作线程数。官方注释明确:小于 0 时按 CPU 核数自适应(单核/双核用 2,四核及以上用 4);设 0 仅用主线程,多流并行编码时可能掉音。4 核以上服务器默认即可,无需修改。
  • datadir:server.json(客户端拓扑持久化)所在目录。留空时按运行模式推导——守护模式 /var/lib/snapserver/,前台模式 $HOME/.config/snapserver/(官方注释原文)。建议显式指定并纳入备份/挂载,实测未持久化该目录时,服务端重建后客户端命名/音量/分组全部丢失。
  • mdns_enabled = true:通过 Avahi/Bonjour 发布 _snapcast._tcp 等服务,客户端可零配置发现。无 avahi 守护进程的环境(如精简系统)会在日志报 [Error] (Avahi) Failed to create client: Daemon not running(实测原文),不影响 TCP 直连,可设 false 消除报错。
  • user/group/pidfile:仅守护模式(-d)生效;systemd 托管时由单元文件接管(User=snapserver),无需配置。

5.2 [stream] 流与音源段(核心)

source:每行定义一个流,格式与全部类型(官方默认配置注释原文):

# Format: TYPE://host/path?name=<name>[&codec=<codec>][&sampleformat=<sampleformat>][&chunk_ms=<chunk ms>][&controlscript=<control script filename>[&controlscriptparams=<control script command line arguments>]]
# pipe: pipe:///<path/to/pipe>?name=<name>[&mode=create], mode can be "create" or "read"
# librespot: librespot:///<path/to/librespot>?name=<name>[&username=<my username>&password=<my password>][&devicename=Snapcast][&bitrate=320][&wd_timeout=7800][&volume=100][&onevent=""][&normalize=false][&autoplay=false][&params=<generic librepsot process arguments>]
# file: file:///<path/to/PCM/file>?name=<name>
# process: process:///<path/to/process>?name=<name>[&wd_timeout=0][&log_stderr=false][&params=<process arguments>]
# airplay: airplay:///<path/to/airplay>?name=<name>[&port=5000]
# tcp server: tcp://<listen IP, e.g. 127.0.0.1>:<port>?name=<name>[&mode=server]
# tcp client: tcp://<server IP, e.g. 127.0.0.1>:<port>?name=<name>&mode=client
# alsa: alsa:///?name=<name>&device=<alsa device>[&send_silence=false][&idle_threshold=100][&silence_threshold_percent=0.0]
# meta: meta:///<name of source#1>/<name of source#2>/.../<name of source#N>?name=<name>

七类源选型要点(本文实测采用 pipe):

  • pipe:命名管道,最通用——MPD 的 pipe 输出、脚本生成器、系统音频 loopback 都往里写;mode=create(默认)服务器自动建管道,mode=read 要求管道已存在;
  • file:读 PCM 裸文件做测试源;
  • process:把子进程 stdout 当 PCM 流(如 process:///usr/bin/someplayer?name=X&params=-b 320);
  • librespot:内嵌 Spotify Connect(需 librespot 二进制,强制 44100:16:2);
  • airplay:内嵌 AirPlay 接收(需配套二进制);
  • tcp:server 模式监听端口收流、client 模式拉远端流,适合跨机中继;
  • meta:把多个具名流聚合为一个可切换的虚拟流(多上游共存的标准做法,插件脚本在 plugin_dir)。

sampleformat:<采样率>:<位深>:<声道>,默认 48000:16:2。源侧格式不同时由服务器统一到该格式;与上游输出格式保持一致可避免重采样损失。

codec:默认 flac。四选对比与专属参数实测(snapserver --stream.codec=<codec>:?):

== codec=flac options ==
Options for codec 'flac':
  compression level: [0..8]
  Default: '2'
== codec=ogg options ==
Options for codec 'ogg':
  VBR:[-0.1 - 1.0]
  Default: 'VBR:0.9'
== codec=opus options ==
Options for codec 'opus':
  BITRATE:[6000 - 512000|MAX|AUTO],COMPLEXITY:[1-10]
  Default: 'BITRATE:192000,COMPLEXITY:10'
== codec=pcm options ==
Options for codec 'pcm':
  No codec options supported
  Default: ''

💡 技术拓展:传输 codec 四选对比——

codec压缩性质CPU典型码率适用场景
pcm无压缩最低44100×16×2 ≈ 1.4 Mbps内网带宽富余、追求零编码开销
flac无损压缩低约压缩到 50-70%默认选择,音质无损(官方默认)
ogg有损 VBR中质量档 0.9 约 160-200 kbps带宽受限
opus有损中192 kbps 默认,可低至 6 kbps低带宽 Wi-Fi、嵌入式客户端

本文实测环境(千兆内网、零编码开销需求)用 codec = pcm;一般家庭环境保持默认 flac。写法带专属参数示例:codec = flac:3(压缩级别 3)。

chunk_ms:从源读取并编码的时间片,默认 20ms。官方注释特别提醒部分编码需要更大块(原文:e.g. Flac will need ~26ms chunks)——用 flac 时保持默认即可,服务器自动满足;调小可降时延但增大每秒请求数。

buffer:端到端同步缓冲,官方注释定义原文「The end-to-end latency, from capturing a sample on the server until the sample is played-out on the client」,默认 1000ms。调节规律:

  • 网络抖动大(Wi-Fi 拥塞、跨交换机)→ 调大到 1500-2000ms,抗抖动更强;
  • 追求切歌/调音量响应快 → 降到 400-800ms,网络需稳定;
  • 客户端日志出现 abs(age > 500) 类缓冲告警(实测原文形态)即提示缓冲不足或源断流。

send_to_muted:默认 false——静音客户端不推流省带宽;true 则静音客户端也接收数据(切回有声零等待,代价是持续占用带宽与编码 CPU)。

default_source:新接入客户端默认加入的流名;不设则取第一个非 meta 源(官方注释)。

5.3 [streaming_client] 段

initial_volume = 100:新客户端接入时的初始音量百分比。全屋场景建议保持 100(由控制端统一管理音量);夜间场景可降到 50 防止新设备突然大声。

5.4 [tcp-streaming] / [tcp-control] 段

  • tcp-streaming(1704):音频分发面,只服务 snapclient;bind_to_address 建议生产环境绑定内网网卡地址(可多次指定);
  • tcp-control(1705):TCP JSON-RPC 控制面,每行一个请求。实测一次(裸 TCP 直发):
{"id":1,"jsonrpc":"2.0","method":"Server.GetRPCVersion"}
{"id":1,"jsonrpc":"2.0","result":{"major":23,"minor":0,"patch":0}}
  • 两者都有 publish 开关(mDNS 发布),纯静态环境可关闭。

5.5 [http] 段

  • enabled/port:HTTP JSON-RPC(POST 与 WebSocket 同端口),默认 1780;
  • doc_root:deb 默认已指向 /usr/share/snapserver/snapweb,浏览器访问 http://<server>:1780/ 即 Snapweb 控制台(分组/音量/切流全可视化)。改为自定义站点目录即托管自己的前端;删除该行则回退内置默认页(实测返回 HTTP/1.1 200 OK + Server: Snapcast);
  • ssl_enabled/ssl_port(1788):HTTPS 控制面,配合 [ssl] 段证书使用;
  • host/url_prefix:封面图外链的可达主机名与反代前缀,仅在把 Snapweb/API 暴露给外部域名时需要配置。

5.6 [ssl] 段

certificate/certificate_key(PEM 格式)为最小配置;verify_clients = true 后须用 client_cert(可多次)提供受信 CA 列表,实现双向认证。证书相对路径在当前目录与 /etc/snapserver/certs/ 中查找(官方注释)。公网暴露前:HTTP 换 HTTPS、控制面绑定 127.0.0.1 或加 [authorization](命令行 --authorization.enabled=1 --authorization.role=... --authorization.user=...,-hh 实测可见)。

5.7 [logging] 段

  • sink:null、system(syslog/journald)、stdout、stderr、file:<路径> 五选;留空时守护模式用 system、前台用 stdout(官方注释)。systemd 托管保持默认(deb 单元已显式 --logging.sink=system);
  • filter:<tag>:<level> 逗号组合,级别 trace/debug/info/notice/warning/error/fatal。排障首选 *:debug(实测本文排障即用它拿到完整会话日志),日常 *:info;只调某模块如 Stream:debug,*:info。

5.8 snapclient 侧参数

客户端无配置文件,全部走命令行(snapclient --help 全文实测):

Usage: snapclient [options...] [url]

 With 'url' = <tcp|ws|wss>://<snapserver host or IP or mDNS service name>[:port]
 For example: 'tcp://192.168.1.1:1704', or 'ws://)homeserver.local' or 'wss://_snapcast-https._tcp'
 If 'url' is not configured, snapclient defaults to 'tcp://_snapcast._tcp'

  -i, --instance arg (=1)             Instance id when running multiple instances on the same host
  --hostID arg                        Unique host id, default is MAC address
  --cert arg                          Client certificate file (PEM format)
  --cert-key arg                      Client private key file (PEM format)
  --key-password arg                  Key password (for encrypted private key file)
  --server-cert [=arg(="default certificates")]
                                      Verify server with CA certificate (PEM format)
  -l, --list                          List PCM devices
  -s, --soundcard arg (=default)      Index or name of the PCM device
  --latency arg (=0)                  Latency of the PCM device
  --sampleformat arg                  Resample audio stream to <rate>:<bits>:<channels>
  --player arg (=alsa)                alsa|file[:<options>|?]
  --mixer arg (=software)             software|hardware|script|none|?[:<options>]
  -d, --daemon [=arg(=-3)]            Daemonize, optional process priority [-20..19]
  --user arg                          The user[:group] to run snapclient as when daemonized
  --logsink arg                       Log sink [null,system,stdout,stderr,file:<filename>]
  --logfilter arg (=*:info)           Log filter <tag>:<level>[,<tag>:<level>]*

逐项要点:

  • url(位置参数):tcp://<server>[:1704] 生产标配;ws:///wss:// 走 1780/1788;不填则 mDNS 发现 tcp://_snapcast._tcp;
  • --hostID:客户端唯一身份,默认取本机 MAC。MAC 会漂移的环境(虚拟机重建、网卡更换)必须显式固定(如 --hostID living-room),否则服务器端音量/分组配置对不上号(实测环境重建后 MAC 变化、旧配置记录失联);
  • --soundcard / -l:输出设备索引或名称,默认 default;无声卡环境用 ALSA null 设备验证链路(实测 snapclient -l 与启动日志):
0: null
Discard all samples (playback) or generate zero samples (capture)
2026-10-30 00-51-59.287 [Info] (Player) Player name: alsa, device: null, description: Discard all samples (playback) or generate zero samples (capture), idx: 0, sharing mode: unspecified, parameters: <none>
  • --latency:声卡/功放链路固有延迟补偿(毫秒),默认 0;不同房间功放延迟不同时可按客户端单独补偿,也可经 JSON-RPC Client.SetLatency 在线调(实测设 10ms 回显 {"latency": 10});
  • --sampleformat:强制重采样到指定 <rate>:<bits>:<channels>,与服务器流格式不一致时客户端本机重采样;
  • --player:输出后端,默认 alsa,可选 file(写文件);--player file 时 --soundcard 参数值即输出文件路径;
  • --mixer:音量混合器实现,默认 software(客户端软件混音,最通用);hardware 走声卡硬件混音、script 自定义脚本、none 禁用(音量控制失效);
  • --instance:同机多实例编号(一块声卡跑多路或一台机器模拟多房间时区分实例);
  • --daemon/-d:守护化,默认 nice 值 -3;systemd 托管场景不需要;
  • TLS 三件套:--cert/--cert-key/--server-cert 对接服务器 [ssl] 段的客户端证书校验。

六、生产配置模板

6.1 家庭全屋音频模板(适用:8GB 内存、百兆内网、5-10 个客户端、单 MPD 上游)

[server]
threads = -1
mdns_enabled = true
datadir = /var/lib/snapserver

[stream]
source = pipe:///tmp/snapfifo?name=Mpd&controlscript=meta_mpd.py
sampleformat = 44100:16:2
codec = flac
chunk_ms = 20
buffer = 1000
send_to_muted = false

[tcp-streaming]
enabled = true
port = 1704

[tcp-control]
enabled = true
port = 1705
bind_to_address = 192.168.1.10

[http]
enabled = true
port = 1780
bind_to_address = 192.168.1.10
doc_root = /usr/share/snapserver/snapweb

[streaming_client]
initial_volume = 100

[logging]
filter = *:info

要点:codec = flac 用默认压缩级别 2(百兆内网 10 客户端同时拉流约 10×700kbps,余量充足);控制面绑定内网 IP 避免误暴露;datadir 显式指向默认持久化路径并纳入备份;buffer 保持 1000ms 抗 Wi-Fi 抖动。

6.2 多源分区模板(适用:16GB 内存、千兆内网、客厅/书房分区 + Spotify 在线源)

[server]
threads = 4
datadir = /var/lib/snapserver

[stream]
source = pipe:///tmp/snapfifo-mpd?name=Mpd&sampleformat=44100:16:2
source = librespot:///usr/bin/librespot?name=Spotify&bitrate=320&devicename=Snapcast
source = meta:///Mpd/Spotify?name=Master
default_source = Master
sampleformat = 44100:16:2
codec = pcm
chunk_ms = 20
buffer = 1000

[tcp-streaming]
enabled = true
port = 1704

[tcp-control]
enabled = true
port = 1705

[http]
enabled = true
port = 1780
doc_root = /usr/share/snapserver/snapweb

[logging]
filter = *:info

要点:pcm 编码把 CPU 留给多流并行(千兆内网 1.4Mbps/客户端无压力);meta:///Mpd/Spotify 聚合两源为 Master 并设为默认,客户端切流在 Snapweb 里完成;threads = 4 显式给足编码线程。两套模板均已在本文实测环境逐段验证语法与监听行为。

七、常见问题

Q1:改了 /etc/snapserver.conf 不生效? 三步排查:确认改的是 /etc/snapserver.conf(snapserver -c 指定的路径优先);确认重启过服务(systemctl restart snapserver);确认没有同名命令行覆盖(/etc/default/snapserver 的 SNAPSERVER_OPTS 与 systemd 单元 ExecStart 里的参数优先级更高)。

Q2:buffer 调小后客户端频繁缓冲告警? 客户端日志形态(实测原文):

2026-10-30 00-52-03.237 [Info] (Stream) abs(age > 500): 559969
2026-10-30 00-52-03.237 [Info] (Alsa) Failed to get chunk

网络抖动超过缓冲余量,把 buffer 逐步回调(每次 +250ms)直到告警消失;同时排查 Wi-Fi 漫游/拥塞。

Q3:flac 流客户端报解码错误? 多为 chunk_ms 被改小于 20(flac 需要 ~26ms 块,官方注释原文)或 sampleformat 与源不匹配。恢复 chunk_ms = 20 并核对 sampleformat。

Q4:如何确认某流的实际生效参数? JSON-RPC Server.GetStatus 的 streams[].uri.query(本文 3.3 实测回显),比翻配置文件可靠——它反映的是运行时真实值。

Q5:无声卡机器能当客户端吗? 能。--soundcard null(ALSA null 设备丢弃采样)即可完整验证同步链路,实测日志见 5.8;真实出声仍需声卡或 --player file 落文件检查。

八、参考链接

  1. 官方配置文档:https://raw.githubusercontent.com/snapcast/snapcast/develop/doc/configuration.md
  2. JSON-RPC API 文档:https://github.com/snapcast/snapcast/blob/develop/doc/json_rpc_api/
  3. 站内相关篇目:《Snapcast 0.35.0 介绍与选型指南》、《Snapcast 0.35.0 Docker Compose 部署指南》、《Snapcast 0.35.0 常用 CLI 命令与工具详解》