适用范围:本机(lynux.net 所在服务器)的 lynux 系统全部命令行入口。
版本基线:源码仓库根目录 VERSION(本页按 1.1.0 整理);生产副本以页脚版本和其 bin/ 目录实际存在的入口为准。
执行位置:除特别注明外,命令都在仓库根目录下执行;PHP ≥ 8.3(本机 8.5),形式为 php bin/...。
读表约定:--x=VALUE 里 VALUE 必填;[--x] 是开关;[--x=VALUE] 可省略,省略时用「默认」列(写在参数里)。
副作用:每个命令的「功能」列里标了「(只读)」「(写库)」「(写文件)」,破坏性命令另标「⚠」。
覆盖范围:源码仓库 bin/ 下 63 个入口(61 个 PHP + 2 个 Shell);§1 是全量索引,§2–§8 展开参数与边界。

相关文档:docs/OPERATIONS.md(备份/守卫/定时任务)、docs/ACTIONS.md(动作 ↔ HTTP 码)、
docs/CONSOLE.md(控制台)、docs/THEMES.md(主题)、docs/CATEGORY.md(分类/标签)、
docs/VIEWS.md(集合)、docs/TRACE.md(请求特征)、docs/LLM.md(LLM 旁路)、docs/next.md(验收清单)。


1. 命令总览(63 个入口)

按用途分组列出全部 bin/ 入口;详细参数、默认值与副作用见后文分节。

类别 命令 用途
迁移与初始化 bin/migrate.php 执行 schema 与 migrations(幂等)
迁移与初始化 bin/content_migrate.php pages → content_items 数据迁移
迁移与初始化 bin/content_prepare.php 播种内置 HTML 内容类型 v1
迁移与初始化 bin/merge_articles_into_pages.php 把历史 articles 并入 pages
迁移与初始化 bin/console_seed.php 控制台初始 skill / tool / manifest
内容生产与发布 bin/publish_doc.php 把仓库 Markdown 发布为文章
内容生产与发布 bin/publish_scheduled.php 执行到期的发布 / 下线计划
内容生产与发布 bin/theme_rewrap.php 已发布文章重套当前主题外壳
内容生产与发布 bin/repair_static.php 按库重发分叉的静态文章
内容生产与发布 bin/content_rebuild.php 按条 / 类型 / 全站重建详情页
内容生产与发布 bin/content_repair.php 按发布记录修复 /posts /pages /c
内容生产与发布 bin/content_doctor.php 审计 /c 产物一致性(可修复)
内容生产与发布 bin/seo_build.php 生成 sitemap / feed / robots
内容生产与发布 bin/content_analytics.php 内容规模与发布统计
分类与视图 bin/content_relations.php 查看 / 建立 / 删除内容关系
分类与视图 bin/taxonomy_gc.php 清理分类 / 标签孤儿关联
分类与视图 bin/taxonomy_bench.php 分类 / 标签规模基准(测试库)
分类与视图 bin/views.php 集合查看 / 编译 / 发布 / 自检
搜索与索引 bin/content_reindex.php 重建统一内容搜索索引
搜索与索引 bin/set-search-key.php 写入 Tavily 搜索 key
搜索与索引 bin/fingerprint_sync.php 同步 JA3 / IP 信誉 cache
账户与安全 bin/manager_account.php 建 / 改控制台账户
账户与安全 bin/manager_totp.php 生成 / 启用 / 关闭 TOTP
账户与安全 bin/rotate_session_secret.php 轮换会话与签名密钥
账户与安全 bin/rate_gc.php 清理过期限流文件
账户与安全 bin/security_train.php 训练 MicroLLM v2 风险头
账户与安全 bin/security_eval.php 离线评估安全模型
账户与安全 bin/mine_concepts.php 从记忆向量聚类挖概念
训练与标注 bin/export_training.php 导出决策样本 JSONL
训练与标注 bin/label.php 生成 / 导入人工标注表
训练与标注 bin/train_llm.php 训练旁路神经网络权重
训练与标注 bin/train_meta.php 元学习占位入口(未实现)
训练与标注 bin/compare_engines.php 对比规则与神经引擎准确率
请求特征 trace bin/trace_salt.php 生成 ip_hash 加盐盐值
请求特征 trace bin/trace_import.php Apache 日志 → 请求特征 + 标签
请求特征 trace bin/site_routes_build.php 生成站点路由并回填 route_kind
请求特征 trace bin/trace_label_preview.php 预览 trace-2 标签分布
请求特征 trace bin/trace_relabel.php 给旧特征补 trace-2 标签
请求特征 trace bin/trace_label_apply.php 把人工复核写回标签
请求特征 trace bin/trace_audit_sheet.php 分层抽样生成复核表
请求特征 trace bin/trace_audit_priority.php 挑最可能错的复核子表
请求特征 trace bin/trace_audit_miss_burst.php 抽 miss_burst 规则复核表
请求特征 trace bin/trace_audit_random.php 无偏分层随机审计表
请求特征 trace bin/trace_audit_disagreements.php 抽人工 / 模型不一致行
请求特征 trace bin/trace_eval_v2.php 评估 v2 规则与人工一致率
请求特征 trace bin/trace_eval_baselines.php 对比四套基线
请求特征 trace bin/trace_health.php 检查 trace 管道健康
请求特征 trace bin/trace_purge.php 按日期删除请求特征
请求特征 trace bin/probe_trace.php 内置样本自检 + 库内读数
LLM 旁路 bin/set-llm-key.php 写入 LLM key(不回显)
LLM 旁路 bin/llm_ping.php LLM 连通性自检
LLM 旁路 bin/llm_worker.php 消费解释队列
备份与健康 bin/backup_create.php DB + 文件 + 配置备份
备份与健康 bin/backup_verify.php 校验备份并临时库恢复
备份与健康 bin/content_guard.php 内容巡检 + 自动修复 + 状态
备份与健康 bin/health_alert.php 汇总健康状态并告警
压测与验收 bin/soak.php 浸泡 / 压测并统计延迟
压测与验收 bin/bench.sh wrk 性能基线
压测与验收 bin/client_check.sh 客户端链路与七码验收
压测与验收 bin/acceptance.php 交付验收 13 项
压测与验收 bin/drill.php 降级开关演练
数据回放与清理 bin/import_apache_log.php 回放日志到决策引擎
数据回放与清理 bin/prune_decisions.php 清理历史决策与记忆

表中不含 bin/.gitkeep。所有 PHP 入口都从仓库根目录执行;两个 .sh 用 bash bin/... 执行。


2. 数据与内容

命令 语法 参数 功能
bin/migrate.php php bin/migrate.php [--dry-run] --dry-run 只列出将执行的文件与字节数(实测输出 [dry-run] sql/… 875 字节),不连库执行 跑 sql/schema.sql + sql/migrations/*.sql,幂等(写库)
bin/content_migrate.php php bin/content_migrate.php --dry-run / --apply / --verify / --rollback --json 机器可读;--max-html=N 单条 HTML 上限(默认 500);--apply 必须配 --confirm=apply;--rollback 必须配 --confirm=rollback pages → content_items 整合迁移;--dry-run 只读盘点,--verify 校验,--rollback 撤销(写库)⚠
bin/content_prepare.php php bin/content_prepare.php [--apply] [--json] 默认 plan 只读;--apply 写内置类型 v1;--json 机器可读 播种 article/page 的 HTML 类型版本 + system/url_pattern;不改 pages/发布链
bin/merge_articles_into_pages.php php bin/merge_articles_into_pages.php [--apply] --apply 真写;默认干跑 历史迁移:把 articles 表的文章合并进 pages(同 slug 复用、搬完标记 archived)(写库)⚠
bin/publish_doc.php php bin/publish_doc.php --file=PATH [--slug=S] [--title=T] [--tags=a,b] [--dry-run] [--apply] [--keep-paths] --file 仓库内 .md(必填);--slug 不填按文件名;--title 不填取首个 H1;--tags 默认 lynux,命令,运维;--dry-run 只报字节数;--apply 才写库发布;--keep-paths 保留绝对路径 Markdown → article_render 外壳 → 存草稿 → 发布;同 slug 幂等更新(版本 +1,写库 + 写 public/posts/)
bin/publish_scheduled.php php bin/publish_scheduled.php [--dry-run] [--json] --dry-run 只列到期项;--json 机器可读 取到期计划(最多 100 条):审核通过才发布,unpublish 归档下线;写 storage/health/schedule.json;退出码 1 = 有失败项(写库 + 写文件)
bin/theme_rewrap.php php bin/theme_rewrap.php [--apply] [--slug=SLUG] --apply 真写;--slug 只处理一篇 把已发布文章的旧外壳重排进 /themes/active 外壳(存新版本并发布);默认干跑(写库 + 写 public/posts/)⚠
bin/content_rebuild.php php bin/content_rebuild.php --id=N / --type=CODE / --all --dry-run 只列将重建的条目 用当前已发布版式重渲染详情页静态产物;不新增版本、不移动 published_version(写文件)
bin/repair_static.php php bin/repair_static.php [--slug=SLUG] [--apply] --slug 只查一篇;--apply 真重发(默认干跑,只比对不改);--help 用法 比对 sha256(文件) 与 pages.checksum,不一致就按库里当前已发布版本重发;孤儿产物只报告不删(写库 + 写文件)
bin/content_repair.php php bin/content_repair.php --scan / --apply [--slug=SLUG] [--json] --scan 只读比对;--apply 按 content_publications.html 重写静态文件 cutover 后修 /posts、/pages、/c 产物;不改 items/版本/发布记录(写文件)
bin/content_doctor.php php bin/content_doctor.php [--apply] [--json] --apply 用 content_publications.html 重写缺失/损坏文件;--json 机器可读 审计 /c 发布记录:路径、URL、版本、checksum、孤儿页;默认只读(只读 / --apply 写文件)
bin/content_relations.php php bin/content_relations.php --list=TYPE:ID 或 --link=ST:SID:TT:TID[:REL] 或 --unlink=... --symmetric 同时写反向关系;REL 默认 related 查看 / 建立 / 删除跨内容关系;--list 只读,--link/--unlink 写库
bin/content_reindex.php php bin/content_reindex.php --all / --search=Q / --stats --limit=N 查询上限(默认 10);--json 机器可读 索引已发布 content_items(article/page/custom);不碰 page_search(写库)
bin/seo_build.php php bin/seo_build.php [--apply] [--json] 默认 dry-run;--apply 写 sitemap/feed/robots 从 content_publications 生成 public/sitemap.xml、feed.xml、robots.txt;LYNUX_SITE_URL 决定绝对域名(写文件)
bin/content_analytics.php php bin/content_analytics.php [--json] 只读计数 items/状态/类型、publications、7 天发布、search 规模、最新 5 条
bin/import_apache_log.php php bin/import_apache_log.php [--file=PATH] [--dir=DIR] [--pattern=GLOB] [--limit=N] [--dry-run] --file 单个日志;--dir 目录(默认 --pattern 为 *-access.log);--limit 最多回放条数(默认 100000);--dry-run 只解析不入库 把 Apache combined 日志回放进决策引擎,落库 source='import',不影响线上响应(写库)
bin/prune_decisions.php php bin/prune_decisions.php --days=N [--source=SRC] [--dry-run] --days 保留天数(默认 7,≥1);--source = live / shadow / import / probe / soak(默认全部);--dry-run 只报行数 清理超过 N 天的 decisions(连同对应记忆)(写库)⚠
bin/fingerprint_sync.php php bin/fingerprint_sync.php 无 同步 JA3 指纹 / IP 信誉到本地 cache(当前是内置示例数据,真实源待接)(写文件)

3. 训练、安全与标注

命令 语法 参数 功能
bin/export_training.php php bin/export_training.php [--days=N] [--limit=N] [--out=PATH] --days 取最近天数(默认 7);--limit 上限(默认 1000000);--out 输出路径(默认 storage/training.jsonl) 导出决策样本 JSONL(action 是弱标注,reviewed=false)(写文件)
bin/label.php 三选一:--sheet[=PATH] [--limit=N] 或 --apply=PATH 或 --weak --sheet 生成复核表(默认 storage/labeling_sheet.csv);--limit 条数(默认 500);--apply 导入复核结果;--weak 直接把弱标注当标签 人工复核/标注:产出 labels.jsonl 供训练(写文件 / 写库)
bin/train_llm.php php bin/train_llm.php [DATA] [WEIGHTS_OUT] [LR] [EPOCHS] 位置参数:样本路径(默认 storage/training.jsonl)、权重输出(默认 storage/weights_neural.json)、学习率(默认 1e-2)、轮数(默认 20) 训练旁路 LLM;engine=rule 时明确拒绝并以非零码退出(写文件)
bin/train_meta.php php bin/train_meta.php 无 元学习训练入口:未实现,当前直接打印原因并退出 1(占位)
bin/compare_engines.php php bin/compare_engines.php [DATA] [WEIGHTS] 位置参数:样本路径、权重路径(同 train 的默认值) 用同一批样本对比 RuleEngine 与 NeuralEngine 的准确率(只读)
bin/security_train.php php bin/security_train.php --data=PATH [--out=PATH] [--epochs=N] [--lr=F] [--l2=F] [--positive-weight=F] [--dry-run] --data JSONL 训练集(必填);--out 模型输出(默认 config/security.php 的 model_path);--epochs 轮数(默认 200);--lr 学习率(默认 0.1);--l2 正则(默认 0.001);--positive-weight 攻击类权重(默认 3);--dry-run 只训练不写盘 离线训练 MicroLLM v2 风险头(逻辑回归),输出 model.json;不参与请求链路(写文件)
bin/security_eval.php php bin/security_eval.php --data=FILE.jsonl [--json] --data 带 features / label 的 JSONL(必填);--json 机器可读 评估 precision/recall/F1/FPR/logloss;不训练、不写库、不改阈值(只读)
bin/mine_concepts.php php bin/mine_concepts.php 环境变量:EPS(默认 0.35)、MINPTS(默认 3)、LYNUX_DSN/LYNUX_USER/LYNUX_PASS 从 memories 的向量做密度聚类,挖概念(写库)。注意:它自己拼 DSN,不读 config/database.php

3b. 请求特征与安全标签(trace,docs/TRACE.md)

命令 语法 参数 功能
bin/trace_salt.php php bin/trace_salt.php [--force] --force 换盐(⚠ 历史 ip_hash 全部失配,跨天关联会断) 生成加盐哈希的盐,写 config/trace.local.php(0600,不进 git);已存在且没 --force 时只报状态(写文件)
bin/trace_import.php php bin/trace_import.php [--file=PATH] [--dir=DIR] [--pattern=GLOB] [--limit=N] [--chunk=N] [--src=S] [--label=trace-1] [--full] [--since-offset=N] [--no-ledger] [--exclude-ip=LIST] [--exclude-ua=LIST] [--exclude-path=LIST] [--dry-run] --file 单个日志;--dir 目录(默认 --pattern 为 *-access.log);--limit 最多读多少行(默认 100000);--chunk 每批行进一个事务(默认 5000);--src 来源标记(默认 import);--label 标签口径(默认 trace-1;trace-2 为四类);--full 忽略台账从头读(唯一键去重);--since-offset 指定起始字节;--no-ledger 不读不写台账;--exclude-* 排除自家流量;--dry-run 只解析+标注并打印前 5 条,不写库 把 Apache combined 日志回放成 request_features + risk_labels,不参与线上判定;默认按 trace_import_ledger 增量续读,(log_id, log_offset) 唯一索引保证重复跑不翻倍
bin/site_routes_build.php php bin/site_routes_build.php [--dry-run] [--prune] [--no-backfill] [--days=N] --prune 删本轮没见到的旧路由;--no-backfill 只重建路由;--days 灰区统计窗口(默认 30) 从发布内容/静态文件/动态端点生成 site_routes,回填 request_features.route_kind,打印灰区占比(写库)
bin/trace_label_preview.php php bin/trace_label_preview.php [--days=N] [--limit=N] [--json] [--apply] --days 窗口(默认 30);--limit 最多行数;--apply 写 trace-2 标签(默认只读) 用标签 v2 预览 malicious/human/crawler/unknown 与灰区占比
bin/trace_audit_sheet.php php bin/trace_audit_sheet.php [--limit=N] [--days=N] [--out=PATH] --limit 行数(默认 200);--days 抽样窗口 生成人工复核 CSV(分层抽样,review 留空)
bin/trace_audit_priority.php php bin/trace_audit_priority.php [--limit=N] [--sheet=PATH] [--out=PATH] --limit 行数(默认 50);--sheet 输入复核表;--out 输出 从复核表挑「模型最可能错」的子表(弱 malicious / unknown 像扫描 / UA 矛盾 / 高突发),带 priority_reason
bin/trace_audit_miss_burst.php php bin/trace_audit_miss_burst.php [--limit=N] [--days=N] [--out=PATH] --limit 行数(默认 30);--days 抽样窗口 为 miss_burst 规则抽随机复核表(路由未命中 + burst≥20 + 2xx/3xx),按路径去重
bin/trace_eval_v2.php php bin/trace_eval_v2.php [--json] --json 输出机器可读结果 用 risk_labels(trace-2) 中 reviewed_by 非空的已复核样本,评估当前 v2 的一致率/混淆/不一致明细(只读)
bin/trace_audit_random.php php bin/trace_audit_random.php [--limit=N] [--days=N] [--out=PATH] --limit 行数(默认 100);--days 窗口 按 route_kind × 状态类 分层抽随机审计表,排除已复核行(无偏 G1 样本)
bin/trace_audit_disagreements.php php bin/trace_audit_disagreements.php [--reviewer=NAME] [--out=PATH] --reviewer 只看某批复核;--out 输出 把人工结论与当前 v2 不一致的行抽成二次裁决表(带 hint),填 review 后用 --reviewer=adjudicated 导入
bin/trace_eval_baselines.php php bin/trace_eval_baselines.php [--json] [--reviewer=NAME] --json 机器可读;--reviewer 只看某批样本 在已复核样本上比较 route/signature/heuristic/v2 的 coverage/precision/recall/FPR
bin/trace_health.php php bin/trace_health.php [--write] [--hours=N] [--json] --write 写 storage/health/trace.json;--hours 窗口(默认 24);--json 检查最后导入、24h 新增、ledger 滞后、未入账日志、自流量漏排、v2 标签覆盖;异常退出码 1
bin/trace_relabel.php php bin/trace_relabel.php [--dry-run] [--limit=N] --dry-run 只统计;--limit 上限 给「有 log_id、但缺 trace-2」的特征补 v2 标签,不覆盖人工
bin/trace_label_apply.php php bin/trace_label_apply.php [--sheet=PATH] [--dry-run] [--accept-suggested] [--reviewer=NAME] --sheet 复核表;--dry-run 只统计;--accept-suggested 用 suggested 预填空 review;--reviewer 默认 audit-sheet(accept 时默认 model-prefill) 把 review 写回 risk_labels(trace-2);--accept-suggested 只是模型预填,不算 G1 人工审计
bin/trace_purge.php php bin/trace_purge.php --date=YYYY-MM-DD [--confirm=YYYY-MM-DD] [--dry-run] --date 必填;--confirm 必须与 --date 相同才真删(服务端二次确认);--dry-run 只报行数 按日期整段删 request_features(连带标签),重导入的幂等手段(写库)⚠
bin/probe_trace.php php bin/probe_trace.php [--stats-only] --stats-only 只读库不跑自检 内置合成样本自检(解析/归一/标注)+ 库内分布读数(不需要日志、不需要 root)(只读)

前置:/var/log/httpd 是 root:root 700,aos 不可读。真实日志导入前先让 root 跑一次
bash /home/aos/lynux-access-log-access.sh(只加 acl u:aos:rx + 默认 ACL;--check 免 root)。


3c. 分类、标签与 Views

命令 语法 参数 功能
bin/taxonomy_gc.php php bin/taxonomy_gc.php [--apply] --apply 真删孤儿关联;默认只报告 清理 content_categories、content_tags 中指向不存在内容的行;没有外键,删除内容后必须定期跑(写库)⚠
bin/taxonomy_bench.php LYNUX_DSN='pgsql:host=127.0.0.1;dbname=lynux_taxonomy_test' php bin/taxonomy_bench.php [--apply] [--nodes=N] [--content=N] --apply 真跑;--nodes 节点数(默认 5000);--content 内容数(默认 50000) 分类/标签规模基准;只允许库名含 test 的测试库,会清空 taxonomy 表与 bench-* 内容后造数、ANALYZE、计时(写测试库)⚠
bin/views.php php bin/views.php list / show / compile / render / publish / rebuild / doctor / cache:clear / cache:gc / cache:stats --machine=、--id=、--display=、--page=、--query=k=v,...、--out=、--preview、--all 集合 CLI:查看/编译 SQL/渲染 HTML/发布静态页/重建 dirty/自检/缓存维护;publish 与 rebuild 写库 + 写 public/

Views 的管理入口是 /manager/?view=views;CLI 的 publish 与 rebuild 会更新 view_publications 和静态文件。
分类/标签的日常维护优先在 /manager/?view=categories 完成,taxonomy_gc 只做兜底。


3d. 备份、健康与定时发布

命令 语法 参数 功能
bin/backup_create.php php bin/backup_create.php [--keep=N] [--json] --keep 保留份数(1–30,默认 7);--json 机器可读 备份 PostgreSQL(custom dump)+ public/c + public/assets + config + 代码/系统单元到 storage/backups/auto/<时间戳>/,写 storage/health/backup.json;目录 0700、文件 0600(写文件)
bin/backup_verify.php php bin/backup_verify.php [--dir=PATH] [--json] --dir 指定备份目录(默认最新一份);--json 机器可读 校验 manifest 的 sha256、tar 可解压,再把 db.dump 恢复到临时库并查询 4 张核心表,完成后删临时库;写 storage/health/backup-verify.json(写临时库 + 写文件)
bin/content_guard.php php bin/content_guard.php [--no-repair] [--json] --no-repair 只扫不修;--json 机器可读 跑 content_recovery + content_repair,检查 /c 与发布产物;写 storage/health/content.json 与 content.log;退出码 0 健康 / 1 有不可修复 / 2 运行失败(写文件 / 可写库)
bin/health_alert.php php bin/health_alert.php [--test] [--json] --test 发一条测试告警;--json 机器可读 读取 guard/schedule/backup/verify/trace 状态,写 storage/health/alerts.json 与 alerts.jsonl,配置 webhook 时外发;退出码只反映 webhook 是否成功,健康看 ok 字段

备份与恢复演练的完整步骤、systemd 日志位置见 docs/OPERATIONS.md;backup_verify 需要建库/删库权限。


3e. 账户、初始化与限流

命令 语法 参数 功能
bin/console_seed.php php bin/console_seed.php 无 控制台初始化数据:两条 skill(status_gate、asset_critical_css)+ 一条 tool(css_bundler)+ 发布一版 manifest;按名字判重(写库)
bin/manager_account.php php bin/manager_account.php --user=NAME --pass=PASSWORD --user 账户名(可中文);--pass 明文密码;--add 写入多账户;--role= owner / editor / viewer;--config=PATH 建/改控制台账户:默认写 legacy 单账户,--add 写多账户并保留 session_secret;只存 password_hash,文件 0600(写文件)
bin/manager_totp.php php bin/manager_totp.php [--write] [--disable] --write 写入 config/manager.local.php;--disable 关闭 生成/启用/关闭管理后台 TOTP;启用后登录需密码 + 6 位动态码;--write 前先确认旧会话/恢复方式(写文件)
bin/rotate_session_secret.php php bin/rotate_session_secret.php 无 轮换 manager session_secret,使所有已登录后台会话和 /read.php 签名链接立即失效;密码/用户名/TOTP 不变(写文件)
bin/rate_gc.php php bin/rate_gc.php [--max-age=86400] --max-age 超期秒数(默认 86400) 清理 storage/rate 中超期文件;只删过期文件,可每天定时跑(写文件)

账户命令会改 config/manager.local.php;改完立即生效,不需要重启 FPM。TOTP 的恢复方式要先留好,再关终端。


4. LLM 与搜索

命令 语法 参数 功能
bin/set-llm-key.php php bin/set-llm-key.php [--provider=NAME] [--from-stdin] --provider 默认 minimax_cn;--from-stdin 从管道读 key 写 config/llm.local.php(0600,gitignored);有 TTY 时关闭回显(写文件)
bin/llm_ping.php php bin/llm_ping.php [--provider=NAME] [--cache] --provider 临时覆盖 provider;--cache 允许读缓存 LLM 连通性自检:区分「没 key / DNS 失败 / 401·403 / 404 / 超时」并给中文原因(默认绕开缓存)
bin/llm_worker.php php bin/llm_worker.php [--limit=N] --limit 单轮最多消费条数(默认 50) 消费解释队列 storage/llm_queue:文件锁保证单实例;失败重试 3 次后移 failed/;成功追加 storage/llm_log.jsonl(写文件)
bin/set-search-key.php php bin/set-search-key.php --provider=tavily [--from-stdin] --provider=tavily(唯一取值);--from-stdin 从管道读 写 config/search.local.php(0600,不进 git),设置 Tavily 搜索 key;输入默认不回显(写文件)

5. 压测与验收

命令 语法 参数 功能
bin/soak.php php bin/soak.php [--duration=S] [--concurrency=N] [--rps=R] [--url=U] [--resolve=H:P:IP] [--mix=LIST] [--out=PATH] [--report=S] [--secure] --duration 秒(默认 30);--concurrency 并发(默认 4);--rps >0 时限速串行(默认 0=压满);--url 默认 https://lynux.net;--resolve 默认 lynux.net:443:127.0.0.1;--mix 形如 200:40,404:15,…(码:权重,默认 6 种);--out 逐条记录(默认 …/scratch/soak.jsonl);--report 汇报间隔秒(默认 10,≥5);--secure 校验证书(默认不校验) 浸泡测试:统计 p50/p95/p99、动作映射自洽、5xx;落库 source=probe 或 soak(写库)⚠
bin/bench.sh bash bin/bench.sh 无(内部硬编码 wrk 打 localhost:8080) 性能基线(需自行改地址/端口;新环境请优先用 bin/soak.php)
bin/client_check.sh bash bin/client_check.sh [-n N] [-c N] [--base=URL] [--ip=IP] [--insecure] -n 请求数(默认 200);-c 并发(默认 8);--base 目标站;--ip 绕过 DNS 指定 IP(仍走 SNI);--insecure 不校验证书 在客户端机器上跑的验收脚本:链路/证书、7 类动作与码自洽、301→302 + Location、HTML 管线、延迟分位(只读,产出 source=probe)
bin/acceptance.php php bin/acceptance.php [--json] --json 机器可读 交付验收:content_source/hub/migrate/repair/search/analytics/SEO/404 共 13 项只读检查;退出码 0 = 全过
bin/drill.php php bin/drill.php 无 降级演练:逐个关开关再断言行为仍对(28 轮,只读 + 进程内改开关)
tests/e2e/gates.php php tests/e2e/gates.php 无 决策链门禁 G1–G9(映射/可复现/有限/零 5xx/枚举/有界/持久化/遗忘/入队来源)
tests/e2e/console.php php tests/e2e/console.php 无 控制台门禁 G10–G42(发布链、上传、搜索、主题、日历时间…,数百项)
tests/e2e/v3_smoke.php php tests/e2e/v3_smoke.php 无 冒烟:核心组件与一键链路(只读)

6. 控制台入口(/manager)

命令(URL/动作) 语法 参数 功能
概况 GET /manager/?view=home m=YYYY-MM 翻月 默认落地页:内容/文件/主题统计 + 日历 + 三窗时间
内容列表 GET /manager/?view=pages q= 关键词、kind= article / page、archived=1 文章与页面列表(同一种内容)
编辑 GET /manager/?view=page&id=N id 内容 id 源码(CodeMirror)/设计/Markdown 三页签
文件 GET /manager/?view=files type= all / image / video / doc / style / other;used= all / used / unused;q= 关键词 媒体与附件,含引用统计
分类/标签 GET /manager/?view=categories tab= tree / tags;id=N;new=1;parent=N 分类树拖拽、标签新建/编辑/合并(见 docs/CATEGORY.md)
集合列表 GET /manager/?view=views new=1 新建 视图清单、发布状态、新建入口(见 docs/VIEWS.md)
集合编辑 GET /manager/?view=view&id=N id 视图 id;display= 显示位 构建器/预览/版本/JSON 导入导出
主题 GET /manager/?view=themes 无 主题清单/启用/预览/重新生成(见 docs/THEMES.md)
设置 GET /manager/?view=settings 无 导入白名单、额度、放行票有效期、正文缓存
上传网关 任意方法 /manager/?upload= direct / init / chunk / finish / abort 见 docs/CONSOLE.md §上传 单次/分片上传唯一入口

7. composer 别名

命令 语法 参数 功能
全量门禁 composer test 无 依次跑梯度/网络梯度/neural/收敛/不变量/A3/冒烟/gates/console/drill 等,任一红则非零退出
决策链门禁 composer gate 无 = php tests/e2e/gates.php
冒烟 composer smoke 无 = php tests/e2e/v3_smoke.php
控制台门禁 composer test:console 无 = php tests/e2e/console.php
降级演练 composer drill 无 = php bin/drill.php
迁移 composer migrate 同 bin/migrate.php = php bin/migrate.php
内容整合盘点 composer migrate:content = php bin/content_migrate.php --dry-run 只读盘点;有阻断时退出 1
类型播种 composer prepare:content = php bin/content_prepare.php 只读 plan;加 --apply 才写内置类型 v1
内容搜索重建 composer reindex:content = php bin/content_reindex.php --all 重建 content_search(写库)
内容产物扫描 composer repair:content = php bin/content_repair.php --scan 只读比对,--apply 才写文件
内容自检 composer doctor:content = php bin/content_doctor.php /c 发布记录与静态文件一致性
SEO 生成 composer seo:build = php bin/seo_build.php --apply 写 sitemap / feed / robots
内容分析 composer analytics:content = php bin/content_analytics.php 只读规模统计
交付验收 composer acceptance = php bin/acceptance.php 13 项只读验收
安全评估 composer eval:security = php bin/security_eval.php 需补 --data=...
内容集线器 composer test:hub 无 = php tests/e2e/content_hub.php;无 DB 时 SKIP
UI 数学模型 composer test:ui-model 无 = php tests/Manager/UiModelTest.php;状态机/动作映射/布局约束 28 项
HTML 内置类型 composer test:html 无 = php tests/Tool/HtmlContentTest.php;字段/渲染/public 静态路径 8 项
安全门禁 composer test:security 无 = php tests/Security/SecurityPolicyTest.php
视图门禁 composer test:views 无 = php tests/e2e/views.php
导出/标注/训练/对比 composer export / label / train / compare 同对应 bin/*.php 转发到 §2/§3 的脚本
浸泡/清理 composer soak / prune 同上 转发到 §5/§2
LLM composer llm(= explain)/ fingerprint / test:llm 同上 消费解释队列 / 指纹同步 / LLM 桥自检
静态检查 composer lint / stan 无 php -l 全量 / PHPStan level 5
初始化 composer console 无 = php bin/console_seed.php

其余 test:* 别名(taxonomy、content-types、homepage、content-atomic、rebuild 等)以 composer.json 的 scripts 为准。


8. 常驻任务(systemd 用户态)

8.1 已安装的定时器

定时器 频率 调用的命令 作用
lynux-content-guard.timer 每 5 分钟 content_guard.php --json 内容巡检 + 自动修复 + 写健康状态
lynux-publish-scheduled.timer 每分钟 publish_scheduled.php --json 执行到期的发布/下线计划
lynux-llm-worker.timer 每 5 分钟 llm_worker.php 消费解释队列
lynux-trace-import.timer 每小时 :20 trace_import.php 增量导入访问日志
lynux-trace-health.timer 每小时 :40 trace_health.php --write 检查 trace 管道并写状态
lynux-health-alert.timer 每 10 分钟 health_alert.php --json 汇总 guard/计划/备份/演练/trace 告警
lynux-backup.timer 每天 03:15 backup_create.php --keep=7 --json 数据库 + 文件 + 配置备份
lynux-backup-verify.timer 每天 04:15 backup_verify.php --json 恢复演练(临时库)
lynux-taxonomy-gc.timer 每天 04:20 taxonomy_gc.php 清理分类/标签孤儿关联

8.2 常用操作

操作 命令
看全部定时器 systemctl --user list-timers 'lynux-*'
看状态 systemctl --user status lynux-content-guard.timer
立即跑一轮 systemctl --user start lynux-backup.service
看最近日志 journalctl --user -u lynux-backup.service -n 50 --no-pager
启停定时器 systemctl --user enable --now lynux-trace-import.timer / disable --now
改 unit 后重载 systemctl --user daemon-reload
退出登录后仍运行 loginctl enable-linger aos
长跑压测 php bin/soak.php --duration=... --rps=...(lynux-soak-24h.service 已废止,需要时前台跑)

本机没有 cronie(crontab 命令不存在):周期性任务一律用 systemd 用户定时器,用 --user 且需要 loginctl enable-linger aos。
定时器日志在 storage/health/*-systemd.log,状态 JSON 在 storage/health/*.json。


9. 动作矩阵(HTTP 探针,curl)

在服务器上直接打本机,必须带 tag=probe(否则会被当成真实流量进解释队列花钱):

命令 语法 参数 功能
单点探查 curl -s -o /dev/null -D - --resolve lynux.net:443:127.0.0.1 -k "https://lynux.net/?status=CODE&tag=probe" status 目标状态码;tag=probe 必带 看响应头 X-Lynux-Action / X-Lynux-Tau / X-Lynux-Degrade
七码矩阵 for s in 200 301 400 403 404 429 503; do …; done 同上 期望:200 ACCEPT、301→302+Location、400 RESPOND_ERROR、403 PROTECT、404→200 FALLBACK、429 RETRY、503→429 RETRY
主题/后台皮肤 curl -I --resolve lynux.net:443:127.0.0.1 -k https://lynux.net/themes/active/css/theme.css 无 期望 200 text/css + Cache-Control: no-cache, must-revalidate

10. 退出码与安全约定

约定 说明
退出码 通用 0 成功;1 前置条件不满足或失败(如数据库不可用、engine=rule 时训练、参数非法);2 用法/数据库连接错误(部分脚本)。门禁类脚本 0 = 全绿。
发布产物 public/posts/*.html、public/pages/*.html、public/c/* 是库的产物,不进 git;改内容只改库。文件与库分叉时用 bin/repair_static.php --apply / bin/content_repair.php --apply 按库重发。
破坏性命令 prune_decisions、trace_purge、theme_rewrap --apply、merge_articles_into_pages --apply、content_migrate --rollback、taxonomy_gc --apply、taxonomy_bench --apply:先 --dry-run 看影响面,必要时先 pg_dump -Fc;taxonomy_bench 只允许测试库。
凭据 只写 config/*.local.php(0600,gitignored)。不要把 key/密码写进命令行参数以外的位置;set-llm-key.php / set-search-key.php 支持 --from-stdin 避免进 shell 历史。
探针数据 所有自测流量必须带 tag=probe(或 --source 明确),否则 decisions 里会混进合成的 live。
数据库 统一走 config/database.php(Core\Db);bin/mine_concepts.php 是历史例外(自己拼 DSN),用前先确认环境变量。
备份优先 任何 --apply、迁移、清理、换主题前,先跑 php bin/backup_create.php --keep=7 --json;恢复演练用 php bin/backup_verify.php。

11. 环境变量

变量 用途 默认 / 说明
LYNUX_DSN 覆盖数据库 DSN pgsql:host=127.0.0.1;port=5432;dbname=brain
LYNUX_USER / LYNUX_PASS 覆盖数据库账号 空;也可写 config/database.local.php(0600)
LYNUX_DB_TIMEOUT PDO 连接超时(秒) 2
LYNUX_SITE_URL 站点 canonical 域名 未设时 http://127.0.0.1;生产应设为 https://www.lynux.net
LYNUX_ALERT_WEBHOOK 健康告警 webhook 空;也可放 ~/.config/lynux-alert.env
EPS / MINPTS mine_concepts 聚类参数 0.35 / 3

FPM 池的环境变量在 /etc/php-fpm.d/lynux.conf(root 管理);CLI 以当前 shell 环境为准。


12. 常用运行序列

场景 命令序列
新环境初始化 composer install → php bin/manager_account.php --user=... --pass=... → php bin/migrate.php → php bin/console_seed.php → php bin/acceptance.php
发布 Markdown 文档 php bin/publish_doc.php --file=... --dry-run → 加 --apply → curl -I https://www.lynux.net/posts/<slug>.html
日常巡检 php bin/content_guard.php → php bin/content_doctor.php → php bin/health_alert.php --json → php bin/trace_health.php --json
备份与恢复演练 php bin/backup_create.php --keep=7 --json → php bin/backup_verify.php --json
发布后对账 php bin/repair_static.php → php bin/content_repair.php --scan → php bin/content_doctor.php → php bin/seo_build.php --apply
定时发布排障 php bin/publish_scheduled.php --dry-run → php bin/publish_scheduled.php --json → journalctl --user -u lynux-publish-scheduled.service -n 50
分类/标签清理 php bin/taxonomy_gc.php → 确认后 --apply
主题改版 php bin/theme_rewrap.php → 确认后 --apply → php bin/repair_static.php