运维123 - linux
type: channel
link: https://www.sddts.cn/index.php/tag/linux/
items: Linux 应用开发基础教程
items: SamWaf开源轻量级网站防火墙介绍
items: eBPF/XDP 构建二层直接服务器返回负载均衡器教程
items: Guix System First Impressions as a Nix User
items: Linux环境变量问题技术分析
items: 在 macOS 中利用 OrbStack 虚拟机一键部署 Moltbot
items: dnsmasq min-cache-ttl 参数工作原理技术分析
items: Trzsz-ssh ( tssh ) 增强型 SSH 客户端技术分析
items: graphics.gd 实现 Linux 二进制兼容性技术分析
items: s-tui 终端 CPU 压力测试与监控工具技术分析

Linux 应用开发基础教程
type: item
date: 2026-03-22T04:02:24+00:00
description: Linux 应用开发基础教程一、概述1. 简介A. 是什么《Linux Application Development By Example - The Fundamental APIs》是由 Arnold Robbins 编写的 Linux 应用程序开发教程书籍，第二版于 2026 年出版。本书通过大量示例代码，系统介绍 Linux 系统编程的核心 API 和开发技巧。B. 为什么学掌握 Linux 系统编程基础，理解操作系统工作原理学习 POSIX 标准 API，提升跨平台开发能力通过实例代码快速掌握复杂的系统调用概念培养底层思维，为学习高级框架打下坚实基础C. 学完能做什么开发 Linux 命令行工具和系统程序处理文件 I/O、进程管理、信号处理等系统级任务进行网络编程和国际化应用开发使用调试工具分析和修复程序问题2. 前置知识A. 必备技能C 语言基础：指针、结构体、内存管理基本 Linux 操作：命令行使用、文件系统概念编译工具使用：gcc、makeB. 推荐知识操作系统基础概念：进程、线程、虚拟内存POSIX 标准了解Git 版本控制二、书籍结构1. 内容组织本书共 17 章，涵盖 Linux 应用开发的各个方面：mindmap root((Linux 应用开发)) 基础入门 第1章 简介 第2章 命令行 第3章 内存 文件操作 第4章 文件IO 第5章 文件信息 第7章 ls 实现 进程管理 第9章 进程 第10章 信号 第12章 资源限制 系统功能 第6章 通用工具1 第8章 挂载 第13章 通用工具2 高级主题 第14章 网络 第15章 国际化 第16章 扩展属性 第17章 调试2. 章节概览章节目录主题第 1 章ch-01-intro入门示例，数学计算程序第 2 章ch-02-cmdline命令行参数处理，环境变量第 3 章ch-03-memory动态内存分配，地址空间第 4 章ch-04-fileio文件 I/O，系统调用与库函数第 5 章ch-05-fileinfo文件元数据，stat 系统调用第 6 章ch-06-general1通用工具：时间、用户信息第 7 章ch-07-ls实现 ls 命令第 8 章ch-08-mounting文件系统挂载第 9 章ch-09-processes进程创建与管理第 10 章ch-10-signals信号处理第 12 章ch-12-limits系统资源限制第 13 章ch-13-general2更多通用工具第 14 章ch-14-networking网络编程基础第 15 章ch-15-i18n国际化与本地化第 16 章ch-16-extended扩展属性第 17 章ch-17-debugging调试技巧与工具三、核心概念1. 系统调用与库函数Linux 编程中区分两类函数：A. 系统调用直接进入内核态执行开销较大，需要上下文切换提供核心功能：文件操作、进程管理、网络通信B. 库函数在用户态执行通常封装系统调用，提供更友好的接口标准 C 库函数：printf、malloc、fopengraph TB A[应用程序] --> B{函数类型} B -->|库函数| C[glibc 等] B -->|系统调用| D[内核] C --> D D --> E[硬件资源]2. Linux 编程模型A. 一切皆文件普通文件、目录、设备、套接字都通过文件描述符访问标准 I/O：stdin（0）、stdout（1）、stderr（2）B. 进程模型进程是资源分配的基本单位fork + exec 创建新进程父子进程关系与等待机制C. 权限模型用户 ID 和组 ID文件权限：rwx 权限位setuid/setgid 机制四、快速上手1. 获取代码克隆本书的代码仓库：git clone https://github.com/arnoldrobbins/LinuxByExample-2e.git cd LinuxByExample-2e2. 编译示例各章节目录包含独立的示例程序，使用 gcc 编译：cd ch-01-intro gcc -o sindegrees ch-intro-sindegrees.c -lm ./sindegrees3. 代码风格说明命名规范：ch-<章节名>-<功能描述>.c头文件：ch-<章节名>-<功能描述>.h测试程序：ch-<章节名>-<功能>-test*.c脚本文件：功能描述.sh五、重点章节解析1. 第 1 章：入门示例A. 数学计算程序该章实现一个角度与弧度转换的程序，展示基本的 C 程序结构和数学库使用。核心代码结构：主程序：ch-intro-sindegrees.c头文件：ch-intro-sindegrees.h测试程序：多个测试版本2. 第 2 章：…

SamWaf开源轻量级网站防火墙介绍
type: item
date: 2026-02-09T00:44:46+00:00
description: SamWaf开源轻量级网站防火墙介绍一、新闻概述1. 标题SamWaf：面向小企业和个人站点的开源轻量级网站防火墙2. 发布时间2025年12月25日（最近更新）3. 来源GitHub 开源仓库二、核心内容1. 事件摘要A. 主要内容SamWaf 是一款开源轻量级的网站应用防火墙（WAF），专为小公司、工作室和个人网站设计，支持完全私有化部署。B. 核心亮点完全开源代码，支持私有化部署独立防护引擎，不依赖 Nginx、Apache、IIS数据本地加密存储，隐私保护到位一键启动，支持 Linux 和 Windows 64位、Arm64 平台支持 IPv6 和自动 SSL 证书申请续签2. 关键信息A. 版本状态GitHub Stars：1344+Fork：154+支持平台：Linux、Windows 64位、Arm64B. 代码仓库GitHub：https://github.com/samwafgo/SamWafGitee：https://gitee.com/samwaf/SamWafAtomGit：https://atomgit.com/SamSafe/SamWafC. 主要特性OWASP CRS 规则集支持CC 防护和 IP 黑白名单自定义防护规则日志加密存储管理端通信加密三、详细报道1. 主要功能A. 防护能力支持 OWASP CRS 规则集SQL 注入、XSS、RCE、扫描等攻击检测CC 攻击频率限制Bot 检测自定义规则脚本支持B. 访问控制IP 黑白名单URL 黑白名单白名单访问模式分网站单独防护策略C. 安全特性日志加密保存通讯日志加密信息脱敏保存数据本地化存储D. SSL 证书管理自动 SSL 证书申请（支持 Let's Encrypt 和 ZeroSSL）自动续签证书到期批量检测支持多云账号配置2. 架构设计graph TB Client[客户端] --> SamWaf[SamWaf 引擎] SamWaf --> WafEngine[WAF 防护引擎] WafEngine --> RuleEngine[规则匹配引擎] RuleEngine --> OWASP[OWASP CRS] RuleEngine --> Custom[自定义规则] SamWaf --> LogSystem[日志系统] LogSystem --> Encrypt[加密存储] WafEngine -.允许请求.-> Backend[后端服务] WafEngine -.拦截请求.-> Block[拦截页面] LogSystem --> Notify[告警通知] Notify -.邮件/企业微信.-> Admin[管理员]A. 工作原理SamWaf 采用反向代理架构，部署在客户端和后端服务之间：请求接收：SamWaf 监听 80/443 端口接收 HTTP/HTTPS 请求规则匹配：通过内置规则引擎对请求进行安全检测处理决策：根据匹配结果决定放行或拦截日志记录：所有请求经加密后存储到本地告警通知：触发告警条件时发送通知B. 核心组件WAF 防护引擎：核心防护逻辑规则引擎：OWASP CRS + 自定义规则日志系统：加密存储和查询SSL 模块：自动证书申请和管理通知模块：邮件、企业微信告警3. 技术细节A. 技术栈开发语言：Go 语言Web 框架：自研引擎前端：Vue.js数据存储：本地加密文件B. 部署方式Windows 系统# 直接启动 SamWaf64.exe # 服务模式安装 SamWaf64.exe install SamWaf64.exe startLinux 系统# 一键安装脚本 curl -sSO http://update.samwaf.com/latest/install_samwaf.sh && bash install_samwaf.sh install # 一键卸载脚本 curl -sSO http://update.samwaf.com/latest/install_samwaf.sh && bash install_samwaf.sh uninstallDocker 部署docker run -d --name=samwaf-instance \ -p 26666:26666 \ -p 80:80 \ -p 443:443 \ -v /path/to/your/conf:/app/conf \ -v /path/to/your/data:/app/data \ -v /path/to/your/logs:/app/logs \ -v /path/to/your/ssl:/app/ssl \ samwaf/samwafC. 访问配置管理界面：http://127.0.0.1:26666默认账号：admin默认密码：adm…

eBPF/XDP 构建二层直接服务器返回负载均衡器教程
type: item
date: 2026-02-06T07:33:24+00:00
description: eBPF/XDP 构建二层直接服务器返回负载均衡器教程一、概述1. 简介A. 是什么本教程讲解如何使用 eBPF/XDP 技术从零开始构建一个二层 Direct Server Return（DSR）负载均衡器。DSR 是一种高级负载均衡模式，允许后端服务器直接响应客户端请求，无需通过负载均衡器回传响应流量。B. 为什么学解决 NAT 模式负载均衡器的性能瓶颈问题掌握 eBPF/XDP 在网络编程中的实际应用理解 DSR 架构在云原生环境中的价值C. 学完能做什么使用 eBPF/XDP 实现二层 DSR 负载均衡理解虚拟 IP（VIP）的工作原理和配置方法掌握 MAC 地址重写技术在数据平面加速中的应用2. 前置知识A. 必备技能Linux 网络基础（IP、MAC、ARP 协议）基本的 C/Go 编程能力了解 eBPF/XDP 基本概念B. 推荐知识完成前序教程：NAT 模式 XDP 负载均衡器了解网络协议栈的分层模型二、背景知识1. NAT 模式的局限性在之前的教程中，我们构建了基于 NAT 的 XDP 负载均衡器。虽然该方案可以正常工作，但存在以下问题：A. 资源消耗负载均衡器需要处理双向流量（请求和响应），这会导致：更高的 CPU 和内存占用可能成为系统瓶颈B. 流量不对称入站流量通常远小于出站流量：搜索查询或 AI 提示只有几字节搜索结果或 AI 响应可能有数千字节C. 客户端信息丢失由于 NAT 负载均衡器重写了数据包头，后端服务器：无法感知真实客户端 IP难以维护用户会话无法按源 IP 记录请求日志2. Direct Server Return 概念DSR 通过让后端服务器直接响应客户端来解决上述问题。有多种 DSR 实现方式：Layer 2 DSR（本教程重点）IP-in-IP 封装GRE 隧道基于 IP 或 TCP 头部字段的变体三、实验环境1. 网络拓扑实验环境包含 5 个节点，分布在两个网络中：节点网络IP 地址lb192.168.178.0/24192.168.178.10/24backend-01192.168.178.0/24192.168.178.11/24backend-02192.168.178.0/24192.168.178.12/24client10.0.0.0/1610.0.0.20/16gateway跨网络192.168.178.2/24 + 10.0.0.2/162. DSR 原理与传统 NAT 负载均衡不同，DSR 保留原始客户端 IP，并允许后端直接响应客户端，在回程路径上绕过负载均衡器。核心问题：后端如何看到客户端 IP（数据包经过了负载均衡器）？后端知道响应哪个客户端吗？如何确保客户端从同一 IP 收到响应？简而言之，二层 DSR 通过在负载均衡器上仅重写数据包的 MAC 地址（保持 IP 头不变），并依靠负载均衡器和后端服务器之间的虚拟 IP 来实现。四、核心概念1. 虚拟 IP（VIP）在任何网络设置中，当客户端向特定端点发送请求时，期望响应来自相同的 IP 地址。如果响应来自不同的 IP，客户端网络栈会认为出错并丢弃数据包。在 NAT 负载均衡中，这会造成问题，因为客户端请求总是通过负载均衡器，后者将其转发给具有不同 IP 的后端节点。A. VIP 解决方案为了解决这个问题，负载均衡器和后端节点需要共享相同的 IP，确保客户端始终认为响应来自其最初联系的地址。这个共享 IP 就是虚拟 IP（VIP）。B. VIP 特性与物理 IP 不同，VIP 不绑定到特定接口或节点。相反，它是由多个节点使用的共享地址，用于处理同一服务的流量。2. VIP 配置A. 负载均衡器配置在负载均衡器的主接口（eth0）上配置 VIP：sudo ip addr add 192.168.178.15/32 dev eth0B. 后端服务器配置在两个后端服务器上，在环回接口（lo）上配置 VIP：sudo ip addr add 192.168.178.15/32 dev loC. ARP 隔离两个节点具有相同 IP 会引起混乱。因此，我们将 VIP 分配给后端节点的 lo 接口。我们不希望后端通过 ARP 广告虚拟 IP。网络中没有人应该知道后端上存在 VIP，否则客户端可能绕过负载均衡器直接连接。为防止后端节点响应 lo 接口上 VIP 地址的 ARP 请求（即广告），在每个后端节点上运行以下命令：# 仅当目标 IP 分配给接收请求的接口时才响应 ARP 请求 # （防止在 eth0 上广告 VIP） sudo sysctl -w net.ipv4.conf.eth0.arp_ignore=1 # 发送 ARP 请求时，仅使用分配给出站接口的地址 # （防止节点在 ARP 中泄露 VIP 作为源 …

Guix System First Impressions as a Nix User
type: item
date: 2026-02-01T05:58:39+00:00
description: Guix System First Impressions as a Nix UserTable of ContentsMy Journey to Guix SystemInstaller ImpressionsI Can't Find my Way-landSympathy for the DevilGoalsResultsOverallNotes1. My Journey to Guix SystemI've been a Linux-only user for about ten years now and, like many others, I too embarked on the arduous journey of distro-hopping. I started with Mint and when that felt too slow, I switched to Ubuntu. When Ubuntu felt too handholdy, I switched to Arch, which proved to be my main driver for well over five or so years. And when I couldn't resist the Siren's call, I moved on to Gentoo, thinking surely "harder is better". Which resulted in severe burnout in a few months, so I capitulated and switched to Fedora, which was very stable and honestly an all around excellent system. But once more, my interest was piqued, and (before today's adventure) I finally switched to NixOS.I've always had a passing interest towards Nix ever since I've first heard about it, but until fairly recently, I always dismissed it as a tool for DevOps guys. The syntax was weird, the need for reproducible environments seemingly irrelevant, and stuff like the oft-recommended Nix Pills seemed anything but newbie-friendly.So then why would someone like me, who's so adamant about not needing Nix eventually choose to go all-in? I guess it was at first less about Nix being better and just the rest being worse.Of the two big reasons for the switch, one was that I realized that having per-directory environments for your projects is actually a very handy thing to do when you like to toy around with many technologies. I used to generate my other blog using Jekyll and, no matter which distro I used, it was always a pain in the neck to have a good Ruby environment set up. bundler install didn't really want to work without privileges and I wasn't really a fan of unleashing sudo on it, but usually that was the only way I could get things to work.With Nix, however, it was a matter of just describing a few pack…

Linux环境变量问题技术分析
type: item
date: 2026-01-30T13:53:13+00:00
description: Linux环境变量问题技术分析一、概述1. 问题背景在日常Linux运维和开发工作中，环境变量相关的问题是导致脚本执行失败的主要原因之一。这类问题通常表现为：命令在交互式终端中正常执行，但通过 crontab、SSH 远程执行或自动化工具执行时却报错找不到命令。2. 核心问题脚本在命令行测试正常，放入 crontab 后报错找不到命令SSH 远程执行命令时环境变量与本地登录不同Docker 容器中环境变量传递问题Bash 与 Sh 语法兼容性问题3. 影响范围自动化脚本执行失败定时任务无法正常运行容器化应用启动异常跨平台脚本兼容性问题二、问题分析1. Login Shell 与 Non-Login ShellA. 核心区别Linux Shell 分为两种模式：Login Shell（登录式 Shell）和 Non-Login Shell（非登录式 Shell），它们加载环境变量的顺序不同。B. 环境变量加载顺序graph TD subgraph Login Shell A1["/etc/profile"] --> A2["~/.bash_profile"] A2 --> A3["~/.bashrc"] A3 --> A4["/etc/bashrc"] end subgraph Non-Login Shell B1["~/.bashrc"] --> B2["/etc/bashrc"] end C["用户登录"] --> Login D["SSH远程执行命令"] --> Non-Login E["Crontab执行"] --> Non-Login F["脚本调用"] --> Non-LoginC. 关键差异Login Shell 加载顺序：① /etc/profile ② ~/.bash_profile ③ ~/.bashrc ④ /etc/bashrcNon-Login Shell 加载顺序：① ~/.bashrc ② /etc/bashrc/etc/profile 中包含 pathmunge 函数，负责将 /usr/sbin、/usr/local/sbin 等路径添加到 PATH 变量中。Non-Login Shell 由于跳过了 /etc/profile 的加载，导致这些路径缺失。2. 实际场景分析A. SSH 远程执行命令# 直接登录后执行（Login Shell） ssh user@ip ip a # 正常执行 # 远程直接执行命令（Non-Login Shell） ssh user@ip "ip a" # 报错：bash: ip: command not found原因分析：Login Shell：PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbinNon-Login Shell：PATH=/usr/local/bin:/usr/binip 命令位于 /usr/sbin 下，Non-Login Shell 的 PATH 中不包含该路径。B. Crontab 定时任务脚本在命令行测试正常，放入 crontab 后报错找不到命令。这是因为：命令行执行使用当前用户的完整环境变量Crontab 执行时的环境变量被 sudo 修改（如果使用 sudo）sudo 默认会重置环境变量3. Bash 与 Sh 的区别A. 命令差异命令/特性BashSh (POSIX)source内建命令不支持（用 . 代替）语法扩展支持数组等仅 POSIX 标准 B. 系统链接差异CentOS：/usr/bin/sh → /usr/bin/bash（sh 等同于 bash）Ubuntu：/usr/bin/sh → /usr/bin/dash（sh 是独立的 dash）这就是为什么在 CentOS 上用 sh 执行的脚本在 Ubuntu 上可能报语法错误。三、解决方案1. Crontab 环境变量问题A. 使用 sudo -E 参数# 在 crontab 中使用 sudo -E /path/to/script.sh-E 参数（--preserve-env）可以保留当前用户的环境变量。B. 脚本中显式加载环境变量#!/bin/bash # 在脚本开头添加 source /etc/profile source ~/.bashrcC. 脚本使用 login shell#!/bin/bash --login2. SSH 远程执行问题A. 创建全局环境变量文件在 /etc/profile.d/ 下创建自定义环境变量文件：# /etc/profile.d/my_bashenv.sh pathmunge () { if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; …

在 macOS 中利用 OrbStack 虚拟机一键部署 Moltbot
type: item
date: 2026-01-30T01:13:56+00:00
description: 在 macOS 中利用 OrbStack 虚拟机一键部署 Moltbot一、概述1. 简介A. 是什么本教程介绍如何在 macOS 系统中使用 OrbStack 虚拟机平台快速部署 Moltbot（前身为 Clawdbot）个人 AI 助手。OrbStack 是一款专为 macOS 设计的轻量级虚拟化解决方案，可作为 Docker Desktop 的替代方案，提供更快的启动速度和更低的资源占用。Moltbot 是一个开源的个人 AI 助手框架，支持多平台通讯和主动式智能任务执行。B. 为什么学解决本地 AI 助手部署复杂的问题利用 OrbStack 的轻量级虚拟化优势，实现 7×24 小时稳定运行掌握 macOS 下 Linux 虚拟机管理的实用技能构建隐私安全的个人 AI 系统，数据完全本地化C. 学完能做什么在 macOS 上安装和配置 OrbStack创建和管理 Linux 虚拟机部署和配置 Moltbot 个人 AI 助手通过多种通讯平台（Telegram、WhatsApp 等）与 AI 助手交互实现自动化任务和工作流程管理2. 前置知识A. 必备技能基本 macOS 操作能力了解终端命令行操作拥有 Anthropic API 账号B. 推荐知识了解 Docker 容器概念了解 Linux 基础命令了解 systemd 服务管理二、环境准备1. 系统要求macOS 12.3（Monterey）或更高版本至少 4GB 可用内存至少 10GB 可用磁盘空间稳定的网络连接2. 准备清单准备项目说明获取方式OrbStack 应用用于运行 Linux 虚拟机https://orbstack.devAnthropic API Key用于调用 Claude AI 模型https://console.anthropic.comTelegram 账号用于与 Bot 交互Telegram 官网虚拟机名称moltbot-vm（后续步骤会用到）自定义3. 安装 OrbStackA. 下载 OrbStack打开浏览器，访问 https://orbstack.dev点击页面中央的 Download 按钮浏览器会自动下载 OrbStack.dmg 文件B. 安装步骤打开访达（Finder），进入下载文件夹双击 OrbStack.dmg 文件，弹出安装窗口将 OrbStack 图标拖拽到 Applications 文件夹图标上等待复制完成后，关闭安装窗口C. 首次启动与授权打开启动台（Launchpad）或访达，找到 OrbStack双击 OrbStack 图标启动应用首次启动会弹出安装依赖组件的提示，点击 Install系统要求输入 Mac 登录密码，输入后点击确定等待安装完成（通常只需几秒钟）D. 验证安装安装完成后，屏幕右上角的菜单栏会出现 OrbStack 图标（一个小方块）。点击该图标可以快速访问 OrbStack 的功能。三、核心概念1. 基本术语A. OrbStackOrbStack 是一款原生 Swift 应用程序，专为 macOS 设计，可视为 macOS 版的 WSL（Windows Subsystem for Linux）。其核心技术特点包括共享内核架构、VirtioFS 文件共享、Rosetta 兼容层和原生网络支持。B. MoltbotMoltbot（原名 Clawdbot）是一个运行在本地设备上的个人 AI 操作系统，支持多平台通讯、系统操作、自动化工作流和数据处理。其核心特性是主动式智能（Proactive Intelligence），能够自动检测异常并主动通知用户，无需用户手动查询。C. systemdsystemd 是 Linux 系统和服务管理器，用于启动、停止和管理系统服务。Moltbot 使用 systemd 实现守护进程管理，确保 7×24 小时不间断运行。2. 工作原理graph TB A[Mac 用户] -->|聊天消息| B[Telegram/WhatsApp] B -->|Webhook| C[OrbStack 虚拟机] C -->|moltbot-gateway| D[Anthropic API] D -->|AI 响应| C C -->|回复消息| B B -->|显示结果| A C -->|文件访问| E[Finder 文件系统] C -->|Web 管理界面| F[浏览器控制台]3. 架构图graph LR A[macOS 宿主机] -->|VirtioFS| B[OrbStack 虚拟机层] B -->|Ubuntu 镜像| C[moltbot-vm] C -->|Node.js 22| D[Moltbot Gateway] D -->|API 调用| E[Anthropic Claude]…

dnsmasq min-cache-ttl 参数工作原理技术分析
type: item
date: 2026-01-29T21:47:07+00:00
description: dnsmasq min-cache-ttl 参数工作原理技术分析一、概述1. 问题定义在使用 dnsmasq 作为 DNS 缓存服务器时，min-cache-ttl 参数是一个重要但常被误解的配置选项。本文将深入分析该参数的工作原理、限制条件以及实际应用场景。2. 核心问题什么是 min-cache-ttl 参数？它与普通的 DNS TTL 有什么区别？为什么设置 min-cache-ttl=36000（10 小时）会遇到问题？3. 分析目标理解 dnsmasq 的 DNS 缓存机制掌握 min-cache-ttl 参数的工作原理了解该参数的限制和替代方案二、背景知识1. DNS TTL 基础概念DNS TTL（Time To Live）是指 DNS 记录在缓存中的生存时间，单位为秒。当 DNS 解析器查询域名时，会将结果缓存指定时长，过期后需要重新查询。2. dnsmasq 简介dnsmasq 是一个轻量级的 DNS 转发器和 DHCP 服务器，广泛用于家庭路由器、嵌入式设备和小型网络环境。其主要功能包括：DNS 缓存：缓存 DNS 查询结果，提高解析速度DHCP 服务：为网络设备分配 IP 地址DNS 转发：将查询请求转发到上游 DNS 服务器三、dnsmasq 缓存机制1. 缓存工作流程graph TD A[客户端 DNS 查询] --> B{检查本地缓存} B -->|命中| C[返回缓存结果] B -->|未命中| D[转发到上游 DNS] D --> E[接收上游响应] E --> F[应用 TTL 规则] F --> G[存入缓存] G --> C C --> H[返回给客户端]2. TTL 相关参数dnsmasq 提供了多个与 TTL 相关的配置参数：参数作用默认值cache-ttl缓存条目的默认 TTL无min-cache-ttl最小缓存 TTL0max-cache-ttl最大缓存 TTL无限制max-ttl返回给客户端的最大 TTL无限制local-ttl本地记录（如 /etc/hosts）的 TTL0neg-ttl否定响应（NXDOMAIN）的缓存时间无四、min-cache-ttl 参数详解1. 参数定义min-cache-ttl= 用于设置 DNS 缓存条目的最小生存时间。2. 工作原理A. 首次查询当客户端首次查询某个域名时：dnsmasq 将查询转发到上游 DNS 服务器上游服务器返回 DNS 记录及其 TTL 值dnsmasq 将记录存入缓存，返回给客户端的 TTL 为原始值B. 后续查询当客户端再次查询同一域名时：dnsmasq 检查本地缓存如果缓存未过期，直接返回结果返回给客户端的 TTL 是缓存中剩余的时间C. TTL 扩展机制min-cache-ttl 的核心功能是扩展短 TTL 值：graph LR A[上游返回 TTL=60s] --> B{min-cache-ttl 设置值} B -->|min-cache-ttl=300| C[缓存 TTL 扩展为 300s] B -->|min-cache-ttl=0| D[使用原始 TTL=60s] C --> E[减少上游查询] D --> F[遵守原始 TTL]3. 代码实现原理根据 dnsmasq 源码分析，min-cache-ttl 的实现逻辑如下：// src/cache.c 中的 TTL 调整逻辑 if (daemon->min_cache_ttl != 0 && ttl < daemon->min_cache_ttl) ttl = daemon->min_cache_ttl;这段代码的核心含义是：如果配置了 min-cache-ttl 且上游返回的 TTL 小于该值，则强制使用 min-cache-ttl 作为缓存时间。4. 关键限制A. 硬编码限制dnsmasq 在源码中对 min-cache-ttl 设置了硬编码限制：// src/config.h #define TTL_FLOOR_LIMIT 3600 /* 不允许 min-cache-ttl 超过 1 小时 */这意味着：即使配置文件中设置 min-cache-ttl=36000，dnsmasq 实际使用的最大值只能是 3600 秒（1 小时）。B. 为什么有此限制？DNS 协议设计原则：TTL 反映了域名所有者对该记录变化频率的预期，人为延长可能违反这一原则数据新鲜度：过长的缓存时间可能导致客户端使用过期的 IP 地址故障恢复：当需要紧急切换 DNS 记录时，过长的缓存会延迟生效五、36000 秒配置的问题1. 问题分析用户设置 min-cache-ttl=36000（10 小时）的初衷可能是：减少频繁的 DNS 查询降低上游 DNS 服务器负载提高域名解析速度2. …

Trzsz-ssh ( tssh ) 增强型 SSH 客户端技术分析
type: item
date: 2026-01-29T05:40:25+00:00
description: Trzsz-ssh ( tssh ) 增强型 SSH 客户端技术分析一、概述1. 简介A. 是什么trzsz-ssh（简称 tssh）是一个 ssh 客户端的直接替代品，提供与 openssh 完全兼容的基础功能，同时实现多种实用的扩展功能。它由 lonnywong 开发，采用 MIT 许可证开源。B. 为什么使用解决服务器管理中记忆大量别名的困扰提供交互式登录界面，支持搜索和批量选择内置 trzsz 文件传输功能，无需额外开启窗口支持批量登录多台服务器并执行预设命令支持记住密码和自动交互，提升登录效率与 tsshd 配合使用，适用于弱网环境，保持会话不中断C. 核心特性兼容 openssh 配置和基础功能内置 TUI 登录界面，支持搜索和多选集成 trzsz 和 zmodem 文件传输支持记住密码、记住答案（键盘交互认证）支持 UDP 模式，适合高延迟弱网环境支持批量登录并执行预设命令支持自动交互（类似 expect 功能）二、安装方法1. 系统要求支持 Windows、macOS、Linux、ChromeOS 等多种平台Go 版安装需要 go 1.20 以上版本2. 安装方式A. Windows 系统# 使用 scoop 安装 scoop install tssh # 使用 winget 安装 winget install tssh # 使用 Chocolatey 安装 choco install tsshB. macOS 系统# 使用 Homebrew 安装 brew install trzsz-sshC. Linux 系统# Ubuntu/Debian 系统 sudo apt install tssh # 使用 yum 安装 sudo yum install tssh # ArchLinux 系统 yay -S tssh # ChromeOS 系统 crew install tsshD. 使用 Go 安装# 直接安装最新版本 go install github.com/trzsz/trzsz-ssh/cmd/tssh@latest # 或从源码编译安装 git clone https://github.com/trzsz/trzsz-ssh.git cd trzsz-ssh sudo make installE. 从发布包安装可从 GitHub Releases 下载预编译版本，国内用户可从 Gitee 发行版下载。三、工作原理1. 基本架构graph TB A[tssh 客户端] --> B[SSH 协议层] B --> C{连接模式} C -->|TCP 模式| D[标准 SSH 连接] C -->|UDP 模式| E[tsshd 服务端] D --> F[远程服务器] E --> F A --> G[TUI 登录界面] A --> H[trzsz 传输层] A --> I[自动交互模块] A --> J[批量登录模块]2. 核心模块SSH 协议层：兼容 openssh 的 SSH 协议实现TUI 界面：交互式终端用户界面，支持搜索和多选文件传输层：集成 trzsz 和 zmodem 协议认证模块：支持密码、公钥、键盘交互等多种认证方式UDP 模块：与 tsshd 配合，实现 UDP 传输模式3. 配置文件结构tssh 使用标准的 openssh 配置文件格式，并进行了扩展：主配置文件：~/.ssh/config扩展配置文件：~/.ssh/passwordtssh 专属配置：~/.tssh.conf 或 $XDG_CONFIG_HOME/tssh/tssh.conf四、核心功能1. 登录界面A. 启动方式# 直接运行 tssh 命令 tssh # 或者有除目标机器外的其他参数 tssh -o ServerAliveInterval=60B. 配置要求使用前需要配置好 ~/.ssh/config 文件：# 基本配置示例 Host server1 HostName 192.168.1.100 User admin Port 22 IdentityFile ~/.ssh/id_rsa Host server2 HostName 192.168.1.101 User rootC. 快捷键支持操作全局快捷键非搜索快捷键描述确认登录Enter-确认并登录选中的服务器退出Ctrl+C / Ctrl+Qq / Q取消并退出登录界面上移Ctrl+K / Shift+Tab / ↑k / K往上移动光标下移Ctrl+J / Tab / ↓j / J往下移动光标上翻页Ctrl+H / Ctrl+U / Ctrl+B / PageUp / ←h / H / u / U / b / B往上翻一页下翻页Ctrl+L / Ctrl+D / Ct…

graphics.gd 实现 Linux 二进制兼容性技术分析
type: item
date: 2026-01-27T11:15:24+00:00
description: graphics.gd 实现 Linux 二进制兼容性技术分析一、技术概述1. 核心问题Linux 图形应用分发长期面临二进制兼容性挑战，尤其是需要硬件加速图形的应用。不同 Linux 发行版使用不同的 C 标准库（主要是 glibc 和 musl），导致针对一个库编译的二进制文件无法在另一个库的系统上运行。2. 解决方案graphics.gd 项目通过 musl + dlopen 技术，实现了真正的单静态二进制文件分发，支持在任何 Linux 系统（内核 3.2+）上运行，同时具备硬件加速图形能力。3. 技术意义这是 Linux 图形应用分发领域的重大突破，实现了类似 Go 语言的单静态二进制体验，同时支持 OpenGL、Vulkan 等硬件加速图形接口。二、背景分析1. Linux 二进制兼容性问题A. 现状Go 语言通过静态编译已经很好地解决了命令行工具和服务器的分发问题，只需执行 go build 即可生成在任何 Linux 发行版上运行的单二进制文件。B. 图形应用的挑战GPU 驱动必须通过 C ABI 访问动态库，这些 C 库针对特定的 libc 编译。主要问题包括：glibc 编译的库无法在 musl 系统上运行，反之亦然Godot 引擎在 Linux 上依赖 X11、Wayland、OpenGL、Vulkan 等动态库musl 拒绝为静态二进制实现 dlopen，以防止加载 glibc 库C. 技术障碍musl 和 glibc 在 TLS（线程本地存储）实现上存在根本性不兼容，这是阻止静态二进制使用 dlopen 的核心原因。三、技术实现1. musl 支持实现A. Go 运行时补丁为了解决 Go 在 musl 环境下的 c-shared 和 c-archive 构建问题，项目引入了新的 GOOS=musl 目标，通过 build-overlay 对运行时进行补丁。B. 构建策略调整放弃 c-shared 构建，改用 c-archive 直接链接 Go 代码与 Godot，最终生成单个二进制文件。2. dlopen 技术方案A. 技术原理通过在目标机器上加载或编译一个小型 C 程序，从同一进程加载并执行该程序。该程序引入主机的动态链接器，从而"窃取"系统的 dlopen 和 longjmp 回到 graphics.gd。B. 核心机制graph TB A[graphics.gd 静态二进制] --> B{嵌入小型 C 程序} B --> C[加载主机动态链接器] C --> D[获取系统 dlopen] C --> E[获取系统 longjmp] D --> F[汇编跳板包装] E --> F F --> G[切换到系统 libc TLS] G --> H[调用动态库函数] H --> I[X11/Wayland/OpenGL/Vulkan]C. 汇编跳板技术使用汇编跳板（assembly trampoline）包装所有动态加载的函数，在调用期间切换到系统的 libc TLS。这种设计类似于 cgo 的工作方式。3. 技术借鉴A. detour 技术C 语言的 detour 技术可以在没有标准库的情况下 dlopen SDL 并显示图形。B. Cosmopolitan 的 dlopen 实现使用类似技术实现跨平台动态加载。C. 创新点将上述技术扩展到 musl 环境，实现了真正的单静态二进制 + 图形支持。四、技术架构1. 系统架构graph LR A[用户应用 Go 代码] --> B[graphics.gd 编译] B --> C{GOOS=musl 构建} C --> D[Godot c-archive] D --> E[静态链接二进制] E --> F[嵌入小型 C 程序] F --> G[运行时动态链接器] G --> H[X11/Wayland] G --> I[OpenGL/Vulkan]2. 构建流程A. 跨平台编译在任何支持的平台（Windows、macOS、Linux）上执行：GOOS=musl GOARCH=amd64 gd buildB. 前置要求需要删除 export_presets.cfg 以添加新的 musl 导出预设。C. 输出结果单个静态二进制文件，可在任何安装了 gcc 的 Linux 系统上运行（尚未嵌入辅助二进制）。3. 运行时机制A. 加载流程静态二进制启动加载嵌入的小型 C 程序C 程序引入主机动态链接器通过汇编跳板调用系统 dlopen加载 X11、Wayland、OpenGL、Vulkan 等库切换 TLS 执行图形函数B. TLS 切换汇编跳板在每次调用动态库函数前后切换 TLS，确保与系统 libc 的兼容性。五、技术优势1. 真正的单二进制分发不需要区分 g…

s-tui 终端 CPU 压力测试与监控工具技术分析
type: item
date: 2026-01-27T04:00:01+00:00
description: s-tui 终端 CPU 压力测试与监控工具技术分析一、概述1. 工具简介s-tui（Stress Terminal UI）是一个基于终端的 CPU 压力测试和监控工具，采用 TUI（Terminal User Interface）界面，提供图形化的 CPU 性能监控功能。2. 核心功能CPU 温度、频率、功耗和利用率监控可视化展示温控降频导致的性能下降无需 X 服务器即可运行内置多种 CPU 压力测试选项（stress、stress-ng、FIRESTARTER）3. 技术特点跨平台支持（Linux、各类发行版、树莓派）纯终端界面，资源占用低支持多种压力测试工具集成可配置阈值告警和自动化脚本二、技术架构1. 核心组件graph TB A[s-tui 主程序] --> B[urwid TUI 框架] A --> C[psutil 系统监控] A --> D[压力测试模块] D --> E[stress] D --> F[stress-ng] D --> G[FIRESTARTER] C --> H[CPU 温度] C --> I[CPU 频率] C --> J[CPU 功耗] C --> K[CPU 利用率] B --> L[图形界面] B --> M[侧边栏控制] B --> N[实时数据展示]2. 技术栈分析组件技术选型作用界面框架urwid提供终端 UI 绘图能力系统监控psutil跨平台系统信息获取压力测试stress/stress-ng/FIRESTARTERCPU 负载生成配置管理INI 文件用户配置持久化图表绘制ASCII/UTF-8 字符终端图形渲染A. urwid 框架urwid 是一个 Python 终端 UI 库，特点如下：支持 ASCII 和 UTF-8 字符集提供丰富的 UI 组件（按钮、列表、文本框）事件驱动架构仅支持 UNIX-like 系统B. psutil 库psutil 提供跨平台的系统和进程信息获取：CPU 信息：频率、利用率、温度内存信息：物理内存、交换内存传感器信息：温度、风扇转速硬件兼容性取决于底层系统支持3. 数据流程sequenceDiagram participant U as 用户 participant T as TUI 界面 participant M as 监控模块 participant S as 压力测试 participant H as 硬件 U->>T: 启动 s-tui T->>M: 获取 CPU 状态 M->>H: 读取传感器数据 H-->>M: 返回温度/频率/功耗 M-->>T: 更新显示数据 T-->>U: 绘制图形界面 U->>T: 选择压力测试模式 T->>S: 启动 stress 进程 S->>H: 生成 CPU 负载 H-->>M: 传感器数值上升 M-->>T: 实时更新图表 T-->>U: 显示温度变化曲线三、核心功能详解1. 监控功能A. CPU 温度监控数据来源：/sys/class/thermal 下的温度传感器显示方式：实时曲线图 + 数值显示阈值告警：默认 80°C，可自定义B. CPU 频率监控显示当前频率支持多核 CPU 频率分别监控可检测降频事件C. CPU 功耗监控支持硬件：Intel Core 二代及以上（Sandy Bridge）AMD Family 17h 系列（通过 amd_energy 驱动）数据单位：瓦特（W）D. CPU 利用率监控总体 CPU 使用率单核使用率更新频率：约 1 秒2. 压力测试功能A. stress 工具传统的 CPU 压力测试工具：# 安装 sudo apt-get install stress # 常用参数 --cpu N # 启动 N 个子进程对 CPU 施压 --timeout N # 超时时间（秒） --vm N # 启动 N 个进程进行内存压力测试B. stress-ng 工具stress 的增强版，提供更多测试场景：支持 300+ 种压力测试方法更精细的测试控制更详细的统计信息C. FIRESTARTER 工具极端 CPU 压力测试工具：通过子模块集成需要编译安装不支持所有系统3. 配置与扩展A. 配置文件保存位置：~/.config/s-tui/s-tui.conf保存内容：图表显示选项压力测试模式温度阈值设置B. 阈值脚本（Hooks）位置：~/.config/s-tui/hooks.d/tempsource.sh触发条件：CPU 温度超过阈值执行频率：每 30 秒一次（持续超温时）示例脚本：#!/bin/bash # 温度超限告警脚本 echo "CPU 温度告警: $(date)" >> /var/log/cpu_temp_alert.log # 可以添加邮件通知、系统…