MoreRSS

site iconAnZhihe | 安志合修改

国学和传统文化爱好者,IT行业从业者,运维和SRE。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

AnZhihe | 安志合的 RSS 预览

达梦数据库备份详解

2026-04-28 10:59:03

DM8数据库的备份主要分为物理备份和逻辑备份两大类,两者适用的场景和命令不同。

  • 物理备份:直接备份数据库的物理文件(如数据文件、日志文件等)。这种方式速度快,是保障数据安全最直接的手段,常用于全库级别的灾难恢复。

  • 逻辑备份:使用 dexp 工具将数据库对象(如表、视图、存储过程等)的结构和数据导出为一个独立的文件。这种方式非常灵活,可以指定备份库、用户、模式或表,常用于数据迁移或特定对象的备份。

物理备份命令

物理备份分为冷备(数据库关闭)和热备(数据库运行中)两种。其中,热备需要提前开启数据库的归档模式。

1. 冷备(数据库关闭)

冷备需要在数据库服务关闭的状态下进行,操作简单,不需要开启归档。

使用 dmrman 命令行工具
进入达梦数据库安装目录的 bin 文件夹,执行 dmrman 命令进入交互界面,然后执行备份命令

# 进入bin目录
cd /dm8/bin
# 执行dmrman
./dmrman

# 在RMAN交互界面中执行全量备份
RMAN> backup database '/dm8/data/DAMENG/dm.ini' full backupset '/dm8/backup/full_bak';

  • 参数说明

    • /dm8/data/DAMENG/dm.ini:数据库实例配置文件路径,请根据实际路径修改。

    • full:执行全量备份。

    • backupset:指定备份集存放的目录。

2. 热备(数据库运行中)

热备在数据库运行时进行,不影响业务,但必须确保数据库已开启归档模式

开启归档模式(SQL命令行)

在执行任何备份前,务必完成以下检查,否则备份可能失败或无法恢复。

-- 1. 将数据库切换至 Mount 状态
ALTER DATABASE MOUNT;
-- 2. 开启归档模式
ALTER DATABASE ARCHIVELOG;
-- 3. 添加本地归档目录(请替换 /dm8/arch 为实际路径,需要提前创建并授予 dmdba 用户读写权限。)
ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048';
-- 4. 切回 Open 状态
ALTER DATABASE OPEN;

-- 验证是否成功(返回 'Y' 表示成功)
SELECT ARCH_MODE FROM V$DATABASE;

  • DEST 指定归档日志存放路径,请确保目录已创建且有写入权限。

使用 SQL 命令备份
归档开启后,可以在 disql 命令行工具中直接执行备份命令。

# 1. 登录 disql
cd /dm8/bin
./disql SYSDBA/SYSDBA@localhost:5236

# 2. 执行全量备份(备份集存至 /dm8/backup/full)
SQL> BACKUP DATABASE FULL BACKUPSET '/dm8/backup/full' COMPRESSED LEVEL 6;
# 说明:COMPRESSED LEVEL 6 为中等压缩,可节省磁盘空间 [citation:9]

# 3. 执行增量备份(基于上次全量备份,备份变化的数据)
# 增量备份命令会自动找到最近的基准备份
SQL> BACKUP DATABASE INCREMENT BACKUPSET '/dm8/backup/inc_20250326';

逻辑备份命令 (dexp)

逻辑备份使用 dexp 工具,数据库必须处于运行状态。dexp 支持四种级别的备份。

备份级别 参数 说明 命令示例
全库 FULL=Y 导出整个数据库的所有对象 ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=full.dmp LOG=full.log FULL=Y
按用户 OWNER=<用户名> 导出一个或多个用户拥有的所有对象 ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=owner.dmp LOG=owner.log OWNER=USER01
按模式 SCHEMAS=<模式名> 导出一个或多个模式下的所有对象 ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=schema.dmp LOG=schema.log SCHEMAS=DMHR
按表 TABLES=<表名> 导出一张或多张指定的表 ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=table.dmp LOG=table.log TABLES=DMHR.EMPLOYEE

通用命令格式与参数

./dexp USERID=<用户名>/<密码>@<IP>:<端口> DIRECTORY=<备份目录> FILE=<导出文件名> LOG=<日志文件名> <备份级别参数>

# 全库导出(一般用于迁移,生产环境频率较低)
./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup/logic FILE=full_db.dmp LOG=full_db.log FULL=Y

# 关键表定时导出(例如每天凌晨导出核心业务表)
./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup/logic FILE=order_table.dmp LOG=order_table.log \
TABLES="PROD.ORDER_TABLE,PROD.ORDER_DETAIL"
  • USERID:连接数据库的认证信息,如果是本地数据库,@IP:端口 可以省略。

  • DIRECTORY:指定备份文件存放的目录。

  • FILE:指定导出的文件名。

  • LOG:指定记录导出过程的日志文件。

生产环境备份方案选型

生产环境的首要原则是不影响业务,因此首选联机备份(热备)。针对不同场景,方案选择如下:

方案类型 适用场景 核心要求 恢复粒度 操作复杂度
物理热备(推荐) 全库恢复、表空间恢复 必须开启归档日志  库级、表空间级 中,支持脚本自动化
逻辑备份(辅助) 误删数据恢复、数据迁移、部分表恢复 数据库正常运行即可  库级、用户级、模式级、表级 低,dexp/dimp命令简单
物理冷备(备用) 数据库迁移、重大变更前的保险 需停止数据库服务  库级 低,但会中断业务

生产环境建议:以“每周一次物理全量热备 + 每天一次物理增量热备”为主,辅以“关键业务表每日逻辑导出”的双重保险策略 。

生产环境最佳实践建议

  1. 备份集有效性检查:定期使用 dmrman 中的 CHECK BACKUPSET 命令验证备份集是否损坏。

  2. 异地备份:生产环境的备份集务必通过脚本(如 rsyncscp)同步至另一台服务器或对象存储,防止物理硬件损坏。

  3. 关键参数配置

  • COMPRESSED:备份时开启压缩(级别5-6),显著节省磁盘空间 。

  • PARALLEL:多核服务器可设置并行度(如4或8),加快备份速度 。

  • 保留周期:建议全量备份保留30天,归档日志保留7-15天(视磁盘空间而定)。

  • 常见生产环境报错及处理

    报错信息 原因分析 解决方案
    数据库未开启归档模式 执行热备前未配置归档 参考“第二步”开启归档,并重启数据库服务生效 
    DMAP服务未启动 物理备份或还原时缺少辅助进程 切换到 dmdba 用户,执行 DmAPService start
    无效的备份集目录 跨平台或跨版本还原 确保操作系统位数和数据库大版本一致(Linux到Linux,x64到x64) 
    表空间恢复失败 尝试恢复系统表空间(如SYSTEM) 系统表空间只能通过整库恢复来还原 

    备份恢复是数据库运维的“生命线”,建议在生产环境实施前,先在测试环境完整演练一遍备份和恢复流程。


    参考:DM达梦数据库登陆方式及日常运维命令


    大模型 Temperature 与 Top_p/Top_k 参数详解

    2026-04-22 00:07:43

    这三个参数都用于控制大模型输出的随机性多样性,是调整模型行为最重要的超参数,但机制不同。简单理解:

    • Temperature(温度):控制概率分布的“陡峭”程度,影响整体随机性。

    • Top-p(也称核采样):限制候选词的累积概率范围,动态过滤掉极不可能的选项

    • Top-k:截断采样策略,用于控制模型生成 token 时的候选词范围


    Temperature(温度)

    作用:控制输出分布的"尖锐度"

    模型在生成每个 token 时,会先计算所有候选词的概率分布。Temperature 会对这个分布做如下变换:

    P'(word) ∝ P(word)^(1/T)

    Temperature 值 / 效果 / 适用场景

    T = 0(或极低) — 始终选概率最高的词,输出完全确定 · 代码生成、数学计算、需要确定性答案的任务

    T = 0.1~0.3 — 高度保守,几乎总是选最优解 · 事实问答、信息抽取、严格格式输出

    T = 0.5~0.7 — 平衡随机性,主流默认值 · 通用对话、写作辅助、大多数场景

    T = 0.8~1.0 — 明显增加多样性 · 创意写作、头脑风暴、角色扮演

    T > 1.0 — 高度随机,可能产生无意义内容 · 艺术创作、探索性实验(不推荐日常使用)

    本质: 低温度让分布更"尖锐",高温度让分布更"平缓"。


    Top_p(Nucleus Sampling / 核采样)

    作用:动态截断低概率词

    与 Temperature 固定缩放不同,Top_p 按概率从高到低累加,直到累计概率达到 p 值,只保留这些词,从保留的这些词中采样:

    例如 top_p=0.9:
    选词 A(40%) + B(30%) + C(20%) = 90% → 保留
    词 D(10%) 被截断

    Top_p 值 / 效果 / 特点

    0.1 ~ 0.3 — 极度保守,只选最高概率词 · 类似低 temperature,但更动态

    0.7 ~ 0.9 — 主流推荐值 · 在多样性和质量间取得平衡

    0.9 ~ 0.95 — 允许更多低概率词 · 创意性更强,偶尔会跑偏

    1.0 — 不做截断,等价于关闭 · 不推荐,可能采样到无意义词

    优势: 比 Temperature 更"智能"——当模型很确定时自动收窄,不确定时自动放宽。


    使用建议

    通用原则

    • 需要精确、低风险 → 低 temperature(0.1~0.3)+ 低 top-p(0.1~0.5)

    • 需要创意、多样性 → 高 temperature(0.8~1.2)+ 高 top-p(0.9~1.0)

    • 平衡模式(多数日常对话)→ temperature 0.7~0.8,top-p 0.9

    常见场景推荐

    任务类型 temperature top-p 说明
    代码生成、数学解题 0.1~0.3 0.1~0.3 需要确定性高
    事实问答、摘要 0.3~0.5 0.5~0.7 允许少量变化
    通用客服/聊天 0.6~0.8 0.8~0.9 平衡流畅与多样性
    故事/诗歌创作 0.8~1.2 0.9~1.0 鼓励惊喜
    头脑风暴/创意构思 1.0~1.4 1.0 最大自由度,注意偶尔乱码

    通用默认配置

    temperature = 0.7
    top_p = 0.9

    这是大多数 API 的默认值,适合 80% 的场景

    注意事项

    1. 不要同时设极值T=0 + top_p=0.1 会导致输出极度单调

    2. Temperature 优先调:多数情况下调 T 就够了,Top_p 保持 0.9 不动

    3. 需要确定性时用 T=0:此时 Top_p 失效(贪婪解码优先)

    4. 不同模型敏感度不同:同样参数在不同模型上效果可能差异较大

    5. batch 生成时注意:同一 prompt 多次调用,参数相同也会得到不同结果


    快速记忆

    • Temperature → "敢不敢冒险":越低越保守,越高越大胆

    • Top_p → "备选池多大":越低选择越少,越高越自由

    • 两者配合 → T 定基调,Top_p 做微调


    大模型 top_k 参数详解

    在基于 Transformer 的大语言模型(如 GPT、LLaMA 等)文本生成中,top_k 是一个常用的采样参数,用于控制输出 token 的随机性和多样性。它直接限制了模型每一步可选的候选词范围。

    1. 基本定义

    top_k:在每一步生成时,只保留概率最高的 k 个 token,然后在这 k 个 token 中重新归一化概率并进行采样(或配合其他策略比如温度采样)。

    • 如果 top_k=1,则退化为贪婪搜索,每次都选最高概率的 token。

    • 如果 top_k 很大(比如等于词表大小),则等价于不做 top_k 过滤(仅靠温度等控制)。

    注意:top_k 是一个“硬截断”机制——不考虑 k 个候选之外的所有 token,即使它们的概率也没有低到微不足道。

    2. 工作原理示意

    假设词表中有 10 个 token,模型原始输出的 logits(未归一化分数)经过 softmax 得到概率分布:
    token: A B C D E F G H I J
    prob: 0.3 0.2 0.15 0.1 0.08 0.05 0.04 0.03 0.03 0.02

    设置 top_k=3

    1. 选择概率最高的 3 个 token:A(0.3), B(0.2), C(0.15)

    2. 对这三个概率重新归一化(除以和 0.65):
      A: 0.462, B: 0.308, C: 0.231

    3. 根据这个新的分布随机采样得到下一个 token。

    3. 常见使用场景

    top_k 值 效果
    1 确定性输出,每次结果相同,适合有标准答案的任务(如数学计算、代码生成中的简单逻辑)。
    10~40 常用范围。适度限制低概率 token,降低“跑题”或乱码风险,同时保留一定创造性。
    50~100 更开放,允许更多低概率词被选到,多样性高,但可能偶尔产生不连贯内容。
    词表大小 实际上禁用 top_k 过滤,所有 token 都有机会被选中。

    4. top_k 与 top_p 的区别

    参数 方式 动态性 控制目标
    top_k 固定候选数量 候选池大小固定 绝对去掉尾部低概率 token
    top_p 累计概率阈值(如 0.9) 候选池大小根据分布自适应 只保留概率质量集中的一部分 token

    示例对比(依然用上面的概率分布):

    • top_k=3 → 固定 3 个候选

    • top_p=0.6 → 从高到低累加概率:A(0.3) → B(0.5) → C(0.65) 超过 0.6,所以选中 A+B,候选池大小=2

    实际建议:常同时使用 top_k 和 top_p,例如 top_k=50 + top_p=0.95,先按 top_k 截断,再按 top_p 过滤,可以使候选更加稳妥又不过于机械。

    5. 与 temperature 的交互

    • temperature 在 softmax 前对 logits 做缩放:低温度使概率分布更陡(偏向高概率 token),高温度使分布更平坦。

    • top_k 作用于缩放后的概率分布。
      如果温度很低,原始概率已经尖锐,再应用 top_k 可能只剩下 1~2 个候选(近似贪婪)。
      如果温度很高,分布平坦,top_k 可以排除长尾中的极低概率词,防止生成完全随机的无意义内容。

    常用组合

    • 创意写作:temperature=0.9top_k=50top_p=0.95

    • 精确问答:temperature=0.2top_k=10top_p=0.9

    • 完全确定性:top_k=1(忽略 temperature)

    6. 优缺点分析

    优点

    • 简单有效,能显著降低生成“无意义词”的概率。

    • 计算成本低(只是截取前 k 个,重新归一化)。

    • 直观易调:k 越大,多样性越高。

    缺点

    • 固定大小的 k 不能适应不同分布形状。当概率质量异常集中时,k 个 token 中后面的 token 可能概率极低,仍会选到;当分布非常平缓时,k 个 token 会漏掉大量中等概率的合理词。

    • 需要手动调整,不同任务最优 k 不同。

    7. 实践建议

    任务类型 推荐 top_k 理由
    代码生成 / 算术 1 或 10~20 高确定性,避免错误 token。
    翻译 / 摘要 20~40 需要忠实原文,但允许适当措辞变化。
    聊天机器人(通用) 40~60 平衡合理性与趣味性。
    创意故事 / 诗歌 60~100 鼓励新颖表达,但保留基础连贯性。
    超长文本生成 50~80 避免长期退化(重复/空洞),同时不过分散乱。

    8. 库函数示例(HuggingFace transformers)

    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    model = AutoModelForCausalLM.from_pretrained("gpt2")
    tokenizer = AutoTokenizer.from_pretrained("gpt2")
    
    inputs = tokenizer("The quick brown fox", return_tensors="pt")
    outputs = model.generate(
        **inputs,
        max_new_tokens=20,
        do_sample=True,      # 启用采样,否则 top_k 无效
        top_k=50,            # 只从概率最高的 50 个 token 中选
        top_p=0.95,          # 可选,配合使用
        temperature=0.8
    )

    9. 总结

    • top_k 是控制生成多样性连贯性的一个简单但强大的参数。

    • 通过限制每一步的候选 token 数量,可以有效剔除极端低概率的无意义词。

    • 与 top_ptemperature 组合使用可以更精细地调节输出质量。

    • 没有绝对最优值,通常需要通过实验针对具体任务调参。

    理解 top_k 的本质后,就可以根据模型行为(是否出现不合理 token、是否重复、是否缺乏创意)来快速调整该参数,并与其他采样策略配合达到最佳生成效果。


    Hermes Agent 使用指南

    2026-04-19 21:39:24

    1776608567349242.png

    Hermes Agent是个啥?

    Hermes Agent 是 Nous Research(Hermes 模型背后的团队)开发的自改进(self-improving)AI Agent,核心创新在于内置学习闭环(closed learning loop)

    • 持久多层记忆:使用 SQLite + FTS5 全文搜索 + LLM 自动总结,跨会话永久记住你的偏好、风格和历史,不会“健忘”。

    • 自动技能进化:任务完成后自动生成 Markdown Skill 文件,下次直接调用;还会自我迭代优化 Skill。

    • 自主执行力:支持终端命令、浏览器、文件操作、代码生成、Web 搜索等工具,可在 CLI 或 Telegram/Discord 等平台运行。

    • 模型超灵活:支持 OpenRouter(200+模型)、OpenAI、Anthropic、Nous Portal、本地 Ollama 等,几乎零切换成本。

    • 完全开源免费:MIT 协议,可在 $5 VPS、本地、Docker、Modal 等环境运行。

    简单说:普通AI是工具,Hermes是会自己进化的私人AI助手。用得越久,它就越像你的"数字分身"。

    官方文档:https://hermes-agent.nousresearch.com/docs/

    最近AI圈爆火的Hermes到底是什么?
    OpenClaw vs Hermes:一文深入理解两大通用 Agent

    安装

    在 Mac 或者 Linux 环境,在终端输入如下命令后回车:

    curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
    
    # 安装完成后重载 shell:
    source ~/.bashrc  # 或 source ~/.zshrc

    脚本会自动检测并安装 Python、Node.js、Git、ripgrep 等所有依赖,耐心等待即可。

    安装完成后,脚本会自动进入引导设置,选择 Quick setup 模式,然后按提示配置模型。推荐选 OpenRouter(登陆后创建API Keys),选免费模型(如 nvidia/nemotron-3-super-120b-a12b:free),零成本跑起来先体验。如果之前本地已有 OpenAI 或 Codex 的授权配置,Hermes 会自动读取,不用重复填写。

    由于之前配置使用过OpenClaw → macOS安装龙虾OpenClaw,可以直接导入。

    1776591396761594.png

    接入飞书:Hermes Agent全解析:与OpenClaw对比及飞书接入指南

    1776592048470896.png

    配置最后会询问是否注册为系统服务,选 Y 可以开机自启、后台常驻,省去每次手动启动的麻烦。

    1776592397711084.png


    Hermes Agent常用命令

    Hermes Agent 的命令都以 hermes 开头,其核心命令可以分为几大类:核心交互、配置管理、工具与技能、网关与会话管理

    核心交互 (Core Commands)

    这是你与 Agent 日常交流的核心命令。

    命令 作用 示例/说明
    hermes 或 hermes chat 启动交互式对话,这是最常用的入口。在终端直接运行即可进入对话模式。 hermes
    hermes -q "<你的问题>" 执行单次查询。Agent 执行后会直接退出,适合脚本调用。 hermes -q "解释什么是递归"
    hermes -m <模型名> 临时指定模型。在本次对话中覆盖默认模型。 hermes -m openrouter/gpt-4o
    hermes -t <工具集> 启用特定工具集。例如,开启浏览器工具 browser hermes -t browser

    提示:在对话中,你也可以直接使用自然语言向 Agent 下达指令,它会自动判断并调用相应的工具。

    配置与管理 (Setup & Config)

    安装后的首要任务就是配置好 Agent 的“大脑”。

    命令 作用 示例/说明
    hermes setup 启动交互式配置向导。这是新手最推荐的配置方式,会引导你一步步设置模型、API Key等。 hermes setup
    hermes model 交互式切换模型。在已配置的模型列表中快速选择并切换。 hermes model
    hermes config edit 编辑配置文件。用默认编辑器打开 ~/.hermes/config.yaml 进行高级配置。 hermes config edit
    hermes version 查看当前版本 hermes version
    hermes doctor 环境诊断。检查安装是否正确,环境是否正常。 hermes doctor
    hermes dashboard 打开管理面板。在浏览器中启动一个图形化管理界面,方便查看日志和状态。 hermes dashboard

    工具与技能 (Tools & Skills)

    Hermes 的能力通过“工具集”和“技能”来扩展。

    命令 作用 示例/说明
    hermes tools list 列出所有工具。显示所有内置工具及其在当前平台的启用状态。 hermes tools list --platform telegram
    hermes tools enable <工具名> 启用工具。为特定平台(如 CLI)启用工具。 hermes tools enable browser --platform cli
    hermes tools disable <工具名> 禁用工具 hermes tools disable web --platform cli
    hermes skills list 列出所有已安装技能。技能是更高阶的工作流。 hermes skills list
    hermes skills search <关键词> 搜索技能 hermes skills search "code review"
    hermes skills install <技能名> 安装技能 hermes skills install <技能名>
    hermes skills uninstall <技能名> 卸载技能 hermes skills uninstall <技能名>

    网关与会话管理 (Gateway & Session)

    Gateway 是让 Agent 接入各种聊天平台(如飞书、Telegram)的关键。

    命令 作用 示例/说明
    hermes gateway setup 配置消息网关。交互式地将 Agent 连接到飞书、Telegram等平台。 hermes gateway setup
    hermes gateway start 启动网关后台服务。让 Agent 通过网关持续在线。 hermes gateway start
    hermes gateway stop 停止网关服务 hermes gateway stop
    hermes gateway status 查看网关状态 hermes gateway status
    hermes gateway list 列出已启用的网关列表 hermes gateway list
    hermes gateway enable <平台> 手动启用特定平台的网关 hermes gateway enable discord slack
    hermes -c 恢复最近的对话会话 hermes -c
    hermes -r <会话ID> 恢复指定ID的对话会话 hermes -r <session_id>

    补充说明:在对话界面中,斜杠命令(如 /help/plan/skills --force)是非常快捷的操作方式。部分命令需确保环境正确,例如macOS用户使用sed -i时需额外参数。

    现在个人电脑用hermes,公司电脑用内部提供的openclaw,唯一的限制就是429了


    参考:

    轻量级网络代理转发神器 socat 使用详解

    2026-04-14 00:02:14

    socat(SOcket CAT)是一个基于命令行的实用程序,其核心原理是在任意两个独立的数据通道之间建立双向传输的桥梁。它本身不解读或处理应用层协议(如HTTP),只是忠实地在指定的源和目的地之间转发原始字节流。这种"数据搬运工"的特性,使其成为构建轻量级网络代理的理想工具。有点类似于netcat (即nc命令),nc是单纯面向网络的,而socat连接的更多。

    socat安装

    # CentOS/RHEL
    yum install socat
    # Debian/Ubuntu
    sudo apt-get install socat
    # macOS (Homebrew)
    brew install socat

    socat进阶配置

    在实际使用时,为了让代理更稳定、安全,你还可以关注以下选项和要点:

    • 基础命令格式socat [options] <源地址> <目标地址>

    • 常用选项

      • -u 或 -U:设定数据流为单向(从源到目标或反之)。

      • range=<ip-range>:限制允许连接代理的客户端IP范围,例如range=192.168.1.0/24

      • su=<user>:让socat进程以指定低权限用户(如nobody)运行,增强安全性。

    • 启动与保持

      • 默认命令会在前台运行,按Ctrl+C终止。

      • 如需在后台运行,可以在命令末尾添加 & 符号。

      • 对于需要长期运行的代理,建议配合 systemd 或 supervisor 等进程管理工具使用。

    socat使用场景

    下面的表格总结了socat作为代理的几种常见用途、对应命令和典型场景:

    代理模式 核心命令示例 关键参数解析 典型应用场景
    TCP端口转发 socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:192.168.1.10:80 TCP4-LISTEN:监听端口;fork:允许并发连接;reuseaddr:立即重用端口。 将本地8080端口流量透明转发至内网服务器192.168.1.1080端口,实现服务暴露。
    跨协议中继 socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock UNIX-CONNECT:连接至Unix域套接字。 让仅支持TCP连接的远程客户端(如Web服务器)通过本地3307端口访问MySQL的Unix Socket。
    流量监控/调试 socat -v TCP4-LISTEN:1234,fork TCP:www.example.com:80 -v:将双向传输的原始数据打印到终端。 拦截并查看经过代理的HTTP等明文协议流量,用于调试。
    创建SSL/TLS加密隧道 socat OPENSSL-LISTEN:8443,cert=server.pem,verify=0 TCP:localhost:80 OPENSSL-LISTEN:开启SSL监听;cert:指定服务器证书和密钥。 在不支持SSL的后端服务(如HTTP服务)前增加一个SSL加密层,提升通信安全。

    使用参考:

    使用systemd、supervisor启动socat

    使用 systemd 或 supervisor 来管理 socat 进程,能确保其稳定运行、开机自启和方便管理。下面分别是两种方式的配置示例。

    方案一:使用 Systemd 托管

    核心思路:将 socat 包装成一个系统服务。

    1.创建服务文件
    以用 socat 将本地 8080 端口转发到 192.168.1.100:80 为例,创建文件:

    vim /etc/systemd/system/socat-proxy.service

    2.写入配置
    将以下内容写入上述文件,注意根据实际情况修改 ExecStart 命令和 User 等参数:

    [Unit]
    Description=Socat TCP Proxy (8080 -> 192.168.1.100:80)
    After=multi-user.target
    Requires=network.target
    
    [Service]
    Type=simple
    # 以低权限用户运行,提升安全性(可选)
    User=nobody
    # 关键:此处替换为你的socat转发命令
    ExecStart=/usr/bin/socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:192.168.1.100:80
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=always
    RestartSec=5
    MemoryHigh=1G
    MemoryMax=8G
    LimitNOFILE=65536
    LimitMEMLOCK=infinity
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target

    3.启用并启动服务

    # 重载systemd配置
    sudo systemctl daemon-reload
    # 设置开机自启
    sudo systemctl enable socat-proxy
    # 立即启动服务
    sudo systemctl start socat-proxy
    # 查看服务状态和日志
    sudo systemctl status socat-proxy
    journalctl -u socat-proxy -f

    方案二:使用 Supervisor 托管

    核心思路:将 socat 作为由 supervisor 监控的常驻进程。

    1.安装 Supervisor(以Ubuntu/Debian为例)

    sudo apt update && sudo apt install supervisor

    2.创建进程配置文件
    以同样的转发任务为例,创建文件:

    vim /etc/supervisor/conf.d/socat-proxy.conf

    3.写入配置

    [program:socat-proxy]
    command=/usr/bin/socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:192.168.1.100:80
    autostart=true
    autorestart=true
    startretries=3
    user=nobody
    # 可选:指定工作目录
    directory=/tmp
    # 可选:重定向日志,方便排查
    stdout_logfile=/var/log/supervisor/socat-proxy.log
    stderr_logfile=/var/log/supervisor/socat-proxy-err.log
    stdout_logfile_maxbytes=10MB
    stdout_logfile_backups=3

    4.启用并启动进程

    # 重载supervisor配置
    sudo supervisorctl reread
    sudo supervisorctl update
    # 启动指定进程
    sudo supervisorctl start socat-proxy
    # 查看进程状态
    sudo supervisorctl status socat-proxy

    重要提示与建议

    • 命令测试:在写入配置文件前,务必先在终端直接运行 socat 命令,确保其按预期工作。

    • 路径确认:使用 which socat 确认 socat 的安装路径是否为 /usr/bin/socat,如果不是请在配置中修改。

    • 选择依据

      • Systemd 通常是Linux系统首选,与系统集成度高,管理命令统一。

      • Supervisor 更适合管理用户级、非系统服务,或者在一个系统上集中管理多个业务进程的场景,其Web界面有时更方便。

    • 安全考虑:示例中使用了 User=nobody 来降低权限。如果你的转发涉及特权端口(如80、443),可能需要调整权限(如 setcap 或 authbind),但更推荐的做法是监听非特权端口(如8080),再用反向代理(如Nginx)转发。

    两种方式都能很好地完成任务。通常,如果你的服务是系统基础服务的一部分,优先选用 systemd;如果是一个独立的用户应用进程,Supervisor 的进程管理界面可能更友好。

    总结

    socat是一个功能强大且灵活的"瑞士军刀"。它最适合用于快速搭建临时性代理、调试网络问题、跨协议中继或为简单服务增加SSL层。它的优点在于命令简单、无需复杂配置、资源占用少

    对于需要高性能、负载均衡、用户认证、复杂日志审计长期稳定运行的生产级代理场景,socat可能不是最佳选择,而应选用专门的代理软件如Nginx、HAProxy等。

    参考:Systemd 入门到精通:编写一个生产级的 Service 配置文件

    高效沟通(四):沟通技术

    2026-04-08 17:18:05

    上篇文章中我分享了一些常用的沟通方式:尊重、倾听和情绪控制,并给出了几个我认为很不错的沟通技巧,比如:引起对方的兴趣;过滤信息,简明扼要地表达;用数据和实例说话。这篇文章中,我来分享几个关键的沟通技术,相信掌握了这几大沟通法宝,你的沟通水平会大幅提升。

    逻辑

    你的逻辑能力一定要强。因为中国人从小就不学逻辑学,所以讲话不注重逻辑,而我们理科生尤其是学过数学的程序员是懂逻辑的,所以,对于我们程序员来说,我们是可以用缜密逻辑疯狂地碾压别人的。

    逻辑是一门科学,也是一门数学。谁是谁的充分条件、必要条件或充要条件,以及有没有关联关系,有没有因果关系等,这些东西你要做到心中有数,当对方的表达中出现逻辑错误时,你可以随时指出来。比如,这两个事儿没有因果关系,我们不要把它们放在一起谈。

    有一次,我就跟一家公司的产品团队 PK 了一下。这家公司的产品有一个视频下载功能,但他们统计数据发现,有大约 40% 的用户下载到一半就取消下载操作了。于是他们就想提高用户的下载体验,解决办法是模仿微信的绿色进度条的做法:让进度条的 90% 嗖地过去,然后最后的 10% 则对应实际剩下的下载进度。

    我们通过逻辑分析,不难发现这样做是不能赢得用户的。他们的逻辑是:“用户看到已经下载 90% 了,然后会想那 10% 很快就能下载好,所以会愿意多等一会儿。而不是下载 10% 就让用户等了半天,那他就不想等了。”这里的前置条件是用进度条欺骗用户,后置条件是用户愿意等待下载。

    但是不是进度条这样设计了以后,用户就真的愿意等到下载完成呢?不是的。不需要试验,我们脑补一下,当我们的微信打不开网页,或者打开速度超过我们的心理忍受限度时,无论那个进度条是多少,我们都不会等的。有这么一个逻辑在这里卡着。

    基于这种逻辑,我跟他们说,这种进度条设计会导致更低的下载率。因为视频通常比较大,下载的总时间是很长的,绝大多数用户对这个速度是没有概念的。打开网页的时间是很短的,90% 的网页在 3、4 秒内就打开了,只有少数偶尔需要 5 秒到 10 秒才能打开(因为移动网络的问题)。

    这时,我可以通过这种“就快完”的手段把用户多留下来一会儿。但是,视频下载无论怎样优化,至少需要半分钟,才能下载下来。此时,如果进度条不能反映真实进度的话,用户对总的打开时间是没有合理预期的,90% 的进度提前到了,剩下的 10% 花那么久,很容易让人认为是下载卡死了,从而放弃,乃至在多次重试无果后对应用和平台都失去兴趣。

    所以,这样的进度条设计只是用户愿意等一小下(15 秒以内)的充分条件(还不一定是必要条件),并不是用户愿意等待直到视频下载完成的充分条件或必要条件。

    在这样的逻辑面前,产品经理立马取消了这个功能的排期,说还需要想一想。你看,你可以用你的一些逻辑推理去分析问题的前因后果和条件,然后用这个条件来说服他。

    在逻辑层面说服对方,是一种非常高级的手段,就像懂微积分的人来解数学题一样,那些不懂微积分的只有被碾压的份儿了。

    信息

    信息要全面、准确。这里重点提一下 X/Y 问题。X/Y 问题是一件非常讨厌的事情。有时候我们拿着 Y 问题去找别人,问到一半才知道,我们原来要问的是 X 问题。

    Stack Overflow 上有个问题,问的是“怎么截取一个字符串的最后三位?”大家给了一堆答案。突然有个人问:“你为什么要截取字符串的后三位?”他说:“我要找文件的扩展名”。实际上,文件的扩展名不一定是 3 个字符,而且有专门的函数干这个事儿,不需要自己写。这里,取文件的扩展名,这叫 X,取文件名的最后 3 个字符,这叫 Y。他想知道 X,但不知道该怎么说,于是就说成了 Y,导致别人都去解决一个不存在的问题。这叫 X/Y Problem。

    我可以告诉你,这个世界上到处都是 X/Y 问题。有些公司找我说,我们要做分布式架构,我们要做大中台,我们要做线下线上融合……这些问题都是 Y 问题。我都要反问,你为什么要做分布式架构?为了大规模营销,为了稳定性,还是为了加快开发速度?做大中台,你是为了什么? 是为了打通各个业务线,为了快速开发,还是为了技术输出?等等。要解的真实问题才是 X 问题,手段都是 Y 问题。只有你真正了解了 X 问题,你才能真正明白整个事。

    当你了解了 X 问题后,你就要到源头,来质疑或是改良他的 Y 问题,甚至提出 Z 方案,而对方会陷入被动,被你牵着鼻子转。

    维度

    我们想一下,人与人不同都是细节上的不同,比如:身高、体重、手机号等,人与人的相同点都是在宏观上相同,比如:国籍,性别……这告诉我们,如果你要找不同就要到细节上去,如果你要找共同,就要到大局上去。

    所以,在和人争论时,如果要反驳,那一定是低维度反驳,越细节越好。而在说服对方时,则要在高维度说服对方,越宏观越好,比如从公司的大目标出发。高维度讲究的是求同存异。你跟别人相同的东西一定是高维度的,这就是大同,而你跟别人不同的一定是非常细节的东西。大同的东西,更容易让人产生共鸣,从而容易达成默契和共识。

    因此,能够站在更高的维度来沟通是我们需要努力的目标。我们经常会听到类似的话:“哎呀,大家都没有恶意。我们虽然争论成这样,但是大家都是为公司好,只不过我们的路径不对。”或者“我们的目标是一样的,但是我们的方式不一样。”能感觉到吧?气氛一下子就缓和了好多。

    站在更高的维度上讨论问题,可以让你有大局观,对方就会显得很小气,导致对方也会不好意思,于是就会出现“六尺巷”的故事中所描述的那种场景。

    共同

    这里讲的是共情,共享,共利,共识以及换位思考。如果你能站在对方的角度思考问题,那么你所想的问题以及所想沟通的内容,一定会跟只想自己有很大不同。同时,你会神奇地发现,换位思考能帮助你更为全面地理解并解决问题。

    寻找“共同”的过程,其实也可以理解成为化“敌”为“友”的过程。我们不妨想象一下,沟通双方剑拔弩张,随时一触即发的情况,和沟通双方有共同的目标一起思考和解决问题的状态,哪种更能获得更好的结果。而共同该怎样找,跟我们在维度中提及的很相似,就是从高维度,寻找共同之处。

    首先是共情,跟对方相互分享各自的情感,这是一种拉近距离最有效的手段,然后是相互共享自己的观点,在观点中寻求双方共同的利益点,然后不断地循环,一点一点地达成共识。

    三本书

    此外,我还想强调一点,无论干什么,你一定要有一个非常犀利的观点,也就是金句。如何得到这些金句呢?一定要多看书。你到那些公众号或者知乎里面看一些抖机灵的内容是没有用的。抖机灵的金句没有用。一定要是有思想深度的金句,才有力量。推荐你看三本书《清醒思考的艺术》、《简单逻辑学》和《重来》。

    我是先被《重来》洗脑了,这本书帮我开拓了眼界,打破了我既有的思维模式,让我反思过去习以为常的每一件事。同时书中给出了实用、可操作的建议,让我头一次从心底感受到,原来世界还可以如此不同。

    然后,我看了《清醒思考的艺术》,这本书作者以显微镜般的观察发现人们常犯的 52 个思维错误,并一一列出。帮人们认识到错误的思维是如何发生,从而避免掉入思维陷阱中。看这本书的过程中,我能明显感觉到自己的思维方式在被重新构造。

    随后是《简单逻辑学》。逻辑学是很枯燥的,但这本书的作者以其简练而又充满趣味的笔触,将逻辑学活化为一种艺术,从它的基本原理,到论证,到非逻辑思维的根源,再到 28 种就发生在人们身边的非逻辑思维形式,带领我们进入这个精彩无比的逻辑世界,体会妙趣横生的思维交锋,跨过无处不在的逻辑陷阱,让人沉醉其中,欲罢不能。

    这三本书对我影响很大,也建议你好好读读,能改善你的思维,炼就你的火眼金睛。你会发现自己跟和别人不在一个频道上,你能看到事物更多的侧面,在阐述观点时,会比别人更加深刻、犀利和有见地。一些金句也会在你跟人互动交流时,随机地冒出来。你自己都能明显感觉到自己的气场要比其他人足。

    小结

    总结一下今天的内容。我们讲了沟通的四大关键技术:逻辑、信息、维度和共同

    有逻辑的表达,更容易说服对方。信息全面准确,更有利于让沟通的双方清楚定位问题,从而更高效地解决问题。

    维度是个很有趣的事儿,有的时候要站在高维度去碾压对方;有的时候要站在低维度去碾压对方。如何把握这个度很重要。如果站在客户的角度,最好用高维度。但如果站在技术细节的角度,这是低维度。高维度容易拉拢对方,而在低维度更容易说服对方。只不过低维度容易爆发冲突,要恰当地控制好度。

    最后一点是共同,其实寻找共同的过程就是化“敌”为“友”的过程,帮助大家在共赢的大思路和环境下,共同思考问题的解,从而实现高效沟通。此外,我强调了金句的重要性,以及如何获得这些金句。答案是没有捷径可走,唯有多读书,多思考,才能慢慢获得。

    来源:《左耳听风专栏:高效沟通》