<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>周言志</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://www.tenxiaodao.top/</id>
  <link href="https://www.tenxiaodao.top/" rel="alternate"/>
  <link href="https://www.tenxiaodao.top/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, 周言志</rights>
  <subtitle>欢迎来到我的世界</subtitle>
  <title>言志</title>
  <updated>2026-06-12T15:42:47.000Z</updated>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="技术分享" scheme="https://www.tenxiaodao.top/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/"/>
    <category term="AI" scheme="https://www.tenxiaodao.top/tags/AI/"/>
    <category term="Codex" scheme="https://www.tenxiaodao.top/tags/Codex/"/>
    <category term="OpenAI" scheme="https://www.tenxiaodao.top/tags/OpenAI/"/>
    <content>
      <![CDATA[<h1 id="Codex-使用指南"><a href="#Codex-使用指南" class="headerlink" title="Codex 使用指南"></a>Codex 使用指南</h1><p>OpenAI Codex 是一种专注于代码理解与生成的模型，适合用于编程助手、自动补全、脚本生成、代码审查等场景。本文从基础概念、使用方法、提示词设计和常见实践入手，帮助你快速掌握 Codex 的核心用法。</p><h2 id="什么是-Codex"><a href="#什么是-Codex" class="headerlink" title="什么是 Codex"></a>什么是 Codex</h2><p>Codex 是 OpenAI 系列模型中的一个分支，专门用于处理编程语言。</p><ul><li>支持多种编程语言，包括 Python、JavaScript、TypeScript、Go、Java 等。</li><li>能理解自然语言指令并生成对应代码。</li><li>适合作为开发辅助工具、代码搜索、自动化脚本生成的底层模型。</li></ul><p>Codex 与通用语言模型的主要区别在于，它更加关注“代码语义”和“代码结构”，因此在编程任务上表现更稳定。</p><h2 id="Codex-可以做什么"><a href="#Codex-可以做什么" class="headerlink" title="Codex 可以做什么"></a>Codex 可以做什么</h2><p>常见使用场景包括：</p><ul><li>代码片段自动生成</li><li>代码补全与重构建议</li><li>单元测试、文档注释生成</li><li>数据处理脚本、API 调用示例</li><li>代码审查与错误定位辅助</li></ul><p>例如，你可以让 Codex 根据需求生成一个函数实现，或者把伪代码翻译成目标语言。</p><h2 id="如何调用-Codex"><a href="#如何调用-Codex" class="headerlink" title="如何调用 Codex"></a>如何调用 Codex</h2><p>如果你使用 OpenAI API，基本流程如下：</p><ol><li>创建 API 密钥</li><li>选择 Codex 模型，例如 <code>code-davinci-002</code> &#x2F; <code>code-cushman-001</code></li><li>传入提示词（prompt）并接收生成结果</li></ol><p>示例请求：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> openai</span><br><span class="line"></span><br><span class="line">openai.api_key = <span class="string">&quot;YOUR_API_KEY&quot;</span></span><br><span class="line"></span><br><span class="line">response = openai.Completion.create(</span><br><span class="line">    model=<span class="string">&quot;code-davinci-002&quot;</span>,</span><br><span class="line">    prompt=<span class="string">&quot;Write a Python function that reverses a string.&quot;</span>,</span><br><span class="line">    temperature=<span class="number">0.2</span>,</span><br><span class="line">    max_tokens=<span class="number">120</span>,</span><br><span class="line">    top_p=<span class="number">1.0</span>,</span><br><span class="line">    frequency_penalty=<span class="number">0</span>,</span><br><span class="line">    presence_penalty=<span class="number">0</span>,</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(response.choices[<span class="number">0</span>].text.strip())</span><br></pre></td></tr></table></figure><p>这个示例演示了最基础的调用方式，真实项目中可以根据需求调整参数。</p><h2 id="提示词设计技巧"><a href="#提示词设计技巧" class="headerlink" title="提示词设计技巧"></a>提示词设计技巧</h2><p>Codex 的生成效果很大程度上依赖于提示词的质量。以下是几个常见技巧：</p><ul><li>说明语言和输出格式：<code>用 Python 写一个函数 ...</code></li><li>提供上下文和约束条件：<code>函数输入为字符串，输出为翻转后的字符串</code></li><li>先给出示例，再让模型补全：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 输入：hello</span></span><br><span class="line"><span class="comment"># 输出：olleh</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 输入：world</span></span><br><span class="line"><span class="comment"># 输出：</span></span><br></pre></td></tr></table></figure><ul><li>使用注释引导模型理解意图</li><li>对复杂需求拆分成多个小任务</li></ul><h2 id="实用示例"><a href="#实用示例" class="headerlink" title="实用示例"></a>实用示例</h2><h3 id="示例-1：生成函数实现"><a href="#示例-1：生成函数实现" class="headerlink" title="示例 1：生成函数实现"></a>示例 1：生成函数实现</h3><p>提示词：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">请帮我生成一个 Python 函数，接受一个字符串列表，返回按长度从大到小排序后的列表。</span><br></pre></td></tr></table></figure><h3 id="示例-2：生成-SQL-查询"><a href="#示例-2：生成-SQL-查询" class="headerlink" title="示例 2：生成 SQL 查询"></a>示例 2：生成 SQL 查询</h3><p>提示词：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">请生成一条 SQL 查询，查询用户表中最后登录时间在最近 30 天内的用户，并按登录时间降序排列。</span><br></pre></td></tr></table></figure><h3 id="示例-3：生成文档注释"><a href="#示例-3：生成文档注释" class="headerlink" title="示例 3：生成文档注释"></a>示例 3：生成文档注释</h3><p>提示词：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">为下面这个 JavaScript 函数添加 JSDoc 注释：</span><br><span class="line">function add(a, b) &#123;</span><br><span class="line">  return a + b;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="常见问题与注意点"><a href="#常见问题与注意点" class="headerlink" title="常见问题与注意点"></a>常见问题与注意点</h2><ul><li>模型有时会生成语法正确但逻辑不符合预期的代码，生产环境前请务必测试。</li><li>Codex 更适合生成“确定性代码”，对于创意性或开放性任务，效果可能没有 GPT-4 那么好。</li><li>避免把敏感信息直接写入提示词或代码中。</li><li>对于大型项目，可以把 Codex 用于生成单元测试、文档、模板代码，而不是完整替代人工开发。</li></ul><h2 id="什么时候选择-Codex"><a href="#什么时候选择-Codex" class="headerlink" title="什么时候选择 Codex"></a>什么时候选择 Codex</h2><p>Codex 适合以下情况：</p><ul><li>你需要将自然语言需求转换为代码实现</li><li>你希望快速生成样板代码或 API 调用示例</li><li>你想在 IDE 中实现智能代码补全</li></ul><p>如果你的任务更偏向于对话、写作或内容创作，建议优先考虑 GPT 系列模型；如果你需要编程辅助，Codex 是更合适的选择。</p><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>Codex 是一个强大的编程助手，但它不是“万能钥匙”。正确的使用方式是：把它当成能够大幅提高效率的辅助工具，同时保持人工审核和测试。这样才能让 AI 生成的代码更稳健、更可靠。</p>]]>
    </content>
    <id>https://www.tenxiaodao.top/codex-shiyong-zhinan/</id>
    <link href="https://www.tenxiaodao.top/codex-shiyong-zhinan/"/>
    <published>2026-06-12T15:42:47.000Z</published>
    <summary>
      <![CDATA[<h1 id="Codex-使用指南"><a href="#Codex-使用指南" class="headerlink" title="Codex 使用指南"></a>Codex 使用指南</h1><p>OpenAI Codex 是一种专注于代码理解与生成的模型，适合用于编程助手]]>
    </summary>
    <title>Codex 使用指南</title>
    <updated>2026-06-12T15:42:47.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="黑苹果" scheme="https://www.tenxiaodao.top/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
    <content>
      <![CDATA[<h1 id="黑苹果入门指南"><a href="#黑苹果入门指南" class="headerlink" title="黑苹果入门指南"></a>黑苹果入门指南</h1><p>近年来，黑苹果已经从小众折腾变成了一个关注度很高的项目。本文基于国光的 OpenCore 黑苹果教程框架，结合官方文档与实践经验，整理出一份适合新人快速理解的入门路线。</p><h2 id="为什么要做黑苹果？"><a href="#为什么要做黑苹果？" class="headerlink" title="为什么要做黑苹果？"></a>为什么要做黑苹果？</h2><p>黑苹果的核心目的不是为了“装系统”，而是让非苹果硬件能够运行 macOS。当前最成熟的方案是 OpenCore 引导，它相比旧版 Clover 更稳定，可维护性更好。对于有兴趣了解 macOS 启动机制、硬件兼容性与驱动定制的同学，黑苹果仍然是一个非常好的学习项目。</p><h2 id="这套教程的定位"><a href="#这套教程的定位" class="headerlink" title="这套教程的定位"></a>这套教程的定位</h2><p>这套教程的核心特点是“从 0 开始”，适合彻底没有黑苹果经验的新人。它不是简单的搬运，而是把 OpenCore 的关键步骤拆成几大块：</p><ul><li>基础概念与术语</li><li>硬件选择与兼容性判断</li><li>制作启动 U 盘与镜像准备</li><li>OpenCore 配置与驱动准备</li><li>安装流程与引导完善</li><li>常见问题排查与进阶优化</li></ul><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><p>首先要明确一个前提：并非所有硬件都适合装黑苹果。在选择主板、CPU、显卡、网卡、声卡、Wi-Fi&#x2F;蓝牙时，优先考虑已验证可用的零件。对新手来说，推荐先选英特尔平台 + 常见主板 + 已知可用的设备，避免太多未知的兼容问题。</p><p>接下来，准备好以下内容：</p><ul><li>一只 U 盘，建议 16GB 以上</li><li>macOS 镜像文件</li><li>OpenCore 引导包</li><li>目标机器的 BIOS&#x2F;UEFI 设置手册</li><li>目标机器对应的 DSDT&#x2F;SSDT、Kexts、Drivers 和配置模板</li></ul><h2 id="主要流程"><a href="#主要流程" class="headerlink" title="主要流程"></a>主要流程</h2><h3 id="1-下载与写入镜像"><a href="#1-下载与写入镜像" class="headerlink" title="1. 下载与写入镜像"></a>1. 下载与写入镜像</h3><p>首先从可靠来源获取 macOS 安装镜像。然后使用 macOS 或 Windows 工具把镜像写入 U 盘，并保证 U 盘可引导。</p><h3 id="2-构建-OpenCore-引导"><a href="#2-构建-OpenCore-引导" class="headerlink" title="2. 构建 OpenCore 引导"></a>2. 构建 OpenCore 引导</h3><p>OpenCore 是现代黑苹果的标准引导方案。需要准备的核心内容包括：</p><ul><li><code>EFI/OC</code> 目录结构</li><li><code>config.plist</code> 配置文件</li><li>ACPI 补丁（DSDT&#x2F;SSDT）</li><li>必要的 Kext 驱动</li><li>UEFI Drivers</li><li>PlatformInfo 信息</li></ul><p>这一步要重点理解 OpenCore 各模块的作用：ACPI 负责硬件补丁，Kext 负责驱动，PlatformInfo 提供机型伪装，NVRAM 负责系统变量。</p><h3 id="3-BIOS-UEFI-设置"><a href="#3-BIOS-UEFI-设置" class="headerlink" title="3. BIOS &#x2F; UEFI 设置"></a>3. BIOS &#x2F; UEFI 设置</h3><p>在目标机器上进入 BIOS，关闭不必要的功能，开启 AHCI、VT-d（如果需要），并确保安全启动和快速启动等选项关闭。对于不同平台，BIOS 设置项有所差异，建议参考机型专属教程。</p><h3 id="4-初次引导与安装-macOS"><a href="#4-初次引导与安装-macOS" class="headerlink" title="4. 初次引导与安装 macOS"></a>4. 初次引导与安装 macOS</h3><p>把已经制作好的 U 盘插入机器，启动后进入 OpenCore 引导界面。选中 macOS 安装器后，进入磁盘工具对目标磁盘分区，并格式化为 APFS。</p><p>如果遇到引导失败，常见问题通常来自：</p><ul><li><code>config.plist</code> 配置错误</li><li>缺少关键 Kext</li><li>驱动顺序不对</li><li>BIOS 设置不符合要求</li></ul><h3 id="5-完善引导与后续更新"><a href="#5-完善引导与后续更新" class="headerlink" title="5. 完善引导与后续更新"></a>5. 完善引导与后续更新</h3><p>安装成功后，第一件事是把 EFI 分区复制到系统盘，并继续完善引导。此时的目标是让 macOS 直接从硬盘启动，而不是依赖 U 盘。</p><p>后续还要处理的内容包括：</p><ul><li>USB 定制</li><li>声卡&#x2F;网卡&#x2F;蓝牙驱动</li><li>显卡加速与分辨率优化</li><li>睡眠与唤醒问题</li><li>系统更新后的引导兼容性</li></ul><h2 id="进阶建议"><a href="#进阶建议" class="headerlink" title="进阶建议"></a>进阶建议</h2><p>如果你已经完成基础安装，可以继续优化以下内容：</p><ul><li>触控板驱动调试</li><li>HiDPI 开启与显示增强</li><li>Windows 与 macOS 双系统分区方案</li><li>自定义 OpenCore 启动菜单</li><li>日志分析与排错</li></ul><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>黑苹果更多是一种探索过程，而不是纯粹的结果。它涉及系统启动、硬件兼容、引导配置和驱动调试，每一步都可能遇到新问题，也会学到新的知识。</p>]]>
    </content>
    <id>https://www.tenxiaodao.top/hei-ping-guo-ji-chu/</id>
    <link href="https://www.tenxiaodao.top/hei-ping-guo-ji-chu/"/>
    <published>2026-05-29T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="黑苹果入门指南"><a href="#黑苹果入门指南" class="headerlink" title="黑苹果入门指南"></a>黑苹果入门指南</h1><p>近年来，黑苹果已经从小众折腾变成了一个关注度很高的项目。本文基于国光的 OpenCore 黑苹果教程]]>
    </summary>
    <title>黑苹果基础</title>
    <updated>2026-05-30T10:01:04.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="黑苹果" scheme="https://www.tenxiaodao.top/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
    <content>
      <![CDATA[<h1 id="前言之前"><a href="#前言之前" class="headerlink" title="前言之前"></a>前言之前</h1><p>之前由于工作的原因导致断更了一段时间，前几天心血来潮想装一台完美黑苹果于是就有了以下的内容。你们可以参考国光酱的教程</p><blockquote><p><a href="https://apple.sqlsec.com/">https://apple.sqlsec.com</a></p></blockquote><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Surface Pro 4 本来是一台 Windows 平板电脑，但对于喜欢折腾的朋友来说，把它改成能够运行 macOS 的黑苹果设备，也是一个很有趣的挑战。本文总结了在 Surface Pro 4 上尝试安装 macOS 的思路、准备、关键步骤和常见问题。</p><h2 id="1-适配机型与风险提示"><a href="#1-适配机型与风险提示" class="headerlink" title="1. 适配机型与风险提示"></a>1. 适配机型与风险提示</h2><p>Surface Pro 4 采用的是第 6 代 Intel Core 处理器、Intel HD Graphics 520、以及 Surface 专用 Wi-Fi &#x2F; 蓝牙模块。其硬件与普通台式机或笔记本不同，安装 macOS 存在较高风险。</p><ul><li>备份数据：安装之前请务必备份 Windows 系统、重要文件和驱动程序</li><li>可能无法实现全部功能：触摸屏、摄像头、指纹、Surface Pen、休眠等功能可能无法完全正常</li><li>仅作折腾参考：本文不保证 100% 成功，仅总结常见做法</li></ul><h2 id="2-准备工作"><a href="#2-准备工作" class="headerlink" title="2. 准备工作"></a>2. 准备工作</h2><h3 id="2-1-准备工具"><a href="#2-1-准备工具" class="headerlink" title="2.1 准备工具"></a>2.1 准备工具</h3><ul><li>一台正常可用的 macOS 电脑（或已经能够运行 macOS 的黑苹果）</li><li>Windows 11 电脑也可以使用 balenaEtcher 等烧录工具写入 macOS 镜像</li><li>16GB 以上 USB 设备，用于制作启动盘</li><li>最新的 Clover 或 OpenCore 引导程序</li><li>合适的 macOS 版本镜像（Catalina、Big Sur、Monterey 等常见版本）</li></ul><h3 id="2-2-确认硬件配置"><a href="#2-2-确认硬件配置" class="headerlink" title="2.2 确认硬件配置"></a>2.2 确认硬件配置</h3><p>Surface Pro 4 常见机型：m3 &#x2F; i5 &#x2F; i7</p><p>建议目标 macOS 版本：</p><ul><li>兼容性较好的版本为 macOS Catalina &#x2F; Big Sur</li><li>macOS 11.6 属于 Big Sur 系列，适合作为本机的目标版本</li><li>由于机型较老，不建议直接安装最新版本</li></ul><h3 id="2-3-事先准备-USB-启动盘"><a href="#2-3-事先准备-USB-启动盘" class="headerlink" title="2.3 事先准备 USB 启动盘"></a>2.3 事先准备 USB 启动盘</h3><ol><li><p>在 Windows 11 上可以使用 <code>balenaEtcher</code> 写入 <code>macOS 11.6</code> 镜像，或者在 macOS 上使用 <code>createinstallmedia</code> 创建安装盘</p></li><li><p>在 macOS 上使用 <code>Disk Utility</code> 抹掉 USB，格式为 <code>Mac OS Extended (Journaled)</code> 或 <code>APFS</code></p></li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">tsutil eraseDisk HFS+ <span class="string">&quot;USB&quot;</span> /dev/diskN</span><br><span class="line"><span class="built_in">sudo</span> /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/USB</span><br></pre></td></tr></table></figure><ol start="3"><li>安装完成后，将 <code>EFI</code> 分区挂载出来，复制对应版本的 Clover 或 OpenCore（OC） 文件。</li><li>注意：balenaEtcher 仅会把安装镜像写入 USB，这只是第一步；要让 Surface Pro 4 正常启动，还必须补齐 USB 的 <code>EFI</code> 引导配置、<code>Kexts</code>、<code>ACPI</code> 补丁等。</li></ol><h2 id="3-核心配置要点"><a href="#3-核心配置要点" class="headerlink" title="3. 核心配置要点"></a>3. 核心配置要点</h2><h3 id="3-1-引导程序"><a href="#3-1-引导程序" class="headerlink" title="3.1 引导程序"></a>3.1 引导程序</h3><p>Surface Pro 4 推荐使用 OpenCore，当前区兼容性较好。需要准备的文件包括：</p><ul><li><code>EFI/OC/config.plist</code></li><li><code>EFI/OC/ACPI/</code> 补丁文件</li><li><code>EFI/OC/Kexts/</code> 核心驱动</li><li><code>EFI/OC/Drivers/</code> 引导驱动</li></ul><h3 id="3-2-必备-kexts"><a href="#3-2-必备-kexts" class="headerlink" title="3.2 必备 kexts"></a>3.2 必备 kexts</h3><p>常见必备驱动：</p><ul><li><code>Lilu.kext</code></li><li><code>WhateverGreen.kext</code></li><li><code>VirtualSMC.kext</code></li><li><code>AppleALC.kext</code></li><li><code>SMCProcessor.kext</code></li><li><code>SMCBatteryManager.kext</code></li><li><code>AirportItlwm.kext</code>（针对 Intel Wi-Fi）</li><li><code>IntelBluetoothFirmware.kext</code> &#x2F; <code>IntelBluetoothInjector.kext</code></li></ul><blockquote><p>注意：Surface 原生 WLAN 模块一般与 macOS 不兼容，通常需要更换为可识别的无线网卡，或者使用 USB 网卡。</p></blockquote><h3 id="3-3-核心引导参数"><a href="#3-3-核心引导参数" class="headerlink" title="3.3 核心引导参数"></a>3.3 核心引导参数</h3><p>针对 Surface Pro 4，常用的启动参数包括：</p><ul><li><code>-v</code>（调试模式）</li><li><code>dart=0</code></li><li><code>alcid=1</code> 或 <code>alcid=3</code></li><li><code>igfxonln=1</code></li><li><code>npci=0x2000</code><blockquote><p>找对EFI后一般不用修改</p></blockquote></li></ul><p>根据具体机型与 macOS 版本，参数可能有所不同。</p><h2 id="4-安装流程概述"><a href="#4-安装流程概述" class="headerlink" title="4. 安装流程概述"></a>4. 安装流程概述</h2><h3 id="4-1-关闭安全启动"><a href="#4-1-关闭安全启动" class="headerlink" title="4.1 关闭安全启动"></a>4.1 关闭安全启动</h3><p>进入 Surface UEFI 设置，关闭 <code>Secure Boot</code>，并确认引导顺序允许 USB 启动。</p><h3 id="4-2-从-USB-启动"><a href="#4-2-从-USB-启动" class="headerlink" title="4.2 从 USB 启动"></a>4.2 从 USB 启动</h3><p>插入制作好的 macOS 安装 USB，启动时按住 <code>Volume Down</code> 进入 USB 启动菜单，选择 EFI 启动项。</p><h3 id="4-3-安装-macOS"><a href="#4-3-安装-macOS" class="headerlink" title="4.3 安装 macOS"></a>4.3 安装 macOS</h3><ol><li>进入 macOS 安装界面后，使用 <code>Disk Utility</code> 抹掉目标磁盘</li><li>选择安装目标，开始安装</li><li>安装过程中可能会出现内核 panic 或驱动问题，此时可切换到 <code>Verbose</code> 模式查看错误信息</li></ol><h3 id="4-4-第一阶段完成后重启"><a href="#4-4-第一阶段完成后重启" class="headerlink" title="4.4 第一阶段完成后重启"></a>4.4 第一阶段完成后重启</h3><p>安装程序完成后，会自动重启多次。这时仍需从 USB 启动，进入 <code>Install macOS</code> 引导继续安装，直到进入安装完成界面。</p><h3 id="4-5-迁移到硬盘引导"><a href="#4-5-迁移到硬盘引导" class="headerlink" title="4.5 迁移到硬盘引导"></a>4.5 迁移到硬盘引导</h3><p>安装成功后，将 USB 中的 <code>EFI</code> 引导配置复制到硬盘的 <code>EFI</code> 分区，确保硬盘可以直接引导。</p><h2 id="5-常见问题与解决"><a href="#5-常见问题与解决" class="headerlink" title="5. 常见问题与解决"></a>5. 常见问题与解决</h2><h3 id="5-1-无法识别-Wi-Fi"><a href="#5-1-无法识别-Wi-Fi" class="headerlink" title="5.1 无法识别 Wi-Fi"></a>5.1 无法识别 Wi-Fi</h3><p>Surface Pro 4 原装无线网卡通常无法被 macOS 识别。解决方案：</p><ul><li>更换为 Broadcom 兼容网卡</li><li>使用 <code>AirportItlwm</code> 驱动尝试支持 Intel 无线</li><li>使用 USB 网卡作为临时方案</li></ul><h3 id="5-2-显卡黑屏或分辨率异常"><a href="#5-2-显卡黑屏或分辨率异常" class="headerlink" title="5.2 显卡黑屏或分辨率异常"></a>5.2 显卡黑屏或分辨率异常</h3><p>可能需要调整显卡启动参数，或使用 <code>WhateverGreen.kext</code> 进行补丁。</p><h3 id="5-3-触摸屏与摄像头不可用"><a href="#5-3-触摸屏与摄像头不可用" class="headerlink" title="5.3 触摸屏与摄像头不可用"></a>5.3 触摸屏与摄像头不可用</h3><p>Surface 触摸屏和摄像头在 macOS 下很难完全支持，通常需要接受不支持或者依赖额外补丁的情况。</p><h2 id="6-适合黑苹果的替代方案"><a href="#6-适合黑苹果的替代方案" class="headerlink" title="6. 适合黑苹果的替代方案"></a>6. 适合黑苹果的替代方案</h2><p>如果你只是想体验 macOS 或进行开发测试，建议考虑：</p><ul><li>在 Windows 上使用 VMware &#x2F; VirtualBox 安装 macOS 虚拟机(不推荐)</li><li>直接购买二手 MacBook &#x2F; Mac mini</li><li>在兼容性更好的 Intel 台式机上搭建黑苹果</li></ul>]]>
    </content>
    <id>https://www.tenxiaodao.top/surfacepro4/</id>
    <link href="https://www.tenxiaodao.top/surfacepro4/"/>
    <published>2026-05-23T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="前言之前"><a href="#前言之前" class="headerlink" title="前言之前"></a>前言之前</h1><p>之前由于工作的原因导致断更了一段时间，前几天心血来潮想装一台完美黑苹果于是就有了以下的内容。你们可以参考国光酱的教程</p>]]>
    </summary>
    <title>在surfacepro4里安装macOS</title>
    <updated>2026-05-24T04:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="开发" scheme="https://www.tenxiaodao.top/categories/%E5%BC%80%E5%8F%91/"/>
    <content>
      <![CDATA[<h2 id="1-什么是-opcloud"><a href="#1-什么是-opcloud" class="headerlink" title="1. 什么是 opcloud"></a>1. 什么是 opcloud</h2><p><code>opcloud</code> 是一款面向开发者和运维人员的轻量级云平台工具，通常用于管理云资源、部署应用、查看日志和监控状态。它的设计目标是简化复杂的云平台操作，让团队能够更方便地在多云环境下进行统一管理。</p><p>本文围绕 <code>opcloud</code> 的基本使用流程、常见命令、部署实践和注意事项展开，帮助你快速上手并提高日常运维效率。</p><h2 id="2-准备工作"><a href="#2-准备工作" class="headerlink" title="2. 准备工作"></a>2. 准备工作</h2><p>在开始使用 <code>opcloud</code> 之前，建议先完成以下准备：</p><ul><li>注册并登录 <code>opcloud</code> 平台账号</li><li>获取平台 API Key 或访问凭证</li><li>安装 <code>opcloud</code> 命令行工具（如支持 CLI）或准备好 Web 控制台访问权限</li><li>了解当前团队的资源结构、项目名称、环境划分（开发&#x2F;测试&#x2F;生产）</li></ul><h2 id="3-常见使用场景"><a href="#3-常见使用场景" class="headerlink" title="3. 常见使用场景"></a>3. 常见使用场景</h2><h3 id="3-1-应用部署"><a href="#3-1-应用部署" class="headerlink" title="3.1 应用部署"></a>3.1 应用部署</h3><p><code>opcloud</code> 可以帮助你快速将应用发布到云端。一般的部署流程包括：</p><ol><li>创建项目或服务</li><li>选择运行环境（如容器、虚拟机、函数等）</li><li>填写镜像地址、环境变量、网络配置</li><li>提交部署并等待系统完成初始化</li></ol><p>如果使用 CLI，通常会有类似 <code>opcloud deploy</code>、<code>opcloud service create</code> 的命令。</p><h3 id="3-2-资源管理"><a href="#3-2-资源管理" class="headerlink" title="3.2 资源管理"></a>3.2 资源管理</h3><p>通过 <code>opcloud</code>，你可以查看和管理云资源，例如：</p><ul><li>计算实例</li><li>存储卷</li><li>负载均衡</li><li>数据库实例</li><li>网络安全组</li></ul><p>常见操作有：查询资源状态、调整配额、重启实例、扩容磁盘、修改配置等。</p><h3 id="3-3-日志与监控"><a href="#3-3-日志与监控" class="headerlink" title="3.3 日志与监控"></a>3.3 日志与监控</h3><p>日志和监控是运维中最常用的功能。<code>opcloud</code> 通常会提供：</p><ul><li>实时日志查看</li><li>监控指标面板</li><li>告警规则配置</li><li>历史报警查询</li></ul><p>使用时建议先配置关键服务的 CPU、内存、响应时间和错误率告警，避免问题发生后才发现。</p><h2 id="4-基本命令示例"><a href="#4-基本命令示例" class="headerlink" title="4. 基本命令示例"></a>4. 基本命令示例</h2><p>下面给出一组典型的 <code>opcloud</code> CLI 命令示例，供参考：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 登录平台</span></span><br><span class="line">opcloud login --api-key YOUR_API_KEY</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看当前项目列表</span></span><br><span class="line">opcloud project list</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个新服务</span></span><br><span class="line">opcloud service create --name my-app --image registry.example.com/my-app:latest --env-file .<span class="built_in">env</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 部署更新</span></span><br><span class="line">opcloud deploy --service my-app --version v1.0.0</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看服务日志</span></span><br><span class="line">opcloud logs --service my-app --<span class="built_in">tail</span> 100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查询资源状态</span></span><br><span class="line">opcloud status --service my-app</span><br></pre></td></tr></table></figure><p>具体命令格式请参考你的 <code>opcloud</code> 平台文档，不同版本或厂商实现可能略有差异。</p><h2 id="5-部署实践建议"><a href="#5-部署实践建议" class="headerlink" title="5. 部署实践建议"></a>5. 部署实践建议</h2><h3 id="5-1-使用配置文件管理环境"><a href="#5-1-使用配置文件管理环境" class="headerlink" title="5.1 使用配置文件管理环境"></a>5.1 使用配置文件管理环境</h3><p>建议把环境变量、资源配置、镜像地址等统一写入配置文件，这样可以避免手动输入错误，也便于版本管理。</p><h3 id="5-2-统一命名规范"><a href="#5-2-统一命名规范" class="headerlink" title="5.2 统一命名规范"></a>5.2 统一命名规范</h3><p>项目、服务、环境、集群等名称要有统一规范，例如 <code>project-name-env-service</code>，方便后续排查和权限管理。</p><h3 id="5-3-先测试再生产"><a href="#5-3-先测试再生产" class="headerlink" title="5.3 先测试再生产"></a>5.3 先测试再生产</h3><p>对关键服务的变更，优先在开发或测试环境验证，再推广到生产环境。<code>opcloud</code> 的多环境隔离能力可以很好支持这一流程。</p><h2 id="6-常见问题与解决"><a href="#6-常见问题与解决" class="headerlink" title="6. 常见问题与解决"></a>6. 常见问题与解决</h2><h3 id="6-1-部署失败"><a href="#6-1-部署失败" class="headerlink" title="6.1 部署失败"></a>6.1 部署失败</h3><ul><li>检查镜像地址是否正确</li><li>检查网络访问是否正常</li><li>检查资源配额是否超限</li><li>查看 <code>opcloud</code> 返回的错误日志，定位具体异常</li></ul><h3 id="6-2-服务不可用"><a href="#6-2-服务不可用" class="headerlink" title="6.2 服务不可用"></a>6.2 服务不可用</h3><ul><li>检查实例是否已启动</li><li>检查健康检查配置是否正确</li><li>查看日志是否有启动错误或依赖异常</li><li>检查流量是否正常到达负载均衡</li></ul><h3 id="6-3-权限不足"><a href="#6-3-权限不足" class="headerlink" title="6.3 权限不足"></a>6.3 权限不足</h3><ul><li>确认当前账号是否具有项目和服务的操作权限</li><li>如果需要跨项目操作，检查是否已授予相应的角色</li><li>如有 API Key，请确认其权限范围是否足够</li></ul><h2 id="7-总结"><a href="#7-总结" class="headerlink" title="7. 总结"></a>7. 总结</h2><p><code>opcloud</code> 的核心价值在于降低云资源管理门槛、提高部署效率、简化运维流程。掌握它后，你可以更快速地完成应用发布、资源监控、日志追踪和故障排查。</p><p>无论是单个项目的小规模运维，还是团队协作的多环境管理，<code>opcloud</code> 都是一个值得熟悉的工具。建议你先从简单部署和日志查看开始，逐步熟悉平台特性，再根据实际需求补充自动化和告警策略。</p>]]>
    </content>
    <id>https://www.tenxiaodao.top/opcloud-usage/</id>
    <link href="https://www.tenxiaodao.top/opcloud-usage/"/>
    <published>2026-03-15T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="1-什么是-opcloud"><a href="#1-什么是-opcloud" class="headerlink" title="1. 什么是 opcloud"></a>1. 什么是 opcloud</h2><p><code>opcloud</code> 是一款]]>
    </summary>
    <title>opcloud的使用</title>
    <updated>2026-03-16T04:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="技术分享" scheme="https://www.tenxiaodao.top/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/"/>
    <category term="macOS" scheme="https://www.tenxiaodao.top/tags/macOS/"/>
    <category term="SwiftUI" scheme="https://www.tenxiaodao.top/tags/SwiftUI/"/>
    <category term="开发经验" scheme="https://www.tenxiaodao.top/tags/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C/"/>
    <content>
      <![CDATA[<blockquote><p>🏗️ 分享 OneClip 开发过程中的<strong>真实经验</strong>、<strong>踩坑记录</strong>、<strong>解决方案</strong>和<strong>最佳实践</strong></p></blockquote><h2 id="📖-前言"><a href="#📖-前言" class="headerlink" title="📖 前言"></a>📖 前言</h2><p><a href="https://github.com/Wcowin/OneClip">OneClip</a> 从最初的想法到现在的功能完整的应用，经历了多个版本的迭代。本文分享开发过程中的真实经验、遇到的问题、解决方案和最佳实践，希望能为其他 macOS 开发者提供参考。</p><hr><h2 id="🛠-技术选型"><a href="#🛠-技术选型" class="headerlink" title="🛠 技术选型"></a>🛠 技术选型</h2><h3 id="⚡-为什么选择-SwiftUI？"><a href="#⚡-为什么选择-SwiftUI？" class="headerlink" title="⚡ 为什么选择 SwiftUI？"></a>⚡ 为什么选择 SwiftUI？</h3><p><strong>初期考虑</strong>：</p><ul><li>📱 AppKit（传统 macOS 开发）</li><li>✨ SwiftUI（Apple 新推荐）</li><li>⚙️ Electron（跨平台但资源占用大）</li></ul><blockquote><p><strong>最终选择：SwiftUI</strong> 💡</p></blockquote><p><strong>最终选择 SwiftUI 的原因</strong>：</p><table><thead><tr><th>方面</th><th>SwiftUI</th><th>AppKit</th><th>Electron</th></tr></thead><tbody><tr><td><strong>学习曲线</strong></td><td>陡峭但现代</td><td>平缓但过时</td><td>中等</td></tr><tr><td><strong>性能</strong></td><td>优秀</td><td>优秀</td><td>一般</td></tr><tr><td><strong>内存占用</strong></td><td>~120MB</td><td>~100MB</td><td>&gt;300MB</td></tr><tr><td><strong>开发效率</strong></td><td>高</td><td>低</td><td>中等</td></tr><tr><td><strong>系统集成</strong></td><td>原生</td><td>原生</td><td>有限</td></tr><tr><td><strong>未来前景</strong></td><td>光明</td><td>维护模式</td><td>稳定</td></tr></tbody></table><p><strong>实际体验</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// SwiftUI 的声明式语法让 UI 开发更直观</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">ClipboardItemView</span>: <span class="title class_ inherited__">View</span> &#123;</span><br><span class="line">    <span class="meta">@ObservedObject</span> <span class="keyword">var</span> viewModel: <span class="type">ClipboardViewModel</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> &#123;</span><br><span class="line">        <span class="type">List</span>(viewModel.items) &#123; item <span class="keyword">in</span></span><br><span class="line">            <span class="type">HStack</span> &#123;</span><br><span class="line">                <span class="type">Image</span>(systemName: item.icon)</span><br><span class="line">                    .foregroundColor(.blue)</span><br><span class="line"></span><br><span class="line">                <span class="type">VStack</span>(alignment: .leading) &#123;</span><br><span class="line">                    <span class="type">Text</span>(item.title)</span><br><span class="line">                        .font(.headline)</span><br><span class="line">                    <span class="type">Text</span>(item.preview)</span><br><span class="line">                        .font(.caption)</span><br><span class="line">                        .lineLimit(<span class="number">1</span>)</span><br><span class="line">                        .foregroundColor(.gray)</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                <span class="type">Spacer</span>()</span><br><span class="line"></span><br><span class="line">                <span class="type">Button</span>(action: &#123; viewModel.copyItem(item) &#125;) &#123;</span><br><span class="line">                    <span class="type">Image</span>(systemName: <span class="string">&quot;doc.on.doc&quot;</span>)</span><br><span class="line">                &#125;</span><br><span class="line">                .buttonStyle(.borderless)</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="🚀-核心功能开发"><a href="#🚀-核心功能开发" class="headerlink" title="🚀 核心功能开发"></a>🚀 核心功能开发</h2><h3 id="1️⃣-剪贴板监控"><a href="#1️⃣-剪贴板监控" class="headerlink" title="1️⃣ 剪贴板监控"></a>1️⃣ 剪贴板监控</h3><p><strong>🎯 最大挑战</strong>：如何高效地监控系统剪贴板变化？</p><p><strong>❌ 初期方案（失败）</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// ❌ 不推荐：轮询间隔过短，CPU 占用高</span></span><br><span class="line"><span class="type">Timer</span>.scheduledTimer(withTimeInterval: <span class="number">0.01</span>, repeats: <span class="literal">true</span>) &#123; <span class="keyword">_</span> <span class="keyword">in</span></span><br><span class="line">    <span class="keyword">let</span> newContent <span class="operator">=</span> <span class="type">NSPasteboard</span>.general.string(forType: .string)</span><br><span class="line">    <span class="comment">// 处理新内容</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>⚠️ 存在的问题</strong>：</p><ul><li>🔴 CPU 占用率达到 70-100%</li><li>🔋 电池消耗快</li><li>🐢 系统响应变慢</li></ul><p><strong>✅ 改进方案（成功）</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// ✅ 推荐：使用 changeCount 检测变化</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ClipboardMonitor</span> &#123;</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">var</span> lastChangeCount <span class="operator">=</span> <span class="number">0</span></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">var</span> monitoringTimer: <span class="type">Timer</span>?</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">startMonitoring</span>() &#123;</span><br><span class="line">        monitoringTimer <span class="operator">=</span> <span class="type">Timer</span>.scheduledTimer(withTimeInterval: <span class="number">0.1</span>, repeats: <span class="literal">true</span>) &#123; [<span class="keyword">weak</span> <span class="keyword">self</span>] <span class="keyword">_</span> <span class="keyword">in</span></span><br><span class="line">            <span class="keyword">let</span> currentCount <span class="operator">=</span> <span class="type">NSPasteboard</span>.general.changeCount</span><br><span class="line"></span><br><span class="line">            <span class="keyword">if</span> currentCount <span class="operator">!=</span> <span class="keyword">self</span><span class="operator">?</span>.lastChangeCount &#123;</span><br><span class="line">                <span class="keyword">self</span><span class="operator">?</span>.lastChangeCount <span class="operator">=</span> currentCount</span><br><span class="line">                <span class="keyword">self</span><span class="operator">?</span>.handleClipboardChange()</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">func</span> <span class="title function_">handleClipboardChange</span>() &#123;</span><br><span class="line">        <span class="comment">// 只在检测到变化时处理</span></span><br><span class="line">        <span class="comment">// CPU 占用降低到 &lt; 1%</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>性能对比</strong>：</p><table><thead><tr><th>方案</th><th>CPU 占用</th><th>内存</th><th>响应延迟</th></tr></thead><tbody><tr><td>0.01s 轮询</td><td>15-20%</td><td>150MB</td><td>&lt; 10ms</td></tr><tr><td>changeCount</td><td>&lt; 1%</td><td>120MB</td><td>100-200ms</td></tr><tr><td><strong>改进</strong></td><td><strong>降低 95%</strong></td><td><strong>降低 20%</strong></td><td><strong>可接受</strong></td></tr></tbody></table><h3 id="2️⃣-全局快捷键实现"><a href="#2️⃣-全局快捷键实现" class="headerlink" title="2️⃣ 全局快捷键实现"></a>2️⃣ 全局快捷键实现</h3><p><strong>🎯 需求</strong>：在任何应用中按 <code>Cmd+Option+V</code> 快速呼出 OneClip</p><p><strong>⚙️ 技术选择</strong>：Carbon Framework（虽然老旧但稳定）</p><p><strong>实现代码</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> Carbon</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">HotkeyManager</span> &#123;</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">var</span> hotkeyRef: <span class="type">EventHotKeyRef</span>?</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">let</span> hotkeyID <span class="operator">=</span> <span class="type">EventHotKeyID</span>(signature: <span class="type">OSType</span>(<span class="type">UInt32</span>(<span class="number">0x4F4E4543</span>)), id: <span class="number">1</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">registerHotkey</span>(<span class="params">keyCode</span>: <span class="type">UInt32</span>, <span class="params">modifiers</span>: <span class="type">UInt32</span>) &#123;</span><br><span class="line">        <span class="keyword">var</span> ref: <span class="type">EventHotKeyRef</span>?</span><br><span class="line"></span><br><span class="line">        <span class="keyword">let</span> status <span class="operator">=</span> <span class="type">RegisterEventHotKey</span>(</span><br><span class="line">            keyCode,</span><br><span class="line">            modifiers,</span><br><span class="line">            hotkeyID,</span><br><span class="line">            <span class="type">GetApplicationEventTarget</span>(),</span><br><span class="line">            <span class="number">0</span>,</span><br><span class="line">            <span class="operator">&amp;</span>ref</span><br><span class="line">        )</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> status <span class="operator">==</span> noErr &#123;</span><br><span class="line">            hotkeyRef <span class="operator">=</span> ref</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&quot;✅ 快捷键注册成功&quot;</span>)</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&quot;❌ 快捷键注册失败: <span class="subst">\(status)</span>&quot;</span>)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">unregisterHotkey</span>() &#123;</span><br><span class="line">        <span class="keyword">if</span> <span class="keyword">let</span> ref <span class="operator">=</span> hotkeyRef &#123;</span><br><span class="line">            <span class="type">UnregisterEventHotKey</span>(ref)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 快捷键码对照表</span></span><br><span class="line"><span class="keyword">let</span> <span class="type">HOTKEY_CODES</span> <span class="operator">=</span> [</span><br><span class="line">    <span class="string">&quot;V&quot;</span>: <span class="number">9</span>,           <span class="comment">// V 键</span></span><br><span class="line">    <span class="string">&quot;R&quot;</span>: <span class="number">15</span>,          <span class="comment">// R 键</span></span><br><span class="line">    <span class="string">&quot;C&quot;</span>: <span class="number">8</span>,           <span class="comment">// C 键</span></span><br><span class="line">    <span class="string">&quot;D&quot;</span>: <span class="number">2</span>,           <span class="comment">// D 键</span></span><br><span class="line">]</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="type">MODIFIER_KEYS</span> <span class="operator">=</span> [</span><br><span class="line">    <span class="string">&quot;cmd&quot;</span>: <span class="type">UInt32</span>(cmdKey),           <span class="comment">// Command</span></span><br><span class="line">    <span class="string">&quot;option&quot;</span>: <span class="type">UInt32</span>(optionKey),     <span class="comment">// Option</span></span><br><span class="line">    <span class="string">&quot;shift&quot;</span>: <span class="type">UInt32</span>(shiftKey),       <span class="comment">// Shift</span></span><br><span class="line">    <span class="string">&quot;control&quot;</span>: <span class="type">UInt32</span>(controlKey),   <span class="comment">// Control</span></span><br><span class="line">]</span><br></pre></td></tr></table></figure><p><strong>⚠️ 遇到的问题</strong>：</p><table><thead><tr><th>问题</th><th>原因</th><th>解决方案</th></tr></thead><tbody><tr><td>⌨️ 快捷键冲突</td><td>某些应用也使用相同快捷键</td><td>快捷键自定义 + 冲突检测</td></tr><tr><td>🔐 权限问题</td><td>需要辅助功能权限</td><td>首次启动时提示授权</td></tr><tr><td>🔄 兼容性问题</td><td>macOS 版本差异</td><td>兼容 macOS 12+</td></tr></tbody></table><h3 id="3️⃣-数据持久化"><a href="#3️⃣-数据持久化" class="headerlink" title="3️⃣ 数据持久化"></a>3️⃣ 数据持久化</h3><p><strong>💾 选择 SQLite 而不是 Core Data</strong>：</p><blockquote><p>OneClip 使用原生 SQLite 而非 Core Data</p></blockquote><p><strong>关键优势</strong>：</p><ul><li>🪶 更轻量，启动更快</li><li>🎯 更灵活的查询控制</li><li>📦 更容易进行数据迁移</li></ul><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// SQLite 数据库封装</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ClipboardDatabase</span> &#123;</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">var</span> db: <span class="type">OpaquePointer</span>?</span><br><span class="line"></span><br><span class="line">    <span class="keyword">init</span>(<span class="params">at</span> <span class="params">path</span>: <span class="type">String</span>) <span class="keyword">throws</span> &#123;</span><br><span class="line">        <span class="comment">// 打开数据库连接</span></span><br><span class="line">        <span class="keyword">guard</span> sqlite3_open(path, <span class="operator">&amp;</span>db) <span class="operator">==</span> <span class="type">SQLITE_OK</span> <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="keyword">throw</span> <span class="type">ClipboardError</span>.databaseNotReady</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 创建表结构</span></span><br><span class="line">        <span class="keyword">try</span> createTables()</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 保存项目</span></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">saveItem</span>(<span class="keyword">_</span> <span class="params">item</span>: <span class="type">ClipboardItem</span>) <span class="keyword">throws</span> &#123;</span><br><span class="line">        <span class="keyword">let</span> sql <span class="operator">=</span> <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">            INSERT OR REPLACE INTO clipboard_items </span></span><br><span class="line"><span class="string">            (id, content, type, timestamp, source_app, is_favorite, is_pinned, content_hash)</span></span><br><span class="line"><span class="string">            VALUES (?, ?, ?, ?, ?, ?, ?, ?)</span></span><br><span class="line"><span class="string">        &quot;&quot;&quot;</span></span><br><span class="line">        <span class="comment">// 执行 SQL</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 加载最近项目</span></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">loadHotData</span>(<span class="params">limit</span>: <span class="type">Int</span>) <span class="keyword">throws</span> -&gt; [<span class="type">ClipboardItem</span>] &#123;</span><br><span class="line">        <span class="keyword">let</span> sql <span class="operator">=</span> <span class="string">&quot;SELECT * FROM clipboard_items ORDER BY timestamp DESC LIMIT ?&quot;</span></span><br><span class="line">        <span class="comment">// 执行查询并返回结果</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>性能优化</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 使用索引加速查询</span></span><br><span class="line"><span class="keyword">func</span> <span class="title function_">createTables</span>() <span class="keyword">throws</span> &#123;</span><br><span class="line">    <span class="keyword">let</span> sql <span class="operator">=</span> <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">        CREATE TABLE IF NOT EXISTS clipboard_items (</span></span><br><span class="line"><span class="string">            id TEXT PRIMARY KEY,</span></span><br><span class="line"><span class="string">            content TEXT,</span></span><br><span class="line"><span class="string">            type TEXT NOT NULL,</span></span><br><span class="line"><span class="string">            timestamp REAL NOT NULL,</span></span><br><span class="line"><span class="string">            source_app TEXT,</span></span><br><span class="line"><span class="string">            is_favorite INTEGER DEFAULT 0,</span></span><br><span class="line"><span class="string">            is_pinned INTEGER DEFAULT 0,</span></span><br><span class="line"><span class="string">            content_hash TEXT</span></span><br><span class="line"><span class="string">        );</span></span><br><span class="line"><span class="string">        CREATE INDEX IF NOT EXISTS idx_timestamp ON clipboard_items(timestamp DESC);</span></span><br><span class="line"><span class="string">        CREATE INDEX IF NOT EXISTS idx_content_hash ON clipboard_items(content_hash);</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="comment">// 执行 SQL</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 使用哈希索引快速去重 - O(1) 时间复杂度</span></span><br><span class="line"><span class="keyword">func</span> <span class="title function_">findItemByHash</span>(<span class="keyword">_</span> <span class="params">hash</span>: <span class="type">String</span>) -&gt; <span class="type">UUID</span>? &#123;</span><br><span class="line">    <span class="keyword">let</span> sql <span class="operator">=</span> <span class="string">&quot;SELECT id FROM clipboard_items WHERE content_hash = ? LIMIT 1&quot;</span></span><br><span class="line">    <span class="comment">// 执行查询</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="🐛-常见问题与解决方案"><a href="#🐛-常见问题与解决方案" class="headerlink" title="🐛 常见问题与解决方案"></a>🐛 常见问题与解决方案</h2><h3 id="❓-问题-1：应用启动时权限提示过多"><a href="#❓-问题-1：应用启动时权限提示过多" class="headerlink" title="❓ 问题 1：应用启动时权限提示过多"></a>❓ 问题 1：应用启动时权限提示过多</h3><p><strong>现象</strong>：用户首次启动应用，被要求授予多个权限</p><p><strong>解决方案</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">PermissionManager</span> &#123;</span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">requestPermissionsSequentially</span>() &#123;</span><br><span class="line">        <span class="comment">// 按优先级顺序请求权限</span></span><br><span class="line">        requestAccessibilityPermission &#123; [<span class="keyword">weak</span> <span class="keyword">self</span>] granted <span class="keyword">in</span></span><br><span class="line">            <span class="keyword">if</span> granted &#123;</span><br><span class="line">                <span class="keyword">self</span><span class="operator">?</span>.requestDiskAccessPermission()</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">func</span> <span class="title function_">requestAccessibilityPermission</span>(<span class="params">completion</span>: <span class="keyword">@escaping</span> (<span class="type">Bool</span>) -&gt; <span class="type">Void</span>) &#123;</span><br><span class="line">        <span class="keyword">let</span> options: <span class="type">NSDictionary</span> <span class="operator">=</span> [kAXTrustedCheckOptionPrompt.takeRetainedValue() <span class="keyword">as</span> <span class="type">String</span>: <span class="literal">true</span>]</span><br><span class="line">        <span class="keyword">let</span> trusted <span class="operator">=</span> <span class="type">AXIsProcessTrustedWithOptions</span>(options)</span><br><span class="line">        completion(trusted)</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="❓-问题-2：大数据集下搜索变慢"><a href="#❓-问题-2：大数据集下搜索变慢" class="headerlink" title="❓ 问题 2：大数据集下搜索变慢"></a>❓ 问题 2：大数据集下搜索变慢</h3><p><strong>现象</strong>：当历史记录超过 1000 条时，搜索响应延迟明显</p><p><strong>解决方案</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">SearchOptimizer</span> &#123;</span><br><span class="line">    <span class="comment">// 搜索防抖</span></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">var</span> searchDebounceTimer: <span class="type">Timer</span>?</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">searchWithDebounce</span>(<span class="keyword">_</span> <span class="params">query</span>: <span class="type">String</span>) &#123;</span><br><span class="line">        searchDebounceTimer<span class="operator">?</span>.invalidate()</span><br><span class="line"></span><br><span class="line">        searchDebounceTimer <span class="operator">=</span> <span class="type">Timer</span>.scheduledTimer(withTimeInterval: <span class="number">0.3</span>, repeats: <span class="literal">false</span>) &#123; [<span class="keyword">weak</span> <span class="keyword">self</span>] <span class="keyword">_</span> <span class="keyword">in</span></span><br><span class="line">            <span class="keyword">self</span><span class="operator">?</span>.performSearch(query)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">func</span> <span class="title function_">performSearch</span>(<span class="keyword">_</span> <span class="params">query</span>: <span class="type">String</span>) &#123;</span><br><span class="line">        <span class="keyword">let</span> predicate <span class="operator">=</span> <span class="type">NSPredicate</span>(format: <span class="string">&quot;content CONTAINS[cd] %@&quot;</span>, query)</span><br><span class="line"></span><br><span class="line">        <span class="keyword">let</span> request <span class="operator">=</span> <span class="type">ClipboardItemEntity</span>.fetchRequest()</span><br><span class="line">        request.predicate <span class="operator">=</span> predicate</span><br><span class="line">        request.fetchLimit <span class="operator">=</span> <span class="number">50</span>  <span class="comment">// 限制结果数</span></span><br><span class="line">        request.sortDescriptors <span class="operator">=</span> [</span><br><span class="line">            <span class="type">NSSortDescriptor</span>(keyPath: \<span class="type">ClipboardItemEntity</span>.timestamp, ascending: <span class="literal">false</span>)</span><br><span class="line">        ]</span><br><span class="line"></span><br><span class="line">        <span class="type">DispatchQueue</span>.global(qos: .userInitiated).async &#123;</span><br><span class="line">            <span class="keyword">let</span> results <span class="operator">=</span> <span class="keyword">try?</span> <span class="keyword">self</span>.container.viewContext.fetch(request)</span><br><span class="line">            <span class="type">DispatchQueue</span>.main.async &#123;</span><br><span class="line">                <span class="keyword">self</span>.updateSearchResults(results <span class="operator">??</span> [])</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="❓-问题-3：内存泄漏"><a href="#❓-问题-3：内存泄漏" class="headerlink" title="❓ 问题 3：内存泄漏"></a>❓ 问题 3：内存泄漏</h3><p><strong>现象</strong>：长时间运行后内存占用不断增加</p><p><strong>排查过程</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 使用 Instruments 检测内存泄漏</span></span><br><span class="line"><span class="comment">// 1. 在 Xcode 中运行 Product &gt; Profile</span></span><br><span class="line"><span class="comment">// 2. 选择 Leaks 工具</span></span><br><span class="line"><span class="comment">// 3. 运行应用并进行操作</span></span><br><span class="line"><span class="comment">// 4. 查看泄漏的对象</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 常见泄漏原因：</span></span><br><span class="line"><span class="comment">// ❌ 循环引用</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ClipboardManager</span> &#123;</span><br><span class="line">    <span class="keyword">var</span> timer: <span class="type">Timer</span>?</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">startMonitoring</span>() &#123;</span><br><span class="line">        <span class="comment">// ❌ 错误：self 被 timer 强引用，timer 被 self 强引用</span></span><br><span class="line">        timer <span class="operator">=</span> <span class="type">Timer</span>.scheduledTimer(withTimeInterval: <span class="number">0.1</span>, repeats: <span class="literal">true</span>) &#123; <span class="keyword">_</span> <span class="keyword">in</span></span><br><span class="line">            <span class="keyword">self</span>.checkClipboard()</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// ✅ 正确：使用 [weak self]</span></span><br><span class="line"><span class="keyword">func</span> <span class="title function_">startMonitoring</span>() &#123;</span><br><span class="line">    timer <span class="operator">=</span> <span class="type">Timer</span>.scheduledTimer(withTimeInterval: <span class="number">0.1</span>, repeats: <span class="literal">true</span>) &#123; [<span class="keyword">weak</span> <span class="keyword">self</span>] <span class="keyword">_</span> <span class="keyword">in</span></span><br><span class="line">        <span class="keyword">self</span><span class="operator">?</span>.checkClipboard()</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="❓-问题-4：图片处理导致-UI-卡顿"><a href="#❓-问题-4：图片处理导致-UI-卡顿" class="headerlink" title="❓ 问题 4：图片处理导致 UI 卡顿"></a>❓ 问题 4：图片处理导致 UI 卡顿</h3><p><strong>现象</strong>：粘贴大图片时，UI 出现明显延迟</p><p><strong>解决方案</strong>：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">ImageProcessor</span> &#123;</span><br><span class="line">    <span class="comment">// 在后台线程处理图片</span></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">processImage</span>(<span class="keyword">_</span> <span class="params">image</span>: <span class="type">NSImage</span>, <span class="params">completion</span>: <span class="keyword">@escaping</span> (<span class="type">NSImage</span>) -&gt; <span class="type">Void</span>) &#123;</span><br><span class="line">        <span class="type">DispatchQueue</span>.global(qos: .userInitiated).async &#123;</span><br><span class="line">            <span class="comment">// 生成缩略图</span></span><br><span class="line">            <span class="keyword">let</span> thumbnail <span class="operator">=</span> <span class="keyword">self</span>.generateThumbnail(image, size: <span class="type">CGSize</span>(width: <span class="number">200</span>, height: <span class="number">200</span>))</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 压缩图片</span></span><br><span class="line">            <span class="keyword">let</span> compressed <span class="operator">=</span> <span class="keyword">self</span>.compressImage(image, quality: <span class="number">0.7</span>)</span><br><span class="line"></span><br><span class="line">            <span class="type">DispatchQueue</span>.main.async &#123;</span><br><span class="line">                completion(thumbnail)</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">func</span> <span class="title function_">generateThumbnail</span>(<span class="keyword">_</span> <span class="params">image</span>: <span class="type">NSImage</span>, <span class="params">size</span>: <span class="type">CGSize</span>) -&gt; <span class="type">NSImage</span> &#123;</span><br><span class="line">        <span class="keyword">let</span> thumbnail <span class="operator">=</span> <span class="type">NSImage</span>(size: size)</span><br><span class="line">        thumbnail.lockFocus()</span><br><span class="line">        image.draw(in: <span class="type">NSRect</span>(origin: .zero, size: size))</span><br><span class="line">        thumbnail.unlockFocus()</span><br><span class="line">        <span class="keyword">return</span> thumbnail</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">func</span> <span class="title function_">compressImage</span>(<span class="keyword">_</span> <span class="params">image</span>: <span class="type">NSImage</span>, <span class="params">quality</span>: <span class="type">CGFloat</span>) -&gt; <span class="type">Data</span>? &#123;</span><br><span class="line">        <span class="keyword">guard</span> <span class="keyword">let</span> tiffData <span class="operator">=</span> image.tiffRepresentation,</span><br><span class="line">              <span class="keyword">let</span> bitmapImage <span class="operator">=</span> <span class="type">NSBitmapImageRep</span>(data: tiffData) <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">nil</span></span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> bitmapImage.representation(using: .jpeg, properties: [.compressionFactor: quality])</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="⚡-性能优化实战"><a href="#⚡-性能优化实战" class="headerlink" title="⚡ 性能优化实战"></a>⚡ 性能优化实战</h2><h3 id="📊-优化前后对比"><a href="#📊-优化前后对比" class="headerlink" title="📊 优化前后对比"></a>📊 优化前后对比</h3><p><strong>📈 优化前</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">启动时间：3.5 秒</span><br><span class="line">内存占用：250MB</span><br><span class="line">CPU 使用：8-12%</span><br><span class="line">搜索延迟：500-800ms</span><br></pre></td></tr></table></figure><p><strong>✅ 优化后</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">启动时间：0.8 秒   ⬇️ 77%</span><br><span class="line">内存占用：120MB    ⬇️ 52%</span><br><span class="line">CPU 使用：&lt; 1%     ⬇️ 90%</span><br><span class="line">搜索延迟：100-200ms ⬇️ 75%</span><br></pre></td></tr></table></figure><blockquote><p><strong>性能提升显著！</strong> 🎉</p></blockquote><p><strong>🔧 关键优化策略</strong>：</p><ol><li>⏱️ <strong>延迟加载</strong>：只加载可见的列表项</li><li>🖼️ <strong>图片压缩</strong>：自动压缩大图片</li><li>🔄 <strong>后台处理</strong>：将耗时操作移到后台线程</li><li>💾 <strong>缓存策略</strong>：缓存常用数据</li><li>📋 <strong>数据库索引</strong>：为频繁查询的字段建立索引</li></ol><hr><h2 id="🧪-测试与调试"><a href="#🧪-测试与调试" class="headerlink" title="🧪 测试与调试"></a>🧪 测试与调试</h2><h3 id="✏️-单元测试示例"><a href="#✏️-单元测试示例" class="headerlink" title="✏️ 单元测试示例"></a>✏️ 单元测试示例</h3><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> XCTest</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ClipboardManagerTests</span>: <span class="title class_ inherited__">XCTestCase</span> &#123;</span><br><span class="line">    <span class="keyword">var</span> manager: <span class="type">ClipboardManager</span>!</span><br><span class="line"></span><br><span class="line">    <span class="keyword">override</span> <span class="keyword">func</span> <span class="title function_">setUp</span>() &#123;</span><br><span class="line">        <span class="keyword">super</span>.setUp()</span><br><span class="line">        manager <span class="operator">=</span> <span class="type">ClipboardManager</span>()</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">testClipboardMonitoring</span>() &#123;</span><br><span class="line">        <span class="keyword">let</span> expectation <span class="operator">=</span> <span class="type">XCTestExpectation</span>(description: <span class="string">&quot;Clipboard change detected&quot;</span>)</span><br><span class="line"></span><br><span class="line">        manager.onClipboardChange <span class="operator">=</span> &#123;</span><br><span class="line">            expectation.fulfill()</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        manager.startMonitoring()</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 模拟剪贴板变化</span></span><br><span class="line">        <span class="type">NSPasteboard</span>.general.clearContents()</span><br><span class="line">        <span class="type">NSPasteboard</span>.general.setString(<span class="string">&quot;Test content&quot;</span>, forType: .string)</span><br><span class="line"></span><br><span class="line">        wait(for: [expectation], timeout: <span class="number">1.0</span>)</span><br><span class="line"></span><br><span class="line">        manager.stopMonitoring()</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">testContentProcessing</span>() &#123;</span><br><span class="line">        <span class="keyword">let</span> content <span class="operator">=</span> <span class="string">&quot;# Test<span class="subst">\n</span><span class="subst">\n</span>Some content&quot;</span></span><br><span class="line">        <span class="keyword">let</span> processed <span class="operator">=</span> manager.processContent(content)</span><br><span class="line"></span><br><span class="line">        <span class="type">XCTAssertEqual</span>(processed.type, .text)</span><br><span class="line">        <span class="type">XCTAssertTrue</span>(processed.content.contains(<span class="string">&quot;Test&quot;</span>))</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="🔍-调试技巧"><a href="#🔍-调试技巧" class="headerlink" title="🔍 调试技巧"></a>🔍 调试技巧</h3><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 1. 使用 os_log 记录关键信息</span></span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> logger <span class="operator">=</span> <span class="type">Logger</span>(subsystem: <span class="string">&quot;com.oneclip.app&quot;</span>, category: <span class="string">&quot;clipboard&quot;</span>)</span><br><span class="line"></span><br><span class="line">logger.info(<span class="string">&quot;Clipboard content changed: <span class="subst">\(content)</span>&quot;</span>)</span><br><span class="line">logger.error(<span class="string">&quot;Failed to save item: <span class="subst">\(error.localizedDescription)</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">// 2. 在 Xcode 控制台查看日志</span></span><br><span class="line"><span class="comment">// 3. 使用 Console.app 查看系统日志</span></span><br><span class="line"><span class="comment">// 4. 使用 Instruments 进行性能分析</span></span><br></pre></td></tr></table></figure><hr><h2 id="📦-发布与更新"><a href="#📦-发布与更新" class="headerlink" title="📦 发布与更新"></a>📦 发布与更新</h2><h3 id="🔄-使用-Sparkle-实现自动更新"><a href="#🔄-使用-Sparkle-实现自动更新" class="headerlink" title="🔄 使用 Sparkle 实现自动更新"></a>🔄 使用 Sparkle 实现自动更新</h3><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">UpdateManager</span>: <span class="title class_ inherited__">NSObject</span>, <span class="title class_ inherited__">SPUUpdaterDelegate</span> &#123;</span><br><span class="line">    <span class="keyword">let</span> updater: <span class="type">SPUUpdater</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">override</span> <span class="keyword">init</span>() &#123;</span><br><span class="line">        <span class="keyword">let</span> hostBundle <span class="operator">=</span> <span class="type">Bundle</span>.main</span><br><span class="line">        <span class="keyword">let</span> updateDriver <span class="operator">=</span> <span class="type">SPUStandardUpdaterController</span>(</span><br><span class="line">            hostBundle: hostBundle,</span><br><span class="line">            applicationBundle: hostBundle,</span><br><span class="line">            userDriver: <span class="type">SPUStandardUserDriver</span>(hostBundle: hostBundle),</span><br><span class="line">            delegate: <span class="literal">nil</span></span><br><span class="line">        )</span><br><span class="line"></span><br><span class="line">        <span class="keyword">self</span>.updater <span class="operator">=</span> updateDriver.updater</span><br><span class="line">        <span class="keyword">super</span>.<span class="keyword">init</span>()</span><br><span class="line"></span><br><span class="line">        updater.delegate <span class="operator">=</span> <span class="keyword">self</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">func</span> <span class="title function_">startUpdater</span>() &#123;</span><br><span class="line">        updater.startUpdater()</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="📋-最佳实践总结"><a href="#📋-最佳实践总结" class="headerlink" title="📋 最佳实践总结"></a>📋 最佳实践总结</h2><h3 id="📱-开发阶段"><a href="#📱-开发阶段" class="headerlink" title="📱 开发阶段"></a>📱 开发阶段</h3><ul><li>✅ 使用 SwiftUI 进行 UI 开发</li><li>✅ 采用 MVVM 架构模式</li><li>✅ 及早进行性能测试</li><li>✅ 编写完整的单元测试</li><li>✅ 使用 Instruments 检测内存泄漏</li></ul><h3 id="⚙️-功能实现"><a href="#⚙️-功能实现" class="headerlink" title="⚙️ 功能实现"></a>⚙️ 功能实现</h3><ul><li>✅ 后台线程处理耗时操作</li><li>✅ 使用 <code>[weak self]</code> 避免循环引用</li><li>✅ 实现完善的错误处理和日志记录</li><li>✅ 提供友好的权限提示和引导</li></ul><h3 id="🚀-性能优化"><a href="#🚀-性能优化" class="headerlink" title="🚀 性能优化"></a>🚀 性能优化</h3><ul><li>✅ 监控频率动态自适应</li><li>✅ 数据库查询优化和索引创建</li><li>✅ 图片压缩和缓存存储</li><li>✅ 内存管理和智能缓存策略</li></ul><h3 id="📦-发布与维护"><a href="#📦-发布与维护" class="headerlink" title="📦 发布与维护"></a>📦 发布与维护</h3><ul><li>✅ 使用 Sparkle 实现自动更新</li><li>✅ 积极收集用户反馈</li><li>✅ 定期发布版本更新</li><li>✅ 维护详细的变更日志</li></ul><hr><h2 id="🎓-总结"><a href="#🎓-总结" class="headerlink" title="🎓 总结"></a>🎓 总结</h2><p>OneClip 的开发过程充满了<strong>挑战和学习</strong>。通过不断的优化和改进，我们打造了一款<strong>高效、稳定、用户友好</strong>的 macOS 应用。</p><h3 id="💎-关键收获"><a href="#💎-关键收获" class="headerlink" title="💎 关键收获"></a>💎 关键收获</h3><table><thead><tr><th>收获</th><th>说明</th></tr></thead><tbody><tr><td>🏗️ 技术选型</td><td>选择合适的技术栈很重要</td></tr><tr><td>⚡ 性能优化</td><td>性能优化需要持续关注</td></tr><tr><td>👥 用户体验</td><td>用户体验至关重要</td></tr><tr><td>💬 社区反馈</td><td>社区反馈推动产品进步</td></tr></tbody></table><hr><h3 id="🤝-分享与讨论"><a href="#🤝-分享与讨论" class="headerlink" title="🤝 分享与讨论"></a>🤝 分享与讨论</h3><p>如果你正在开发 macOS 应用，希望这些经验能对你有所帮助！</p><p>欢迎在以下地方分享你的经验和问题：</p><ul><li>🔗 <a href="https://github.com/Wcowin/OneClip/discussions">GitHub Discussions</a></li><li>💬 评论区留言</li><li>📧 邮件反馈</li></ul><hr>]]>
    </content>
    <id>https://www.tenxiaodao.top/oneclip-kai-fa-jing-yan-fen-xiang-cong-ling-dao-yi-de-macos-ying-yong-kai-fa/</id>
    <link href="https://www.tenxiaodao.top/oneclip-kai-fa-jing-yan-fen-xiang-cong-ling-dao-yi-de-macos-ying-yong-kai-fa/"/>
    <published>2026-02-22T09:46:13.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>🏗️ 分享 OneClip 开发过程中的<strong>真实经验</strong>、<strong>踩坑记录</strong>、<strong>解决方案</strong>和<strong>最佳实践</strong></p>
</blockquot]]>
    </summary>
    <title>OneClip 开发经验分享：从零到一的 macOS 应用开发</title>
    <updated>2026-05-01T12:11:31.377Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="知识分享" scheme="https://www.tenxiaodao.top/categories/%E7%9F%A5%E8%AF%86%E5%88%86%E4%BA%AB/"/>
    <category term="ChatGPT AI" scheme="https://www.tenxiaodao.top/tags/ChatGPT-AI/"/>
    <content>
      <![CDATA[<h1 id="🤖-如何注册ChatGPT"><a href="#🤖-如何注册ChatGPT" class="headerlink" title="🤖 如何注册ChatGPT"></a>🤖 如何注册ChatGPT</h1><blockquote><p><strong>且行切珍惜你的 GPT</strong> ✨</p></blockquote><p>最近 ChatGPT 真受欢迎，但是有些人注册时会经常面临不服务的地区问题。现在我为你详细讲解完整的解决方案！</p><p><strong>原作者</strong>: <a href="https://twitter.com/BoxMrChen">twitter</a></p><h2 id="📋-准备工作"><a href="#📋-准备工作" class="headerlink" title="📋 准备工作"></a>📋 准备工作</h2><h3 id="必需条件"><a href="#必需条件" class="headerlink" title="必需条件"></a>必需条件</h3><p><strong>1. 代理服务</strong> 🌍</p><ul><li>✅ 推荐国家：韩国 &#x2F; 日本 &#x2F; 印度 &#x2F; 新加坡 &#x2F; 美国</li><li>❌ 禁止使用：香港、中国的代理（100% 无法通过）</li></ul><p><strong>2. 国外手机号码</strong> 📱</p><p>强烈推荐使用 <a href="https://sms-activate.org/cn">sms-activate.org</a> 接码平台：</p><ul><li>支持多国运营商</li><li>费用低廉（约 1 RMB 一次）</li><li>接码成功率高</li></ul><h2 id="🚀-第一步：获取验证码"><a href="#🚀-第一步：获取验证码" class="headerlink" title="🚀 第一步：获取验证码"></a>🚀 第一步：获取验证码</h2><h3 id="1️⃣-注册接码平台账号"><a href="#1️⃣-注册接码平台账号" class="headerlink" title="1️⃣ 注册接码平台账号"></a>1️⃣ 注册接码平台账号</h3><p>访问 <a href="https://sms-activate.org/cn">sms-activate.org</a> 并注册账户。</p><h3 id="2️⃣-充值账户余额"><a href="#2️⃣-充值账户余额" class="headerlink" title="2️⃣ 充值账户余额"></a>2️⃣ 充值账户余额</h3><blockquote><p><strong>小贴士</strong>：一次接码费用约 11 卢布（约 1 RMB），建议先充 1 美金。支持支付宝支付！</p></blockquote><p>充值后等待 1-2 分钟账户激活，然后继续下一步。</p><h2 id="📝-第二步：注册-OpenAI-账号"><a href="#📝-第二步：注册-OpenAI-账号" class="headerlink" title="📝 第二步：注册 OpenAI 账号"></a>📝 第二步：注册 OpenAI 账号</h2><h3 id="创建账户"><a href="#创建账户" class="headerlink" title="创建账户"></a>创建账户</h3><ol><li>打开 <a href="https://beta.openai.com/signup">ChatGPT 注册页面</a></li><li>选择注册方式（Google 或邮箱均可）</li><li>验证邮箱中的确认链接</li></ol><h3 id="⚠️-常见问题：地区限制"><a href="#⚠️-常见问题：地区限制" class="headerlink" title="⚠️ 常见问题：地区限制"></a>⚠️ 常见问题：地区限制</h3><blockquote><p><strong>症状</strong>：显示”此国家&#x2F;地区暂不支持服务”</p></blockquote><p>这是因为代理位置不正确或未全局生效。<strong>不用怕</strong>，我来教你解决！</p><h3 id="🔧-一键解决地区限制"><a href="#🔧-一键解决地区限制" class="headerlink" title="🔧 一键解决地区限制"></a>🔧 一键解决地区限制</h3><p><strong>步骤 1</strong>：切换代理到合适地区（推荐韩国）</p><p><strong>步骤 2</strong>：复制以下代码</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">window</span>.<span class="property">localStorage</span>.<span class="title function_">removeItem</span>(<span class="title class_">Object</span>.<span class="title function_">keys</span>(<span class="variable language_">window</span>.<span class="property">localStorage</span>).<span class="title function_">find</span>(<span class="function"><span class="params">i</span>=&gt;</span>i.<span class="title function_">startsWith</span>(<span class="string">&#x27;@@auth0spajs&#x27;</span>)))</span><br></pre></td></tr></table></figure><p><strong>步骤 3</strong>：在浏览器地址栏输入（注意：必须<strong>手动输入</strong>，不能复制粘贴）</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">javascript</span>:</span><br></pre></td></tr></table></figure><p><strong>步骤 4</strong>：粘贴第步骤 2 的代码，按 <code>Enter</code> 键执行</p><p><strong>步骤 5</strong>：刷新页面</p><p>✅ <strong>搞定！</strong> 现在你应该能看到正常的注册表单了</p><hr><h2 id="📱-第三步：输入手机号码"><a href="#📱-第三步：输入手机号码" class="headerlink" title="📱 第三步：输入手机号码"></a>📱 第三步：输入手机号码</h2><h3 id="选择手机号国家"><a href="#选择手机号国家" class="headerlink" title="选择手机号国家"></a>选择手机号国家</h3><p>在接码平台左侧搜索 <strong>OpenAi</strong>，选择 <strong>印度</strong> 地区（相比韩国代理，印度号码成功率更高）</p><h3 id="获取验证码"><a href="#获取验证码" class="headerlink" title="获取验证码"></a>获取验证码</h3><ol><li>点击购买号码（”小黄车” 🛒）</li><li>复制获得的印度手机号</li><li>粘贴到 ChatGPT 注册表单</li><li>点击”发送验证码”</li><li>等待接码平台显示验证码</li><li>复制并粘贴验证码</li></ol><h3 id="完成注册"><a href="#完成注册" class="headerlink" title="完成注册"></a>完成注册</h3><p>选择你的 OpenAI 使用目的，然后点击确认完成注册。</p><hr><h2 id="✨-第四步：开始使用-ChatGPT"><a href="#✨-第四步：开始使用-ChatGPT" class="headerlink" title="✨ 第四步：开始使用 ChatGPT"></a>✨ 第四步：开始使用 ChatGPT</h2><p>🎉 <strong>恭喜！</strong> 你已成功注册 ChatGPT</p><ol><li>访问 <a href="https://chat.openai.com/">ChatGPT 官网</a></li><li>使用刚才注册的账号登陆</li><li>开始与 AI 对话</li></ol><p>在聊天框中输入任何你想问的问题，体验 AI 的强大能力吧！</p><hr><p><strong>💡 需要帮助？</strong></p><ul><li>代理无法连接：检查代理是否正确配置为全局模式</li><li>验证码未收到：等待 1-2 分钟，或尝试重新请求</li><li>账号被封：按照官方指引进行申诉</li></ul><p><strong>祝你使用愉快！🚀</strong></p>]]>
    </content>
    <id>https://www.tenxiaodao.top/ru-he-zhu-ce-chatgpt/</id>
    <link href="https://www.tenxiaodao.top/ru-he-zhu-ce-chatgpt/"/>
    <published>2026-02-07T15:09:31.000Z</published>
    <summary>
      <![CDATA[<h1 id="🤖-如何注册ChatGPT"><a href="#🤖-如何注册ChatGPT" class="headerlink" title="🤖 如何注册ChatGPT"></a>🤖 如何注册ChatGPT</h1><blockquote>
<p><strong>且]]>
    </summary>
    <title>如何注册ChatGPT</title>
    <updated>2026-05-01T12:11:31.379Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="Linux" scheme="https://www.tenxiaodao.top/categories/Linux/"/>
    <category term="AI" scheme="https://www.tenxiaodao.top/tags/AI/"/>
    <category term="KouriChat" scheme="https://www.tenxiaodao.top/tags/KouriChat/"/>
    <category term="微信" scheme="https://www.tenxiaodao.top/tags/%E5%BE%AE%E4%BF%A1/"/>
    <content>
      <![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>简要记录一次在 Windows（VMware 虚拟机）上部署 KouriChat 并接入微信的实践过程，侧重环境准备、安装启动、API 配置与注意事项。本文仅供学习与研究，请务必在可控的小号&#x2F;测试环境中操作。</p><hr><h2 id="项目简介：KouriChat（概述）"><a href="#项目简介：KouriChat（概述）" class="headerlink" title="项目简介：KouriChat（概述）"></a>项目简介：KouriChat（概述）</h2><p>KouriChat 是一款支持本地部署的 AI 聊天助手框架，特点：</p><ul><li>支持多模型与本地运行，隐私友好；  </li><li>支持角色设定、多轮记忆与定制化回复；  </li><li>提供微信接入接口，可把助手绑定到微信对话（需谨慎使用）。</li></ul><hr><h2 id="环境准备（最小要求）"><a href="#环境准备（最小要求）" class="headerlink" title="环境准备（最小要求）"></a>环境准备（最小要求）</h2><ul><li>操作系统：Windows 10（示例环境：VMware 中的 Win10 22H2）  </li><li>Python：3.11.x（64-bit）已安装并加入 PATH  </li><li>网络：稳定的互联网连接（用于 pip 安装依赖与模型 API 调用）  </li><li>硬件：4GB 内存可运行基础部署（仅做测试）</li></ul><p>常用检查：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">python --version</span><br><span class="line"><span class="comment"># 应输出 Python 3.11.x</span></span><br></pre></td></tr></table></figure><hr><h2 id="安装与启动（快速步骤）"><a href="#安装与启动（快速步骤）" class="headerlink" title="安装与启动（快速步骤）"></a>安装与启动（快速步骤）</h2><ol><li>解压项目：<ul><li>将 KouriChat-1.4.3.2.zip 解压到目标目录。</li></ul></li><li>进入目录并运行：<ul><li>双击 <code>run.bat</code>（或在 PowerShell&#x2F;CMD 里执行）。  </li><li>脚本会创建虚拟环境并安装依赖（使用国内镜像会更快）。</li></ul></li><li>启动完成后访问：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://localhost:8502</span><br></pre></td></tr></table></figure>若浏览器未自动打开，可手动访问上述地址；出现页面即表示服务已启动。</li></ol><hr><h2 id="核心配置（Admin-页面）"><a href="#核心配置（Admin-页面）" class="headerlink" title="核心配置（Admin 页面）"></a>核心配置（Admin 页面）</h2><ol><li>首次访问，按页面提示设置管理员密码。  </li><li>进入「配置中心」→ 基础配置：添加要监听的用户（填写“昵称”，不是备注或微信号）。  </li><li>在 AI 接入处选择 API 提供方（以 DeepSeek 为例），填写 API 地址与密钥（下一节详述）。  </li><li>保存并生效，回到主界面执行“微信掉线重连”与“启动”操作。</li></ol><hr><h2 id="获取-DeepSeek-API-Key（示例）"><a href="#获取-DeepSeek-API-Key（示例）" class="headerlink" title="获取 DeepSeek API Key（示例）"></a>获取 DeepSeek API Key（示例）</h2><ol><li>访问： <a href="https://platform.deepseek.com/">https://platform.deepseek.com</a>  </li><li>登录后进入 <code>API keys</code> → 创建新 key → 复制保存（仅显示一次）  </li><li>在 KouriChat 的配置页面填入 API 地址与密钥：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">API 地址: https://api.deepseek.com/v1</span><br><span class="line">模型: deepseek-chat</span><br></pre></td></tr></table></figure></li></ol><hr><h2 id="微信接入与重要风险提示"><a href="#微信接入与重要风险提示" class="headerlink" title="微信接入与重要风险提示"></a>微信接入与重要风险提示</h2><ul><li>目前微信客户端与平台会不断升级与风控，某些接入方式可能随版本不可用或存在账号风险。  </li><li>强烈建议仅使用小号&#x2F;测试号进行试验，切勿在主账号上测试。  </li><li>本文不提供规避官方风控的方法；任何导致账号异常的后果由使用者自行承担。</li></ul><p>推荐操作流程：</p><ol><li>使用小号登录并确认能正常收发消息。  </li><li>在 KouriChat 中配置监听昵称并启动机器人。  </li><li>观察控制台日志与模型调用返回，确认消息转发与回复流程正常。</li></ol><hr><h2 id="常见问题与排查要点"><a href="#常见问题与排查要点" class="headerlink" title="常见问题与排查要点"></a>常见问题与排查要点</h2><ul><li>启动失败：检查 Python 版本、虚拟环境创建日志与 pip 依赖安装错误。  </li><li>无法访问 localhost:8502：确认防火墙规则、服务是否已启动。  </li><li>微信无法正常接入：检查微信客户端版本与 KouriChat 支持的接入方式，尝试使用提供的兼容资源或官方文档建议的办法。  </li><li>模型调用失败：核对 API key、API 地址与配额&#x2F;余额情况。</li></ul><p>常用排查命令（Windows PowerShell）：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 8502 端口是否被监听</span></span><br><span class="line">netstat <span class="literal">-ano</span> | findstr <span class="number">8502</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 Python 进程与虚拟环境日志（按项目实际路径）</span></span><br><span class="line"><span class="built_in">type</span> .\logs\kourichat.log</span><br></pre></td></tr></table></figure><hr><h2 id="安全与合规建议（必读）"><a href="#安全与合规建议（必读）" class="headerlink" title="安全与合规建议（必读）"></a>安全与合规建议（必读）</h2><ul><li>请仅用于学习、研究或获得授权的场景；避免在未经允许的环境中抓取或保存他人隐私数据。  </li><li>不要尝试绕过服务提供方或平台的安全机制。  </li><li>对可能触发风控的自动化行为保持谨慎（频率、内容等）。</li></ul><hr><h2 id="后续扩展（可选方向）"><a href="#后续扩展（可选方向）" class="headerlink" title="后续扩展（可选方向）"></a>后续扩展（可选方向）</h2><ul><li>将 KouriChat 暴露到公网（通过反向代理 &#x2F; 隧道服务），注意认证与 HTTPS。  </li><li>用更强的本地模型替代云 API（如果硬件与许可允许）。  </li><li>集成消息队列以提高并发与稳定性。</li></ul><hr><h2 id="参考与资源"><a href="#参考与资源" class="headerlink" title="参考与资源"></a>参考与资源</h2><ul><li>KouriChat 官方 &#x2F; 仓库（请以项目主页为准）  </li><li>DeepSeek 平台： <a href="https://platform.deepseek.com/">https://platform.deepseek.com</a></li></ul><hr><h2 id="结束语"><a href="#结束语" class="headerlink" title="结束语"></a>结束语</h2><p>本文整理了在 VM&#x2F;Windows 环境下把 KouriChat 启动并接入微信的基础流程与要点。再次提醒：请在受控的测试环境和小号中进行尝试，注意账号与数据安全。如需我把“公网穿透配置”或“VirtualBox&#x2F;VMware 下的详细环境配置”单独展开，回复说明即可。</p>]]>
    </content>
    <id>https://www.tenxiaodao.top/ru-he-zai-wei-xin-li-bu-shu-ai-nv-you-kourichat-jiao-cheng/</id>
    <link href="https://www.tenxiaodao.top/ru-he-zai-wei-xin-li-bu-shu-ai-nv-you-kourichat-jiao-cheng/"/>
    <published>2025-11-17T14:46:18.000Z</published>
    <summary>本文整理将开源 KouriChat 部署在本地（Windows 虚拟机）并接入微信的流程、关键配置与风险提示，适合学习与测试使用。</summary>
    <title>如何在微信里部署 AI 女友（KouriChat 教程）</title>
    <updated>2026-05-01T12:11:31.363Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="Linux" scheme="https://www.tenxiaodao.top/categories/Linux/"/>
    <category term="VM虚拟机" scheme="https://www.tenxiaodao.top/tags/VM%E8%99%9A%E6%8B%9F%E6%9C%BA/"/>
    <content>
      <![CDATA[<blockquote><p>先安装vm可以看往期教程<a href="">vm虚拟机安装</a></p></blockquote><h2 id="安装的详细步骤"><a href="#安装的详细步骤" class="headerlink" title="安装的详细步骤"></a>安装的详细步骤</h2><blockquote><p>下面按“准备 → 引导安装 → 磁盘分区 → 系统配置 → 首次启动与验证 → 虚拟机增强 → 常见问题”顺序给出可直接操作的详细步骤与常用命令示例。按需复制命令到终端执行。</p></blockquote><h3 id="准备"><a href="#准备" class="headerlink" title="准备"></a>准备</h3><ol><li>下载 ISO：从官网或镜像站下载对应版本（server &#x2F; desktop）。  </li><li>下载链接：<a href="https://pan.quark.cn/s/4789247ff06b">sha256sum OpenEuler-*.iso</a><blockquote><p>提取码：idbr</p></blockquote></li></ol><hr><h3 id="创建虚拟机（推荐配置）"><a href="#创建虚拟机（推荐配置）" class="headerlink" title="创建虚拟机（推荐配置）"></a>创建虚拟机（推荐配置）</h3><ol><li>类型：Linux → 64-bit</li><li>CPU：2 核（推荐 ≥2）</li><li>内存：最小 2GB，桌面版建议 4GB+</li><li>磁盘：20GB 起（测试 40GB 更宽松）</li><li>网络：NAT（默认）或 桥接（Bridged，便于局域网访问）</li><li>光驱：加载下载的 ISO</li><li>图形：桌面版启用显存 128MB</li></ol><hr><h3 id="启动-ISO-并选择安装模式"><a href="#启动-ISO-并选择安装模式" class="headerlink" title="启动 ISO 并选择安装模式"></a>启动 ISO 并选择安装模式</h3><p>启动 VM，选择 Install → Graphical Install（桌面）或 Text Install（服务器&#x2F;低内存）。<br>选择语言、键盘、时区。</p><p>图形安装中可选择“自动分区（LVM）”或“手动分区”。手动示例分区（MBR&#x2F;UEFI 以实际引导方式为准）：</p><ul><li><p>UEFI 示例（GPT）：</p><ul><li>&#x2F;dev&#x2F;sda1  EFI System  512M  FAT32  （挂载 &#x2F;boot&#x2F;efi）</li><li>&#x2F;dev&#x2F;sda2  &#x2F;boot       1G    ext4</li><li>&#x2F;dev&#x2F;sda3  LVM PV    剩余全部  -&gt; LVM 内建立 lv_root, lv_home, lv_swap<ul><li>lv_root  &#x2F;    20G  ext4&#x2F;xfs</li><li>lv_home  &#x2F;home 剩余空间  ext4&#x2F;xfs</li><li>lv_swap  swap  &gt;&#x3D;2G（按内存大小）</li></ul></li></ul></li><li><p>BIOS&#x2F;Legacy 示例：</p><ul><li>&#x2F;dev&#x2F;sda1  &#x2F;boot 1G ext4</li><li>&#x2F;dev&#x2F;sda2  LVM PV 剩余 -&gt; 同上</li></ul></li></ul><p>提示：</p><ul><li>生产环境建议至少将 &#x2F;boot 单独分区、使用 LVM 更易扩容。  </li><li>如果不熟悉 LVM，可选择自动分区或仅创建 &#x2F; 和 swap。</li></ul><blockquote><p>如是初学者默认就好</p></blockquote><hr><h3 id="软件包选择与网络"><a href="#软件包选择与网络" class="headerlink" title="软件包选择与网络"></a>软件包选择与网络</h3><ol><li>若使用 Text 安装，安装器会有包组选择，常选 <code>Minimal</code>（服务器）或 <code>Server with GUI</code> &#x2F; <code>Desktop</code>。  </li><li>网络：若需要固定 IP，安装过程中选择手动配置静态 IP（或装完系统后用 nmcli&#x2F;nmtui 设置）。</li></ol><hr><h3 id="创建账户与安全设置"><a href="#创建账户与安全设置" class="headerlink" title="创建账户与安全设置"></a>创建账户与安全设置</h3><ol><li>设置 root 密码并创建普通用户（勾选 sudo 权限或后续用 visudo 添加）。  </li><li>建议启用 SSH 并使用密钥登录（安装后配置），关闭不必要服务。</li></ol><h2 id="SSH-启用：配置-sudo（visudo）："><a href="#SSH-启用：配置-sudo（visudo）：" class="headerlink" title="SSH 启用：配置 sudo（visudo）："></a>SSH 启用：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> systemctl <span class="built_in">enable</span> --now sshd</span><br><span class="line"><span class="built_in">sudo</span> firewall-cmd --permanent --add-service=ssh</span><br><span class="line"><span class="built_in">sudo</span> firewall-cmd --reload</span><br></pre></td></tr></table></figure><br>配置 sudo（visudo）：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> visudo</span><br><span class="line"><span class="comment"># 添加 user1 ALL=(ALL) ALL</span></span><br></pre></td></tr></table></figure></h2><h3 id="完成安装后首次启动"><a href="#完成安装后首次启动" class="headerlink" title="完成安装后首次启动"></a>完成安装后首次启动</h3><p>登录后执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新系统</span></span><br><span class="line"><span class="built_in">sudo</span> dnf update -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装常用工具</span></span><br><span class="line"><span class="built_in">sudo</span> dnf install -y vim wget curl net-tools bash-completion unzip git</span><br><span class="line"></span><br><span class="line"><span class="comment"># 可选：启用 EPEL-like 源或企业镜像（按发行说明配置 repo）</span></span><br></pre></td></tr></table></figure><hr><h3 id="常见问题与排查命令"><a href="#常见问题与排查命令" class="headerlink" title="常见问题与排查命令"></a>常见问题与排查命令</h3><ul><li>无网络：检查 NetworkManager、网卡状态与路由<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ip addr</span><br><span class="line">nmcli device status</span><br><span class="line">nmcli connection show --active</span><br><span class="line">journalctl -u NetworkManager -e</span><br></pre></td></tr></table></figure></li><li>更新失败（repo 问题）：检查 &#x2F;etc&#x2F;yum.repos.d&#x2F; 下的 repo 文件与 DNS</li><li>SSH 无法登录：检查 sshd 状态、firewalld、SELinux（如启用）<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> systemctl status sshd</span><br><span class="line"><span class="built_in">sudo</span> firewall-cmd --list-all</span><br><span class="line"><span class="built_in">sudo</span> sestatus</span><br></pre></td></tr></table></figure></li><li>分辨率 &#x2F; 鼠标问题：安装虚拟机增强后重启</li></ul><hr><h3 id="建议与安全注意"><a href="#建议与安全注意" class="headerlink" title="建议与安全注意"></a>建议与安全注意</h3><ul><li>在生产场景：关闭不必要端口、使用防火墙规则、强制使用密钥登录和关闭 root 密码登录（编辑 &#x2F;etc&#x2F;ssh&#x2F;sshd_config 设置 PermitRootLogin no），并启用定期补丁管理。  </li><li>建议启用快照 &#x2F; 备份策略，初学者多用快照练习分区与回滚。  </li><li>若需 GUI 桌面，可安装 UKUI&#x2F;DDE，但桌面占用资源较多，服务器场景不推荐。</li></ul><hr>]]>
    </content>
    <id>https://www.tenxiaodao.top/openeuler-de-an-zhuang-jiao-cheng/</id>
    <link href="https://www.tenxiaodao.top/openeuler-de-an-zhuang-jiao-cheng/"/>
    <published>2025-11-03T10:55:23.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>先安装vm可以看往期教程<a href="">vm虚拟机安装</a></p>
</blockquote>
<h2 id="安装的详细步骤"><a href="#安装的详细步骤" class="headerlink" title="安装的详细步骤">]]>
    </summary>
    <title>Openeuler的安装教程</title>
    <updated>2026-05-01T12:11:31.364Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="随笔" scheme="https://www.tenxiaodao.top/categories/%E9%9A%8F%E7%AC%94/"/>
    <content>
      <![CDATA[<blockquote><p>“也许真的会有那么一天，我会为自己今天的选择而后悔。”（第93章）<br>“有时候真想，吹一阵风，打个盹就把一辈子给过完。”（第68章）<br><a href="http://tenxiaodao.top/HTML/BQQ.html">照顾好自己</a></p></blockquote>]]>
    </content>
    <id>https://www.tenxiaodao.top/sometimes-love-a-city-because-of-someone/</id>
    <link href="https://www.tenxiaodao.top/sometimes-love-a-city-because-of-someone/"/>
    <published>2025-10-23T16:00:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>“也许真的会有那么一天，我会为自己今天的选择而后悔。”（第93章）<br>“有时候真想，吹一阵风，打个盹就把一辈子给过完。”（第68章）<br><a href="http://tenxiaodao.top/HTML/BQQ.html">照顾好自己<]]>
    </summary>
    <title>有时候爱上一座城市，仅仅是因为爱上这座城市里的某个人</title>
    <updated>2025-10-24T04:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="Linux" scheme="https://www.tenxiaodao.top/categories/Linux/"/>
    <category term="Linux" scheme="https://www.tenxiaodao.top/tags/Linux/"/>
    <category term="命令行" scheme="https://www.tenxiaodao.top/tags/%E5%91%BD%E4%BB%A4%E8%A1%8C/"/>
    <category term="入门" scheme="https://www.tenxiaodao.top/tags/%E5%85%A5%E9%97%A8/"/>
    <content>
      <![CDATA[<h1 id="Linux-基础命令速查（入门）"><a href="#Linux-基础命令速查（入门）" class="headerlink" title="Linux 基础命令速查（入门）"></a>Linux 基础命令速查（入门）</h1><p>本文为常用基础命令的精简速查表，按场景归类，示例以 bash 为主，适合学习与日常运维快速参考。</p><hr><h2 id="1-切换目录-—-cd"><a href="#1-切换目录-—-cd" class="headerlink" title="1. 切换目录 — cd"></a>1. 切换目录 — cd</h2><p>功能：切换当前工作目录。<br>语法：<code>cd [目标目录]</code>  </p><p>常用：</p><ul><li><code>cd ~</code> 切换到用户主目录  </li><li><code>cd ..</code> 返回上级目录  </li><li><code>cd -</code> 切回上次所在目录</li></ul><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /etc</span><br><span class="line"><span class="built_in">cd</span> ~/Documents</span><br><span class="line"><span class="built_in">cd</span> ..</span><br></pre></td></tr></table></figure><hr><h2 id="2-列出文件-—-ls"><a href="#2-列出文件-—-ls" class="headerlink" title="2. 列出文件 — ls"></a>2. 列出文件 — ls</h2><p>功能：显示目录内容。<br>语法：<code>ls [选项] [目录]</code></p><p>常用选项：</p><ul><li><code>-a</code> 显示隐藏文件  </li><li><code>-l</code> 长格式（权限、大小、时间）  </li><li><code>-h</code> 可读大小（KB&#x2F;MB）  </li><li><code>-d</code> 仅列出目录本身</li></ul><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ls</span> -l /etc</span><br><span class="line"><span class="built_in">ls</span> -ahl ~</span><br></pre></td></tr></table></figure><hr><h2 id="3-创建目录-—-mkdir"><a href="#3-创建目录-—-mkdir" class="headerlink" title="3. 创建目录 — mkdir"></a>3. 创建目录 — mkdir</h2><p>功能：创建目录。<br>语法：<code>mkdir [选项] 目录名</code></p><p>常用：</p><ul><li><code>-p</code> 递归创建父目录</li></ul><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> project</span><br><span class="line"><span class="built_in">mkdir</span> -p data/logs</span><br></pre></td></tr></table></figure><hr><h2 id="4-创建-更新时间戳-—-touch"><a href="#4-创建-更新时间戳-—-touch" class="headerlink" title="4. 创建&#x2F;更新时间戳 — touch"></a>4. 创建&#x2F;更新时间戳 — touch</h2><p>功能：创建空文件或更新时间戳。<br>语法：<code>touch 文件名</code></p><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">touch</span> index.html</span><br><span class="line"><span class="built_in">touch</span> file.txt</span><br></pre></td></tr></table></figure><hr><h2 id="5-文本编辑-—-vi-vim"><a href="#5-文本编辑-—-vi-vim" class="headerlink" title="5. 文本编辑 — vi &#x2F; vim"></a>5. 文本编辑 — vi &#x2F; vim</h2><p>功能：终端文本编辑器。<br>语法：<code>vi 文件名</code></p><p>常用操作：</p><ul><li>插入模式：<code>i</code>  </li><li>退出插入：<code>ESC</code>  </li><li>保存：<code>:w</code>  </li><li>退出：<code>:q</code>  </li><li>保存并退出：<code>:wq</code>  </li><li>强制退出不保存：<code>:q!</code></li></ul><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi /etc/hosts</span><br></pre></td></tr></table></figure><hr><h2 id="6-输出文本-变量-—-echo"><a href="#6-输出文本-变量-—-echo" class="headerlink" title="6. 输出文本&#x2F;变量 — echo"></a>6. 输出文本&#x2F;变量 — echo</h2><p>功能：在终端打印文本或环境变量。<br>语法：<code>echo [选项] 内容</code></p><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">&quot;Hello, OpenEuler!&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="variable">$USER</span></span><br><span class="line"><span class="built_in">echo</span> -n <span class="string">&quot;No newline&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-显示当前目录-—-pwd"><a href="#7-显示当前目录-—-pwd" class="headerlink" title="7. 显示当前目录 — pwd"></a>7. 显示当前目录 — pwd</h2><p>功能：显示当前工作目录路径。<br>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">pwd</span></span><br></pre></td></tr></table></figure><hr><h2 id="8-查看文件内容-—-cat"><a href="#8-查看文件内容-—-cat" class="headerlink" title="8. 查看文件内容 — cat"></a>8. 查看文件内容 — cat</h2><p>功能：输出文件内容或合并文件。<br>语法：<code>cat [选项] 文件</code></p><p>常用：</p><ul><li><code>-n</code> 显示行号</li></ul><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"><span class="built_in">cat</span> file1.txt file2.txt &gt; merged.txt</span><br></pre></td></tr></table></figure><hr><h2 id="9-删除文件-目录-—-rm"><a href="#9-删除文件-目录-—-rm" class="headerlink" title="9. 删除文件&#x2F;目录 — rm"></a>9. 删除文件&#x2F;目录 — rm</h2><p>功能：删除文件或目录（危险操作，谨慎使用）。<br>语法：<code>rm [选项] 目标</code></p><p>常用选项：</p><ul><li><code>-f</code> 强制删除（不提示）  </li><li><code>-r</code> 递归删除目录</li></ul><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> file.txt</span><br><span class="line"><span class="built_in">rm</span> -f error.log</span><br><span class="line"><span class="built_in">rm</span> -r old_dir</span><br></pre></td></tr></table></figure><hr><h2 id="10-移动-重命名-—-mv"><a href="#10-移动-重命名-—-mv" class="headerlink" title="10. 移动 &#x2F; 重命名 — mv"></a>10. 移动 &#x2F; 重命名 — mv</h2><p>功能：移动文件或重命名。<br>语法：<code>mv [选项] 源 目标</code></p><p>常用示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mv</span> file.txt /tmp/           <span class="comment"># 移动到 /tmp/</span></span><br><span class="line"><span class="built_in">mv</span> oldname.txt newname.txt  <span class="comment"># 重命名</span></span><br><span class="line"><span class="built_in">mv</span> -i *.<span class="built_in">log</span> /var/logs/      <span class="comment"># -i 交互式覆盖提示</span></span><br></pre></td></tr></table></figure><hr><h2 id="11-主机名-—-hostname-hostnamectl"><a href="#11-主机名-—-hostname-hostnamectl" class="headerlink" title="11. 主机名 — hostname &#x2F; hostnamectl"></a>11. 主机名 — hostname &#x2F; hostnamectl</h2><ul><li><p><code>hostname</code>：查看或临时设置主机名</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hostname         <span class="comment"># 显示当前主机名</span></span><br><span class="line"><span class="built_in">sudo</span> hostname myhost   <span class="comment"># 临时设置（重启后可能失效）</span></span><br></pre></td></tr></table></figure></li><li><p><code>hostnamectl</code>：永久设置（systemd 管理）</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> hostnamectl set-hostname myhost.example.com</span><br><span class="line">hostnamectl status    <span class="comment"># 查看当前主机名与相关信息</span></span><br></pre></td></tr></table></figure></li></ul><p>说明：使用 hostnamectl 更改后无需编辑 &#x2F;etc&#x2F;hostname 手动生效，适用于 systemd 系统。</p><hr><h2 id="12-Shell-相关-—-bash"><a href="#12-Shell-相关-—-bash" class="headerlink" title="12. Shell 相关 — bash"></a>12. Shell 相关 — bash</h2><p>功能：bash 是常见的交互式 shell 与脚本解释器。常用用法与技巧：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">bash                  <span class="comment"># 启动一个子 shell</span></span><br><span class="line"><span class="built_in">exec</span> bash             <span class="comment"># 用 bash 替换当前 shell（不返回）</span></span><br><span class="line">bash script.sh        <span class="comment"># 用 bash 解释执行脚本</span></span><br><span class="line">bash -l               <span class="comment"># 以登录 shell 启动（读取 /etc/profile 等）</span></span><br></pre></td></tr></table></figure><p>提示：交互式环境下可用 <code>history</code>、<code>Ctrl+R</code> 反向搜索命令，使用 <code>~/.bashrc</code> 或 <code>~/.bash_profile</code> 配置环境与别名。</p><hr><h2 id="13-rm-补充（安全使用）"><a href="#13-rm-补充（安全使用）" class="headerlink" title="13. rm 补充（安全使用）"></a>13. rm 补充（安全使用）</h2><p>功能：删除文件&#x2F;目录（危险操作）。常见安全建议与选项：</p><ul><li>基本用法：<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> file.txt</span><br><span class="line"><span class="built_in">rm</span> -r <span class="built_in">dir</span>/</span><br></pre></td></tr></table></figure></li><li>安全用法：<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -i file.txt            <span class="comment"># 交互式确认</span></span><br><span class="line"><span class="built_in">rm</span> -rf /path/to/dir       <span class="comment"># 强制递归（谨慎）</span></span><br></pre></td></tr></table></figure></li><li>防止误删：<ul><li>推荐启用别名：<code>alias rm=&#39;rm -i&#39;</code> 放入 ~&#x2F;.bashrc</li><li><code>--preserve-root</code>（默认）防止对 &#x2F; 执行 <code>rm -rf /</code></li></ul></li></ul><hr><h2 id="10-本地-YUM-仓库（基于-ISO）"><a href="#10-本地-YUM-仓库（基于-ISO）" class="headerlink" title="10. 本地 YUM 仓库（基于 ISO）"></a>10. 本地 YUM 仓库（基于 ISO）</h2><h2 id="YUM-用法（常用命令）"><a href="#YUM-用法（常用命令）" class="headerlink" title="YUM 用法（常用命令）"></a>YUM 用法（常用命令）</h2><p>说明：在部分发行版（如 CentOS&#x2F;RHEL）使用 yum 管理软件包；openEuler 可能使用 dnf&#x2F;yum 兼容层。以下为常见 yum 操作示例。</p><ul><li><p>刷新缓存 &#x2F; 生成缓存</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum clean all            <span class="comment"># 清理缓存</span></span><br><span class="line">yum makecache            <span class="comment"># 生成缓存，加速后续查询/安装</span></span><br></pre></td></tr></table></figure></li><li><p>安装 &#x2F; 卸载 &#x2F; 更新</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">yum -y install &lt;pkg&gt;     <span class="comment"># 非交互式安装</span></span><br><span class="line">yum -y remove &lt;pkg&gt;      <span class="comment"># 卸载</span></span><br><span class="line">yum update               <span class="comment"># 更新已安装的包（等同于 yum upgrade）</span></span><br><span class="line">yum -y update &lt;pkg&gt;      <span class="comment"># 更新指定包</span></span><br></pre></td></tr></table></figure></li><li><p>本地安装 RPM</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum localinstall ./pkg.rpm   <span class="comment"># 从本地 rpm 安装（会自动解决依赖）</span></span><br></pre></td></tr></table></figure></li><li><p>查询与搜索</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">yum search keyword        <span class="comment"># 按关键字搜索包</span></span><br><span class="line">yum info &lt;pkg&gt;            <span class="comment"># 显示包信息（版本、依赖、描述）</span></span><br><span class="line">yum list installed        <span class="comment"># 列出已安装包</span></span><br><span class="line">yum list available        <span class="comment"># 列出可安装包</span></span><br><span class="line">yum whatprovides <span class="string">&#x27;*/binary&#x27;</span>  <span class="comment"># 查找提供特定文件/二进制的包</span></span><br></pre></td></tr></table></figure></li><li><p>仓库管理与调试</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yum repolist              <span class="comment"># 列出启用的仓库</span></span><br><span class="line">yum --disablerepo=repoid install &lt;pkg&gt;   <span class="comment"># 临时禁用某仓库</span></span><br><span class="line">yum-config-manager --add-repo &lt;url&gt;      <span class="comment"># 需 yum-utils，添加仓库</span></span><br></pre></td></tr></table></figure></li><li><p>组安装 &#x2F; 升级历史</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yum groupinstall <span class="string">&quot;Development Tools&quot;</span>   <span class="comment"># 安装包组</span></span><br><span class="line">yum <span class="built_in">history</span>                            <span class="comment"># 查看事务历史</span></span><br><span class="line">yum <span class="built_in">history</span> undo &lt;ID&gt;                  <span class="comment"># 回滚指定事务（谨慎使用）</span></span><br></pre></td></tr></table></figure></li><li><p>回滚 &#x2F; 降级</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum downgrade &lt;pkg&gt;     <span class="comment"># 降级包到仓库中较旧版本</span></span><br><span class="line">yum versionlock add &lt;pkg&gt;  <span class="comment"># 需要 yum-plugin-versionlock，锁定包版本</span></span><br></pre></td></tr></table></figure></li><li><p>常见选项与技巧</p></li><li><p><code>-y</code>：自动回答 yes，适用于脚本自动化。  </p></li><li><p><code>--showduplicates</code>：用于显示可用的所有版本。  </p></li><li><p><code>--enablerepo=repoid</code> &#x2F; <code>--disablerepo=repoid</code>：临时启用&#x2F;禁用仓库。  </p></li><li><p>使用 <code>yum makecache</code> 在离线或本地仓库场景下常能加速后续操作。</p></li></ul><p>示例（本地 ISO 做仓库后）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">mount /dev/cdrom /mnt/openeuler</span><br><span class="line"><span class="comment"># 创建 repo 指向 file:///mnt/openeuler 后：</span></span><br><span class="line">yum clean all</span><br><span class="line">yum makecache</span><br><span class="line">yum -y install vim</span><br></pre></td></tr></table></figure><p>注意：不同发行版的包管理器（yum&#x2F;dnf、zypper、apt）命令存在差异，生产环境操作前建议先在测试环境验证并备份重要数据。</p><hr><h2 id="速查：系统与网络常用命令"><a href="#速查：系统与网络常用命令" class="headerlink" title="速查：系统与网络常用命令"></a>速查：系统与网络常用命令</h2><ul><li>网卡与网络：<code>ip addr</code> &#x2F; <code>ifconfig</code>  </li><li>内存：<code>free -h</code>  </li><li>磁盘：<code>df -h</code> &#x2F; <code>du -sh /path</code>  </li><li>查找：<code>find / -name &quot;*.log&quot;</code>  </li><li>文本搜索：<code>grep -R &quot;关键词&quot; .</code>  </li><li>归档压缩：<code>tar czvf a.tar.gz folder/</code> &#x2F; <code>tar xzvf a.tar.gz</code></li></ul><hr><h2 id="安全建议（简要）"><a href="#安全建议（简要）" class="headerlink" title="安全建议（简要）"></a>安全建议（简要）</h2><ul><li>优先使用 SSH 密钥登录，生产环境禁用 root 密码登录。  </li><li>仅开放必要端口并配置防火墙与 SELinux。  </li><li>使用 <code>visudo</code> 编辑 sudoers，避免语法错误。  </li><li>定期备份配置与数据，保持系统更新与补丁。</li></ul><hr>]]>
    </content>
    <id>https://www.tenxiaodao.top/linux-ji-chu-ming-ling-su-cha-ru-men/</id>
    <link href="https://www.tenxiaodao.top/linux-ji-chu-ming-ling-su-cha-ru-men/"/>
    <published>2025-10-22T08:05:21.000Z</published>
    <summary>
      <![CDATA[<h1 id="Linux-基础命令速查（入门）"><a href="#Linux-基础命令速查（入门）" class="headerlink" title="Linux 基础命令速查（入门）"></a>Linux 基础命令速查（入门）</h1><p>本文为常用基础命令的精简速查]]>
    </summary>
    <title>Linux 基础命令速查（入门）</title>
    <updated>2026-05-01T12:11:31.360Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="Linux" scheme="https://www.tenxiaodao.top/categories/Linux/"/>
    <category term="Linux" scheme="https://www.tenxiaodao.top/tags/Linux/"/>
    <category term="openEuler" scheme="https://www.tenxiaodao.top/tags/openEuler/"/>
    <category term="运维" scheme="https://www.tenxiaodao.top/tags/%E8%BF%90%E7%BB%B4/"/>
    <content>
      <![CDATA[<h1 id="openEuler-常用命令与管理指南（速查）"><a href="#openEuler-常用命令与管理指南（速查）" class="headerlink" title="openEuler 常用命令与管理指南（速查）"></a>openEuler 常用命令与管理指南（速查）</h1><p>本文按场景汇总常用命令与配置示例，便于日常运维快速参考。</p><hr><h2 id="1-开机自动挂载（fstab）"><a href="#1-开机自动挂载（fstab）" class="headerlink" title="1 开机自动挂载（fstab）"></a>1 开机自动挂载（fstab）</h2><p>编辑 &#x2F;etc&#x2F;fstab，添加示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 本地 ISO 镜像挂载（iso9660）</span></span><br><span class="line">/dev/cdrom  /root/aaa  iso9660  defaults  0  0</span><br></pre></td></tr></table></figure><p>字段说明：设备 文件系统挂载点 FS类型 挂载选项 dump fsck顺序。修改后重启或执行 mount -a 测试。</p><hr><h2 id="2-配置-SSH-服务"><a href="#2-配置-SSH-服务" class="headerlink" title="2 配置 SSH 服务"></a>2 配置 SSH 服务</h2><p>编辑 &#x2F;etc&#x2F;ssh&#x2F;sshd_config，常用项：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">PermitRootLogin yes           # 允许 root 用户远程登录</span><br><span class="line">Port 22                       # 允许的端口</span><br><span class="line">PasswordAuthentication yes    # 允许密码登录</span><br><span class="line">AllowUsers user1 user2        # 仅允许 user1 和 user2 登录（登录超时设置（防止空闲连接占用资源））</span><br><span class="line">ClientAliveInterval 300       # 每 5 分钟发送一次心跳</span><br><span class="line">ClientAliveCountMax 3         # 0 表示无限次，可改为 3 等有限次数</span><br></pre></td></tr></table></figure><p>保存后重启：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> systemctl restart sshd</span><br></pre></td></tr></table></figure><blockquote><p>配置免密登录<br>两台主机<br>A生成密钥对执行命令生成 RSA 密钥对（一路回车，也可设密码，但设密码后仍需输密钥密码，一般免密场景直接回车留空 ）：</p></blockquote><p>免密登录（在 A 机执行）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa</span><br><span class="line">ssh-copy-id username@B_IP</span><br><span class="line">ssh username@B_IP   <span class="comment"># 测试无密码登录</span></span><br></pre></td></tr></table></figure><hr><h2 id="3-网络配置（network-scripts-nmtui）"><a href="#3-网络配置（network-scripts-nmtui）" class="headerlink" title="3 网络配置（network-scripts &#x2F; nmtui）"></a>3 网络配置（network-scripts &#x2F; nmtui）</h2><blockquote><p>在 openEuler 中配置 network-scripts（传统网络服务）主要通过编辑 &#x2F;etc&#x2F;sysconfig&#x2F;network-scripts&#x2F; 目录下的网卡配置文件实现。以下是详细<br>步骤，适用于静态 IP 和 DHCP 两种场景：</p></blockquote><p>查看网卡：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ip addr</span><br></pre></td></tr></table></figure><p>静态 IP（&#x2F;etc&#x2F;sysconfig&#x2F;network-scripts&#x2F;ifcfg-ens33 示例）：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">TYPE</span>=EthernetTYPE=Ethernet           <span class="comment"># 网络类型</span></span><br><span class="line"><span class="attr">BOOTPROTO</span>=static                     <span class="comment"># 静态 IP（dhcp 为动态获取）</span></span><br><span class="line"><span class="attr">NAME</span>=ens33                           <span class="comment"># 网卡名称（与文件名一致）</span></span><br><span class="line"><span class="attr">DEVICE</span>=ens33                         <span class="comment"># 设备名（与网卡实际名称一致）</span></span><br><span class="line"><span class="attr">ONBOOT</span>=<span class="literal">yes</span>                           <span class="comment"># 开机启用</span></span><br><span class="line"><span class="attr">IPADDR</span>=<span class="number">192.168</span>.<span class="number">1.100</span>                 <span class="comment"># 静态 IP 地址</span></span><br><span class="line"><span class="attr">PREFIX</span>=<span class="number">24</span>                            <span class="comment"># 子网掩码（24 等价于 255.255.255.0）</span></span><br><span class="line"><span class="attr">GATEWAY</span>=<span class="number">192.168</span>.<span class="number">1.1</span>                  <span class="comment"># 网关地址</span></span><br><span class="line"><span class="attr">DNS1</span>=<span class="number">114.114</span>.<span class="number">114.114</span>                 <span class="comment"># DNS 服务器 1</span></span><br><span class="line"><span class="attr">DNS2</span>=<span class="number">8.8</span>.<span class="number">8.8</span>                         <span class="comment"># DNS 服务器 2（可选）</span></span><br></pre></td></tr></table></figure><p>重启网络：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> systemctl restart network</span><br></pre></td></tr></table></figure><p>使用图形化文本界面：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> nmtui</span><br><span class="line"><span class="comment"># 选择 Edit a connection -&gt; 选择网卡 -&gt; 配置静态 IP -&gt; 激活连接</span></span><br></pre></td></tr></table></figure><hr><h2 id="4-命令补全"><a href="#4-命令补全" class="headerlink" title="4 命令补全"></a>4 命令补全</h2><p>安装 bash 补全：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> yum -y install bash-completion</span><br><span class="line"><span class="built_in">exec</span> bash</span><br></pre></td></tr></table></figure><hr><h2 id="5-安装图形化桌面（DDE-UKUI）"><a href="#5-安装图形化桌面（DDE-UKUI）" class="headerlink" title="5 安装图形化桌面（DDE &#x2F; UKUI）"></a>5 安装图形化桌面（DDE &#x2F; UKUI）</h2><blockquote><p>DDE 和 UKUI 都是国产 Linux 图形化桌面环境，相当于电脑的 “可视化操作界面”，类似 Windows 的桌面，但设计理念和适用场景有差异。以下用通俗易懂的方式对比两者区别：</p></blockquote><ol><li>定位与风格<br>DDE（Deepin Desktop Environment，深度桌面环境）<br>风格：更偏向时尚、现代，界面设计简洁美观，动画效果流畅，图标和窗口风格精致，类似 macOS 的简约感。<br>定位：适合追求颜值和操作流畅度的个人用户，比如日常办公、娱乐、编程等，尤其受年轻用户和开发者喜欢。<br>UKUI（优麒麟用户界面）<br>风格：更偏向稳重、实用，界面布局中规中矩，类似 Windows 经典风格（如开始菜单、任务栏位置），学习成本低。<br>定位：适合需要稳定、适配性强的场景，比如政府、企业办公，或国产操作系统的标准化部署（如 openEuler、银河麒麟等）。</li><li>功能与生态<br>DDE<br>功能：内置工具更 “潮”，比如深度商店（应用丰富，支持微信、QQ 等常用软件）、深度截图、系统监控等，交互细节贴心（如全局快捷键、多桌面管理）。<br>生态：深度社区活跃，对国产硬件（如华为、统信芯片）和软件适配较好，适合个人用户打造 “个性化桌面”。<br>UKUI<br>功能：功能更 “基础”，侧重系统稳定性和兼容性，内置工具偏向办公实用（如文件管理器、文本编辑器），界面选项简洁，不易出错。<br>生态：依赖国产操作系统官方支持（如优麒麟、openEuler），对政府 &#x2F; 企业级软件（如电子政务系统）适配更优，适合大规模统一部署。</li><li>使用场景推荐<br>选 DDE：<br>如果你是个人用户，想在 Linux 上体验好看、好用的桌面，或常用国产软件（如微信、WPS），选 DDE 更舒服。<br>选 UKUI：<br>如果你是企业用户或使用国产操作系统（如单位电脑预装的 openEuler），需要稳定、符合传统操作习惯的界面，选 UKUI 更合适。<br>一句话总结<br>DDE：像 “年轻人的时尚桌面”，好看又好用，适合追求个性和流畅体验的个人。<br>UKUI：像 “稳重的办公桌面”，朴实无华但稳定可靠，适合企业和标准化场景。<br>根据需求选就行～ 如果只是日常用电脑，建议先试试 DDE；如果是单位或国产系统设备，可能默认就是 UKUI</li></ol><p>安装示例（视仓库与包名而定）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> yum -y install ukui      <span class="comment"># 或 dde</span></span><br><span class="line"><span class="built_in">sudo</span> <span class="built_in">chmod</span> +x /etc/rc.d/rc.local   <span class="comment"># 若需要</span></span><br><span class="line"><span class="built_in">sudo</span> systemctl set-default graphical.target</span><br><span class="line"><span class="built_in">sudo</span> reboot</span><br></pre></td></tr></table></figure><p>DDE 更美观偏个人，UKUI 更稳重适配企业场景，按需选择。</p><hr><h2 id="6-虚拟机网络模式简介（桥接-Host-Only-NAT）"><a href="#6-虚拟机网络模式简介（桥接-Host-Only-NAT）" class="headerlink" title="6 虚拟机网络模式简介（桥接 &#x2F; Host-Only &#x2F; NAT）"></a>6 虚拟机网络模式简介（桥接 &#x2F; Host-Only &#x2F; NAT）</h2><ul><li>桥接（Bridged）：虚拟机直接加入 LAN，获取同网段 IP，适合做局域网服务。</li><li>仅主机（Host-Only）：仅主机与虚拟机可互通，隔离外网，适合测试隔离环境。</li><li>NAT：虚拟机通过宿主 NAT 上网，配置简单但外网无法主动访问虚拟机（需端口映射）。</li></ul><hr><h2 id="7-常用命令速查"><a href="#7-常用命令速查" class="headerlink" title="7 常用命令速查"></a>7 常用命令速查</h2><p>系统与信息：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">whoami</span>; hostnamectl; <span class="built_in">uname</span> -a; <span class="built_in">uptime</span></span><br><span class="line">free -h; <span class="built_in">df</span> -h; <span class="built_in">du</span> -sh /path</span><br></pre></td></tr></table></figure><p>进程与服务：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ps aux | grep name</span><br><span class="line">pkill -f name</span><br><span class="line"><span class="built_in">sudo</span> systemctl status|start|stop|restart nginx</span><br><span class="line">ss -tulpn | grep :80</span><br></pre></td></tr></table></figure><p>文件与查找：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ls</span> -la; <span class="built_in">cat</span> file; less file</span><br><span class="line">find / -name <span class="string">&quot;*.log&quot;</span></span><br><span class="line">grep -R --exclude-dir=node_modules <span class="string">&quot;关键词&quot;</span> .</span><br><span class="line">tar czvf a.tar.gz folder/; tar xzvf a.tar.gz</span><br></pre></td></tr></table></figure><p>网络与传输：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ping -c4 example.com</span><br><span class="line">curl -I https://example.com</span><br><span class="line">scp file user@host:/path</span><br><span class="line">rsync -avz src/ user@host:/dest/</span><br></pre></td></tr></table></figure><hr><h2 id="8-vim-快捷与编辑"><a href="#8-vim-快捷与编辑" class="headerlink" title="8 vim 快捷与编辑"></a>8 vim 快捷与编辑</h2><p>常用模式与命令：</p><ul><li>模式：命令模式 &#x2F; 插入模式 &#x2F; 底行模式  </li><li>插入：i a I A o O  </li><li>行操作：yy 复制行；p 粘贴；dd 删除行  </li><li>底行命令：:w 保存；:q 退出；:wq 保存退出；:q! 强制退出</li></ul><hr><h2 id="9-提权（sudo）"><a href="#9-提权（sudo）" class="headerlink" title="9 提权（sudo）"></a>9 提权（sudo）</h2><p>编辑 sudoers（使用 visudo）：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"># 允许 user1 使用 sudo</span><br><span class="line">user1 ALL=(ALL) ALL</span><br></pre></td></tr></table></figure><p>建议通过 visudo 修改以避免语法错误。</p><hr><h2 id="10-安全与建议（简要）"><a href="#10-安全与建议（简要）" class="headerlink" title="10 安全与建议（简要）"></a>10 安全与建议（简要）</h2><ul><li>优先使用密钥登录，禁用 root 密码登录（生产环境）。</li><li>防火墙只开放必要端口，使用 SELinux&#x2F;防火墙策略。</li><li>定期备份 &#x2F;etc、重要配置与数据，使用包管理器更新补丁。</li><li>在生产环境谨慎设置 PermitRootLogin 与 PasswordAuthentication。</li></ul><hr><p>本文为速查手册，覆盖常见场景与示例，具体命令与包名请根据 openEuler 版本与仓库调整，遇到疑问可查看 man 页面或官方文档。</p>]]>
    </content>
    <id>https://www.tenxiaodao.top/openeuler-chang-yong-ming-ling-yu-guan-li-zhi-nan/</id>
    <link href="https://www.tenxiaodao.top/openeuler-chang-yong-ming-ling-yu-guan-li-zhi-nan/"/>
    <published>2025-10-22T08:05:21.000Z</published>
    <summary>
      <![CDATA[<h1 id="openEuler-常用命令与管理指南（速查）"><a href="#openEuler-常用命令与管理指南（速查）" class="headerlink" title="openEuler 常用命令与管理指南（速查）"></a>openEuler 常用命令与管理]]>
    </summary>
    <title>openEuler 常用命令与管理指南</title>
    <updated>2026-05-01T12:11:31.361Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="Linux" scheme="https://www.tenxiaodao.top/categories/Linux/"/>
    <category term="Linux" scheme="https://www.tenxiaodao.top/tags/Linux/"/>
    <category term="命令行" scheme="https://www.tenxiaodao.top/tags/%E5%91%BD%E4%BB%A4%E8%A1%8C/"/>
    <category term="运维" scheme="https://www.tenxiaodao.top/tags/%E8%BF%90%E7%BB%B4/"/>
    <content>
      <![CDATA[<h1 id="Linux-命令大全"><a href="#Linux-命令大全" class="headerlink" title="Linux 命令大全"></a>Linux 命令大全</h1><p>本文按场景分类，汇总常用的 Linux 命令与典型示例，适合作为日常运维与开发参考。命令示例以 bash 为主，适用于大多数 Linux 发行版（Ubuntu、CentOS、Debian 等）。</p><hr><h2 id="一、基础与系统信息"><a href="#一、基础与系统信息" class="headerlink" title="一、基础与系统信息"></a>一、基础与系统信息</h2><ul><li><p>查看当前用户、主机、操作系统：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">whoami</span>         <span class="comment"># 当前用户</span></span><br><span class="line">hostnamectl    <span class="comment"># 主机与系统信息</span></span><br><span class="line"><span class="built_in">uname</span> -a       <span class="comment"># 内核与架构信息</span></span><br></pre></td></tr></table></figure></li><li><p>查看系统负载、运行时间：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">uptime</span></span><br><span class="line">top            <span class="comment"># 交互式进程查看</span></span><br><span class="line">htop           <span class="comment"># 更友好（需安装）</span></span><br></pre></td></tr></table></figure></li><li><p>查看内存与交换：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">free -h</span><br><span class="line">vmstat 1 5</span><br></pre></td></tr></table></figure></li><li><p>查看磁盘使用情况：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">df</span> -h          <span class="comment"># 分区磁盘使用</span></span><br><span class="line"><span class="built_in">du</span> -sh /path   <span class="comment"># 某目录大小</span></span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="二、用户与权限"><a href="#二、用户与权限" class="headerlink" title="二、用户与权限"></a>二、用户与权限</h2><ul><li><p>添加、删除用户与切换：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> adduser username</span><br><span class="line"><span class="built_in">sudo</span> userdel -r username</span><br><span class="line">su - username</span><br></pre></td></tr></table></figure></li><li><p>修改权限与属主：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> 644 file.txt</span><br><span class="line"><span class="built_in">chmod</span> -R 755 /var/www</span><br><span class="line"><span class="built_in">chown</span> user:group file</span><br></pre></td></tr></table></figure></li><li><p>sudo 权限测试：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> -l</span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="三、文件与目录操作"><a href="#三、文件与目录操作" class="headerlink" title="三、文件与目录操作"></a>三、文件与目录操作</h2><ul><li><p>常用文件操作：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ls</span> -la</span><br><span class="line"><span class="built_in">cat</span> file</span><br><span class="line">less file</span><br><span class="line"><span class="built_in">head</span> -n 50 file</span><br><span class="line"><span class="built_in">tail</span> -f /var/log/syslog</span><br></pre></td></tr></table></figure></li><li><p>复制、移动、删除：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cp</span> -r src/ dest/</span><br><span class="line"><span class="built_in">mv</span> oldname newname</span><br><span class="line"><span class="built_in">rm</span> -rf path/</span><br></pre></td></tr></table></figure></li><li><p>查找文件与内容：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">find / -name <span class="string">&quot;*.log&quot;</span></span><br><span class="line">locate filename    <span class="comment"># 需 updatedb</span></span><br><span class="line">grep -R --exclude-dir=node_modules <span class="string">&quot;关键词&quot;</span> .</span><br><span class="line">grep -n <span class="string">&quot;pattern&quot;</span> file</span><br></pre></td></tr></table></figure></li><li><p>归档与压缩：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">tar czvf archive.tar.gz folder/</span><br><span class="line">tar xzvf archive.tar.gz</span><br><span class="line">zip -r archive.zip folder/</span><br><span class="line">unzip archive.zip</span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="四、进程与服务管理"><a href="#四、进程与服务管理" class="headerlink" title="四、进程与服务管理"></a>四、进程与服务管理</h2><ul><li><p>列出进程与查杀：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ps aux | grep proc_name</span><br><span class="line">pkill -f process_keyword</span><br><span class="line"><span class="built_in">kill</span> -9 PID</span><br></pre></td></tr></table></figure></li><li><p>systemd 服务管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> systemctl start nginx</span><br><span class="line"><span class="built_in">sudo</span> systemctl stop nginx</span><br><span class="line"><span class="built_in">sudo</span> systemctl restart nginx</span><br><span class="line"><span class="built_in">sudo</span> systemctl status nginx</span><br><span class="line"><span class="built_in">sudo</span> systemctl <span class="built_in">enable</span> nginx   <span class="comment"># 开机自启</span></span><br><span class="line"><span class="built_in">sudo</span> systemctl <span class="built_in">disable</span> nginx</span><br></pre></td></tr></table></figure></li><li><p>查看端口占用：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ss -tulpn | grep :80</span><br><span class="line">netstat -tulpn    <span class="comment"># 需安装 net-tools</span></span><br><span class="line">lsof -i :3306</span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="五、网络与远程操作"><a href="#五、网络与远程操作" class="headerlink" title="五、网络与远程操作"></a>五、网络与远程操作</h2><ul><li><p>网络调试：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ping -c 4 google.com</span><br><span class="line">traceroute google.com    <span class="comment"># traceroute 或 tracepath</span></span><br><span class="line">curl -I https://example.com</span><br><span class="line">wget https://example.com/file</span><br></pre></td></tr></table></figure></li><li><p>SSH 与文件传输：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ssh user@host</span><br><span class="line">scp file user@host:/path/</span><br><span class="line">rsync -avz ./local/ user@host:/remote/   <span class="comment"># 增量同步</span></span><br></pre></td></tr></table></figure></li><li><p>配置和查看网络接口：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ip addr show</span><br><span class="line">ip route show</span><br><span class="line">nmcli device status    <span class="comment"># NetworkManager 环境</span></span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="六、包管理（常见发行版）"><a href="#六、包管理（常见发行版）" class="headerlink" title="六、包管理（常见发行版）"></a>六、包管理（常见发行版）</h2><ul><li><p>Debian&#x2F;Ubuntu (apt)：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> apt update</span><br><span class="line"><span class="built_in">sudo</span> apt install -y package</span><br><span class="line"><span class="built_in">sudo</span> apt remove package</span><br></pre></td></tr></table></figure></li><li><p>CentOS&#x2F;RHEL (yum&#x2F;dnf)：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> yum install package</span><br><span class="line"><span class="built_in">sudo</span> dnf install package</span><br></pre></td></tr></table></figure></li><li><p>通用（源码&#x2F;二进制）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./configure &amp;&amp; make &amp;&amp; <span class="built_in">sudo</span> make install</span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="七、日志与排错"><a href="#七、日志与排错" class="headerlink" title="七、日志与排错"></a>七、日志与排错</h2><ul><li><p>查看日志（系统&#x2F;服务）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> journalctl -u nginx -f</span><br><span class="line"><span class="built_in">tail</span> -n 200 /var/log/syslog</span><br></pre></td></tr></table></figure></li><li><p>常用诊断工具：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">strace -p PID             <span class="comment"># 跟踪系统调用</span></span><br><span class="line">ltrace -p PID             <span class="comment"># 跟踪库调用</span></span><br><span class="line">debugfs / debug tools <span class="keyword">for</span> filesystem issues</span><br></pre></td></tr></table></figure></li><li><p>权限与 SELinux：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">getenforce</span><br><span class="line">setenforce 0              <span class="comment"># 临时关闭 SELinux（谨慎）</span></span><br><span class="line">ausearch -m avc -ts today <span class="comment"># SELinux 审计查询</span></span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="八、文本处理与管道"><a href="#八、文本处理与管道" class="headerlink" title="八、文本处理与管道"></a>八、文本处理与管道</h2><ul><li><p>文本处理工具：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">&#x27;&#123;print $1,$3&#125;&#x27;</span> file</span><br><span class="line">sed -n <span class="string">&#x27;1,20p&#x27;</span> file</span><br><span class="line"><span class="built_in">cut</span> -d<span class="string">&#x27;,&#x27;</span> -f1 file</span><br><span class="line"><span class="built_in">sort</span> file | <span class="built_in">uniq</span> -c | <span class="built_in">sort</span> -nr</span><br></pre></td></tr></table></figure></li><li><p>管道与重定向：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">command</span> | grep pattern &gt; out.txt</span><br><span class="line"><span class="built_in">command</span> 2&gt;&amp;1 | <span class="built_in">tee</span> log.txt</span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="九、Shell-脚本与自动化"><a href="#九、Shell-脚本与自动化" class="headerlink" title="九、Shell 脚本与自动化"></a>九、Shell 脚本与自动化</h2><ul><li><p>简单脚本模板：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/usr/bin/env bash</span></span><br><span class="line"><span class="built_in">set</span> -euo pipefail</span><br><span class="line">IFS=$<span class="string">&#x27;\n\t&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 示例：备份目录</span></span><br><span class="line">src=<span class="string">&quot;/var/www&quot;</span></span><br><span class="line">dst=<span class="string">&quot;/backup/<span class="subst">$(date +%F)</span>.tar.gz&quot;</span></span><br><span class="line">tar czf <span class="string">&quot;<span class="variable">$dst</span>&quot;</span> <span class="string">&quot;<span class="variable">$src</span>&quot;</span></span><br></pre></td></tr></table></figure></li><li><p>定时任务（crontab）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">crontab -e</span><br><span class="line"><span class="comment"># 每天 2 点备份</span></span><br><span class="line">0 2 * * * /usr/local/bin/backup.sh &gt;&gt; /var/log/backup.log 2&gt;&amp;1</span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="十、实用技巧与安全建议"><a href="#十、实用技巧与安全建议" class="headerlink" title="十、实用技巧与安全建议"></a>十、实用技巧与安全建议</h2><ul><li>经常备份 &#x2F;etc、数据库与重要数据。</li><li>生产环境慎用 root，优先使用 sudo。</li><li>打开防火墙并仅放行必要端口（ufw&#x2F;iptables&#x2F;firewalld）。</li><li>使用密钥认证替代密码登录 SSH，禁用 root 远程登录。</li><li>定期更新系统与第三方软件，关注安全公告。</li></ul><hr><h2 id="参考与延伸阅读"><a href="#参考与延伸阅读" class="headerlink" title="参考与延伸阅读"></a>参考与延伸阅读</h2><ul><li>man command（例如 man ssh）</li><li>tldr pages（简明命令示例）</li><li>官方发行版文档（Ubuntu、CentOS、Debian）</li></ul><hr><p>本文为常用命令速查手册，覆盖面广但不详尽。建议根据实际发行版与应用场景查阅 man 页与官方文档以获取详细选项与用法。</p>]]>
    </content>
    <id>https://www.tenxiaodao.top/linux-ming-ling-da-quan/</id>
    <link href="https://www.tenxiaodao.top/linux-ming-ling-da-quan/"/>
    <published>2025-10-17T04:00:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="Linux-命令大全"><a href="#Linux-命令大全" class="headerlink" title="Linux 命令大全"></a>Linux 命令大全</h1><p>本文按场景分类，汇总常用的 Linux 命令与典型示例，适合作为日常运维与开]]>
    </summary>
    <title>Linux 命令大全</title>
    <updated>2026-05-01T12:11:31.362Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="前端开发" scheme="https://www.tenxiaodao.top/categories/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/"/>
    <category term="Hexo" scheme="https://www.tenxiaodao.top/tags/Hexo/"/>
    <category term="博客优化" scheme="https://www.tenxiaodao.top/tags/%E5%8D%9A%E5%AE%A2%E4%BC%98%E5%8C%96/"/>
    <category term="前端性能" scheme="https://www.tenxiaodao.top/tags/%E5%89%8D%E7%AB%AF%E6%80%A7%E8%83%BD/"/>
    <content>
      <![CDATA[<h1 id="Hexo-博客性能优化指南（精简版）"><a href="#Hexo-博客性能优化指南（精简版）" class="headerlink" title="Hexo 博客性能优化指南（精简版）"></a>Hexo 博客性能优化指南（精简版）</h1><p>随着内容增长，静态博客仍可能面临首页加载慢、首屏阻塞和流量浪费等问题。以下按策略列出可落地的优化点与示例，便于在 Hexo 主题中快速应用。</p><hr><h2 id="一、图片优化（优先级最高）"><a href="#一、图片优化（优先级最高）" class="headerlink" title="一、图片优化（优先级最高）"></a>一、图片优化（优先级最高）</h2><ol><li>压缩与格式</li></ol><ul><li>先使用工具压缩（TinyPNG、ImageOptim）。生产环境尽量输出 WebP&#x2F;AVIF，备份保留原图。</li></ul><ol start="2"><li>响应式与 srcset</li></ol><ul><li>用 picture + srcset 提供多分辨率图，减少移动端带宽：<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">picture</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">source</span> <span class="attr">media</span>=<span class="string">&quot;(max-width:600px)&quot;</span> <span class="attr">srcset</span>=<span class="string">&quot;image-480.webp&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">source</span> <span class="attr">media</span>=<span class="string">&quot;(max-width:1200px)&quot;</span> <span class="attr">srcset</span>=<span class="string">&quot;image-800.webp&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">img</span> <span class="attr">fetchpriority</span>=<span class="string">&quot;high&quot;</span> <span class="attr">src</span>=<span class="string">&quot;image-1200.webp&quot;</span> <span class="attr">alt</span>=<span class="string">&quot;封面&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">picture</span>&gt;</span></span><br></pre></td></tr></table></figure></li></ul><ol start="3"><li>懒加载</li></ol><ul><li>首页与列表使用懒加载库（lazysizes &#x2F; lozad），文章内首图除外。</li></ul><ol start="4"><li>CDN 与缓存</li></ol><ul><li>将图片上 CDN（七牛&#x2F;又拍&#x2F;OSS），设置长缓存与合适的 Cache-Control。</li></ul><hr><h2 id="二、CSS-JS-优化"><a href="#二、CSS-JS-优化" class="headerlink" title="二、CSS &#x2F; JS 优化"></a>二、CSS &#x2F; JS 优化</h2><ol><li>移除不必要依赖</li></ol><ul><li>把 jQuery + fancybox 替换为轻量 PhotoSwipe 或原生实现，减少包体积。</li></ul><ol start="2"><li>按需加载第三方功能</li></ol><ul><li>仅在需要的文章页加载 mermaid、katex 等：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;% if (theme.mermaid.enable &amp;&amp; page.mermaid) &#123; %&gt;</span><br><span class="line">  &lt;script src=&quot;&lt;%= vendorCdn(theme.vendor.js.mermaid)[0] %&gt;&quot; defer&gt;&lt;/script&gt;</span><br><span class="line">&lt;% &#125; %&gt;</span><br></pre></td></tr></table></figure></li></ul><ol start="3"><li>异步与延迟加载</li></ol><ul><li>全站脚本使用 defer；低优先级（评论、统计）用动态加载：<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span> <span class="attr">src</span>=<span class="string">&quot;/js/main.js&quot;</span> <span class="attr">defer</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">  <span class="comment">// 延迟加载评论示例</span></span></span><br><span class="line"><span class="language-javascript">  <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;load&#x27;</span>, <span class="function">() =&gt;</span> &#123;</span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">const</span> s = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;script&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">    s.<span class="property">src</span> = <span class="string">&#x27;/js/comments.js&#x27;</span>;</span></span><br><span class="line"><span class="language-javascript">    <span class="variable language_">document</span>.<span class="property">body</span>.<span class="title function_">appendChild</span>(s);</span></span><br><span class="line"><span class="language-javascript">  &#125;);</span></span><br><span class="line"><span class="language-javascript"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure></li></ul><ol start="4"><li>Critical CSS 与预加载</li></ol><ul><li>提取首屏关键样式，其他样式使用 rel&#x3D;”preload” + onload 方式加载：<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">&quot;preload&quot;</span> <span class="attr">href</span>=<span class="string">&quot;/css/app.css&quot;</span> <span class="attr">as</span>=<span class="string">&quot;style&quot;</span> <span class="attr">onload</span>=<span class="string">&quot;this.onload=null;this.rel=&#x27;stylesheet&#x27;&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">noscript</span>&gt;</span><span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">&quot;stylesheet&quot;</span> <span class="attr">href</span>=<span class="string">&quot;/css/app.css&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">noscript</span>&gt;</span></span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="三、字体与图标"><a href="#三、字体与图标" class="headerlink" title="三、字体与图标"></a>三、字体与图标</h2><ul><li>使用 iconfont 自定义子集或 SVG 图标，避免全量 FontAwesome。</li><li>预连接与预加载第三方字体：<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">&quot;preconnect&quot;</span> <span class="attr">href</span>=<span class="string">&quot;https://fonts.gstatic.com&quot;</span> <span class="attr">crossorigin</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">&quot;preload&quot;</span> <span class="attr">href</span>=<span class="string">&quot;https://fonts.gstatic.com/s/xxx.woff2&quot;</span> <span class="attr">as</span>=<span class="string">&quot;font&quot;</span> <span class="attr">type</span>=<span class="string">&quot;font/woff2&quot;</span> <span class="attr">crossorigin</span>&gt;</span></span><br></pre></td></tr></table></figure></li></ul><hr><h2 id="四、第三方与低优先资源"><a href="#四、第三方与低优先资源" class="headerlink" title="四、第三方与低优先资源"></a>四、第三方与低优先资源</h2><ul><li>评论、统计、搜索、社交脚本置为延迟加载或按需触发（用户交互后加载）。</li><li>使用 localStorage &#x2F; indexedDB 缓存少变更数据（如标签缓存）。</li></ul><hr><h2 id="五、构建与部署"><a href="#五、构建与部署" class="headerlink" title="五、构建与部署"></a>五、构建与部署</h2><ol><li>构建优化</li></ol><ul><li>在 Hexo build 阶段启用压缩、合并资源（gulp&#x2F;webpack&#x2F;rollup）。</li></ul><ol start="2"><li>传输优化</li></ol><ul><li>启用服务器 gzip &#x2F; brotli，设置静态文件长缓存并配合版本化（文件指纹）。</li></ul><ol start="3"><li>部署方式</li></ol><ul><li>推荐使用 HTTPS Git 部署或 CI&#x2F;CD（GitHub Actions + CDN 同步）避免 SSH 端口限制。</li></ul><hr><h2 id="六、测试与监控"><a href="#六、测试与监控" class="headerlink" title="六、测试与监控"></a>六、测试与监控</h2><ul><li>使用 Lighthouse、WebPageTest、Pingdom 测量首页与文章页性能。</li><li>关注 LCP、CLS、FID&#x2F;INP、TTFB 并以 LCP 与交互延迟为优化目标。</li></ul><hr><h2 id="小结（执行顺序建议）"><a href="#小结（执行顺序建议）" class="headerlink" title="小结（执行顺序建议）"></a>小结（执行顺序建议）</h2><ol><li>图片（WebP + srcset + CDN）  </li><li>移除&#x2F;替换大依赖（jQuery&#x2F;fancybox）  </li><li>懒加载与按需加载（mermaid、评论等）  </li><li>字体预加载与首屏 CSS 优化  </li><li>启用压缩、缓存与 CDN；使用 Lighthouse 验证</li></ol><p>本文为实践型要点集合，可根据主题结构在模板（layout&#x2F;partial）中逐项改造并通过 hexo cl &amp;&amp; hexo g 本地验证效果。</p>]]>
    </content>
    <id>https://www.tenxiaodao.top/hexo-bo-ke-xing-neng-you-hua-zhi-nan/</id>
    <link href="https://www.tenxiaodao.top/hexo-bo-ke-xing-neng-you-hua-zhi-nan/"/>
    <published>2025-05-10T05:46:58.000Z</published>
    <summary>
      <![CDATA[<h1 id="Hexo-博客性能优化指南（精简版）"><a href="#Hexo-博客性能优化指南（精简版）" class="headerlink" title="Hexo 博客性能优化指南（精简版）"></a>Hexo 博客性能优化指南（精简版）</h1><p>随着内容增长]]>
    </summary>
    <title>Hexo 博客性能优化指南</title>
    <updated>2026-05-01T12:11:31.376Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="生活日常" scheme="https://www.tenxiaodao.top/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%B8%B8/"/>
    <category term="AI" scheme="https://www.tenxiaodao.top/tags/AI/"/>
    <category term="ESP32" scheme="https://www.tenxiaodao.top/tags/ESP32/"/>
    <category term="语音助手" scheme="https://www.tenxiaodao.top/tags/%E8%AF%AD%E9%9F%B3%E5%8A%A9%E6%89%8B/"/>
    <content>
      <![CDATA[<h1 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h1><p>此博客为一篇针对初学者的详细教程，涵盖小智 AI 机器人的原理、硬件准备、软件环境搭建、代码实现、云端部署以及优化扩展。文章结合了现有的网络资源，取长补短，确保内容易于理解和操作。</p><h2 id="教程目标"><a href="#教程目标" class="headerlink" title="教程目标"></a>教程目标</h2><p>本教程将指导初学者使用 ESP32 微控制器开发一个简单的语音对话机器人“小智”。我们将介绍所需的基础原理、硬件准备、软件环境搭建，以及如何编写代码实现语音唤醒和与云端大模型的对接。</p><p>通过本教程，即使没有深厚的 AI 或嵌入式经验，也可以一步步制作出一个能听懂唤醒词并与人对话的简易 AI 机器人。本教程提供详细的操作步骤、代码示例和图示，帮助您轻松上手。</p><hr><h2 id="1-基础原理"><a href="#1-基础原理" class="headerlink" title="1. 基础原理"></a>1. 基础原理</h2><h3 id="ESP32-架构及其在-AI-领域的应用"><a href="#ESP32-架构及其在-AI-领域的应用" class="headerlink" title="ESP32 架构及其在 AI 领域的应用"></a>ESP32 架构及其在 AI 领域的应用</h3><p>ESP32 是一款集成 Wi-Fi 和蓝牙的双核微控制器，具有较高的主频和丰富的外设接口，适合物联网和嵌入式 AI 应用。特别是新版的 ESP32-S3 芯片，不仅运行频率高达 240MHz，还内置了向量加速指令（有时称为“AI 指令”）并支持高速 PSRAM，从而可以在一定程度上加速神经网络推理 (以乐鑫语音开发框架为例，系统了解嵌入式设备的语音唤醒和语音识别-RoboticsCV)。在 AI 领域，ESP32 常用于边缘设备，执行一些轻量级的本地 AI 任务（如语音关键词检测、简单的图像识别等），或充当连接云端 AI 服务的桥梁。由于资源有限，ESP32 无法独立运行大型深度学习模型，但它可以负责前端的数据采集和初步处理（如音频处理），然后将数据传输给云端或本地服务器上的强大 AI 模型进行复杂计算，再将结果返回设备。这样的架构充分利用了 ESP32 的实时控制能力和云端大模型的强大推理能力。</p><h3 id="语音唤醒模块（ESP-SR）的工作原理"><a href="#语音唤醒模块（ESP-SR）的工作原理" class="headerlink" title="语音唤醒模块（ESP-SR）的工作原理"></a>语音唤醒模块（ESP-SR）的工作原理</h3><p>乐鑫官方提供了 ESP-SR (Speech Recognition)语音识别框架，包含唤醒词引擎（WakeNet）、命令词识别（MultiNet）等组件 (以乐鑫语音开发框架为例，系统了解嵌入式设备的语音唤醒和语音识别-RoboticsCV)。其中唤醒词功能用于在设备待机时持续监听音频流，当检测到特定的唤醒词时触发设备进入对话&#x2F;识别状态。例如，我们可以将“小智小智”设定为唤醒词。当 ESP32 运行 WakeNet 模型时，它会不断从麦克风录制音频并计算梅尔频谱倒谱系数（MFCC）等特征，然后通过一个针对 ESP32-S3 优化的神经网络算法对特征进行分类 (esp-box&#x2F;docs&#x2F;technical_architecture_cn.md at master · espressif&#x2F;esp-box · GitHub)。一旦检测到训练好的关键词序列，WakeNet 就输出唤醒信号，唤醒设备进入语音交互状态 (esp-box&#x2F;docs&#x2F;technical_architecture_cn.md at master · espressif&#x2F;esp-box · GitHub)。这种本地唤醒机制即使在有环境噪声的情况下也能保持较高的准确率（官方数据显示在噪声环境下识别率不低于 80% (esp-box&#x2F;docs&#x2F;technical_architecture_cn.md at master · espressif&#x2F;esp-box · GitHub)）。ESP-SR 默认提供了一些开箱即用的唤醒词模型（如 “Hi, ESP” 或 “Hi, 乐鑫”)，开发者也可以定制自己的唤醒词模型 (esp-box&#x2F;docs&#x2F;technical_architecture_cn.md at master · espressif&#x2F;esp-box · GitHub)。工作流程是：麦克风采集到的模拟音频经前端处理（降噪、增益等），送入 WakeNet 模型进行关键词检测。如果未检测到唤醒词，设备保持低功耗待机；一旦检测到唤醒词，设备即进入后续的语音识别或对话流程。同时，为了节省运算资源，ESP32 在唤醒后通常会暂停 WakeNet，以便释放 CPU 处理后续音频；待对话完成后再重新启用 WakeNet 监听下一个唤醒词 (以乐鑫语音开发框架为例，系统了解嵌入式设备的语音唤醒和语音识别-RoboticsCV)。</p><h3 id="流式对话的概念及-WebSocket-UDP-传输机制"><a href="#流式对话的概念及-WebSocket-UDP-传输机制" class="headerlink" title="流式对话的概念及 WebSocket&#x2F;UDP 传输机制"></a>流式对话的概念及 WebSocket&#x2F;UDP 传输机制</h3><p>所谓流式对话，是指机器人在唤醒后能够实时地接收和发送数据，与用户进行连续的对话交流，而非一次性等待用户说完整句子再回复。要实现流式对话，ESP32 需要将用户的语音数据边录制边发送到云端的语音识别&#x2F;大模型服务，并且及时接收对方返回的回复数据。这通常涉及到稳定高效的网络传输机制。常用的方式有两种：</p><h4 id="WebSocket-通信"><a href="#WebSocket-通信" class="headerlink" title="WebSocket 通信"></a>WebSocket 通信</h4><p>WebSocket 是基于 TCP 的全双工长连接协议，非常适合实时数据交换。一旦建立连接，服务器和客户端（ESP32）都可以随时发送数据而不需要重复握手。在本项目中，可在 ESP32 启动时就建立一个通向服务器的 WebSocket长连接 (Building a fully local LLM voice assistant to control my smart home | Hacker News)。ESP32 检测到唤醒词后，立即通过该 WebSocket 流式发送音频数据到服务器 (Building a fully local LLM voice assistant to control my smart home | Hacker News)。服务器一边接收音频流一边进行语音识别，并将部分结果或最终结果通过同一连接发回给 ESP32。得益于 WebSocket 保持的长连接，数据可以持续、快速地往返，实现即时的对话体验。例如，有开发者采用 ESP32 + Node.js 服务器架构，通过 WebSocket传输音频，实现实时的语音助手 (I created a Realtime Voice Assistant for my ESP-32, here is my journey - Part 2 : Node, OpenAI, Langchain - DEV Community)。</p><h4 id="UDP-传输"><a href="#UDP-传输" class="headerlink" title="UDP 传输"></a>UDP 传输</h4><p>UDP 是基于数据报的传输协议，开销小、延迟低，但不保证可靠送达。在一些对实时性要求极高且可以容忍少量数据丢失的场景，可以考虑使用 UDP 将音频帧连续地发送到服务器。不过 UDP 没有内建重发、排序机制，需要应用层自行处理丢包重传或顺序问题。因此，对于初学者项目来说，UDP 方案实现难度略高，而且在局域网环境下 WebSocket 已经可以提供足够低的延迟和可靠性。所以通常推荐使用 WebSocket 实现流式语音对话，在开发和调试阶段简便可靠 (PipeCat - 打造实时语音 AI 应用的开源架构方案 - 53AI-AI生产力的卓越领导者（大模型知识库|大模型训练|智能体开发）)。待项目成熟后，再根据需要考虑是否切换更底层的传输方案（如 WebRTC 等高级方案 (PipeCat - 打造实时语音 AI 应用的开源架构方案 - 53AI-AI生产力的卓越领导者（大模型知识库|大模型训练|智能体开发）)）。</p><p>总结来说，本项目将利用 ESP32-S3 的本地语音唤醒能力，让设备在检测到“小智”唤醒词后，开始录音并流式发送音频到云端，通过 WebSocket 与服务器上的大语言模型保持对话数据的实时交互。当云端返回文本应答后，ESP32 可将其显示在屏幕上（或语音播报），从而完成一次人机对话循环。</p><hr><h2 id="2-硬件准备"><a href="#2-硬件准备" class="headerlink" title="2. 硬件准备"></a>2. 硬件准备</h2><p>要制作一个语音对话机器人，我们需要准备以下硬件组件，并确保它们兼容且正确连接：</p><h3 id="ESP32-S3-开发板（带有-PSRAM）"><a href="#ESP32-S3-开发板（带有-PSRAM）" class="headerlink" title="ESP32-S3 开发板（带有 PSRAM）"></a>ESP32-S3 开发板（带有 PSRAM）</h3><p>核心控制器，大脑所在。建议选择 ESP32-S3 系列开发板，因其具备AI加速指令集和高速PSRAM，可支持语音唤醒等 AI 功能 (以乐鑫语音开发框架为例，系统了解嵌入式设备的语音唤醒和语音识别-RoboticsCV)。常见选项包括官方的 ESP32-S3-DevKitC-1（WROVER模块带8MB PSRAM）、或多合一的语音开发板如 ESP32-S3-Korvo 系列和 ESP32-S3-BOX 等 (以乐鑫语音开发框架为例，系统了解嵌入式设备的语音唤醒和语音识别-RoboticsCV)。这些板子自带麦克风阵列、音频编解码等硬件，方便语音应用开发。</p><h3 id="麦克风"><a href="#麦克风" class="headerlink" title="麦克风"></a>麦克风</h3><p>用于采集用户语音。强烈推荐使用 I2S 接口的数字麦克风（MEMS麦克风），例如 INMP441 模块。数字麦克风可以直接将音频数据以数字信号传给 ESP32，抗干扰能力强，音质更好 (Building a fully local LLM voice assistant to control my smart home | Hacker News)。避免使用模拟麦克风加ADC的方法，因为ESP32自带的ADC精度有限且噪声较大，模拟方案音质往往不佳 (Building a fully local LLM voice assistant to control my smart home | Hacker News)。常用的 I2S 麦克风模块有 INMP441、ICS-43434 等，它们需要连接 ESP32 的 I2S接口引脚（WS, SCK, SD 等）以及电源。</p><h3 id="扬声器和音频放大器（可选）"><a href="#扬声器和音频放大器（可选）" class="headerlink" title="扬声器和音频放大器（可选）"></a>扬声器和音频放大器（可选）</h3><p>用于语音播报机器人回复。如果希望机器人能“说话”，需要一个小型扬声器（如 4Ω 3W）的输出方案。ESP32 可以通过内置 DAC 输出模拟音频，但驱动扬声器需要功率放大器。常用方案是使用 I2S 数字功放模块（如 MAX98357A）将 ESP32 的I2S音频输出转换为扬声器驱动信号。该模块接收ESP32的I2S数据和时钟，输出功率音频信号，直接驱动小喇叭。如果暂时不需要语音输出，也可以先不接扬声器，后续通过串口日志或屏幕查看机器人回复的文本。</p><h3 id="显示屏（OLED-LCD，可选）"><a href="#显示屏（OLED-LCD，可选）" class="headerlink" title="显示屏（OLED&#x2F;LCD，可选）"></a>显示屏（OLED&#x2F;LCD，可选）</h3><p>用于显示对话内容或机器人表情。一个小型显示屏可以显著增强人机交互体验。初学者可以选用I2C接口的单色 OLED（如0.96寸 128×64 OLED）或 SPI 接口的彩色 LCD（如1.3寸 240×240 TFT）。这些屏幕可以用来显示用户说的内容和机器人生成的回复文字，或显示一些图标、头像来提示当前状态（正在听&#x2F;在想&#x2F;在说等）。显示屏通过 I2C 或 SPI 接口连接到 ESP32 的对应引脚，并需要供电。后续可以使用图形库（如 LVGL）或驱动库来控制显示内容。</p><h3 id="其他配件"><a href="#其他配件" class="headerlink" title="其他配件"></a>其他配件</h3><p>若使用独立的开发板和模块，还需要若干 面包板和连接线 方便搭建原型、电源线和 USB 数据线等。如果选用的是类似 ESP32-S3-BOX 这类集成度高的设备，许多组件（屏幕、麦克风、扬声器）已经内置，无需额外连接。 (以乐鑫语音开发框架为例，系统了解嵌入式设备的语音唤醒和语音识别-RoboticsCV)</p><p>图：ESP32-S3-Korvo-2 音频开发板（乐鑫官方语音开发套件）示例，板载双麦克风、音频编解码芯片、扬声器接口和LCD接口等，方便构建语音交互设备 (以乐鑫语音开发框架为例，系统了解嵌入式设备的语音唤醒和语音识别-RoboticsCV)。</p><p>(image)</p><p>图：使用 ESP32 开发板+麦克风+扬声器搭建语音助手原型的实际连接示例。ESP32 开发板（右下）通过面包板连接麦克风（中间小圆件）和扬声器（左上黑色喇叭），用于采集和播放语音。</p><h3 id="选购建议"><a href="#选购建议" class="headerlink" title="选购建议"></a>选购建议</h3><p>如果希望尽量减少硬件连接的麻烦，可以选择类似 ESP32-S3-BOX 或 ESP32-S3-Korvo 这样的开发套件，它们集成了语音所需的大部分硬件，开箱即可使用唤醒词和语音功能 (esp-box&#x2F;docs&#x2F;technical_architecture_cn.md at master · espressif&#x2F;esp-box · GitHub)。例如，ESP32-S3-BOX 自带触摸屏、双麦克风和扬声器，只需刷入程序即可成为一个简单语音助手。不过这类套件价格相对较高。对于学习和制作原型来说，使用普通的 ESP32-S3 开发板加上外接麦克风和屏幕也是常用方案，性价比更高。在购买麦克风模块时，要确认其引脚定义与ESP32兼容（一般接 3.3V、GND、WS、SCK、SD），并注意麦克风的指向性、灵敏度等参数，以满足您的应用（如近场对话一般使用全指向麦克风，远场则考虑阵列降噪技术）。扬声器方面，小功率扬声器即可满足语音提示功能；若追求更大音量，可考虑使用有源音箱或更高功率的放大器，但要注意供电能力。显示屏选型取决于需求和预算，初期可以使用廉价的0.96寸OLED显示文字，后期可升级为彩屏显示头像或图形界面。</p><p>总之，在硬件搭建阶段，请按照各模块的规格说明正确连接电路，并确保供电稳定（ESP32 开发板通常通过 USB 供电，确保电脑USB口或电源适配器有足够的电流供应）。完成硬件连接后，我们就可以着手软件环境的搭建与代码编写了。</p><hr><h2 id="3-软件环境搭建"><a href="#3-软件环境搭建" class="headerlink" title="3. 软件环境搭建"></a>3. 软件环境搭建</h2><p>在开始编程之前，需要搭建好 ESP32 的开发环境，以及准备云端大模型所需的工具库。</p><h3 id="安装-ESP-IDF-开发框架"><a href="#安装-ESP-IDF-开发框架" class="headerlink" title="安装 ESP-IDF 开发框架"></a>安装 ESP-IDF 开发框架</h3><p>ESP-IDF（Espressif IoT Development Framework）是乐鑫官方的底层开发框架。我们将使用 ESP-IDF 来编写 C&#x2F;C++ 代码控制 ESP32。请根据您的操作系统安装相应版本的 ESP-IDF。建议使用最新版（如 v5.x），以便支持 ESP32-S3 和 ESP-SR 库。安装方法如下：</p><ul><li>Windows 用户： 可以使用乐鑫提供的安装包，其中集成了 IDF、编译工具链和 Python 环境等。一键安装后，运行 ESP-IDF 提供的命令行快捷方式进入开发环境。</li><li>Linux&#x2F;Mac 用户： 可通过 git 克隆 ESP-IDF 仓库，然后运行 install.sh 脚本安装所需工具链和Python包。安装完成后，运行 export.sh 脚本配置环境变量。</li></ul><p>详细步骤可参考乐鑫官方文档，但总的来说，安装完成后在命令行执行 idf.py –version 能看到版本信息即表示环境就绪。接下来创建一个 ESP-IDF 项目或者使用官方示例作为起点。</p><h3 id="配置-VSCode-Cursor-开发环境"><a href="#配置-VSCode-Cursor-开发环境" class="headerlink" title="配置 VSCode&#x2F;Cursor 开发环境"></a>配置 VSCode&#x2F;Cursor 开发环境</h3><p>为了提高开发效率，我们推荐使用 VSCode 作为主要的代码编辑器，并安装乐鑫官方的 ESP-IDF VSCode 插件。该插件可以方便地菜单配置项目信息、一键编译烧录、监视串口输出等。您可以在 VSCode 的扩展商店搜索“Espressif IDF”并安装，然后按照插件指引配置 ESP-IDF 安装路径和 Python 环境。</p><p>除此之外，您也可以尝试使用最近流行的 Cursor 代码编辑器。Cursor 本质上是 VSCode 的一个改进版本，内置了 GPT-4、Claude 2 等大型语言模型作为编程助手 (用Cursor 写出第一个程序- 架构师汤师爷 - 博客园)。使用 Cursor，您可以在编写代码时得到 AI 对代码的提示、自动补全和错误检查等智能帮助 (用Cursor 写出第一个程序- 架构师汤师爷 - 博客园)。这对初学者调试语音项目这样的复杂工程非常有益。例如，当您不知道某个 ESP-IDF 函数如何使用时，可以直接在 Cursor 中询问 AI 获取帮助。当然，使用 Cursor 并非必需，如果您习惯纯 VSCode 或其他编辑器也完全可以。</p><h3 id="安装所需库和工具"><a href="#安装所需库和工具" class="headerlink" title="安装所需库和工具"></a>安装所需库和工具</h3><p>本项目除了 ESP-IDF 自带的组件外，还可能需要用到一些专门的软件库，特别是在云端服务器部分，以实现语音识别和大语言模型对话功能。在开发电脑或服务器上，建议准备好以下工具：</p><ul><li>SenseVoice 语音识别模型及 API： 这是阿里巴巴达摩院开源的一个多语言语音理解模型，支持语音转文本(ASR)、语言识别、情感识别等功能 (GitHub - HG-ha&#x2F;SenseVoice-Api: 阿里SenseVoice的fastpi封装，采用onnx发布，体积更小，附带量化模型，支持GPU。支持从URL文件进行语音识别。)。相较于其他开源方案，SenseVoice 在中文等多语言识别上精度很高，据称训练了超40万小时语音数据，效果优于 OpenAI 的 Whisper 模型 (GitHub - HG-ha&#x2F;SenseVoice-Api: 阿里SenseVoice的fastpi封装，采用onnx发布，体积更小，附带量化模型，支持GPU。支持从URL文件进行语音识别。)。我们可以使用开源社区提供的 SenseVoice 推理代码或封装好的 API 服务。例如，GitHub 上的项目 SenseVoice-API 提供了基于 ONNXRuntime 的轻量级封装和 FastAPI 接口，方便我们将 SenseVoice 部署成一个本地服务 (GitHub - HG-ha&#x2F;SenseVoice-Api: 阿里SenseVoice的fastpi封装，采用onnx发布，体积更小，附带量化模型，支持GPU。支持从URL文件进行语音识别。)。请按照该项目说明安装所需依赖（如 Python 及 onnxruntime）并下载模型文件，然后启动服务用于将音频流转成文本。</li><li>DeepSeek &#x2F; Qwen 大语言模型： 为了让机器人更智能地对答，我们需要接入一个强大的大语言模型(LLM)。DeepSeek 是国内开源的一个系列大模型，基于强化学习技术训练，性能媲美一些商业模型 (deepseek-ai&#x2F;DeepSeek-R1-Distill-Qwen-7B · Hugging Face)。他们提供了多种版本，包括体积较小的蒸馏模型（如基于 Qwen-7B 的 DeepSeek-R1 Distill）以及更大的 Qwen-32B&#x2F;72B 模型 (deepseek-ai&#x2F;DeepSeek-R1-Distill-Qwen-7B · Hugging Face)。其中 Qwen (通义千问) 是阿里巴巴开源的大模型系列，7B 和 14B 版本已开源，而 72B 参数的模型则在阿里云上提供服务。您可以根据自身算力选择使用哪种模型：如果本地有高性能GPU，可以尝试部署7B左右参数的模型运行；如果没有，则可以考虑通过在线API调用这些模型的推理服务。阿里云提供了 DashScope API 接口来调用通义千问模型，只需注册获取 API Key 即可使用 (GitHub - zengjunc&#x2F;VocaMirror: 语镜VocaMirror——基于sensevoice、cosyvoice和qwen模型实现与“自身声音”对话)。无论本地部署还是云端API，请先安装好相应的Python库：如 Hugging Face Transformers（用于加载DeepSeek&#x2F;Qwen模型）或者官方提供的 SDK（如 DashScope SDK）。</li><li>其他工具： 音频处理库（如 pyaudio 或 soundfile）可能用于服务器录音或读取文件；用于 WebSocket 通信的库（如 websockets for Python 或 Node.js 的 socket 库）如果您计划实现实时流式传输；以及 HTTP 客户端工具（如 requests）用于调用RESTful API 等。如果打算使用 Node.js 作为服务器，也需要准备好 Node.js 环境以及相关依赖（如用于 WebSocket 的ws库，用于调用AI服务的SDK等）。</li></ul><p>配置好以上软件环境后，整个开发流程将会是：使用 VSCode&#x2F;ESP-IDF 在本地编写并烧录 ESP32 端代码，同时使用 Python&#x2F;Node 等在电脑上编写服务器端代码并运行 AI 模型服务。接下来，我们就进入代码实现部分，看看如何让各部分协同工作。</p><hr><h2 id="4-代码实现"><a href="#4-代码实现" class="headerlink" title="4. 代码实现"></a>4. 代码实现</h2><p>在这一部分，我们将编写 ESP32 端的主要代码，实现以下功能：唤醒词检测、音频采集并上传、接收并处理云端返回的文本。代码将基于 ESP-IDF 编写，语言为 C&#x2F;C++。由于完整代码较长，这里拆分讲解关键步骤，并提供简化的代码示例。</p><h3 id="4-1-初始化语音唤醒功能"><a href="#4-1-初始化语音唤醒功能" class="headerlink" title="4.1 初始化语音唤醒功能"></a>4.1 初始化语音唤醒功能</h3><p>首先，我们需要初始化 ESP-SR 提供的唤醒词引擎，使能麦克风采集和关键词检测。假设我们使用 ESP32-S3 和官方 ESP-SR 库，初始化主要包括：配置 AFE（声学前端）参数、启用 WakeNet 模型、设置唤醒回调等。伪代码示例如下：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;esp_sr_iface.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;esp_sr_models.h&quot;</span></span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 1. 配置声学前端 (AFE) 参数</span></span><br><span class="line"><span class="type">afe_config_t</span> afe_config = AFE_CONFIG_DEFAULT(); <span class="comment">// 默认配置</span></span><br><span class="line">afe_config.wakenet_init = <span class="literal">true</span>; <span class="comment">// 启用唤醒词检测</span></span><br><span class="line">afe_config.voice_communication_init = <span class="literal">false</span>; <span class="comment">// 不启用通话模式，以免与唤醒冲突</span></span><br><span class="line">afe_config.wakenet_model_name = <span class="string">&quot;wn9_xiaozhi&quot;</span>; <span class="comment">// 指定唤醒词模型名称(假设我们有&quot;小智&quot;模型)</span></span><br><span class="line">afe_config.wakenet_mode = DET_MODE_1CH; <span class="comment">// 麦克风通道: 单通道模式</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 2. 初始化AFE，并加载唤醒词模型</span></span><br><span class="line"><span class="type">sr_handle_t</span> sr_handle = sr_handle_init(&amp;afe_config);</span><br><span class="line"><span class="keyword">if</span> (!sr_handle) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;ESP-SR 初始化失败\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">esp_err_t</span> ret = sr_wakenet_init(sr_handle);</span><br><span class="line"><span class="keyword">if</span> (ret == ESP_OK) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;唤醒词引擎加载成功\n&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 3. 注册唤醒回调，当检测到唤醒词时执行</span></span><br><span class="line">sr_set_wakenet_cb(sr_handle, on_wakeup_detected);</span><br></pre></td></tr></table></figure><p>上面代码说明：</p><ul><li>使用 AFE_CONFIG_DEFAULT() 宏获取默认的音频前端配置结构，然后根据需要调整参数。我们启用了 wakenet_init 来打开唤醒词检测，而将 voice_communication_init 置为 false，因为这两者不能同时为 true（通话模式用于双工通话情景，不在本项目范围）。wakenet_model_name 指定要加载的唤醒词模型的名字（例如这里假设我们有名为 “xiaozhi” 的模型，实际上需要先把模型文件烧录进 SPIFFS 或 Flash）。wakenet_mode 设为单通道检测，如果有双麦克风可以用相应的双通道模式以提升远场性能。</li><li>使用 sr_handle_init 初始化语音识别句柄，然后调用 sr_wakenet_init 加载唤醒词模型。如果返回 ESP_OK 则表示模型加载成功，可以开始检测。</li><li>通过 sr_set_wakenet_cb 注册一个回调函数 on_wakeup_detected，当 WakeNet 在音频流中检测到目标关键词时，这个回调就会被调用。在回调函数中我们可以进行接下来的处理（例如开始录音等）。</li></ul><p>需要注意提前将所需的唤醒词模型文件添加到工程中（通常 ESP-SR 提供了一些预训练模型，可以在菜单配置中选中，如 “Hi 乐鑫” 等；如果要自定义唤醒词，则需要使用乐鑫提供的工具训练模型，然后集成）。</p><h3 id="4-2-处理语音输入并上传至大模型"><a href="#4-2-处理语音输入并上传至大模型" class="headerlink" title="4.2 处理语音输入并上传至大模型"></a>4.2 处理语音输入并上传至大模型</h3><p>当唤醒词被检测到时，ESP32 应该切换到对用户语音指令的录制和传输流程。典型做法是在回调中通知主程序开始录音。可以创建一个 音频采集任务，持续从 I2S 麦克风读取音频数据，直到检测到一段静音（表示用户说话结束）或达到最大录音时长，然后通过网络将音频发送出去。</p><h4 id="音频采集"><a href="#音频采集" class="headerlink" title="音频采集"></a>音频采集</h4><p>ESP32 IDF 提供 I2S 驱动来读取麦克风数据。麦克风模块通常以固定采样率输出，比如 16kHz 16位音频。我们可以设置 I2S DMA，每次读取一定帧数的数据到内存缓冲区。为了简单，我们假设每次读取 BUFFER_SIZE 大小的数据块，并将其暂存。如果需要判断何时用户说话结束，可以实现一个简单的静音检测（VAD）：连续几百毫秒检测音量，如果音量低于阈值则认为用户讲话结束。</p><h4 id="数据上传"><a href="#数据上传" class="headerlink" title="数据上传"></a>数据上传</h4><p>这里提供两种策略：</p><ul><li>流式上传（推荐）： 边录音边通过网络发送数据段。利用前文建立的 WebSocket 连接，将每个缓冲区的数据通过 esp_websocket_client_send_bin() 发给服务器。这样服务器可同步识别，不需等全部录完。这种方法实现对话响应更快。</li><li>后端上传（简单）： 先本地录完整句话，存成PCM或WAV格式，然后通过一次 HTTP POST 请求将音频文件发送给服务器，等待服务器返回结果。在初期调试时此方法更直观，但交互上会有一点延迟。</li></ul><p>我们以流式方式为例，展示录音与发送的伪代码：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 假设已经建立好 WebSocket 连接，句柄为 ws_client</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> SAMPLE_RATE 16000</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> BYTES_PER_SAMPLE 2 <span class="comment">// 16-bit audio</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> BUFFER_SIZE 512 <span class="comment">// 每次读取512字节（256个采样）</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">bool</span> recording = <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">on_wakeup_detected</span><span class="params">()</span> &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;唤醒词检测到！开始录音...\n&quot;</span>);</span><br><span class="line">    recording = <span class="literal">true</span>;</span><br><span class="line">    <span class="comment">// 可选：暂停WakeNet以节省CPU</span></span><br><span class="line">    disable_wakenet(sr_handle);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">audio_record_task</span><span class="params">(<span class="type">void</span> *arg)</span> &#123;</span><br><span class="line">    <span class="type">char</span> mic_buffer[BUFFER_SIZE];</span><br><span class="line">    <span class="type">size_t</span> bytes_read = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> silence_count = <span class="number">0</span>;</span><br><span class="line">    <span class="type">const</span> <span class="type">int</span> silence_threshold = <span class="number">5</span>; <span class="comment">// 连续静音块计数阈值</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// 连续循环读取麦克风数据</span></span><br><span class="line">    <span class="keyword">while</span> (<span class="literal">true</span>) &#123;</span><br><span class="line">        <span class="comment">// 阻塞读取一块音频数据</span></span><br><span class="line">        i2s_read(I2S_NUM_0, mic_buffer, BUFFER_SIZE, &amp;bytes_read, portMAX_DELAY);</span><br><span class="line">        <span class="keyword">if</span> (!recording) &#123;</span><br><span class="line">            <span class="keyword">continue</span>; <span class="comment">// 未触发录音就丢弃数据</span></span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 将读取的数据通过 WebSocket 发出</span></span><br><span class="line">        <span class="keyword">if</span> (bytes_read &gt; <span class="number">0</span>) &#123;</span><br><span class="line">            esp_websocket_client_send_bin(ws_client, mic_buffer, bytes_read, portMAX_DELAY);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 简单静音检测：如果本次数据全是低幅值(接近静默)</span></span><br><span class="line">        <span class="type">bool</span> is_silence = check_silence(mic_buffer, bytes_read);</span><br><span class="line">        <span class="keyword">if</span> (is_silence) &#123;</span><br><span class="line">            silence_count++;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            silence_count = <span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 如果连续多帧静默，认为讲话结束</span></span><br><span class="line">        <span class="keyword">if</span> (silence_count &gt; silence_threshold) &#123;</span><br><span class="line">            <span class="comment">// 发送特殊标志表示音频结束</span></span><br><span class="line">            esp_websocket_client_send_text(ws_client, <span class="string">&quot;&lt;end&gt;&quot;</span>, <span class="number">5</span>, portMAX_DELAY);</span><br><span class="line">            recording = <span class="literal">false</span>;</span><br><span class="line">            enable_wakenet(sr_handle); <span class="comment">// 重新启用唤醒监听</span></span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;录音结束，等待回复...\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>上述代码中，audio_record_task 会一直运行：平时 recording 标志为 false 时读入的数据直接丢弃（或可缓冲覆盖）；当唤醒发生时回调将 recording 置为 true，于是任务开始真正处理音频数据。</p><p>通过 i2s_read 从 I2S采集 BUFFER_SIZE 字节音频，每采集到一块，就用 esp_websocket_client_send_bin 发送二进制数据帧给服务器。这里假定已在别处初始化了 WebSocket 客户端 ws_client 并连接到服务器地址（例如 ws:&#x2F;&#x2F;&lt;服务器ip&gt;:&lt;端口&gt;）。ESP-IDF 的 WebSocket 客户端是线程安全的，可直接从任务中调用发送函数。</p><p>check_silence 是用户定义的函数，用于检查缓冲中是否绝大部分样本都接近零（可设定一个幅值阈值）。如果连续检测到若干帧静音，我们就认为用户停止了讲话。这时通过发送一条特殊的文本帧 “” 通知服务器音频流结束，然后把 recording 置回 false，表示本轮录音完成。还调用 enable_wakenet 恢复唤醒词检测，让设备准备接受下一次唤醒。</p><p>注意： 上述实现相对简单，实际应用中可能需要更健壮的 VAD 算法来准确判断讲话结束。另外，为了防止用户长时间讲话导致数据过多，可以设置最大录制时长，到点后强制结束。本示例省略了错误处理和资源管理（例如在结束录音后可能需要关闭I2S或重置缓冲等）。</p><h3 id="4-3-与云端模型的交互并返回文本"><a href="#4-3-与云端模型的交互并返回文本" class="headerlink" title="4.3 与云端模型的交互并返回文本"></a>4.3 与云端模型的交互并返回文本</h3><p>当 ESP32 将语音数据发送到服务器后，接下来就轮到服务器端进行处理：把音频转成文本，交给大模型生成回复，再将回复发送回来。因此 ESP32 需要能接收服务器的响应数据。在流式方案中，服务器可能通过 WebSocket 发回文本回复；在简单HTTP方案中，则是 ESP32 主动请求获取结果。我们这里以 WebSocket 双工通信为例说明。</p><p>ESP-IDF 的 WebSocket 客户端支持接收服务器推送的消息。可以注册回调或在循环中使用 esp_websocket_client_receive 来获取数据。在本例中，我们假定服务器最终发送回来的内容是纯文本的对话回复（或者为了简便，也可以让服务器直接返回语音合成后的 MP3 URL 等，但初期我们用文本即可）。ESP32 收到文本后，需要在本地加以处理，如在串口打印或者显示在屏幕上，或者通过TTS播放出来。</p><p>以下是接收回复并处理的示例代码：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 简单起见，在主任务里轮询接收服务器消息</span></span><br><span class="line"><span class="type">char</span> recv_buf[<span class="number">256</span>];</span><br><span class="line"><span class="keyword">for</span> (;;) &#123;</span><br><span class="line">    <span class="type">int32_t</span> rlen = esp_websocket_client_receive(ws_client, recv_buf, <span class="keyword">sizeof</span>(recv_buf) - <span class="number">1</span>, portMAX_DELAY);</span><br><span class="line">    <span class="keyword">if</span> (rlen &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        recv_buf[rlen] = <span class="number">0</span>; <span class="comment">// 以NULL结尾形成字符串</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">strcmp</span>(recv_buf, <span class="string">&quot;&lt;ack&gt;&quot;</span>) == <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="comment">// 服务器确认收到音频的应答，可忽略或用于统计</span></span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;云端回复: %s\n&quot;</span>, recv_buf);</span><br><span class="line">        <span class="comment">// 将回复显示到OLED屏幕（伪函数）</span></span><br><span class="line">        display_text_on_screen(recv_buf);</span><br><span class="line">        <span class="comment">// 可选：调用本地TTS播放语音（此处省略）</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这个循环会一直等待 WebSocket 的消息。esp_websocket_client_receive 阻塞等待服务器发送的数据。收到后，我们检查内容：如果是预定义的控制消息（例如这里假设服务器可能发 “” 表示收到结束标志），那么不做处理；否则将其作为正常回复文本处理。通过串口打印出回复，并调用一个假定的 display_text_on_screen 函数在OLED上显示该文字。实际实现中，您需要用相应的屏幕驱动 API 将文字绘制出来（如使用 SSD1306 驱动或 LVGL 库）。</p><p>如果您希望机器人语音回答，可以在ESP32上集成一个简单的本地TTS（ESP-SR 框架本身带有简易的中文语音合成功能）或让服务器直接返回合成后的语音（例如 MP3 文件 URL 或音频流）。初始阶段为了专注核心，我们先不处理TTS。</p><p>至此，ESP32 端的主要代码逻辑已经完整：等待唤醒→录音上传→接收回复→输出结果→循环等待下一次唤醒。接下来，我们看看云端服务器该如何部署大模型来配合工作。</p><hr><h2 id="5-云端部署"><a href="#5-云端部署" class="headerlink" title="5. 云端部署"></a>5. 云端部署</h2><p>云端（或本地PC服务器）在整个系统中承担了重型AI计算的任务，包括语音识别和对话生成。根据硬件条件和需求，您可以选择自建服务器或使用云服务。本节将介绍如何连接大语言模型，以及如何搭建服务器端程序来实现智能对话。</p><h3 id="连接大语言模型-DeepSeek-Qwen-等"><a href="#连接大语言模型-DeepSeek-Qwen-等" class="headerlink" title="连接大语言模型 (DeepSeek&#x2F;Qwen 等)"></a>连接大语言模型 (DeepSeek&#x2F;Qwen 等)</h3><p>大语言模型的选择取决于您的资源。对于中文对话，比较好的开源选择有阿里巴巴的通义千问系列(Qwen)和衍生的DeepSeek模型。如果有足够算力，您可以在服务器上直接运行开源模型实例。例如，使用 Hugging Face Transformers 加载 DeepSeek-R1 Distill (基于 Qwen-7B) 模型，然后在本地执行推理。伪代码如下：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> transformers <span class="keyword">import</span> AutoModelForCausalLM, AutoTokenizer</span><br><span class="line"></span><br><span class="line">tokenizer = AutoTokenizer.from_pretrained(<span class="string">&quot;deepseek-ai/DeepSeek-R1-Distill-Qwen-7B&quot;</span>)</span><br><span class="line">model = AutoModelForCausalLM.from_pretrained(<span class="string">&quot;deepseek-ai/DeepSeek-R1-Distill-Qwen-7B&quot;</span>, device_map=<span class="string">&quot;auto&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 假设已经得到用户输入文本 user_text</span></span><br><span class="line">input_ids = tokenizer.encode(user_text, return_tensors=<span class="string">&quot;pt&quot;</span>)</span><br><span class="line">output_ids = model.generate(input_ids, max_length=<span class="number">200</span>)</span><br><span class="line">response_text = tokenizer.decode(output_ids[<span class="number">0</span>], skip_special_tokens=<span class="literal">True</span>)</span><br></pre></td></tr></table></figure><p>上述代码会生成 response_text 作为回复。但需要注意，这对7B模型至少需要十几GB显存或使用CPU耗时较长，因此如果硬件有限，不妨考虑调用在线API服务。</p><p>另一种便利的方法是使用模型提供方的云API：例如阿里云的通义千问提供了 DashScope API，可以直接通过 HTTP 请求获得回复，无需本地运行模型。您只需在阿里云申请 API Key，然后按照文档构造请求（通常是一个包含会话历史的 JSON）。以下是使用 DashScope SDK 的伪代码：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> dashscope <span class="keyword">import</span> Completion</span><br><span class="line"></span><br><span class="line">Completion.api_key = <span class="string">&quot;&lt;你的通义api key&gt;&quot;</span></span><br><span class="line">response = Completion.create(prompt=user_text, model=<span class="string">&quot;qwen-plus&quot;</span>)</span><br><span class="line">answer_text = response.completions[<span class="number">0</span>].text</span><br></pre></td></tr></table></figure><p>利用在线大模型服务的优势是省去了部署模型的麻烦，而且一般响应速度快、效果好。不过要考虑到接口的使用费用或调用频率限制。</p><p>无论采用哪种方式获取对话回复，都应该注意实现上下文管理：即让模型记住之前的对话历史，从而实现连贯的多轮对话。这可以通过每次调用API时在 prompt 中附带前文对话，或使用模型的对话模式接口来实现。在DeepSeek&#x2F;通义这样的模型中，一般支持多轮对话，只需将历史问答拼接即可（或在 API 参数中传递 conversation_id 等）。</p><h3 id="调用语音识别-API"><a href="#调用语音识别-API" class="headerlink" title="调用语音识别 API"></a>调用语音识别 API</h3><p>在让大模型理解用户意图之前，我们需要将音频转成文字。这里我们使用之前准备好的 SenseVoice 模型服务。假设您已在服务器上运行了 SenseVoice 的 API（例如本地 FastAPI 服务，端点URL为 &#x2F;asr），ESP32 发送的音频通过 WebSocket 或 HTTP 转发给该服务进行识别。</p><p>如果采用我们上节的WebSocket方案，服务器可以在收到 ESP32 的音频帧后，将其拼接或直接送入语音识别引擎进行流式识别。阿里的 SenseVoice 支持长语音转写和多语言，可以逐步输出转写结果。简化流程如下：</p><ol><li>服务器收到音频数据帧，缓存至音频缓冲区。如果检测到结束标志””，则将缓冲区音频送入 ASR 引擎。</li><li>获取到完整的转写文本 user_text。</li><li>调用大模型生成 answer_text。</li><li>通过 WebSocket 将 answer_text 发回 ESP32。</li></ol><p>在实现中，可将步骤1-4集成在服务器的一个事件循环或多线程处理里。您也可以选择不等音频结束就边识别边生成，但那会复杂许多（需要分段、多段上下文管理，这里不深入）。</p><h3 id="服务器端搭建-AI-服务"><a href="#服务器端搭建-AI-服务" class="headerlink" title="服务器端搭建 AI 服务"></a>服务器端搭建 AI 服务</h3><p>您可以用任意擅长的语言编写服务器。例如，用 Python 的 websockets 库搭建 WebSocket 服务，收到二进制音频后调用 Python 接口处理。这需要加载 SenseVoice 模型和大模型，可能耗时，建议在服务器启动时就加载好模型到内存，避免每次请求重复初始化。以下是服务器伪代码框架（Python）：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> asyncio, websockets</span><br><span class="line"><span class="keyword">from</span> sensevoice <span class="keyword">import</span> ASRModel <span class="comment"># 假设封装好的识别类</span></span><br><span class="line"><span class="keyword">from</span> your_llm_api <span class="keyword">import</span> LLMAPI <span class="comment"># 假设封装的大模型调用</span></span><br><span class="line"></span><br><span class="line">asr_model = ASRModel.load(<span class="string">&quot;SenseVoiceSmall&quot;</span>) <span class="comment"># 加载识别模型</span></span><br><span class="line">llm_api = LLMAPI(api_key=<span class="string">&quot;...&quot;</span>) <span class="comment"># 初始化大模型API</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">handle_client</span>(<span class="params">websocket, path</span>):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;客户端已连接&quot;</span>)</span><br><span class="line">    audio_bytes = <span class="string">b&quot;&quot;</span></span><br><span class="line">    <span class="keyword">async</span> <span class="keyword">for</span> message <span class="keyword">in</span> websocket:</span><br><span class="line">        <span class="keyword">if</span> <span class="built_in">isinstance</span>(message, <span class="built_in">bytes</span>):</span><br><span class="line">            <span class="comment"># 累积音频数据</span></span><br><span class="line">            audio_bytes += message</span><br><span class="line">        <span class="keyword">elif</span> message == <span class="string">&quot;&lt;end&gt;&quot;</span>:</span><br><span class="line">            <span class="comment"># 收到音频结束</span></span><br><span class="line">            user_text = asr_model.transcribe(audio_bytes) <span class="comment"># 语音转文本</span></span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&quot;识别结果:&quot;</span>, user_text)</span><br><span class="line">            answer = llm_api.ask(user_text) <span class="comment"># 调用大模型获取回复</span></span><br><span class="line">            <span class="keyword">await</span> websocket.send(answer) <span class="comment"># 发送回复给ESP32</span></span><br><span class="line">            audio_bytes = <span class="string">b&quot;&quot;</span> <span class="comment"># 清空缓冲，准备下一次对话</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="comment"># 处理其他控制消息，例如心跳/确认</span></span><br><span class="line">            <span class="keyword">await</span> websocket.send(<span class="string">&quot;&lt;ack&gt;&quot;</span>)</span><br></pre></td></tr></table></figure><p>这个简化的服务器逻辑中，我们使用 async for 来持续监听来自某个客户端(ESP32)的消息。如果收到的是二进制数据，则累加到 audio_bytes 缓冲。如果收到文本 “” 则表示一段语音结束，遂调用 ASR 将整个音频转为文字，然后把文字传给大模型接口获得回复，最后通过 websocket.send 将回复发回客户端。然后清空缓冲等待下一轮交流。这里还示范了收&#x2F;发 “” 之类的控制信息的处理。实际应用中，应考虑异常处理（如网络中断）、识别超时等情况。</p><p>通过上述服务器的配合，我们的 ESP32 语音机器人基本功能就完成了：当你对着麦克风说“小智小智”（假定这是唤醒词），ESP32 检测到后开始录音，并把你的话通过网络发送出去；服务器将你的语音识别为文字，再由大模型生成回答“好的，我在呢”（示例），服务器将回答发送回 ESP32；ESP32 接收到后在屏幕上显示出来，并通过扬声器播报出来。整个过程接近实时，并且可以多次轮询，实现连续对话。</p><hr><h2 id="6-优化与扩展"><a href="#6-优化与扩展" class="headerlink" title="6. 优化与扩展"></a>6. 优化与扩展</h2><p>在基本功能实现后，我们可以对“小智”机器人进行多方面的优化和扩展，以提升体验和性能：</p><h3 id="提升本地计算能力"><a href="#提升本地计算能力" class="headerlink" title="提升本地计算能力"></a>提升本地计算能力</h3><p>虽然 ESP32 性能有限，但我们可以通过一些技巧优化运行效率。例如，使用缓存机制：针对用户经常询问的问题，可以在ESP32端缓存上一次的回答，若短时间内再次询问相同问题，可以直接回复缓存结果而不必每次都请求云端，从而降低延迟和流量。另外，尽量利用好 ESP32-S3 的硬件加速功能，如采用定点运算或使用 ESP-DSP 库优化音频处理。对于云端的大模型，可以考虑模型蒸馏或量化来加快推理速度。例如将原本大的模型压缩为更小的参数，这也是 DeepSeek 提供蒸馏模型的思路。量化后的模型（如 INT8&#x2F;INT4）在GPU甚至CPU上的推理速度会有明显提升，使对话响应更快。同时可在服务器端对相似的问答进行缓存，减少重复计算。</p><h3 id="增强离线功能"><a href="#增强离线功能" class="headerlink" title="增强离线功能"></a>增强离线功能</h3><p>目前我们的机器人主要依赖云端AI，但是我们可以赋予它一定的脱机能力。首先，ESP32 上的 MultiNet 命令词识别模块可以识别一些常用指令词离线运行。我们可以预先定义一组本地指令（例如：“播放音乐”、“停止”、“音量大一点”等）并训练相应模型烧录进ESP32。这使得即使断网，机器人也能执行简单指令控制。此外，可以加入简单的本地问答库或规则，例如对于固定的问题（天气、时间）在ESP32存储预设答案，这样在无网络时也能回答部分问题。更高级的，可以在ESP32上运行一个超小型的语言模型（例如基于 Edge Impulse 或 GPT2-tiny 等），用于应对非常简短的对话。不过由于设备限制，这类模型智能性有限，主要作为备份。在应用中，可以设置策略：优先调用云端AI，若不可用则退而求其次使用本地能力应答。</p><h3 id="显示屏交互扩展"><a href="#显示屏交互扩展" class="headerlink" title="显示屏交互扩展"></a>显示屏交互扩展</h3><p>为了让“小智”更生动，我们可以充分利用 OLED&#x2F;LCD 显示屏来丰富人机界面。例如，在屏幕上显示对话文字的同时，可以加入表情或头像来指示机器人状态：听的时候显示“耳朵”图标，思考时显示“加载中”动画，说话时显示“嘴巴”或表情变化等。如果使用的是彩色屏幕，可以绘制一个卡通头像，小智在不同状态下的表情（睁眼&#x2F;闭眼&#x2F;说话）变化，从而使机器人更具亲和力。技术实现上，可以预先加载几张位图或者使用简单的绘图指令组合出表情。在 ESP-IDF 中可以结合 LVGL 图形库实现精美的 UI 界面，包括文本、图像和动画效果。触摸屏设备还可以扩展触控功能，例如加一个“对话历史”查看或功能菜单。除了屏幕，您还可以增添LED指示灯（比如 RGB LED 显示不同颜色代表正在录音或思考）或者蜂鸣器音效提示用户进行交互提示。</p><h3 id="语音合成输出"><a href="#语音合成输出" class="headerlink" title="语音合成输出"></a>语音合成输出</h3><p>虽然本教程侧重文字输出，但让机器人“开口说话”无疑会提供更直观的互动。在 ESP32 上实现文本转语音(TTS)有几种方案：可以利用 ESP-SR 自带的简易 TTS 模块生成中文语音；或者占用稍多资源，集成一个轻量级的 TTS 引擎（如科大讯飞离线TTS SDK，不过对Flash和RAM要求较高）；再或者走云端，由服务器把回复文本经过 TTS 合成后，以音频文件发送给 ESP32 播放。最后一种方式对ESP32 压力最小，只需接收和播放音频即可。在具体实现时，可以在服务器端调用诸如阿里云易音识别、微软Azure TTS等云服务，将回答文本转为语音，然后ESP32通过HTTP获取 MP3文件，使用集成的音频解码器播放。若追求本地纯离线，也可考虑安装一个小型MP3解码库，将服务器传来的MP3数据用 ESP32 解码输出至扬声器（ESP32有足够能力播放中等码率的MP3）。语音合成的声音可以自定义，让小智有独特的音色。</p><h3 id="其他扩展创意"><a href="#其他扩展创意" class="headerlink" title="其他扩展创意"></a>其他扩展创意</h3><p>小智机器人可以结合更多传感器和功能模块，实现丰富的玩法。例如，加入摄像头模块（ESP32-S3支持连接摄像头），配合云端的视觉识别，实现看图对话或人脸识别后的个性化对话；或者集成舵机作为“头部”，让机器人朝向发声方向转动；添加触摸传感器或按钮，让用户可以用触摸来激活对话等。此外，如果追求更强的AI本地能力，可以关注乐鑫新推出的 ESP32-P4 等更高性能芯片或者结合Edge AI加速器来运行部分模型。对于软件层面，也可以将当前方案与其他开源框架集成，例如接入 Home Assistant 平台，实现家居语音控制；或使用 LangChain 框架设计机器人的对话流程和工具调用能力，让小智不仅能聊天，还能帮忙查询资料、控制设备。</p><p>通过以上优化，小智 AI 机器人将变得更加实用和智能：在联网时，它是一个功能全面的语音助手，能聊天、查信息、控制家电；离线时，它仍具备基本的指令识别和交流能力。不仅如此，借助ESP32的开源生态，您可以不断为小智添加新功能。在实践过程中，请充分利用社区资源：参考官方示例、查看类似项目源码，这将有助于您更深入地理解实现细节并排除开发中的困难。</p><hr><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>恭喜您完成这个从无到有的项目！通过本教程，我们学习了 ESP32 上语音唤醒的原理，搭建了语音对话硬件平台，编写了嵌入式代码将语音与云端AI连接，并了解了如何部署强大的大模型服务来实现智能对答。对于初学者来说，这是迈向物联网 AI 世界的重要一步。当然，受限于时间和篇幅，教程中的很多模块都是简化的，但希望这份详细指南为您理清了思路。在实际开发中，您可能会遇到各种挑战，比如噪声环境下识别率、网络延迟导致的响应速度、不同模块兼容性等，不要气馁，多查阅资料、多尝试调优。借助开源社区的力量，您的“小智”一定可以变得越来越聪明。期待您为它赋予更多有趣的技能！祝您玩得开心，在 AI 创作的道路上不断进步。</p><hr><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><ul><li>Espressif Systems, ESP-SR 开源语音识别框架 – 模块组成及功能</li><li>RoboticsCV, 嵌入式设备语音唤醒和识别原理 – ESP32-S3 AI指令和 PSRAM 优势</li><li>Espressif GitHub, ESP-BOX 技术架构 – WakeNet 唤醒词模型工作机制</li><li>Fabrik, ESP32 实时语音助手项目 – WebSocket 音频流传输架构</li><li>Hacker News, 本地 LLM 语音助手实现讨论 – ESP32 建立 WebSocket 及音频传输流程</li><li>Hacker News, ESP32 语音硬件建议 – 优选 I2S 数字麦克风避免模拟麦克风噪声</li><li>CSDN 博客, ESP-Skainet 语音唤醒教程 – ESP32 上唤醒词和命令词识别案例</li><li>阿里达摩院, SenseVoice 开源项目 – 多语言语音识别模型简介及能力</li><li>DeepSeek 项目说明 – 开源大型语言模型性能及开放版本</li><li>VocaMirror 开源项目 – 通义千问(Qwen) API 使用示例</li></ul>]]>
    </content>
    <id>https://www.tenxiaodao.top/diy-dian-zi-nv-you-xiao-zhi/</id>
    <link href="https://www.tenxiaodao.top/diy-dian-zi-nv-you-xiao-zhi/"/>
    <published>2025-04-12T15:53:33.000Z</published>
    <summary>
      <![CDATA[<h1 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h1><p>此博客为一篇针对初学者的详细教程，涵盖小智 AI 机器人的原理、硬件准备、软件环境搭建、代码实现、云端部署以及优化扩展。文章结合了现有的网络]]>
    </summary>
    <title>DIY电子女友小智</title>
    <updated>2026-05-01T12:11:31.371Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="办公软件" scheme="https://www.tenxiaodao.top/categories/%E5%8A%9E%E5%85%AC%E8%BD%AF%E4%BB%B6/"/>
    <category term="office" scheme="https://www.tenxiaodao.top/tags/office/"/>
    <content>
      <![CDATA[<h1 id="Office-WPS下载"><a href="#Office-WPS下载" class="headerlink" title="Office&#x2F;WPS下载"></a>Office&#x2F;WPS下载</h1><h2 id="Office2021-专业增强版-“Office2021-专业增强版”-Office2021-专业增强版"><a href="#Office2021-专业增强版-“Office2021-专业增强版”-Office2021-专业增强版" class="headerlink" title="(#Office2021-专业增强版 “Office2021 专业增强版”)Office2021 专业增强版"></a>(#Office2021-专业增强版 “Office2021 专业增强版”)Office2021 专业增强版</h2><p><a href="https://officecdn.microsoft.com/db/492350F6-3A01-4F97-B9C0-C7C6DDF67D60/media/zh-CN/ProPlus2021Retail.img">官方直连下载</a><br><a href="https://www.123pan.com/s/ZrzA-QOZgh">123云盘</a></p><h2 id="Office2019-专业增强版-“Office2019-专业增强版”-Office2019-专业增强版"><a href="#Office2019-专业增强版-“Office2019-专业增强版”-Office2019-专业增强版" class="headerlink" title="(#Office2019-专业增强版 “Office2019 专业增强版”)Office2019 专业增强版"></a>(#Office2019-专业增强版 “Office2019 专业增强版”)Office2019 专业增强版</h2><p><a href="ed2k://%7Cfile%7Ccn_office_professional_plus_2019_x86_x64_dvd_5e5be643.iso%7C3775004672%7C1E4FFA5240F21F60DC027F73F1C62FF4%7C/">ed2k</a><br><a href="https://pan.quark.cn/s/f446128cff84">夸克网盘</a></p><h2 id="Office2016-专业增强版-“Office2016-专业增强版”-Office2016-专业增强版"><a href="#Office2016-专业增强版-“Office2016-专业增强版”-Office2016-专业增强版" class="headerlink" title="(#Office2016-专业增强版 “Office2016 专业增强版”)Office2016 专业增强版"></a>(#Office2016-专业增强版 “Office2016 专业增强版”)Office2016 专业增强版</h2><p><a href="ed2k://%7Cfile%7Ccn_office_professional_plus_2016_x86_x64_dvd_6969182.iso%7C2588266496%7C27EEA4FE4BB13CD0ECCDFC24167F9E01%7C/">ed2k</a><br><a href="https://www.123pan.com/s/ZrzA-kOZgh">123云盘</a></p><h2 id="Office2013-专业增强版-“Office2013-专业增强版”-Office2013-专业增强版"><a href="#Office2013-专业增强版-“Office2013-专业增强版”-Office2013-专业增强版" class="headerlink" title="(#Office2013-专业增强版 “Office2013 专业增强版”)Office2013 专业增强版"></a>(#Office2013-专业增强版 “Office2013 专业增强版”)Office2013 专业增强版</h2><p><a href="ed2k://%7Cfile%7Ccn_office_professional_plus_2013_with_sp1_x86_and_x64_dvd_3921921.iso%7C1838749696%7CC2C7DCB43293252480A32F91F21DE3B3%7C/">ed2k</a><br><a href="https://www.123pan.com/s/ZrzA-oOZgh">123云盘</a></p><h2 id="Office2010-专业增强版-“Office2010-专业增强版”-Office2010-专业增强版"><a href="#Office2010-专业增强版-“Office2010-专业增强版”-Office2010-专业增强版" class="headerlink" title="(#Office2010-专业增强版 “Office2010 专业增强版”)Office2010 专业增强版"></a>(#Office2010-专业增强版 “Office2010 专业增强版”)Office2010 专业增强版</h2><p><a href="ed2k://%7Cfile%7Ccn_office_professional_plus_2010_with_sp1_x86_x64_732114.iso%7C2939512832%7C7A118C7E70D022C54D27E6C3B9C72C36%7C/">ed2k</a><br><a href="https://www.123pan.com/s/ZrzA-mOZgh">123云盘</a></p><h2 id="Office2007-专业增强版-“Office2007-专业增强版”-Office2007-专业增强版"><a href="#Office2007-专业增强版-“Office2007-专业增强版”-Office2007-专业增强版" class="headerlink" title="(#Office2007-专业增强版 “Office2007 专业增强版”)Office2007 专业增强版"></a>(#Office2007-专业增强版 “Office2007 专业增强版”)Office2007 专业增强版</h2><p><a href="ed2k://%7Cfile%7Ccn_office_professional_plus_2007_dvd_X12-38713.iso%7C694059008%7CCFAE350F8A9028110D12D61D9AEC1315%7C/">ed2k</a><br><a href="https://www.123pan.com/s/ZrzA-1OZgh">123云盘</a></p><h2 id="Office2003-标准版-“Office2003-标准版”-Office2003-标准版"><a href="#Office2003-标准版-“Office2003-标准版”-Office2003-标准版" class="headerlink" title="(#Office2003-标准版 “Office2003 标准版”)Office2003 标准版"></a>(#Office2003-标准版 “Office2003 标准版”)Office2003 标准版</h2><p><a href="ed2k://%7Cfile%7Csc_office_2003_std.iso%7C429031424%7CDB59D0F8CC31EF72CC15D675FC9B7C34%7C/">ed2k</a><br><a href="https://www.123pan.com/s/ZrzA-4OZgh">123云盘</a></p><h2 id="wps无联网功能-“wps无联网功能”-wps无联网功能"><a href="#wps无联网功能-“wps无联网功能”-wps无联网功能" class="headerlink" title="(#wps无联网功能 “wps无联网功能”)wps无联网功能"></a>(#wps无联网功能 “wps无联网功能”)wps无联网功能</h2><p><a href="https://pan.quark.cn/s/a8226f478d60">夸克网盘</a></p>]]>
    </content>
    <id>https://www.tenxiaodao.top/office-wps-xia-zai/</id>
    <link href="https://www.tenxiaodao.top/office-wps-xia-zai/"/>
    <published>2025-04-07T12:14:58.000Z</published>
    <summary>
      <![CDATA[<h1 id="Office-WPS下载"><a href="#Office-WPS下载" class="headerlink" title="Office&#x2F;WPS下载"></a>Office&#x2F;WPS下载</h1><h2 id="Office2021-专业增强]]>
    </summary>
    <title>Office/WPS下载</title>
    <updated>2026-05-01T12:11:31.373Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="系统镜像" scheme="https://www.tenxiaodao.top/categories/%E7%B3%BB%E7%BB%9F%E9%95%9C%E5%83%8F/"/>
    <category term="windows镜像" scheme="https://www.tenxiaodao.top/tags/windows%E9%95%9C%E5%83%8F/"/>
    <content>
      <![CDATA[<h1 id="精校-完整-极致-Windows系统下载仓储站"><a href="#精校-完整-极致-Windows系统下载仓储站" class="headerlink" title="精校 完整 极致 Windows系统下载仓储站"></a>精校 完整 极致 Windows系统下载仓储站</h1><h1 id="Windows-11-version-23H2"><a href="#Windows-11-version-23H2" class="headerlink" title="Windows 11 version 23H2"></a>Windows 11 version 23H2</h1><blockquote><h2 id="64位-商业-批量版-2024-09-17"><a href="#64位-商业-批量版-2024-09-17" class="headerlink" title="64位-商业-批量版-2024-09-17"></a>64位-商业-批量版-2024-09-17</h2><h3 id="Windows-11-business-editions-version-23H2-updated-Sep-2024-x64-DVD-Chinese-Simplified"><a href="#Windows-11-business-editions-version-23H2-updated-Sep-2024-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (business editions), version 23H2 (updated Sep 2024) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (business editions), version 23H2 (updated Sep 2024) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_business_editions_version_23h2_updated_sep_2024_x64_dvd_22316bf2.iso|7094269952|9437FD5D778E65B27176BA17CF40BC32|/">ed2k</a><br><a href="magnet:?xt=urn:btih:566a91613cfe1c91c8928654ccf6df9f6592c590&dn=zh-cn_windows_11_business_editions_version_23h2_updated_sep_2024_x64_dvd_22316bf2.iso&xl=7094269952">BT</a></p></blockquote><blockquote><h2 id="64位消费者-零售版2024-09-17"><a href="#64位消费者-零售版2024-09-17" class="headerlink" title="64位消费者-零售版2024-09-17"></a>64位消费者-零售版2024-09-17</h2><h3 id="Windows-11-consumer-editions-version-23H2-updated-Sep-2024-x64-DVD-Chinese-Simplified"><a href="#Windows-11-consumer-editions-version-23H2-updated-Sep-2024-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (consumer editions), version 23H2 (updated Sep 2024) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (consumer editions), version 23H2 (updated Sep 2024) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_consumer_editions_version_23h2_updated_sep_2024_x64_dvd_edcefbe4.iso|7183915008|C7EDA8C62FA0A8020C100C89D0583D25|/">ed2k</a><br><a href="magnet:?xt=urn:btih:c0dbf0b64fd2f16c9fbca08e123edf75eff5582e&dn=zh-cn_windows_11_consumer_editions_version_23h2_updated_sep_2024_x64_dvd_edcefbe4.iso&xl=7183915008">BT</a></p></blockquote><blockquote><h2 id="64位商业-批量版2024-06-18"><a href="#64位商业-批量版2024-06-18" class="headerlink" title="64位商业-批量版2024-06-18"></a>64位商业-批量版2024-06-18</h2><h3 id="Windows-11-business-editions-version-23H2-updated-June-2024-x64-DVD-Chinese-Simplified"><a href="#Windows-11-business-editions-version-23H2-updated-June-2024-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (business editions), version 23H2 (updated June 2024) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (business editions), version 23H2 (updated June 2024) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_business_editions_version_23h2_updated_june_2024_x64_dvd_d5833049.iso|7041841152|FCBA23BF4810C6730391B9093548CE9A|/">ed2k</a><br><a href="magnet:?xt=urn:btih:22f42182d379ea042b9bc518ef07d5bf6d8db158&dn=zh-cn_windows_11_business_editions_version_23h2_updated_june_2024_x64_dvd_d5833049.iso&xl=7041841152">BT</a><br><a href="https://pan.baidu.com/share/init?surl=Juc_lLR7FysLgfobdILGnQ&pwd=6666">百度网盘</a></p></blockquote><blockquote><h2 id="64位消费者-零售版2024-06-18"><a href="#64位消费者-零售版2024-06-18" class="headerlink" title="64位消费者-零售版2024-06-18"></a>64位消费者-零售版2024-06-18</h2><h3 id="Windows-11-consumer-editions-version-23H2-updated-June-2024-x64-DVD-Chinese-Simplified"><a href="#Windows-11-consumer-editions-version-23H2-updated-June-2024-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (consumer editions), version 23H2 (updated June 2024) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (consumer editions), version 23H2 (updated June 2024) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_consumer_editions_version_23h2_updated_june_2024_x64_dvd_78b33b16.iso|7141826560|9BCE0FF18791A035ED8541A3EF8C791A|/">ed2k</a><br><a href="magnet:?xt=urn:btih:8cc7b5d873351eeba84e0938cfd4d4d7ce014510&dn=zh-cn_windows_11_consumer_editions_version_23h2_updated_june_2024_x64_dvd_78b33b16.iso&xl=7141826560">BT</a><br><a href="https://pan.baidu.com/share/init?surl=ccnRt6-c4HexQE57sxgMtA&pwd=6666">百度网盘</a></p></blockquote><blockquote><h2 id="64位中国定制版2023-04-18"><a href="#64位中国定制版2023-04-18" class="headerlink" title="64位中国定制版2023-04-18"></a>64位中国定制版2023-04-18</h2><h3 id="Windows-11-中国定制版-version-23H2-updated-Dec-2023-x64-DVD-Chinese-Simplified"><a href="#Windows-11-中国定制版-version-23H2-updated-Dec-2023-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (中国定制版), version 23H2 (updated Dec 2023) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (中国定制版), version 23H2 (updated Dec 2023) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|Win11_23H2_China_GGK_Chinese_Simplified_x64v2.iso|6543112192|6E6979AE8C47A65F8FBA7A289AFF6520|/">ed2k</a><br><a href="magnet:?xt=urn:btih:968e1c88d765ef51772768d78fdc268be087eb63&dn=Win11_23H2_China_GGK_Chinese_Simplified_x64v2.iso&xl=6543112192">BT</a><br><a href="https://pan.baidu.com/share/init?surl=Sp4hQgaiEvkmpBi1gH9sEQ&pwd=6666">百度网盘</a></p></blockquote><blockquote><h2 id="64位商业-批量版2023-04-18"><a href="#64位商业-批量版2023-04-18" class="headerlink" title="64位商业-批量版2023-04-18"></a>64位商业-批量版2023-04-18</h2><h3 id="Windows-11-business-editions-version-23H2-updated-Dec-2023-x64-DVD-Chinese-Simplified"><a href="#Windows-11-business-editions-version-23H2-updated-Dec-2023-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (business editions), version 23H2 (updated Dec 2023) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (business editions), version 23H2 (updated Dec 2023) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_business_editions_version_23h2_updated_dec_2023_x64_dvd_9a37d106.iso|6728374272|0692E9C5A6B556754093FC30964E77A3|/">ed2k</a><br><a href="magnet:?xt=urn:btih:5572b854e194d6e6f876d2556d53ac5e9af16caf&dn=zh-cn_windows_11_business_editions_version_23h2_updated_dec_2023_x64_dvd_9a37d106.iso&xl=6728374272">BT</a><br><a href="https://pan.baidu.com/share/init?surl=Bcgk4SdXesX02zOwphpPLg&pwd=6666">百度网盘</a><br><a href="https://www.123pan.com/s/iBU9jv-YGJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="64位消费者-零售版2023-04-18"><a href="#64位消费者-零售版2023-04-18" class="headerlink" title="64位消费者-零售版2023-04-18"></a>64位消费者-零售版2023-04-18</h2><h3 id="Windows-11-consumer-editions-version-23H2-updated-Dec-2023-x64-DVD-Chinese-Simplified"><a href="#Windows-11-consumer-editions-version-23H2-updated-Dec-2023-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (consumer editions), version 23H2 (updated Dec 2023) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (consumer editions), version 23H2 (updated Dec 2023) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_consumer_editions_version_23h2_updated_dec_2023_x64_dvd_7cd2c9a8.iso|6833309696|750F5C6FA76183E63E3662026C5507AC|/">ed2k</a><br><a href="magnet:?xt=urn:btih:04b4125fc0b0db0eca2eb01564bb3a548b38dd03&dn=zh-cn_windows_11_consumer_editions_version_23h2_updated_dec_2023_x64_dvd_7cd2c9a8.iso&xl=6833309696">BT</a><br><a href="https://pan.baidu.com/share/init?surl=F1rb31hh1yp742iWlqTAXw&pwd=6666">百度网盘</a><br><a href="https://www.123pan.com/s/iBU9jv-gGJNh.html">123云盘</a></p></blockquote><h1 id="Windows-11-version-22H2"><a href="#Windows-11-version-22H2" class="headerlink" title="Windows 11 version 22H2"></a>Windows 11 version 22H2</h1><blockquote><h2 id="64位商业-批量版2023-10-17"><a href="#64位商业-批量版2023-10-17" class="headerlink" title="64位商业-批量版2023-10-17"></a>64位商业-批量版2023-10-17</h2><h3 id="Windows-11-consumer-editions-version-22H2-updated-Oct-2023-x64-DVD-Chinese-Simplified"><a href="#Windows-11-consumer-editions-version-22H2-updated-Oct-2023-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (consumer editions), version 22H2 (updated Oct 2023) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (consumer editions), version 22H2 (updated Oct 2023) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_consumer_editions_version_22h2_updated_oct_2023_x64_dvd_0f09f40a.iso|6720722944|568A10305F47C4C375E6899E84BD7066|/">ed2k</a><br><a href="magnet:?xt=urn:btih:ea744fbd2cc3108e39b881b852e1442592004042&dn=zh-cn_windows_11_consumer_editions_version_22h2_updated_oct_2023_x64_dvd_0f09f40a.iso&xl=6720722944">BT</a><br><a href="https://pan.baidu.com/share/init?surl=on2Su6Yv1mBY5UBp5rngDg&pwd=6666">百度网盘</a></p></blockquote><blockquote><h2 id="64位商业-批量版2023-04-18-1"><a href="#64位商业-批量版2023-04-18-1" class="headerlink" title="64位商业-批量版2023-04-18-1"></a>64位商业-批量版2023-04-18-1</h2><h3 id="Windows-11-business-editions-version-22H2-updated-April-2023-x64-DVD-Chinese-Simplified"><a href="#Windows-11-business-editions-version-22H2-updated-April-2023-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (business editions), version 22H2 (updated April 2023) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (business editions), version 22H2 (updated April 2023) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_business_editions_version_22h2_updated_april_2023_x64_dvd_7f3f319b.iso|5699682304|7226C84203584BDC33A1E8694C6C570E|/">ed2k</a><br><a href="magnet:?xt=urn:btih:509989ac652c2f748c894ab77c9e2faa336cd826&dn=zh-cn_windows_11_business_editions_version_22h2_updated_april_2023_x64_dvd_7f3f319b.iso">BT</a><br><a href="https://pan.baidu.com/share/init?surl=kwYu8lFHanHp8u0bvtJ76Q&pwd=6666">百度网盘</a></p></blockquote><blockquote><h2 id="64位消费者-零售版2023-04-18-1"><a href="#64位消费者-零售版2023-04-18-1" class="headerlink" title="64位消费者-零售版2023-04-18-1"></a>64位消费者-零售版2023-04-18-1</h2><h3 id="Windows-11-consumer-editions-version-22H2-updated-April-2023-x64-DVD-Chinese-Simplified"><a href="#Windows-11-consumer-editions-version-22H2-updated-April-2023-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (consumer editions), version 22H2 (updated April 2023) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (consumer editions), version 22H2 (updated April 2023) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-cn_windows_11_consumer_editions_version_22h2_updated_april_2023_x64_dvd_73bd9a5e.iso|5797343232|2F110E5094FD8044653F276D2FA6A33C|/">ed2k</a><br><a href="magnet:?xt=urn:btih:fefcbc14217031fa53a448d9e48a9389b16f4465&dn=zh-cn_windows_11_consumer_editions_version_22h2_updated_april_2023_x64_dvd_73bd9a5e.iso">BT</a><br><a href="https://pan.baidu.com/share/init?surl=KHvNIfVHPrQScmJ2jcg3TA&pwd=6666">百度网盘</a></p></blockquote><hr><h1 id="Windows11-version-21H2"><a href="#Windows11-version-21H2" class="headerlink" title="Windows11 version 21H2"></a>Windows11 version 21H2</h1><blockquote><h2 id="64位商业-批量版2022-08-16"><a href="#64位商业-批量版2022-08-16" class="headerlink" title="64位商业-批量版2022-08-16"></a>64位商业-批量版2022-08-16</h2><h3 id="Windows-11-business-editions-version-21H2-updated-Aug-2022-x64-DVD-Chinese-Simplified"><a href="#Windows-11-business-editions-version-21H2-updated-Aug-2022-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (business editions), version 21H2 (updated Aug 2022) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (business editions), version 21H2 (updated Aug 2022) (x64) - DVD (Chinese-Simplified)</h3></blockquote><blockquote><h2 id="64位消费者-零售版2022-08-16"><a href="#64位消费者-零售版2022-08-16" class="headerlink" title="64位消费者-零售版2022-08-16"></a>64位消费者-零售版2022-08-16</h2><h3 id="Windows-11-consumer-editions-version-21H2-updated-Aug-2022-x64-DVD-Chinese-Simplified"><a href="#Windows-11-consumer-editions-version-21H2-updated-Aug-2022-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 11 (consumer editions), version 21H2 (updated Aug 2022) (x64) - DVD (Chinese-Simplified)"></a>Windows 11 (consumer editions), version 21H2 (updated Aug 2022) (x64) - DVD (Chinese-Simplified)</h3></blockquote><h1 id="Windows-10-version-22H2"><a href="#Windows-10-version-22H2" class="headerlink" title="Windows 10 version 22H2"></a>Windows 10 version 22H2</h1><h1 id="Windows-10-version-21H2"><a href="#Windows-10-version-21H2" class="headerlink" title="Windows 10 version 21H2"></a>Windows 10 version 21H2</h1><h1 id="Windows-10-version-21H1"><a href="#Windows-10-version-21H1" class="headerlink" title="Windows 10 version 21H1"></a>Windows 10 version 21H1</h1><h1 id="Windows-10-version-20H2"><a href="#Windows-10-version-20H2" class="headerlink" title="Windows 10 version 20H2"></a>Windows 10 version 20H2</h1><h1 id="Windows-10-version-2004"><a href="#Windows-10-version-2004" class="headerlink" title="Windows 10 version 2004"></a>Windows 10 version 2004</h1><h1 id="Windows-10-version-1909"><a href="#Windows-10-version-1909" class="headerlink" title="Windows 10 version 1909"></a>Windows 10 version 1909</h1><h1 id="Windows-10-version-1903"><a href="#Windows-10-version-1903" class="headerlink" title="Windows 10 version 1903"></a>Windows 10 version 1903</h1><h1 id="Windows-10-version-1809"><a href="#Windows-10-version-1809" class="headerlink" title="Windows 10 version 1809"></a>Windows 10 version 1809</h1><h1 id="Windows-10-version-1803"><a href="#Windows-10-version-1803" class="headerlink" title="Windows 10 version 1803"></a>Windows 10 version 1803</h1><h1 id="Windows-10-version-1709"><a href="#Windows-10-version-1709" class="headerlink" title="Windows 10 version 1709"></a>Windows 10 version 1709</h1><h1 id="Windows-10-version-1703"><a href="#Windows-10-version-1703" class="headerlink" title="Windows 10 version 1703"></a>Windows 10 version 1703</h1><h1 id="Windows-10-version-1607"><a href="#Windows-10-version-1607" class="headerlink" title="Windows 10 version 1607"></a>Windows 10 version 1607</h1><h1 id="Windows-10-version-1511"><a href="#Windows-10-version-1511" class="headerlink" title="Windows 10 version 1511"></a>Windows 10 version 1511</h1><h1 id="Windows-10-version-1507"><a href="#Windows-10-version-1507" class="headerlink" title="Windows 10 version 1507"></a>Windows 10 version 1507</h1><hr><h1 id="Windows-8-1"><a href="#Windows-8-1" class="headerlink" title="Windows 8.1"></a>Windows 8.1</h1><blockquote><h2 id="64位企业版-批量授权2014-12-15"><a href="#64位企业版-批量授权2014-12-15" class="headerlink" title="64位企业版-批量授权2014-12-15"></a>64位企业版-批量授权2014-12-15</h2><h3 id="Windows-8-1-Enterprise-with-Update-x64-DVD-Chinese-Simplified"><a href="#Windows-8-1-Enterprise-with-Update-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 8.1 Enterprise with Update (x64) - DVD (Chinese-Simplified)"></a>Windows 8.1 Enterprise with Update (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_enterprise_with_update_x64_dvd_6050374.iso|4317065216|AC8215A13817CC0EC4EA42E5C92E88B7|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-aPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="32位企业版-批量授权2014-12-15"><a href="#32位企业版-批量授权2014-12-15" class="headerlink" title="32位企业版-批量授权2014-12-15"></a>32位企业版-批量授权2014-12-15</h2><h3 id="Windows-8-1-Enterprise-with-Update-x86-DVD-Chinese-Simplified"><a href="#Windows-8-1-Enterprise-with-Update-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 8.1 Enterprise with Update (x86) - DVD (Chinese-Simplified)"></a>Windows 8.1 Enterprise with Update (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_enterprise_with_update_x86_dvd_6050645.iso|3199901696|0209A1FDE82A5AC7A248B4CA3F860F2B|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-IPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="64位专业版-批量授权2014-12-15"><a href="#64位专业版-批量授权2014-12-15" class="headerlink" title="64位专业版-批量授权2014-12-15"></a>64位专业版-批量授权2014-12-15</h2><h3 id="Windows-8-1-Pro-VL-with-Update-x64-DVD-Chinese-Simplified"><a href="#Windows-8-1-Pro-VL-with-Update-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 8.1 Pro VL with Update (x64) - DVD (Chinese-Simplified)"></a>Windows 8.1 Pro VL with Update (x64) - DVD (Chinese-Simplified)</h3><p>32位专业版-批量授权2014-12-15<br><a href="ed2k://|file|cn_windows_8.1_pro_vl_with_update_x64_dvd_6050873.iso|4317507584|B0888275B5BD40E67D3F178B84B9A874|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-BPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="32位专业版-批量授权2014-12-15"><a href="#32位专业版-批量授权2014-12-15" class="headerlink" title="32位专业版-批量授权2014-12-15"></a>32位专业版-批量授权2014-12-15</h2><h3 id="Windows-8-1-Pro-VL-with-Update-x86-DVD-Chinese-Simplified"><a href="#Windows-8-1-Pro-VL-with-Update-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 8.1 Pro VL with Update (x86) - DVD (Chinese-Simplified)"></a>Windows 8.1 Pro VL with Update (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_pro_vl_with_update_x86_dvd_6050910.iso|3200301056|B078A986993B7EDD474FD09EB6FF7E1B|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-MPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="64位多版本（包含核心版和专业版）-零售版2014-12-15"><a href="#64位多版本（包含核心版和专业版）-零售版2014-12-15" class="headerlink" title="64位多版本（包含核心版和专业版）-零售版2014-12-15"></a>64位多版本（包含核心版和专业版）-零售版2014-12-15</h2><h3 id="Windows-8-1-with-Update-multiple-editions-x64-DVD-Chinese-Simplified"><a href="#Windows-8-1-with-Update-multiple-editions-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 8.1 with Update (multiple editions) (x64) - DVD (Chinese-Simplified)"></a>Windows 8.1 with Update (multiple editions) (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_with_update_x64_dvd_6051473.iso|4504475648|D66BEF759548656EDA981D902A957545|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-JPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="32位多版本（包含核心版和专业版）-零售版2014-12-15"><a href="#32位多版本（包含核心版和专业版）-零售版2014-12-15" class="headerlink" title="32位多版本（包含核心版和专业版）-零售版2014-12-15"></a>32位多版本（包含核心版和专业版）-零售版2014-12-15</h2><h3 id="Windows-8-1-with-Update-multiple-editions-x86-DVD-Chinese-Simplified"><a href="#Windows-8-1-with-Update-multiple-editions-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 8.1 with Update (multiple editions) (x86) - DVD (Chinese-Simplified)"></a>Windows 8.1 with Update (multiple editions) (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_with_update_x86_dvd_6051523.iso|3349960704|C1B8A61BD8F1300825BF03C4D31B35A0|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-wPJNh.html">123云盘</a></p></blockquote><h1 id="Windows-8"><a href="#Windows-8" class="headerlink" title="Windows 8"></a>Windows 8</h1><blockquote><h2 id="64位标准版2012-08-15"><a href="#64位标准版2012-08-15" class="headerlink" title="64位标准版2012-08-15"></a>64位标准版2012-08-15</h2><h3 id="Windows-8-x64-DVD-Chinese-Simplified"><a href="#Windows-8-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 8 (x64) - DVD (Chinese-Simplified)"></a>Windows 8 (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_enterprise_with_update_x86_dvd_6050645.iso|3199901696|0209A1FDE82A5AC7A248B4CA3F860F2B|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-gPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="32位标准版2012-08-15"><a href="#32位标准版2012-08-15" class="headerlink" title="32位标准版2012-08-15"></a>32位标准版2012-08-15</h2><h3 id="Windows-8-x86-DVD-Chinese-Simplified"><a href="#Windows-8-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 8 (x86) - DVD (Chinese-Simplified)"></a>Windows 8 (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_enterprise_with_update_x64_dvd_6050374.iso|4317065216|AC8215A13817CC0EC4EA42E5C92E88B7|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-FPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="64位企业版2012-08-15"><a href="#64位企业版2012-08-15" class="headerlink" title="64位企业版2012-08-15"></a>64位企业版2012-08-15</h2><h3 id="Windows-8-Enterprise-x64-DVD-Chinese-Simplified"><a href="#Windows-8-Enterprise-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 8 Enterprise (x64) - DVD (Chinese-Simplified)"></a>Windows 8 Enterprise (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_pro_vl_with_update_x64_dvd_6050873.iso|4317507584|B0888275B5BD40E67D3F178B84B9A874|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-GPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="32位企业版2012-08-15"><a href="#32位企业版2012-08-15" class="headerlink" title="32位企业版2012-08-15"></a>32位企业版2012-08-15</h2><h3 id="Windows-8-Enterprise-x86-DVD-Chinese-Simplified"><a href="#Windows-8-Enterprise-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 8 Enterprise (x86) - DVD (Chinese-Simplified)"></a>Windows 8 Enterprise (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_pro_vl_with_update_x86_dvd_6050910.iso|3200301056|B078A986993B7EDD474FD09EB6FF7E1B|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-YPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="64位专业版-批量授权2012-08-15"><a href="#64位专业版-批量授权2012-08-15" class="headerlink" title="64位专业版-批量授权2012-08-15"></a>64位专业版-批量授权2012-08-15</h2><h3 id="Windows-8-Pro-VL-x64-DVD-Chinese-Simplified"><a href="#Windows-8-Pro-VL-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 8 Pro VL (x64) - DVD (Chinese-Simplified)"></a>Windows 8 Pro VL (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_with_update_x64_dvd_6051473.iso|4504475648|D66BEF759548656EDA981D902A957545|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-PPJNh.html">123云盘</a></p></blockquote><blockquote><h2 id="32位专业版-批量授权2012-08-15"><a href="#32位专业版-批量授权2012-08-15" class="headerlink" title="32位专业版-批量授权2012-08-15"></a>32位专业版-批量授权2012-08-15</h2><h3 id="Windows-8-Pro-VL-x86-DVD-Chinese-Simplified"><a href="#Windows-8-Pro-VL-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 8 Pro VL (x86) - DVD (Chinese-Simplified)"></a>Windows 8 Pro VL (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_8.1_with_update_x86_dvd_6051523.iso|3349960704|C1B8A61BD8F1300825BF03C4D31B35A0|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-XPJNh.html">123云盘</a></p></blockquote><h1 id="Windows-7"><a href="#Windows-7" class="headerlink" title="Windows 7"></a>Windows 7</h1><blockquote><h2 id="64位旗舰版2011-05-12"><a href="#64位旗舰版2011-05-12" class="headerlink" title="64位旗舰版2011-05-12"></a>64位旗舰版2011-05-12</h2><h3 id="Windows-7-Ultimate-with-Service-Pack-1-x64-DVD-Chinese-Simplified"><a href="#Windows-7-Ultimate-with-Service-Pack-1-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Ultimate with Service Pack 1 (x64) - DVD (Chinese-Simplified)"></a>Windows 7 Ultimate with Service Pack 1 (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/">ed2k</a><br><a href="magnet:?xt=urn:btih:E86414F638E11104248108B155BE9408A8362509&dn=cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso">BT</a><br>123网盘</p></blockquote><blockquote><h2 id="32位旗舰版2011-05-12"><a href="#32位旗舰版2011-05-12" class="headerlink" title="32位旗舰版2011-05-12"></a>32位旗舰版2011-05-12</h2><h3 id="Windows-7-Ultimate-with-Service-Pack-1-x86-DVD-Chinese-Simplified"><a href="#Windows-7-Ultimate-with-Service-Pack-1-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Ultimate with Service Pack 1 (x86) - DVD (Chinese-Simplified)"></a>Windows 7 Ultimate with Service Pack 1 (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/">ed2k</a><br><a href="magnet:?xt=urn:btih:585DF592DE43A067C75CFE5A639B41FC3F24DA6F&dn=cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso">BT</a><br>123网盘</p></blockquote><blockquote><h2 id="32位入门版2011-05-12"><a href="#32位入门版2011-05-12" class="headerlink" title="32位入门版2011-05-12"></a>32位入门版2011-05-12</h2><h3 id="Windows-7-Starter-with-Service-Pack-1-x86-DVD-Chinese-Simplified"><a href="#Windows-7-Starter-with-Service-Pack-1-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Starter with Service Pack 1 (x86) - DVD (Chinese-Simplified)"></a>Windows 7 Starter with Service Pack 1 (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_starter_with_sp1_x86_dvd_u_678536.iso|2653276160|B0A788EA28B2491B4587A561A8CB5B19|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="32位专业版-批量授权2011-05-12"><a href="#32位专业版-批量授权2011-05-12" class="headerlink" title="32位专业版-批量授权2011-05-12"></a>32位专业版-批量授权2011-05-12</h2><h3 id="Windows-7-Professional-with-Service-Pack-1-VL-Build-x86-DVD-Chinese-Simplified"><a href="#Windows-7-Professional-with-Service-Pack-1-VL-Build-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Professional with Service Pack 1, VL Build (x86) - DVD (Chinese-Simplified)"></a>Windows 7 Professional with Service Pack 1, VL Build (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_professional_with_sp1_vl_build_x86_dvd_u_677939.iso|2502909952|935E5B4B754527BE3C238FA6ABDD9B86|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="64位专业版-批量授权2011-05-12"><a href="#64位专业版-批量授权2011-05-12" class="headerlink" title="64位专业版-批量授权2011-05-12"></a>64位专业版-批量授权2011-05-12</h2><h3 id="Windows-7-Professional-with-Service-Pack-1-VL-Build-x64-DVD-Chinese-Simplified"><a href="#Windows-7-Professional-with-Service-Pack-1-VL-Build-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Professional with Service Pack 1, VL Build (x64) - DVD (Chinese-Simplified)"></a>Windows 7 Professional with Service Pack 1, VL Build (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_professional_with_sp1_vl_build_x64_dvd_u_677816.iso|3266004992|5A52F4CCEFA71797D58389B397038B2F|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="64位专业版2011-05-12"><a href="#64位专业版2011-05-12" class="headerlink" title="64位专业版2011-05-12"></a>64位专业版2011-05-12</h2><h3 id="Windows-7-Professional-with-Service-Pack-1-x64-DVD-Chinese-Simplified"><a href="#Windows-7-Professional-with-Service-Pack-1-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Professional with Service Pack 1 (x64) - DVD (Chinese-Simplified)"></a>Windows 7 Professional with Service Pack 1 (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso|3420557312|430BEDC0F22FA18001F717F7AF08C9D5|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="32位专业版2011-05-12"><a href="#32位专业版2011-05-12" class="headerlink" title="32位专业版2011-05-12"></a>32位专业版2011-05-12</h2><h3 id="Windows-7-Professional-with-Service-Pack-1-x86-DVD-Chinese-Simplified"><a href="#Windows-7-Professional-with-Service-Pack-1-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Professional with Service Pack 1 (x86) - DVD (Chinese-Simplified)"></a>Windows 7 Professional with Service Pack 1 (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_professional_with_sp1_x86_dvd_u_677162.iso|2653276160|08F65018BD9B5BC8D77C1C7C5615A329|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="64位家庭高级版2011-05-12"><a href="#64位家庭高级版2011-05-12" class="headerlink" title="64位家庭高级版2011-05-12"></a>64位家庭高级版2011-05-12</h2><h3 id="Windows-7-Home-Premium-with-Service-Pack-1-x64-DVD-Chinese-Simplified"><a href="#Windows-7-Home-Premium-with-Service-Pack-1-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Home Premium with Service Pack 1 (x64) - DVD (Chinese-Simplified)"></a>Windows 7 Home Premium with Service Pack 1 (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_home_premium_with_sp1_x64_dvd_u_676691.iso|3420557312|1A3CF44F3F5E0BE9BBC1A938706A3471|/">ed2k</a></p></blockquote><blockquote><h2 id="32位家庭高级版2011-05-12"><a href="#32位家庭高级版2011-05-12" class="headerlink" title="32位家庭高级版2011-05-12"></a>32位家庭高级版2011-05-12</h2><h3 id="Windows-7-Home-Premium-with-Service-Pack-1-x86-DVD-Chinese-Simplified"><a href="#Windows-7-Home-Premium-with-Service-Pack-1-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Home Premium with Service Pack 1 (x86) - DVD (Chinese-Simplified)"></a>Windows 7 Home Premium with Service Pack 1 (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_home_premium_with_sp1_x86_dvd_u_676770.iso|2653276160|A8E8BD4421174DF34BD14D60750B3CDB|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="32位家庭基础版2011-05-12"><a href="#32位家庭基础版2011-05-12" class="headerlink" title="32位家庭基础版2011-05-12"></a>32位家庭基础版2011-05-12</h2><h3 id="Windows-7-Home-Basic-with-Service-Pack-1-x86-DVD-Chinese-Simplified"><a href="#Windows-7-Home-Basic-with-Service-Pack-1-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Home Basic with Service Pack 1 (x86) - DVD (Chinese-Simplified)"></a>Windows 7 Home Basic with Service Pack 1 (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_home_basic_with_sp1_x86_dvd_u_676500.iso|2653276160|843E7A78F2126FAC726CF5342710082D|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="64位企业版2011-05-12"><a href="#64位企业版2011-05-12" class="headerlink" title="64位企业版2011-05-12"></a>64位企业版2011-05-12</h2><h3 id="Windows-7-Enterprise-with-Service-Pack-1-x64-DVD-Chinese-Simplified"><a href="#Windows-7-Enterprise-with-Service-Pack-1-x64-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Enterprise with Service Pack 1 (x64) - DVD (Chinese-Simplified)"></a>Windows 7 Enterprise with Service Pack 1 (x64) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/">ed2k</a><br>BT<br>123网盘</p></blockquote><blockquote><h2 id="32位企业版2011-05-12"><a href="#32位企业版2011-05-12" class="headerlink" title="32位企业版2011-05-12"></a>32位企业版2011-05-12</h2><h3 id="Windows-7-Enterprise-with-Service-Pack-1-x86-DVD-Chinese-Simplified"><a href="#Windows-7-Enterprise-with-Service-Pack-1-x86-DVD-Chinese-Simplified" class="headerlink" title="Windows 7 Enterprise with Service Pack 1 (x86) - DVD (Chinese-Simplified)"></a>Windows 7 Enterprise with Service Pack 1 (x86) - DVD (Chinese-Simplified)</h3><p><a href="ed2k://|file|cn_windows_7_enterprise_with_sp1_x86_dvd_u_677716.iso|2502856704|B3C25EA4DD88D7E54F22D3C3E78C410B|/">ed2k</a><br>BT<br>123网盘</p></blockquote><h1 id="Windows-XP"><a href="#Windows-XP" class="headerlink" title="Windows XP"></a>Windows XP</h1><blockquote><h2 id="32位专业版-批量授权2008-05-02"><a href="#32位专业版-批量授权2008-05-02" class="headerlink" title="32位专业版-批量授权2008-05-02"></a>32位专业版-批量授权2008-05-02</h2><h3 id="Windows-XP-Professional-with-Service-Pack-3-x86-CD-VL-Chinese-Simplified"><a href="#Windows-XP-Professional-with-Service-Pack-3-x86-CD-VL-Chinese-Simplified" class="headerlink" title="Windows XP Professional with Service Pack 3 (x86) - CD VL (Chinese-Simplified)"></a>Windows XP Professional with Service Pack 3 (x86) - CD VL (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso|630237184|EC51916C9D9B8B931195EE0D6EE9B40E|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-KPJNh.html?notoken=1">123网盘</a></p></blockquote><blockquote><h2 id="32位专业版2008-05-01"><a href="#32位专业版2008-05-01" class="headerlink" title="32位专业版2008-05-01"></a>32位专业版2008-05-01</h2><h3 id="Windows-XP-Professional-with-Service-Pack-3-x86-CD-Chinese-Simplified"><a href="#Windows-XP-Professional-with-Service-Pack-3-x86-CD-Chinese-Simplified" class="headerlink" title="Windows XP Professional with Service Pack 3 (x86) - CD (Chinese-Simplified)"></a>Windows XP Professional with Service Pack 3 (x86) - CD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso|630239232|CD0900AFA058ACB6345761969CBCBFF4|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-uPJNh.html">123网盘</a></p></blockquote><blockquote><h2 id="32位家庭版2008-05-01"><a href="#32位家庭版2008-05-01" class="headerlink" title="32位家庭版2008-05-01"></a>32位家庭版2008-05-01</h2><h3 id="Windows-XP-Home-with-Service-Pack-3-x86-CD-Chinese-Simplified"><a href="#Windows-XP-Home-with-Service-Pack-3-x86-CD-Chinese-Simplified" class="headerlink" title="Windows XP Home with Service Pack 3 (x86) - CD (Chinese-Simplified)"></a>Windows XP Home with Service Pack 3 (x86) - CD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-hans_windows_xp_home_with_service_pack_3_x86_cd_x14-92408.iso|611794944|81DC0766DFB4082E18F1985D535C14D6|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-UPJNh.html">123网盘</a></p></blockquote><blockquote><h2 id="32位补丁更新整合包2008-06-30"><a href="#32位补丁更新整合包2008-06-30" class="headerlink" title="32位补丁更新整合包2008-06-30"></a>32位补丁更新整合包2008-06-30</h2><h3 id="Windows-XP-Service-Pack-3-x86-CD-Chinese-Simplified"><a href="#Windows-XP-Service-Pack-3-x86-CD-Chinese-Simplified" class="headerlink" title="Windows XP Service Pack 3 (x86) - CD (Chinese-Simplified)"></a>Windows XP Service Pack 3 (x86) - CD (Chinese-Simplified)</h3><p><a href="ed2k://|file|zh-hans_windows_xp_service_pack_3_x86_cd_x14-60563.iso|417675264|2AAB7F0CD4BE378D9113557B1D24D8D0|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-SPJNh.html">123网盘</a></p></blockquote><blockquote><h2 id="2004-08-31"><a href="#2004-08-31" class="headerlink" title="2004-08-31"></a>2004-08-31</h2><h3 id="Windows-XP-Tablet-PC-Edition-2005-Simplified-Chinese-CD1"><a href="#Windows-XP-Tablet-PC-Edition-2005-Simplified-Chinese-CD1" class="headerlink" title="Windows XP Tablet PC Edition 2005 (Simplified Chinese) - CD1"></a>Windows XP Tablet PC Edition 2005 (Simplified Chinese) - CD1</h3><p><a href="ed2k://|file|sc_winxp_tablet_2005_CD1.iso|629227520|505B810E128351482AF8B83AC4D04FD2|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-lPJNh.html">123网盘</a></p></blockquote><blockquote><h2 id="2004-08-31-1"><a href="#2004-08-31-1" class="headerlink" title="2004-08-31"></a>2004-08-31</h2><h3 id="Windows-XP-Tablet-PC-Edition-2005-Simplified-Chinese-CD2"><a href="#Windows-XP-Tablet-PC-Edition-2005-Simplified-Chinese-CD2" class="headerlink" title="Windows XP Tablet PC Edition 2005 (Simplified Chinese) - CD2"></a>Windows XP Tablet PC Edition 2005 (Simplified Chinese) - CD2</h3><p><a href="ed2k://|file|sc_winxp_tablet_2005_CD2.iso|233066496|F691BBA9A376B281CDE19FD2E6EF36F9|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-7PJNh.html">123网盘</a></p></blockquote><blockquote><h2 id="2004-10-08"><a href="#2004-10-08" class="headerlink" title="2004-10-08"></a>2004-10-08</h2><h3 id="Windows-XP-Media-Center-Edition-2005-CD1-Simplified-Chinese"><a href="#Windows-XP-Media-Center-Edition-2005-CD1-Simplified-Chinese" class="headerlink" title="Windows XP Media Center Edition 2005 - CD1 (Simplified Chinese)"></a>Windows XP Media Center Edition 2005 - CD1 (Simplified Chinese)</h3><p><a href="ed2k://|file|sc_winxp_mce_2005_cd1.iso|630503424|454E21C270CC23993468BC141C093273|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-bPJNh.html">123网盘</a></p></blockquote><blockquote><h2 id="2004-10-08-1"><a href="#2004-10-08-1" class="headerlink" title="2004-10-08"></a>2004-10-08</h2><h3 id="Windows-XP-Media-Center-Edition-2005-CD2-Simplified-Chinese"><a href="#Windows-XP-Media-Center-Edition-2005-CD2-Simplified-Chinese" class="headerlink" title="Windows XP Media Center Edition 2005 - CD2 (Simplified Chinese)"></a>Windows XP Media Center Edition 2005 - CD2 (Simplified Chinese)</h3><p><a href="ed2k://|file|sc_winxp_mce_2005_cd2.iso|302485504|73377DDD3A9DE73AE5D8F20AAD734B10|/">ed2k</a><br><a href="https://www.123pan.com/s/iBU9jv-ZPJNh.html">123网盘</a></p></blockquote>]]>
    </content>
    <id>https://www.tenxiaodao.top/windows-xi-tong-xia-zai-cang-chu-zhan/</id>
    <link href="https://www.tenxiaodao.top/windows-xi-tong-xia-zai-cang-chu-zhan/"/>
    <published>2025-04-07T11:37:30.000Z</published>
    <summary>
      <![CDATA[<h1 id="精校-完整-极致-Windows系统下载仓储站"><a href="#精校-完整-极致-Windows系统下载仓储站" class="headerlink" title="精校 完整 极致 Windows系统下载仓储站"></a>精校 完整 极致 Windows系]]>
    </summary>
    <title>Windows系统下载仓储站</title>
    <updated>2026-05-01T12:11:31.374Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="网络基础" scheme="https://www.tenxiaodao.top/categories/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/"/>
    <category term="网络配置" scheme="https://www.tenxiaodao.top/tags/%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE/"/>
    <category term="端口聚合" scheme="https://www.tenxiaodao.top/tags/%E7%AB%AF%E5%8F%A3%E8%81%9A%E5%90%88/"/>
    <category term="网络优化" scheme="https://www.tenxiaodao.top/tags/%E7%BD%91%E7%BB%9C%E4%BC%98%E5%8C%96/"/>
    <content>
      <![CDATA[<h1 id="如何配置端口聚合"><a href="#如何配置端口聚合" class="headerlink" title="如何配置端口聚合"></a>如何配置端口聚合</h1><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>端口聚合（Port Aggregation）是一种将多个物理网络端口组合成一个逻辑端口的技术，可以提高网络带宽、增强冗余性以及提升网络性能。本文将介绍端口聚合的基本概念、配置方法以及常见应用场景。</p><hr><h2 id="一、什么是端口聚合？"><a href="#一、什么是端口聚合？" class="headerlink" title="一、什么是端口聚合？"></a>一、什么是端口聚合？</h2><p>端口聚合是一种网络技术，通过将多个物理端口绑定在一起，形成一个逻辑端口，从而实现以下目标：</p><ol><li><strong>提高带宽</strong>：多个端口的带宽可以叠加，满足高流量需求。</li><li><strong>增强冗余性</strong>：当一个端口发生故障时，其他端口可以继续工作，保证网络的稳定性。</li><li><strong>负载均衡</strong>：流量可以在多个端口之间分配，提升网络性能。</li></ol><hr><h2 id="二、端口聚合的类型"><a href="#二、端口聚合的类型" class="headerlink" title="二、端口聚合的类型"></a>二、端口聚合的类型</h2><h3 id="1-静态聚合"><a href="#1-静态聚合" class="headerlink" title="1. 静态聚合"></a>1. 静态聚合</h3><ul><li>手动配置，不需要交换机之间的协议协商。</li><li>配置简单，但灵活性较低。</li></ul><h3 id="2-动态聚合（LACP）"><a href="#2-动态聚合（LACP）" class="headerlink" title="2. 动态聚合（LACP）"></a>2. 动态聚合（LACP）</h3><ul><li>使用链路聚合控制协议（Link Aggregation Control Protocol, LACP）。</li><li>自动协商端口聚合，灵活性更高，推荐使用。</li></ul><hr><h2 id="三、配置端口聚合的方法"><a href="#三、配置端口聚合的方法" class="headerlink" title="三、配置端口聚合的方法"></a>三、配置端口聚合的方法</h2><h3 id="1-在交换机上配置"><a href="#1-在交换机上配置" class="headerlink" title="1. 在交换机上配置"></a>1. 在交换机上配置</h3><p>以下是一个基于 Cisco 交换机的端口聚合配置示例：</p><pre><code class="bash"># 进入全局配置模式configure terminal# 创建聚合组interface port-channel 1# 添加物理端口到聚合组interface gigabitEthernet 0/1channel-group 1 mode activeinterface gigabitEthernet 0/2channel-group 1 mode active</code></pre>]]>
    </content>
    <id>https://www.tenxiaodao.top/ru-he-pei-zhi-duan-kou-ju-he/</id>
    <link href="https://www.tenxiaodao.top/ru-he-pei-zhi-duan-kou-ju-he/"/>
    <published>2025-04-03T07:06:15.000Z</published>
    <summary>
      <![CDATA[<h1 id="如何配置端口聚合"><a href="#如何配置端口聚合" class="headerlink" title="如何配置端口聚合"></a>如何配置端口聚合</h1><h2 id="前言"><a href="#前言" class="headerlink" titl]]>
    </summary>
    <title>如何配置端口聚合</title>
    <updated>2026-05-01T12:11:31.372Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="网络基础" scheme="https://www.tenxiaodao.top/categories/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/"/>
    <category term="网络协议" scheme="https://www.tenxiaodao.top/tags/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/"/>
    <category term="TCP" scheme="https://www.tenxiaodao.top/tags/TCP/"/>
    <category term="UDP" scheme="https://www.tenxiaodao.top/tags/UDP/"/>
    <content>
      <![CDATA[<h1 id="TCP-与-UDP-的区别"><a href="#TCP-与-UDP-的区别" class="headerlink" title="TCP 与 UDP 的区别"></a>TCP 与 UDP 的区别</h1><h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>TCP（Transmission Control Protocol）和 UDP（User Datagram Protocol）是两种常见的传输层协议。它们在网络通信中扮演着重要角色，各自有不同的特点和应用场景。</p><hr><h2 id="一、UDP"><a href="#一、UDP" class="headerlink" title="一、UDP"></a>一、UDP</h2><p>UDP（User Datagram Protocol，用户数据报协议）是一个简单的面向数据报的通信协议。它对应用层交下来的报文不合并、不拆分，只是在其上加上首部后交给网络层。</p><h3 id="UDP-的特点"><a href="#UDP-的特点" class="headerlink" title="UDP 的特点"></a>UDP 的特点</h3><ol><li><strong>无连接</strong>：UDP 不需要建立连接，直接发送数据。</li><li><strong>不可靠</strong>：传输途中出现丢包，UDP 不负责重发。</li><li><strong>无序性</strong>：数据到达顺序可能乱序，UDP 不提供纠正功能。</li><li><strong>低开销</strong>：UDP 报头只有 8 字节，开销小，效率高。</li><li><strong>实时性</strong>：即使网络拥堵，UDP 也不会进行流量控制。</li></ol><h3 id="UDP-报头结构"><a href="#UDP-报头结构" class="headerlink" title="UDP 报头结构"></a>UDP 报头结构</h3><p>UDP 报头包括 4 个字段，每个字段占用 2 个字节（16 位），标题短，开销小。</p><hr><h2 id="二、TCP"><a href="#二、TCP" class="headerlink" title="二、TCP"></a>二、TCP</h2><p>TCP（Transmission Control Protocol，传输控制协议）是一种可靠、面向字节流的通信协议。它将应用层交下来的数据看作无结构的字节流来发送。</p><h3 id="TCP-的特点"><a href="#TCP-的特点" class="headerlink" title="TCP 的特点"></a>TCP 的特点</h3><ol><li><strong>可靠性</strong>：TCP 提供可靠传输，支持丢包重发和乱序纠正。</li><li><strong>面向连接</strong>：TCP 在通信前需要建立连接（三次握手），通信结束时需要断开连接（四次挥手）。</li><li><strong>流量控制</strong>：TCP 使用滑动窗口机制控制数据流量。</li><li><strong>拥塞控制</strong>：TCP 通过慢启动、拥塞避免等机制避免网络拥塞。</li><li><strong>高开销</strong>：TCP 报头至少 20 字节，额外开销较大。</li></ol><h3 id="TCP-报头结构"><a href="#TCP-报头结构" class="headerlink" title="TCP 报头结构"></a>TCP 报头结构</h3><p>TCP 报头包含 20 个字节，支持复杂的控制功能，如序列号、确认应答等。</p><hr><h2 id="三、TCP-与-UDP-的区别"><a href="#三、TCP-与-UDP-的区别" class="headerlink" title="三、TCP 与 UDP 的区别"></a>三、TCP 与 UDP 的区别</h2><p>TCP 和 UDP 都位于传输层，但它们在功能和应用场景上有显著区别。</p><table><thead><tr><th>特性</th><th>TCP</th><th>UDP</th></tr></thead><tbody><tr><td><strong>可靠性</strong></td><td>提供可靠传输，保证数据完整性</td><td>不保证可靠性，可能丢包</td></tr><tr><td><strong>连接性</strong></td><td>面向连接</td><td>无连接</td></tr><tr><td><strong>报文</strong></td><td>面向字节流</td><td>面向报文</td></tr><tr><td><strong>效率</strong></td><td>传输效率低</td><td>传输效率高</td></tr><tr><td><strong>双工性</strong></td><td>全双工</td><td>一对一、一对多、多对多</td></tr><tr><td><strong>流量控制</strong></td><td>滑动窗口</td><td>无</td></tr><tr><td><strong>拥塞控制</strong></td><td>慢启动、拥塞避免等</td><td>无</td></tr><tr><td><strong>传输效率</strong></td><td>较慢</td><td>较快</td></tr></tbody></table><hr><h2 id="四、应用场景"><a href="#四、应用场景" class="headerlink" title="四、应用场景"></a>四、应用场景</h2><h3 id="TCP-的应用场景"><a href="#TCP-的应用场景" class="headerlink" title="TCP 的应用场景"></a>TCP 的应用场景</h3><ul><li><strong>文件传输</strong>（如 FTP）</li><li><strong>电子邮件</strong>（如 SMTP、IMAP、POP3）</li><li><strong>网页浏览</strong>（如 HTTP、HTTPS）</li></ul><h3 id="UDP-的应用场景"><a href="#UDP-的应用场景" class="headerlink" title="UDP 的应用场景"></a>UDP 的应用场景</h3><ul><li><strong>视频流</strong>（如 IPTV）</li><li><strong>实时语音通话</strong>（如 VoIP）</li><li><strong>在线游戏</strong>（如多人游戏）</li></ul><hr><h2 id="五、总结"><a href="#五、总结" class="headerlink" title="五、总结"></a>五、总结</h2><p>TCP 和 UDP 各有优缺点，选择使用哪种协议取决于具体的应用需求：</p><ul><li>如果需要可靠性和数据完整性，优先选择 <strong>TCP</strong>。</li><li>如果需要低延迟和高效率，优先选择 <strong>UDP</strong>。</li></ul><p>通过了解它们的特点和应用场景，可以更好地选择适合的协议来满足实际需求。</p><hr>]]>
    </content>
    <id>https://www.tenxiaodao.top/tcp-yu-udp-de-qu-bie/</id>
    <link href="https://www.tenxiaodao.top/tcp-yu-udp-de-qu-bie/"/>
    <published>2025-03-31T11:31:15.000Z</published>
    <summary>
      <![CDATA[<h1 id="TCP-与-UDP-的区别"><a href="#TCP-与-UDP-的区别" class="headerlink" title="TCP 与 UDP 的区别"></a>TCP 与 UDP 的区别</h1><h2 id="简介"><a href="#简介" cla]]>
    </summary>
    <title>TCP 与 UDP 的区别</title>
    <updated>2026-05-01T12:11:31.369Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="知识分享" scheme="https://www.tenxiaodao.top/categories/%E7%9F%A5%E8%AF%86%E5%88%86%E4%BA%AB/"/>
    <category term="玩客云" scheme="https://www.tenxiaodao.top/tags/%E7%8E%A9%E5%AE%A2%E4%BA%91/"/>
    <category term="NAS" scheme="https://www.tenxiaodao.top/tags/NAS/"/>
    <category term="Docker" scheme="https://www.tenxiaodao.top/tags/Docker/"/>
    <category term="CasaOS" scheme="https://www.tenxiaodao.top/tags/CasaOS/"/>
    <content>
      <![CDATA[<h1 id="玩客云做轻NAS低成本看番"><a href="#玩客云做轻NAS低成本看番" class="headerlink" title="玩客云做轻NAS低成本看番"></a>玩客云做轻NAS低成本看番</h1><h4 id="本篇文章介绍如何在玩客云上刷CasaOS系统，打造一个性价比极高的个人轻NAS。简单来说，CasaOS是一个集成了Docker功能的轻NAS系统，完全开源免费，它对系统的占用非常低，非常适合玩客云这类的小主机。"><a href="#本篇文章介绍如何在玩客云上刷CasaOS系统，打造一个性价比极高的个人轻NAS。简单来说，CasaOS是一个集成了Docker功能的轻NAS系统，完全开源免费，它对系统的占用非常低，非常适合玩客云这类的小主机。" class="headerlink" title="本篇文章介绍如何在玩客云上刷CasaOS系统，打造一个性价比极高的个人轻NAS。简单来说，CasaOS是一个集成了Docker功能的轻NAS系统，完全开源免费，它对系统的占用非常低，非常适合玩客云这类的小主机。"></a>本篇文章介绍如何在玩客云上刷CasaOS系统，打造一个性价比极高的个人轻NAS。简单来说，CasaOS是一个集成了Docker功能的轻NAS系统，完全开源免费，它对系统的占用非常低，非常适合玩客云这类的小主机。</h4><h4 id="因为支持Docker，还可以安装很多好玩的应用：比如安装Home-Assistant让它成为智能家居网关，安装Memos打造一个可多端同步的私有云笔记，等等。"><a href="#因为支持Docker，还可以安装很多好玩的应用：比如安装Home-Assistant让它成为智能家居网关，安装Memos打造一个可多端同步的私有云笔记，等等。" class="headerlink" title="因为支持Docker，还可以安装很多好玩的应用：比如安装Home Assistant让它成为智能家居网关，安装Memos打造一个可多端同步的私有云笔记，等等。"></a>因为支持Docker，还可以安装很多好玩的应用：比如安装Home Assistant让它成为智能家居网关，安装Memos打造一个可多端同步的私有云笔记，等等。</h4><h4 id="并且它CasaOS结合cpolar内网穿透还可以实现即使出门在外（公网环境），也能随时访问到家中的（本地内网）玩客云主机。详情可参考《玩客云刷CasaOS系统后如何安装内网穿透实现远程访问本地文件》"><a href="#并且它CasaOS结合cpolar内网穿透还可以实现即使出门在外（公网环境），也能随时访问到家中的（本地内网）玩客云主机。详情可参考《玩客云刷CasaOS系统后如何安装内网穿透实现远程访问本地文件》" class="headerlink" title="并且它CasaOS结合cpolar内网穿透还可以实现即使出门在外（公网环境），也能随时访问到家中的（本地内网）玩客云主机。详情可参考《玩客云刷CasaOS系统后如何安装内网穿透实现远程访问本地文件》"></a>并且它CasaOS结合cpolar内网穿透还可以实现即使出门在外（公网环境），也能随时访问到家中的（本地内网）玩客云主机。详情可参考<a href="https://blog.csdn.net/xianyun_0355/article/details/137931849">《玩客云刷CasaOS系统后如何安装内网穿透实现远程访问本地文件》</a></h4><p><u><em><strong>玩客云主机可以去咸鱼上购买购买二手物品须谨慎！切勿离开交易平台！</strong></em></u></p><h4 id="没有刷机的机器价格区间（包含邮费）：25-30"><a href="#没有刷机的机器价格区间（包含邮费）：25-30" class="headerlink" title="没有刷机的机器价格区间（包含邮费）：25~30"></a>没有刷机的机器价格区间（包含邮费）：25~30</h4><h4 id="买直接刷好的贵2快左右"><a href="#买直接刷好的贵2快左右" class="headerlink" title="买直接刷好的贵2快左右"></a>买直接刷好的贵2快左右</h4><h4 id="手动装机推荐教程，跟着视频前5分钟做就可以了"><a href="#手动装机推荐教程，跟着视频前5分钟做就可以了" class="headerlink" title="手动装机推荐教程，跟着视频前5分钟做就可以了"></a>手动装机<a href="https://www.bilibili.com/video/BV1dM4m1f7t9">推荐教程</a>，跟着视频前5分钟做就可以了</h4><p><img src="https://example.com/casaos-screenshot.png" alt="CasaOS界面"></p><h3 id="什么是CasaOS？"><a href="#什么是CasaOS？" class="headerlink" title="什么是CasaOS？"></a>什么是CasaOS？</h3><p>CasaOS 是一个集成了 Docker 功能的轻量级 NAS 系统，完全开源免费。它对系统资源的占用非常低，非常适合像玩客云这样的小型主机。</p><h3 id="CasaOS-的功能亮点"><a href="#CasaOS-的功能亮点" class="headerlink" title="CasaOS 的功能亮点"></a>CasaOS 的功能亮点</h3><ol><li><strong>支持 Docker</strong>（主要）：可以安装各种应用，例如：<ul><li><strong>Home Assistant</strong>：将其变成智能家居网关。</li><li><strong>Memos</strong>：打造多端同步的私有云笔记。</li></ul></li><li><strong>内网穿透</strong>：结合 cpolar，可以实现远程访问，即使在公网环境下，也能随时访问家中的玩客云主机。</li></ol><h2 id="操作还是比价傻瓜式的"><a href="#操作还是比价傻瓜式的" class="headerlink" title="操作还是比价傻瓜式的"></a>操作还是比价傻瓜式的</h2><h3 id="远程访问的实现"><a href="#远程访问的实现" class="headerlink" title="远程访问的实现"></a>远程访问的实现</h3><p>通过 CasaOS 和 cpolar 的结合，你可以在外网环境下访问本地文件。具体教程请参考：<a href="https://blog.csdn.net/xianyun_0355/article/details/137931849">《玩客云刷CasaOS系统后如何安装内网穿透实现远程访问本地文件》</a></p><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>通过 CasaOS 和玩客云的结合，你可以低成本打造一个功能强大的轻NAS系统。不仅可以满足日常文件存储需求，还能通过 Docker 安装各种应用，进一步扩展其功能。如果你对 CasaOS 感兴趣，不妨动手试试！</p><h3 id="Docke的使用"><a href="#Docke的使用" class="headerlink" title="Docke的使用"></a>Docke的使用</h3><p>Docke在安装玩CasaOS后就自动安装了无需额外安装如果安装应用失败可以尝试换源解决问题常见的源有</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">SSH或者打开casaos终端；执行：</span><br><span class="line">国内执行：bash &lt;(curl -sSL https://gitee.com/xjxjin/scripts ... _docker_registry.sh)</span><br><span class="line">国际执行：bash &lt;(curl -sSL https://github.com/xjxjin/script ... _docker_registry.sh)</span><br><span class="line">或者添加第三方商店：</span><br><span class="line"></span><br><span class="line">https://play.cuse.eu.org/Cp0204-AppStore-Play.zip</span><br><span class="line">https://casaos-appstore.paodayag.dev/linuxserver.zip</span><br><span class="line">https://casaos-appstore.paodayag.dev/coolstore.zip</span><br><span class="line">https://play.cuse.eu.org/Cp0204-AppStore-Play-arm.zip</span><br><span class="line">https://paodayag.dev/casaos-appstore-edge.zip</span><br><span class="line">https://github.com/mr-manuel/CasaOS-HomeAutomation-AppStore/archive/refs/tags/latest.zip</span><br><span class="line">https://github.com/bigbeartechworld/big-bear-casaos/archive/refs/heads/master.zip</span><br><span class="line">https://github.com/mariosemes/CasaOS-TMCstore/archive/refs/heads/main.zip</span><br><span class="line">https://github.com/arch3rPro/Pentest-Docker/archive/refs/heads/master.zip</span><br></pre></td></tr></table></figure><blockquote><p>必备内网穿透DDNS-GO\家庭影音JUEEYFIN\下载QBITTORRENT皆可本地安装</p></blockquote>]]>
    </content>
    <id>https://www.tenxiaodao.top/wan-ke-yun-zuo-qing-nas-di-cheng-ben-kan-fan/</id>
    <link href="https://www.tenxiaodao.top/wan-ke-yun-zuo-qing-nas-di-cheng-ben-kan-fan/"/>
    <published>2025-03-20T11:45:40.000Z</published>
    <summary>
      <![CDATA[<h1 id="玩客云做轻NAS低成本看番"><a href="#玩客云做轻NAS低成本看番" class="headerlink" title="玩客云做轻NAS低成本看番"></a>玩客云做轻NAS低成本看番</h1><h4 id="本篇文章介绍如何在玩客云上刷CasaOS系]]>
    </summary>
    <title>玩客云做轻NAS低成本看番</title>
    <updated>2026-05-01T12:11:31.368Z</updated>
  </entry>
  <entry>
    <author>
      <name>周言志</name>
    </author>
    <category term="网络基础" scheme="https://www.tenxiaodao.top/categories/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/"/>
    <category term="网络安全" scheme="https://www.tenxiaodao.top/tags/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/"/>
    <category term="网络技术" scheme="https://www.tenxiaodao.top/tags/%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF/"/>
    <category term="交换机" scheme="https://www.tenxiaodao.top/tags/%E4%BA%A4%E6%8D%A2%E6%9C%BA/"/>
    <category term="ARP" scheme="https://www.tenxiaodao.top/tags/ARP/"/>
    <content>
      <![CDATA[<h1 id="交换机的工作原理"><a href="#交换机的工作原理" class="headerlink" title="交换机的工作原理"></a>交换机的工作原理</h1><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>交换机是一种工作在数据链路层（第二层）的网络设备，是现代局域网的核心组件。它通过高效的转发机制和灵活的网络管理功能，提升了网络性能和可靠性。本文将详细介绍交换机的工作原理、ARP 协议及其安全问题，以及生成树技术的应用。</p><hr><h2 id="一、交换机的工作原理"><a href="#一、交换机的工作原理" class="headerlink" title="一、交换机的工作原理"></a>一、交换机的工作原理</h2><h3 id="1-MAC-地址学习"><a href="#1-MAC-地址学习" class="headerlink" title="1. MAC 地址学习"></a>1. MAC 地址学习</h3><p>交换机通过接收数据帧，记录源 MAC 地址和对应的端口，建立 MAC 地址表，用于后续的数据转发。</p><h3 id="2-帧转发与过滤"><a href="#2-帧转发与过滤" class="headerlink" title="2. 帧转发与过滤"></a>2. 帧转发与过滤</h3><p>根据目标 MAC 地址查询 MAC 地址表，将数据帧转发到对应的端口，避免广播到所有端口，从而提升网络效率。</p><h3 id="3-全双工通信"><a href="#3-全双工通信" class="headerlink" title="3. 全双工通信"></a>3. 全双工通信</h3><p>交换机支持多个端口同时发送和接收数据，实现全双工通信，进一步提升网络性能。</p><h3 id="4-广播与泛洪"><a href="#4-广播与泛洪" class="headerlink" title="4. 广播与泛洪"></a>4. 广播与泛洪</h3><p>当目标 MAC 地址未知时，交换机会将数据帧广播到所有端口，直到目标设备响应。</p><h3 id="5-VLAN-支持"><a href="#5-VLAN-支持" class="headerlink" title="5. VLAN 支持"></a>5. VLAN 支持</h3><p>交换机通过 VLAN 技术划分逻辑网络，实现网络隔离和管理，增强网络的安全性和灵活性。</p><hr><h2 id="二、ARP-协议的工作原理"><a href="#二、ARP-协议的工作原理" class="headerlink" title="二、ARP 协议的工作原理"></a>二、ARP 协议的工作原理</h2><h3 id="1-什么是-ARP-协议？"><a href="#1-什么是-ARP-协议？" class="headerlink" title="1. 什么是 ARP 协议？"></a>1. 什么是 ARP 协议？</h3><p>ARP（地址解析协议）是一种工作在网络层的协议，用于将 IP 地址解析为 MAC 地址，确保局域网内设备能够正常通信。</p><h3 id="2-ARP-的工作流程"><a href="#2-ARP-的工作流程" class="headerlink" title="2. ARP 的工作流程"></a>2. ARP 的工作流程</h3><ol><li><strong>发送 ARP 请求</strong>：当设备需要发送数据时，会广播一个 ARP 请求，询问目标 IP 地址对应的 MAC 地址。</li><li><strong>接收 ARP 请求</strong>：局域网内的所有设备都会接收到该请求，但只有目标设备会响应。</li><li><strong>发送 ARP 响应</strong>：目标设备单播一个 ARP 响应，告知其 MAC 地址。</li><li><strong>更新 ARP 表</strong>：设备将 ARP 响应结果缓存到 ARP 表中，以便后续通信直接使用。</li><li><strong>数据传输</strong>：完成地址解析后，设备即可通过目标设备的 MAC 地址发送数据帧。</li></ol><hr><h2 id="三、ARP-泛洪攻击及其防护"><a href="#三、ARP-泛洪攻击及其防护" class="headerlink" title="三、ARP 泛洪攻击及其防护"></a>三、ARP 泛洪攻击及其防护</h2><h3 id="1-什么是-ARP-泛洪？"><a href="#1-什么是-ARP-泛洪？" class="headerlink" title="1. 什么是 ARP 泛洪？"></a>1. 什么是 ARP 泛洪？</h3><p>ARP 泛洪是一种网络攻击行为，攻击者通过发送大量伪造的 ARP 请求或响应数据包，导致局域网内设备频繁更新 ARP 表，从而引发以下问题：</p><ul><li><strong>网络拥塞</strong>：大量 ARP 数据包占用网络带宽。</li><li><strong>ARP 表污染</strong>：伪造的 ARP 数据包会导致设备存储错误的 IP-MAC 映射关系。</li><li><strong>中间人攻击</strong>：攻击者伪造网关的 MAC 地址，劫持目标设备的流量。</li><li><strong>拒绝服务攻击</strong>：目标设备资源耗尽，无法正常处理合法请求。</li></ul><h3 id="2-防护措施"><a href="#2-防护措施" class="headerlink" title="2. 防护措施"></a>2. 防护措施</h3><ol><li><strong>启用动态 ARP 检测（DAI）</strong>：交换机验证 ARP 数据包的合法性。</li><li><strong>使用静态 ARP 表</strong>：为关键设备配置固定的 IP-MAC 映射关系。</li><li><strong>网络隔离</strong>：通过 VLAN 技术限制广播域的范围。</li><li><strong>速率限制</strong>：限制 ARP 数据包的发送速率，防止短时间内大量数据包涌入。</li><li><strong>监控与报警</strong>：部署网络监控工具，及时发现并阻止异常的 ARP 流量。</li></ol><hr><h2 id="四、生成树技术（STP）"><a href="#四、生成树技术（STP）" class="headerlink" title="四、生成树技术（STP）"></a>四、生成树技术（STP）</h2><h3 id="1-什么是生成树技术？"><a href="#1-什么是生成树技术？" class="headerlink" title="1. 什么是生成树技术？"></a>1. 什么是生成树技术？</h3><p>生成树技术（Spanning Tree Protocol，简称 STP）是一种用于以太网交换机的网络协议，旨在消除网络中的环路，确保网络的稳定性和高效性。</p><h3 id="2-工作原理"><a href="#2-工作原理" class="headerlink" title="2. 工作原理"></a>2. 工作原理</h3><ol><li><strong>根桥选举</strong>：通过交换机之间的 BPDU（桥协议数据单元）交换，选举出网络中的根桥（Root Bridge）。</li><li><strong>路径成本计算</strong>：每个交换机根据到根桥的路径成本选择最佳路径。</li><li><strong>端口角色分配</strong>：<ul><li><strong>根端口（Root Port）</strong>：每个非根桥选择一个到根桥的最短路径端口。</li><li><strong>指定端口（Designated Port）</strong>：每个网络段中负责转发流量的端口。</li><li><strong>阻塞端口（Blocked Port）</strong>：非根端口中未被选为根端口或指定端口的端口会被阻塞。</li></ul></li><li><strong>环路消除</strong>：通过阻塞多余的端口，生成树技术确保网络中不存在环路。</li><li><strong>动态调整</strong>：当网络拓扑发生变化时，生成树协议会重新计算生成树，确保网络的连通性。</li></ol><h3 id="3-优化版本"><a href="#3-优化版本" class="headerlink" title="3. 优化版本"></a>3. 优化版本</h3><ul><li><strong>快速生成树协议（RSTP）</strong>：提高收敛速度。</li><li><strong>多生成树协议（MSTP）</strong>：支持多实例生成树，适用于复杂网络。</li></ul><hr><h2 id="五、总结"><a href="#五、总结" class="headerlink" title="五、总结"></a>五、总结</h2><p>交换机作为局域网的核心设备，通过 MAC 地址学习、帧转发、VLAN 支持等功能，提升了网络的性能和可靠性。同时，ARP 协议和生成树技术在网络通信和环路消除中发挥了重要作用。然而，ARP 泛洪等安全威胁也需要引起重视，通过启用动态 ARP 检测、网络隔离等手段，可以有效防范攻击，保障网络的稳定性和安全性。</p><hr><blockquote><p><strong>参考资料</strong>：</p><ul><li><a href="https://example.com/arp">ARP 协议详解</a></li><li><a href="https://example.com/stp">生成树协议（STP）</a></li><li><a href="https://example.com/switch">交换机的工作原理</a></li></ul></blockquote>]]>
    </content>
    <id>https://www.tenxiaodao.top/jiao-huan-ji-de-gong-zuo-yuan-li/</id>
    <link href="https://www.tenxiaodao.top/jiao-huan-ji-de-gong-zuo-yuan-li/"/>
    <published>2025-01-17T16:49:29.000Z</published>
    <summary>
      <![CDATA[<h1 id="交换机的工作原理"><a href="#交换机的工作原理" class="headerlink" title="交换机的工作原理"></a>交换机的工作原理</h1><h2 id="前言"><a href="#前言" class="headerlink" titl]]>
    </summary>
    <title>交换机的工作原理</title>
    <updated>2026-05-01T12:11:31.367Z</updated>
  </entry>
</feed>
