运维123 - linux
type: channel
link: https://www.sddts.cn/index.php/tag/linux/
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 压力测试与监控工具技术分析
items: Term Everything 终端内运行 GUI 应用技术创新分析
items: Linux 用户活动监控工具 psacct 与 acct 使用教程
items: tmmpr 终端思维导图工具技术分析

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 # 可以添加邮件通知、系统…

Term Everything 终端内运行 GUI 应用技术创新分析
type: item
date: 2026-01-26T21:54:54+00:00
description: Term Everything 终端内运行 GUI 应用技术创新分析一、技术概述1. 项目简介Term Everything 是一个创新的 Linux 命令行工具，能够在终端内运行任何 GUI 应用程序。该项目本质上是一个从零构建的 Wayland 合成器，但其输出目标不是显示器，而是终端。2. 核心特性支持 X11 和 Wayland 主机系统可通过 SSH 远程运行 GUI 应用支持终端图像协议（kitty、iTerm2）纯 Go 语言开发，仅含少量 C 代码开源协议 AGPL-3.03. 技术背景在现代 Linux 系统中，显示服务器负责协调客户端程序的输入和输出。Wayland 作为新一代显示协议，不强制规定渲染模型，程序可自主决定如何绘制图形，然后交给显示服务器处理。Term Everything 正是利用了这一特性，将图形输出重定向到终端。二、技术架构1. 工作原理graph TB A[GUI 应用程序] -->|Wayland 协议| B[Term Everything 合成器] B -->|图形数据| C[chafa 转换库] C -->|UTF8 字符 + ANSI 转义码| D[终端输出] D -->|用户交互| E[stdin 键盘/鼠标输入] E -->|输入事件| B B -->|输入转发| A2. 核心组件A. Wayland 合成器自主实现的 Wayland 协议处理接收客户端应用的图形缓冲管理窗口生命周期和输入事件B. 图形转换层使用 chafa 库将图像转为终端字符支持 SIXEL、Kitty 图形协议自适应终端分辨率C. 输入处理从 stdin 捕获键盘和鼠标事件转换为 Wayland 输入事件转发给 GUI 应用程序三、技术创新点1. 协议层创新Wayland 协议本身对输出方式无限制，Term Everything 创造性地将终端作为输出目标。这种方式打破了传统显示服务器的边界，使 GUI 应用能在纯文本环境中运行。2. 渲染技术栈文本模式渲染：使用 UTF-8 字符和 ANSI 转义码图形模式渲染：利用终端图像协议（kitty、iTerm2）混合渲染：根据终端能力自动选择最佳方案3. 远程显示能力由于输出是纯文本流，天然支持 SSH 远程传输。用户可在本地终端查看远程服务器的 GUI 应用，无需 X11 转发。sequenceDiagram participant U as 用户终端 participant S as SSH 连接 participant R as 远程服务器 participant G as GUI 应用 U->>S: 发起 SSH 连接 S->>R: 建立 SSH 会话 R->>G: 启动 Term Everything G->>R: 渲染图形帧 R->>R: 转换为终端字符 R->>S: 输出字符流 S->>U: 传输字符流 U->>U: 显示终端内容 U->>S: 键盘/鼠标输入 S->>R: 转发输入事件 R->>G: Wayland 输入事件四、技术实现细节1. 显示适配终端分辨率受行列数限制，用户可通过 Ctrl-（缩小字体）提高分辨率。项目根据终端能力动态调整渲染策略：低分辨率模式：使用 ASCII 字符中分辨率模式：使用 Unicode 块字符高分辨率模式：使用终端图像协议2. 性能优化仅在内容变化时重绘按需更新屏幕区域支持硬件加速的终端图形协议3. 兼容性处理自动检测终端类型和功能降级到基础功能集支持 X11 应用的 Wayland 兼容层五、应用场景1. 远程服务器管理在无图形界面的服务器上运行图形化工具，通过 SSH 在本地查看和操作。2. 资源受限环境在低配置设备或嵌入式系统上运行需要图形界面的应用程序。3. 终端工作流集成将 GUI 应用无缝集成到命令行工作流中，避免在终端和图形界面间切换。4. 创意展示终端内运行浏览器、视频播放器、甚至游戏（如 Doom），展示技术可能性。六、技术挑战1. 性能瓶颈字符渲染的 CPU 开销大量数据传输的延迟终端刷新率限制2. 兼容性问题部分应用可能无法启动或崩溃某些图形特性无法在终端中呈现输入事件映射的复杂性3. 用户体验分辨率限制导致细节丢失色彩还原能力有限交互响应延迟七、发展现状1. 项目状态当前版本：Beta 0.7.8开发语言：Go 97.9%，C 2.1%社区活跃度：7.7k Stars，184 Forks贡献者：7 人2. 开发路线第一阶段：支持部分应用（当前阶段）第二阶段：支持大多数应用第三阶段：支持所有应用3. 已知问题部分应用启动失败或崩溃性能随分辨率提高而下降需要用户反馈问题以改进兼容性八、技术意义1. 架构创新Term Everything 重新定义了显示服务器的边界，证明了 Wayl…

Linux 用户活动监控工具 psacct 与 acct 使用教程
type: item
date: 2026-01-26T21:52:05+00:00
description: Linux 用户活动监控工具 psacct 与 acct 使用教程一、概述1. 简介A. 是什么psacct 和 acct 是 Linux 系统中用于监控用户活动的开源工具。这些工具在后台运行，持续跟踪系统中每个用户的活动以及所消耗的资源。B. 为什么学多用户服务器管理需要了解用户行为安全审计和问题排查的基础工具资源管理和容量规划的数据来源系统管理员必备的监控技能C. 学完能做什么查看用户登录时长和连接时间统计追踪用户执行的所有命令监控系统资源消耗情况生成用户活动报告用于审计2. 前置知识A. 必备技能基本 Linux 命令操作了解 Linux 用户和权限概念熟悉 systemctl 服务管理命令B. 推荐知识Linux 进程管理基础系统日志和日志轮转概念二、环境准备1. 系统要求Linux 发行版：RHEL/CentOS/Fedora 或 Ubuntu/Debianroot 或 sudo 权限磁盘空间：至少 500MB 用于日志存储2. 安装步骤RHEL/CentOS/Fedora 系统：sudo yum install psacct # 或在新系统上使用 dnf sudo dnf install psacctUbuntu/Debian 系统：sudo apt install acct其他发行版：# Alpine Linux sudo apk add psacct # Arch Linux sudo pacman -S acct # OpenSUSE sudo zypper install acct3. 启动服务RHEL 系统需要手动启动：# 查看服务状态 sudo systemctl status psacct # 启动服务 sudo systemctl start psacct # 设置开机自启 sudo systemctl enable psacct # 再次查看状态确认 sudo systemctl status psacctDebian 系统会自动启动服务。4. 验证安装# 检查进程日志文件是否创建 ls -lh /var/account/pacct # 查看当前登录统计 ac三、核心概念1. 基本术语psacct/acct：进程 accounting 工具包pacct：进程 accounting 数据文件wtmp：用户登录登出记录文件连接时间：用户登录系统的累计时长2. 工作原理graph TB A[用户登录] --> B[系统记录 wtmp] A --> C[用户执行命令] C --> D[acct 记录进程信息] D --> E[写入 pacct 文件] B --> F[ac 命令读取] E --> G[sa 命令读取] E --> H[lastcomm 命令读取] F --> I[生成统计报告] G --> I H --> I3. 核心命令功能命令功能说明ac显示用户登录/登出统计（连接时间）lastcomm显示用户之前执行的命令accton开启或关闭进程 accountingsa汇总已执行命令的信息last/lastb显示最后登录的用户列表四、快速上手1. 查看总连接时间ac输出示例：total 11299.15这个数字表示所有用户累计连接小时数。2. 按日期查看连接时间ac -d输出示例：Oct 28 total 234.50 Oct 29 total 189.23 Oct 30 total 198.67 Oct 31 total 456.12 Nov 1 total 267.45 Nov 2 total 201.34 Nov 3 total 423.45注意某些日期的异常峰值，需要调查原因。3. 按用户查看连接时间ac -p输出示例：rockylinux 425.61 tecmint 702.29 root 10171.54 total 11299.44可以看到 root 用户的登录时间远超其他用户。4. 查看特定用户连接时间ac ravi输出示例：total 110.31五、进阶内容1. 命令执行统计A. 查看所有命令摘要sa输出包含以下列：第一列：实际执行时间（挂钟时间，分钟）第二列：CPU 时间（系统+用户时间，分钟）第三列：平均 CPU 使用量（以 1k 为单位）第四列：命令名称带星号（*）的命令表示以超级用户权限运行。B. 查看特定用户信息sa -u显示每个用户执行的命令及资源消耗。C. 查看进程统计sa -m显示总进程数和 CPU 分钟数。如果这些数字持续增长，需要调查系统状况。D. 按使用率排序sa -c按百分比显示资源使用情况，帮助识别消耗最多资源的命令。2. 命令历史查询A. 查看用户最后执行的命令lastcomm ravi输出显示用户 ravi 执行的最后命令。B. 限制输出行数l…

tmmpr 终端思维导图工具技术分析
type: item
date: 2026-01-25T21:59:20+00:00
description: tmmpr 终端思维导图工具技术分析一、概述1. 项目简介A. 是什么tmmpr（terminal mind mapper）是一个基于 Linux 终端的思维导图应用程序，允许用户在无限画布上创建、组织和连接笔记。它将终端环境转变为数字白板，支持通过键盘高效操作。B. 核心价值在无图形界面环境中实现可视化思维整理纯键盘操作，符合 Vim 用户习惯轻量级实现，无需复杂的图形环境依赖C. 技术栈语言：Rust 2024 Edition框架：Ratatui 0.30.0（TUI 框架）终端处理：Crossterm 0.29.0数据序列化：Serde + Serde_json二、核心架构1. 应用结构graph TB A[main.rs] --> B[app.rs] A --> C[input.rs] A --> D[ui.rs] A --> E[states/] A --> F[utils/] E --> E1[StartState] E --> E2[MapState] E --> E3[SettingsState] C --> C1[事件处理] C --> C2[按键映射] D --> D1[render_start] D --> D2[render_map] D --> D3[render_settings]2. 状态管理应用采用状态机模式，通过 Screen 枚举管理三个主要界面：状态职责渲染函数Start启动界面，提供新建、打开、最近文件功能render_startMap核心思维导图编辑界面render_mapSettings设置配置界面render_settings3. 核心数据结构pub struct App { pub running: bool, // 主循环控制 pub screen: Screen, // 当前界面状态 } pub enum Screen { Start(StartState), Map(MapState), Settings(SettingsState), }三、工作原理1. 主循环机制sequenceDiagram participant M as main() participant T as Terminal participant A as App participant E as Event Handler participant R as Renderer M->>T: 初始化终端 M->>A: 创建 App 实例 loop 主循环 A->>E: handle_events() E->>A: 更新状态 A->>R: 判断是否需要重绘 alt 需要重绘 A->>T: terminal.draw() T->>R: 调用对应 render 函数 end A->>A: 检查 running 状态 end M->>T: 恢复终端2. 视口与画布系统无限画布实现坐标系统：正坐标空间（0,0 到无穷大）视口管理：通过 viewport_offset 控制可见区域导航方式：hjkl 键移动视口，H/J/K/L 快速移动渲染优化按需重绘：通过 needs_clear_and_redraw 标志控制增量更新：仅在状态变化时重绘界面四、功能模块1. 多模式操作tmmpr 采用类 Vim 的模式系统：模式功能切换键Normal视口导航、通用命令默认模式Visual选择和管理笔记v 键进入Visual (Move)移动笔记位置m 键切换Visual (Connection)管理笔记连接c/C 键切换Edit文本编辑i/a 键进入2. 笔记与连接系统笔记属性位置坐标（x, y）文本内容颜色标识连接端口（上下左右）连接管理支持多对多连接自定义连接颜色可配置连接侧边连接旋转和删除功能3. 数据持久化自动保存可配置自动保存间隔防止数据丢失备份系统打开文件时自动备份运行时定期备份可配置备份频率（每日、每周等）五、技术特性1. Rust 2024 Edition项目使用最新的 Rust 2024 Edition，这意味：采用最新的语言特性和优化改进的错误处理机制更好的编译器诊断2. 依赖分析从 Cargo.toml 可看出项目的精简设计：[dependencies] ratatui = "0.30.0" # TUI 框架 crossterm = "0.29.0" # 跨平台终端操作 color-eyre = "0.6.5" # 错误处理 serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" # JSON 序列化 home = "0.5.12" # 目录路径解析 chrono = { version = "0.4.43"…