适用范围:本机(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 |