<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>zuige</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://zuige.cc.cd/</id>
  <link href="https://zuige.cc.cd/" rel="alternate"/>
  <link href="https://zuige.cc.cd/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, zuige</rights>
  <title>zuige's blog</title>
  <updated>2026-10-02T16:48:15.914Z</updated>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="Docker" scheme="https://zuige.cc.cd/tags/Docker/"/>
    <category term="部署" scheme="https://zuige.cc.cd/tags/%E9%83%A8%E7%BD%B2/"/>
    <category term="运维" scheme="https://zuige.cc.cd/tags/%E8%BF%90%E7%BB%B4/"/>
    <content>
      <![CDATA[<p>第一次接触 Docker 时，最容易把它想成一台缩小版的虚拟机。这样理解不算完全错，但会错过 Docker 真正有用的地方。</p><p>Docker 负责把代码、依赖和启动方式装进一个可重复运行的环境。项目换一台机器，或者重新部署一次，尽量还是原来的样子。对需要长期运行的服务来说，这比在服务器上手动安装一堆软件可靠得多。</p><h2 id="Docker是什么"><a href="#Docker是什么" class="headerlink" title="Docker是什么"></a>Docker是什么</h2><p>Docker 里最常见的几个词，可以先这样记：</p><ul><li>镜像是运行环境的模板，里面有代码、依赖和启动方式；</li><li>容器是镜像启动后的实例，可以启动、停止、重启和删除；</li><li>Dockerfile 是构建镜像的说明书；</li><li>数据卷用来保存容器之外的重要数据；</li><li>Docker Compose 用来管理多个容器。</li></ul><p>镜像和容器的关系很像程序文件和运行中的程序。镜像可以反复使用，容器则是一次具体的运行。</p><p>容器可以随时重建，所以数据库、上传文件和业务数据不应该只放在容器内部。它们需要通过数据卷或目录映射保存到容器之外。</p><h2 id="先跑一个容器"><a href="#先跑一个容器" class="headerlink" title="先跑一个容器"></a>先跑一个容器</h2><p>安装 Docker 后，可以先确认命令行和 Docker 服务是否正常：</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><code class="hljs bash">docker --version<br>docker run hello-world<br></code></pre></td></tr></table></figure><p>接着运行一个简单的 Web 容器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d --name demo-web -p 8080:80 nginx<br></code></pre></td></tr></table></figure><p>这条命令里，<code>-d</code> 表示后台运行，<code>--name</code> 给容器起一个名字，<code>-p 8080:80</code> 把宿主机的 8080 端口映射到容器的 80 端口。</p><p>启动后可以访问 <code>http://localhost:8080</code>。端口映射就是容器和外部世界之间的入口；没有映射时，容器里的服务通常只能被 Docker 网络中的其他容器访问。</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><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker ps<br>docker ps -a<br>docker stop demo-web<br>docker start demo-web<br>docker <span class="hljs-built_in">rm</span> demo-web<br></code></pre></td></tr></table></figure><p><code>docker ps</code> 查看正在运行的容器，<code>docker ps -a</code> 会把已经停止的容器也列出来。删除容器不会自动删除镜像。</p><h2 id="镜像从哪来"><a href="#镜像从哪来" class="headerlink" title="镜像从哪来"></a>镜像从哪来</h2><p>镜像一般来自公共镜像仓库、私有镜像仓库，或者本地构建。</p><p>查看本地镜像：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker image <span class="hljs-built_in">ls</span><br></code></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><code class="hljs bash">docker pull nginx:latest<br></code></pre></td></tr></table></figure><p>镜像名后面的标签用来区分版本。学习时使用 <code>latest</code> 没问题，生产环境最好固定经过验证的版本。否则同一条命令过几天再次执行，可能得到一套不同的运行环境，排查问题和回滚都会变麻烦。</p><h2 id="自己构建镜像"><a href="#自己构建镜像" class="headerlink" title="自己构建镜像"></a>自己构建镜像</h2><p>项目需要自己的运行环境时，可以写一个 Dockerfile：</p><figure class="highlight dockerfile"><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><code class="hljs dockerfile"><span class="hljs-keyword">FROM</span> python:<span class="hljs-number">3.12</span>-slim<br><span class="hljs-keyword">WORKDIR</span><span class="language-bash"> /app</span><br><span class="hljs-keyword">COPY</span><span class="language-bash"> requirements.txt .</span><br><span class="hljs-keyword">RUN</span><span class="language-bash"> pip install -r requirements.txt</span><br><span class="hljs-keyword">COPY</span><span class="language-bash"> . .</span><br><span class="hljs-keyword">CMD</span><span class="language-bash"> [<span class="hljs-string">&quot;python&quot;</span>, <span class="hljs-string">&quot;main.py&quot;</span>]</span><br></code></pre></td></tr></table></figure><p>这几行分别完成了几件事：选择基础镜像，设置工作目录，安装依赖，复制项目文件，指定容器启动命令。</p><p>构建镜像：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker build -t demo-app:1.0 .<br></code></pre></td></tr></table></figure><p>最后的 <code>.</code> 是构建上下文，表示 Docker 可以读取当前目录中的文件。项目通常还需要一个 <code>.dockerignore</code>，把缓存、日志、虚拟环境和本地密钥排除在外。</p><p>构建完成后启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d --name demo-app demo-app:1.0<br></code></pre></td></tr></table></figure><p>如果修改了代码或依赖，应该重新构建镜像，而不是长期手动修改正在运行的容器。手动改动通常会在容器重建后消失。</p><h2 id="配置怎么传"><a href="#配置怎么传" class="headerlink" title="配置怎么传"></a>配置怎么传</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><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d \<br>  --name demo-app \<br>  -e APP_ENV=production \<br>  -e API_URL=https://example.invalid \<br>  demo-app:1.0<br></code></pre></td></tr></table></figure><p>真实密码、令牌和私钥不要写进 Dockerfile，也不要提交到代码仓库。开发环境可以使用本地环境变量或未纳入版本控制的配置文件，生产环境则应使用更安全的密钥管理方式。</p><h2 id="数据放哪儿"><a href="#数据放哪儿" class="headerlink" title="数据放哪儿"></a>数据放哪儿</h2><p>如果重要数据直接写在容器文件系统里，容器重建时就可能一起消失。常见做法是把宿主机目录或命名卷映射到容器内：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">宿主机数据目录  →  容器内数据目录<br></code></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><code class="hljs bash">docker volume create demo-data<br>docker run -d --name demo-db -v demo-data:/var/lib/app demo-db:1.0<br></code></pre></td></tr></table></figure><p>数据卷解决的是保存位置，不等于自动备份。重要数据仍然需要定期备份，并且最好实际演练一次恢复。</p><p>如果项目涉及交易或外部账户，还要分清两种状态：平台自己的数据库可以通过数据卷保存，外部交易平台上的真实仓位属于外部账户，不会因为 Docker 容器删除而消失。</p><h2 id="多个服务一起跑"><a href="#多个服务一起跑" class="headerlink" title="多个服务一起跑"></a>多个服务一起跑</h2><p>一个容器可以用 <code>docker run</code> 管理。前端、后端和数据库一起运行时，逐个输入命令很容易漏掉参数，这时可以使用 Docker Compose。</p><p>Compose 用配置文件描述服务、网络、端口、环境变量和数据卷，然后统一管理整组服务：</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><code class="hljs bash">docker compose up -d<br>docker compose ps<br>docker compose logs -f &lt;service&gt;<br>docker compose stop<br></code></pre></td></tr></table></figure><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><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs text">浏览器<br>  ↓ HTTP / HTTPS<br>前端容器：Web 服务器和页面<br>  ↓ Docker 内部网络<br>后端容器：API 和业务逻辑<br>  ↓<br>宿主机上的持久化数据<br></code></pre></td></tr></table></figure><p>前端通常负责页面和请求转发，后端负责接口和业务逻辑。外部用户只访问需要公开的入口，内部服务通过 Docker 网络互相连接。</p><h2 id="出问题先看什么"><a href="#出问题先看什么" class="headerlink" title="出问题先看什么"></a>出问题先看什么</h2><p>容器显示“运行中”，只说明进程还在，并不代表应用真的正常。排查时可以按这个顺序来：</p><ol><li>查看 Compose 服务状态；</li><li>查看相关服务的最近日志；</li><li>确认数据目录是否正确挂载；</li><li>请求健康检查接口；</li><li>对照外部平台状态和本地业务账本；</li><li>最后再考虑重启、重建或回滚。</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><code class="hljs bash">docker logs demo-app<br>docker logs -f demo-app<br>docker inspect demo-app<br>docker <span class="hljs-built_in">exec</span> -it demo-app sh<br></code></pre></td></tr></table></figure><p><code>docker exec</code> 适合临时检查。不要把手动修改容器当成正式修复方式，永久改动应该回到代码或 Dockerfile 中。</p><h2 id="更新要能回滚"><a href="#更新要能回滚" class="headerlink" title="更新要能回滚"></a>更新要能回滚</h2><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><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><code class="hljs text">本地修改并测试<br>    ↓<br>推送代码<br>    ↓<br>生成部署包并上传<br>    ↓<br>备份当前版本和数据<br>    ↓<br>构建新镜像<br>    ↓<br>执行数据迁移<br>    ↓<br>健康检查<br>    ↓<br>成功切换，失败回滚<br></code></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><code class="hljs bash">docker compose up -d --build<br></code></pre></td></tr></table></figure><p>正式环境更新时，最好使用带备份、检查和回滚逻辑的部署脚本。服务器上的更新不应该只剩下一次临时的 <code>git pull</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><code class="hljs bash">docker image <span class="hljs-built_in">ls</span><br>docker ps -a<br>docker system <span class="hljs-built_in">df</span><br></code></pre></td></tr></table></figure><p>清理空间时不要随手执行 <code>docker system prune</code>。它可能删除暂时不用的镜像和缓存，让回滚变得困难。</p><h2 id="最后记住三件事"><a href="#最后记住三件事" class="headerlink" title="最后记住三件事"></a>最后记住三件事</h2><p>使用 Docker 时，真正需要长期记住的不是几十条命令，而是三个问题：</p><ul><li>数据保存在哪里；</li><li>服务如何更新；</li><li>出问题时如何回滚。</li></ul><p>这三个问题有明确答案，Docker 就只是一个运行工具。它把环境和部署流程固定下来，真正让项目稳定运行的，还是备份、检查和回滚这些习惯。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/10/03/docker-project-introduction/</id>
    <link href="https://zuige.cc.cd/2026/10/03/docker-project-introduction/"/>
    <published>2026-10-02T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>第一次接触 Docker 时，最容易把它想成一台缩小版的虚拟机。这样理解不算完全错，但会错过 Docker 真正有用的地方。</p>
<p>Docker 负责把代码、依赖和启动方式装进一个可重复运行的环境。项目换一台机器，或者重新部署一次，尽量还是原来的样子。对需要长期运行]]>
    </summary>
    <title>Docker的认识与使用</title>
    <updated>2026-10-02T16:48:15.914Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="服务器" scheme="https://zuige.cc.cd/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <category term="Tabby" scheme="https://zuige.cc.cd/tags/Tabby/"/>
    <category term="教程" scheme="https://zuige.cc.cd/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="MobaXterm" scheme="https://zuige.cc.cd/tags/MobaXterm/"/>
    <category term="SSH" scheme="https://zuige.cc.cd/tags/SSH/"/>
    <content>
      <![CDATA[<p>最近开始管理自己的服务器，最先接触的是 Tabby，后来又开始使用 MobaXterm。两者都能通过 SSH 连接 Linux 服务器，也都能保存连接信息、使用密钥、传文件；但实际用下来，手感并不一样。</p><p>我现在更常用 MobaXterm。它的界面不如 Tabby 简洁好看，但在 SSH 里输入和执行命令时，我这边感觉更跟手、更稳定。Tabby 的图形化界面和标签页设计我很喜欢，不过连接服务器后输入命令偶尔有一点卡顿，不太舒服。这篇只记录两款 SSH 工具的区别和最基础用法，不讨论服务器部署方案。</p><p>文中用 <code>YOUR_SERVER_IP</code> 代替服务器地址，用 <code>root</code> 作为示例用户名。实际连接时要换成自己的公网 IP、端口和用户名；不要把密码、私钥或真实服务器信息发到公开文章和截图里。</p><h2 id="先说结论"><a href="#先说结论" class="headerlink" title="先说结论"></a>先说结论</h2><p>如果主要在 Windows 上管理服务器，希望 SSH 终端输入顺畅、连接后能直接看到服务器文件，并且偶尔会用到远程桌面、X11 或其他远程协议，我更推荐先试 <strong>MobaXterm</strong>。</p><p>如果在意界面美观、希望在 Windows、macOS 和 Linux 上使用同一款终端，或者偏好标签页、分屏和可定制的终端体验，<strong>Tabby</strong> 更值得尝试。</p><p>它们没有谁绝对更好。SSH 最重要的是“自己输入命令时是否舒服、连接是否稳定”。我现在把 MobaXterm 当作主力连接工具，Tabby 留作界面更轻松、需要多标签浏览时的选择。</p><h2 id="两个工具分别是什么"><a href="#两个工具分别是什么" class="headerlink" title="两个工具分别是什么"></a>两个工具分别是什么</h2><h3 id="Tabby：更像现代终端"><a href="#Tabby：更像现代终端" class="headerlink" title="Tabby：更像现代终端"></a>Tabby：更像现代终端</h3><p>Tabby 是跨平台终端工具，支持 Windows、macOS 和 Linux。它本身可以管理 SSH 连接，也支持标签页、分屏、SFTP、跳板机和端口转发等功能。<a href="https://tabby.sh/about/features">Tabby 官方功能页</a></p><p>它给我的第一感觉是界面清爽：配置、主题、标签页和分屏都做得比较现代。如果平时除了 SSH，还经常在本机开 PowerShell、Git Bash 或 WSL，Tabby 可以把这些终端放在同一个界面里管理。</p><h3 id="MobaXterm：更像-Windows-上的远程工具箱"><a href="#MobaXterm：更像-Windows-上的远程工具箱" class="headerlink" title="MobaXterm：更像 Windows 上的远程工具箱"></a>MobaXterm：更像 Windows 上的远程工具箱</h3><p>MobaXterm 更偏向 Windows 的“一体化远程连接工具”。除 SSH 外，它还集成了 SFTP 文件浏览、RDP、VNC、FTP、X11 等功能。<a href="https://mobaxterm.mobatek.net/documentation.html">MobaXterm 官方文档</a></p><p>我喜欢它的一点是：通过 SSH 成功登录后，通常可以在左侧直接看到服务器文件目录，不必再额外开一个传输软件。对于刚接触服务器的人来说，这种“终端和文件都在一页”的形式很直观。</p><h2 id="详细对比"><a href="#详细对比" class="headerlink" title="详细对比"></a>详细对比</h2><table><thead><tr><th>项目</th><th>Tabby</th><th>MobaXterm</th></tr></thead><tbody><tr><td>平台</td><td>Windows、macOS、Linux</td><td>以 Windows 为主</td></tr><tr><td>界面风格</td><td>简洁、现代，主题和终端体验更突出</td><td>功能密集，更像传统远程管理工具</td></tr><tr><td>SSH 输入体验</td><td>我的环境里偶尔感觉有轻微卡顿</td><td>我的环境里输入和回显更跟手</td></tr><tr><td>保存连接</td><td>可以保存 SSH 配置，方便复用</td><td>可以保存 Session，适合管理多台机器</td></tr><tr><td>文件传输</td><td>支持 SFTP</td><td>SSH 连接后常可直接使用左侧 SFTP 文件树</td></tr><tr><td>分屏与标签页</td><td>标签页、分屏是强项</td><td>也支持多会话和标签页，重点偏远程管理</td></tr><tr><td>其他协议</td><td>重点是终端与 SSH 工作流</td><td>集成 RDP、VNC、FTP、X11 等更多工具</td></tr><tr><td>更适合谁</td><td>喜欢现代终端、跨平台使用的人</td><td>Windows 上管理服务器、希望一站式操作的人</td></tr></tbody></table><h3 id="界面与使用感"><a href="#界面与使用感" class="headerlink" title="界面与使用感"></a>界面与使用感</h3><p>Tabby 的配置页面、图标、主题和标签栏都很舒服，适合长时间打开很多终端窗口。它的分屏也方便，例如左边查看日志、右边执行命令，或者同时连两台服务器。</p><p>MobaXterm 的界面信息更多，刚开始可能显得有点复杂；但它把常用的远程操作摆得很直接。尤其是 SSH 登录成功后左侧的 SFTP 文件树，上传、下载、拖拽文件会比较省事。</p><h3 id="命令输入为什么可能感觉卡"><a href="#命令输入为什么可能感觉卡" class="headerlink" title="命令输入为什么可能感觉卡"></a>命令输入为什么可能感觉卡</h3><p>SSH 命令输入的卡顿不一定是 Tabby 本身的问题，也可能来自网络延迟、服务器负载、终端渲染、字体或插件。因为我在 MobaXterm 中感觉更顺，所以目前选择它做主要工具；这只是我的实际体验，不代表 Tabby 在所有电脑和服务器上都会慢。</p><p>如果想判断问题在哪，可以用同一台服务器、同一个网络、同一个账号分别测试两款工具：连续输入几行短命令，观察字符是否立即回显；再运行 <code>ping</code>、<code>top</code> 之类的命令看网络和服务器是否本身有延迟。若只有 Tabby 卡，优先检查它的主题、字体、插件或关闭后重新打开测试；若两边都卡，更可能是网络或服务器状态造成的。</p><h2 id="MobaXterm-的基础用法"><a href="#MobaXterm-的基础用法" class="headerlink" title="MobaXterm 的基础用法"></a>MobaXterm 的基础用法</h2><p>下面是我现在更常用的连接方式。</p><h3 id="新建-SSH-会话"><a href="#新建-SSH-会话" class="headerlink" title="新建 SSH 会话"></a>新建 SSH 会话</h3><ol><li>打开 MobaXterm，点击左上角的 <strong>Session</strong>。</li><li>选择 <strong>SSH</strong>。</li><li>在 <strong>Remote host</strong> 填写服务器公网 IP，例如 <code>YOUR_SERVER_IP</code>。</li><li>勾选 <strong>Specify username</strong>，填写服务器用户名，例如 <code>root</code>。</li><li>SSH 端口默认是 <code>22</code>；如果服务器改过端口，在 Port 中填实际数字。</li><li>点击 <strong>OK</strong> 连接。第一次连接会要求确认服务器主机指纹，确认目标确实是自己的服务器后再接受。</li></ol><p>首次使用密码登录时，终端会要求输入服务器密码。输入时屏幕通常不会显示星号或字符，这是正常的，输完直接按 Enter 即可。</p><p>连接成功后，MobaXterm 会把这台机器保存到左侧的 Sessions 列表。之后双击该会话就能重新连接，不必每次再填 IP 和用户名。</p><h3 id="用左侧-SFTP-面板传文件"><a href="#用左侧-SFTP-面板传文件" class="headerlink" title="用左侧 SFTP 面板传文件"></a>用左侧 SFTP 面板传文件</h3><p>SSH 登录成功后，MobaXterm 通常会在左侧显示服务器文件目录。这是基于 SFTP 的文件浏览器。</p><ul><li>从本地向服务器上传：把文件拖进左侧对应目录，或使用上传按钮。</li><li>从服务器下载：选中服务器文件，再选择下载到本地的位置。</li><li>新建、重命名或删除文件：先确认当前路径和目标文件，再用右键菜单操作。</li></ul><p>命令行和 SFTP 面板看到的是同一台服务器、同一个登录用户的文件。比如终端显示在 <code>/root</code>，左侧文件树通常也是这个用户有权限访问的位置。涉及删除或覆盖时，我会先在终端用 <code>pwd</code> 和 <code>ls -la</code> 确认目录，再操作文件面板。</p><h3 id="常用的几个界面操作"><a href="#常用的几个界面操作" class="headerlink" title="常用的几个界面操作"></a>常用的几个界面操作</h3><ul><li><strong>多开会话</strong>：再次双击左侧保存的服务器，会在新的标签页连接。</li><li><strong>断开连接</strong>：关闭对应标签页即可；不会关掉服务器上的程序。</li><li><strong>复制文本</strong>：服务器命令和报错优先复制为文本，不要只截屏，后续排查更方便。</li><li><strong>保存密码</strong>：可以保存，但更建议之后配置 SSH 密钥登录，避免把密码长期交给客户端保存。</li></ul><h2 id="Tabby-的基础用法"><a href="#Tabby-的基础用法" class="headerlink" title="Tabby 的基础用法"></a>Tabby 的基础用法</h2><p>Tabby 的 SSH 配置思路和 MobaXterm 一样，只是界面组织不同。</p><ol><li>打开 Tabby 的设置或连接管理区域，新建一个 <strong>SSH profile</strong>。</li><li>填写主机地址 <code>YOUR_SERVER_IP</code>、端口 <code>22</code> 和登录用户名。</li><li>首次可以按服务器当前的认证方式输入密码；之后可在配置中选择私钥登录。</li><li>保存配置，回到主界面打开这个 profile，建立 SSH 会话。</li></ol><p>Tabby 比较适合把常用连接整理成 profile。例如可以按“新加坡服务器”“测试服务器”“本机 WSL”来命名，避免只靠 IP 区分。它也可以在同一个窗口内开多个标签页或分屏；但如果你的使用感受和我一样，SSH 输入时不够舒服，就没有必要勉强把它当主力工具。</p><h2 id="两者都能使用-SSH-密钥"><a href="#两者都能使用-SSH-密钥" class="headerlink" title="两者都能使用 SSH 密钥"></a>两者都能使用 SSH 密钥</h2><p>无论使用 Tabby 还是 MobaXterm，SSH 密钥的原理都一样：私钥留在本机，公钥放在服务器用户的 <code>~/.ssh/authorized_keys</code>。客户端里需要选择的是本机的<strong>私钥</strong>，不能把私钥上传到服务器，也不要把它发给任何人。</p><p>配置方法细节可以单独展开写；对当前选择工具来说，只要记住一件事：换 SSH 客户端不需要重新生成一套密钥。只要用户名、服务器地址和同一把私钥都正确，两款工具都可以连接同一台服务器。</p><h2 id="我现在的选择"><a href="#我现在的选择" class="headerlink" title="我现在的选择"></a>我现在的选择</h2><p>我目前会继续用 MobaXterm 连接服务器，因为命令输入的手感对我更重要，左侧 SFTP 文件面板也很方便。Tabby 的图形化界面、标签页和整体视觉体验确实更好，之后如果它在我的环境里输入更稳定，或者我需要跨平台管理终端，我还会再用它。</p><p>工具的选择不用一次定死。先用最顺手、能稳定完成连接和文件管理的工具，再慢慢形成自己的工作流就够了。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/10/02/tabby-vs-mobaxterm-ssh-key-docker/</id>
    <link href="https://zuige.cc.cd/2026/10/02/tabby-vs-mobaxterm-ssh-key-docker/"/>
    <published>2026-10-02T07:00:00.000Z</published>
    <summary>从实际使用感受出发，对比 Tabby 和 MobaXterm 的界面、SSH 操作、文件传输和适用场景，并记录两者最基础的连接方法。</summary>
    <title>Tabby 和 MobaXterm 对比</title>
    <updated>2026-10-02T16:20:37.373Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="阿里云" scheme="https://zuige.cc.cd/tags/%E9%98%BF%E9%87%8C%E4%BA%91/"/>
    <category term="服务器" scheme="https://zuige.cc.cd/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <category term="Ubuntu" scheme="https://zuige.cc.cd/tags/Ubuntu/"/>
    <category term="Tabby" scheme="https://zuige.cc.cd/tags/Tabby/"/>
    <category term="教程" scheme="https://zuige.cc.cd/tags/%E6%95%99%E7%A8%8B/"/>
    <content>
      <![CDATA[<p>最近开了一台阿里云新加坡轻量应用服务器，系统是 Ubuntu 22.04。第一次从本地连接海外服务器时，需要先确认实例网络和 SSH 端口，再在终端软件里填写连接信息。</p><p>这篇文章记录我的入门流程：用 Tabby 建立 SSH 连接、检查服务器状态，再把密码登录换成 SSH 密钥登录。出于安全考虑，我没有公开自己的公网 IP、实例 ID、密码或私钥；文中的服务器地址用 <code>YOUR_SERVER_IP</code> 代替，项目目录统一写成 <code>taest</code>，方便跟着示例操作。</p><h2 id="准备服务器信息"><a href="#准备服务器信息" class="headerlink" title="准备服务器信息"></a>准备服务器信息</h2><p>在阿里云轻量应用服务器控制台找到实例，先记录这些信息：</p><table><thead><tr><th>信息</th><th>用途</th></tr></thead><tbody><tr><td>公网 IP 地址</td><td>Tabby 连接服务器的地址</td></tr><tr><td>SSH 端口</td><td>默认通常为 <code>22</code>，若改过端口则填写实际端口</td></tr><tr><td>登录用户名</td><td>初始账号按创建方式和镜像设置，常见为 <code>root</code></td></tr><tr><td>登录凭据</td><td>服务器密码，或之后配置的 SSH 私钥</td></tr></tbody></table><h2 id="检查阿里云防火墙"><a href="#检查阿里云防火墙" class="headerlink" title="检查阿里云防火墙"></a>检查阿里云防火墙</h2><p>进入轻量应用服务器实例的<strong>防火墙</strong>页面，确认有一条允许 SSH 的入方向规则：</p><ul><li>协议：TCP</li><li>端口：22（如果 SSH 使用了其他端口，就填写实际端口）</li><li>来源：优先限制为自己的公网 IP；临时排查时才考虑放宽</li></ul><p>轻量应用服务器使用控制台中的防火墙规则管理入方向流量，不使用 ECS 的安全组。Linux 实例通常默认放行 22、80、443 端口，但仍应在控制台检查规则是否存在且已启用。<a href="https://help.aliyun.com/zh/simple-application-server/user-guide/manage-the-firewall-of-a-server">阿里云轻量应用服务器防火墙说明</a></p><p>如果实例内部还启用了 UFW，也要确认对应端口允许通过。Ubuntu 上可以用下面的命令查看状态：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> ufw status<br></code></pre></td></tr></table></figure><p>如果 UFW 已启用且 SSH 端口没有放行，先添加规则再调整其他防火墙设置：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> ufw allow 22/tcp<br></code></pre></td></tr></table></figure><p>如果你使用的不是 22 端口，请把命令中的 <code>22</code> 换成实际端口。修改远程登录防火墙时要保留当前 SSH 连接，确认新规则生效后再关闭旧规则，避免把自己锁在服务器外。</p><h2 id="在-Tabby-创建-SSH-连接"><a href="#在-Tabby-创建-SSH-连接" class="headerlink" title="在 Tabby 创建 SSH 连接"></a>在 Tabby 创建 SSH 连接</h2><p>Tabby 是一款支持 SSH 的终端工具，也提供连接配置和 SFTP 文件传输等功能。<a href="https://tabby.sh/">Tabby 官方网站</a>介绍了它内置的 SSH 客户端和连接管理器。</p><ol><li>打开 Tabby，进入配置文件或连接管理页面，新增一个 <strong>SSH</strong> 配置。</li><li>在主机（Host）中填写阿里云实例的公网 IP，例如 <code>YOUR_SERVER_IP</code>。</li><li>端口（Port）填写 <code>22</code>，用户名（Username）填写实例实际使用的账号。</li><li>首次连接可以选择密码认证，输入在阿里云控制台设置或重置的服务器密码。</li><li>保存配置并连接。首次连接时，Tabby 会询问是否信任服务器主机密钥；确认这是自己的实例后再接受。</li></ol><p>阿里云轻量服务器没有通用的默认登录密码。若尚未设置密码，可以在控制台重置服务器密码，然后再用 SSH 客户端登录。<a href="https://help.aliyun.com/zh/simple-application-server/getting-started/getting-started">阿里云轻量应用服务器新手指引</a></p><p>连接成功后会看到类似下面的命令行提示符：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">root@iZxxxx:~#<br></code></pre></td></tr></table></figure><p>此时已经进入远程 Ubuntu 服务器。注意，终端里运行的命令会作用于服务器，而不是本地电脑。</p><h2 id="首次登录后的基础检查"><a href="#首次登录后的基础检查" class="headerlink" title="首次登录后的基础检查"></a>首次登录后的基础检查</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><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">whoami</span><br>lsb_release -a<br><span class="hljs-built_in">df</span> -h<br>free -h<br></code></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><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt update<br><span class="hljs-built_in">sudo</span> apt upgrade -y<br></code></pre></td></tr></table></figure><p>如果更新了内核或系统核心组件，Ubuntu 可能会提示需要重启。可以在确认没有正在运行的重要任务后执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> reboot<br></code></pre></td></tr></table></figure><p>服务器重启后，Tabby 当前连接会断开，等待实例恢复运行后重新连接即可。</p><h2 id="SSH-登录后常用命令"><a href="#SSH-登录后常用命令" class="headerlink" title="SSH 登录后常用命令"></a>SSH 登录后常用命令</h2><p>下面这些是我连上服务器后常用的命令。可以先记住“我在哪、我是谁、机器状态怎么样”，再去找项目目录。</p><h3 id="先看懂命令怎么写"><a href="#先看懂命令怎么写" class="headerlink" title="先看懂命令怎么写"></a>先看懂命令怎么写</h3><p>Linux 命令通常由“命令名 + 选项 + 操作对象”组成。比如：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">ls</span> -la /root<br></code></pre></td></tr></table></figure><ul><li><code>ls</code> 是 <code>list</code> 的缩写，表示列出内容。</li><li><code>-l</code> 表示长格式（long format），会显示权限、链接数、所有者、所属组、大小和修改时间等信息。</li><li><code>-a</code> 表示全部（all），包括名称以 <code>.</code> 开头的隐藏文件。</li><li><code>/root</code> 是要查看的目录；省略它时，<code>ls</code> 默认查看当前目录。</li></ul><p><code>-l</code> 和 <code>-a</code> 可以合并写成 <code>-la</code>，也可以写成 <code>-al</code>，效果相同。很多 Linux 命令都遵循这种习惯：短选项前面加一个减号，可以组合使用；长选项通常写成 <code>--</code> 开头，例如 <code>ls --all</code>。</p><p>执行 <code>ls -la</code> 后，每一行大致可以这样读：</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><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs text">-rw-r--r--  1 root root  1234 Sep 24 10:00 notes.txt<br>│            │ │    │     │       │             └─ 文件名<br>│            │ │    │     │       └─ 修改时间<br>│            │ │    │     └─ 文件大小（字节）<br>│            │ │    └─ 所属组<br>│            │ └─ 所有者<br>│            └─ 硬链接数量<br>└─ 文件类型和权限<br></code></pre></td></tr></table></figure><p>开头的权限串里，第一位表示类型（<code>-</code> 普通文件、<code>d</code> 目录、<code>l</code> 软链接），后面每三位一组，分别是所有者、所属组和其他用户的读（<code>r</code>）、写（<code>w</code>）、执行（<code>x</code>）权限。</p><table><thead><tr><th>写法</th><th>英文记法</th><th>好记的意思</th></tr></thead><tbody><tr><td><code>pwd</code></td><td>print working directory</td><td>打印当前工作目录，看看“我在哪”</td></tr><tr><td><code>whoami</code></td><td>who am I</td><td>我是谁，显示当前用户名</td></tr><tr><td><code>id</code></td><td>identity</td><td>查看用户的 UID、GID 和所属组</td></tr><tr><td><code>hostname</code></td><td>host name</td><td>这台主机的名字</td></tr><tr><td><code>cd</code></td><td>change directory</td><td>切换目录</td></tr><tr><td><code>ls</code></td><td>list</td><td>列出目录内容</td></tr><tr><td><code>mkdir</code></td><td>make directory</td><td>创建目录</td></tr><tr><td><code>cat</code></td><td>concatenate</td><td>原意是连接文件；常用来直接显示文件内容</td></tr><tr><td><code>cp</code></td><td>copy</td><td>复制文件或目录</td></tr><tr><td><code>mv</code></td><td>move</td><td>移动或重命名文件</td></tr><tr><td><code>rm</code></td><td>remove</td><td>删除文件或目录</td></tr><tr><td><code>df</code></td><td>disk free</td><td>查看文件系统还剩多少空间</td></tr><tr><td><code>du</code></td><td>disk usage</td><td>查看文件或目录占用了多少空间</td></tr><tr><td><code>nproc</code></td><td>number of processing units</td><td>查看可用的处理器数量</td></tr><tr><td><code>ps</code></td><td>process status</td><td>查看进程状态</td></tr><tr><td><code>ss</code></td><td>socket statistics</td><td>查看网络套接字和监听端口</td></tr><tr><td><code>grep</code></td><td>global regular expression print</td><td>按文本模式查找匹配内容</td></tr><tr><td><code>uname</code></td><td>Unix name</td><td>查看系统和内核信息</td></tr><tr><td><code>apt</code></td><td>Advanced Package Tool</td><td>Ubuntu 上安装和更新软件包的工具</td></tr><tr><td><code>chmod</code></td><td>change mode</td><td>修改文件权限</td></tr><tr><td><code>chown</code></td><td>change owner</td><td>修改文件所有者</td></tr></tbody></table><p>有些常用写法不是英文首字母缩写，而是看参数来理解：</p><table><thead><tr><th>参数</th><th>英文记法</th><th>例子和含义</th></tr></thead><tbody><tr><td><code>-a</code></td><td>all</td><td><code>ls -a</code>：显示全部内容，包括隐藏文件</td></tr><tr><td><code>-l</code></td><td>long</td><td><code>ls -l</code>：用详细的长格式显示</td></tr><tr><td><code>-h</code></td><td>human-readable</td><td><code>df -h</code>、<code>free -h</code>：用 KB、MB、GB 等易读单位显示</td></tr><tr><td><code>-R</code></td><td>recursive</td><td><code>ls -R</code>：递归列出子目录</td></tr><tr><td><code>-d</code></td><td>directory</td><td><code>ls -ld /bin</code>：查看目录本身的信息，而不是列出目录里的内容</td></tr></tbody></table><p>例如 <code>ss -tlnp</code> 可以拆成：<code>-t</code> 只看 TCP、<code>-l</code> 只看正在监听的端口、<code>-n</code> 直接显示数字端口、<code>-p</code> 同时显示相关进程。<code>ps aux</code> 中 <code>a</code>、<code>u</code>、<code>x</code> 是组合选项，用来查看更多用户和不挂在终端上的进程；这类老命令选项不一定都能按一个英文单词直译，记住它的用途更实用。</p><p>命令帮助可以用 <code>命令 --help</code> 查看，例如 <code>ls --help</code>。也可以用 <code>man ls</code> 打开手册页，按 <code>/关键词</code> 搜索，按 <code>q</code> 退出。记忆英文是帮助理解，具体行为还是以当前系统里的帮助信息为准。</p><p>命令行里还有几个常见连接符：<code>|</code> 是管道，把左边命令的输出交给右边命令；<code>&amp;&amp;</code> 表示左边成功后才运行右边；<code>;</code> 表示依次执行，前一条成功与否都继续执行。例如 <code>df -h; free -h; uptime</code> 会连续查看磁盘、内存和运行时间。</p><p>重定向也很常见。以 <code>find / -type d -name &quot;.git&quot; 2&gt;/dev/null</code> 为例：<code>2&gt;</code> 把错误输出重定向，<code>/dev/null</code> 是系统里的“丢弃口”，所以 <code>2&gt;/dev/null</code> 的效果就是不显示错误信息。它不会隐藏正常找到的结果。</p><table><thead><tr><th>写法</th><th>英文记法</th><th>含义</th></tr></thead><tbody><tr><td><code>head</code></td><td>head</td><td>看文件或输出的开头；默认显示前 10 行</td></tr><tr><td><code>tail</code></td><td>tail</td><td>看文件或输出的末尾；常用来查看日志最后几行</td></tr><tr><td><code>wc</code></td><td>word count</td><td>统计行数、单词数或字符数；<code>wc -l</code> 只统计行数</td></tr><tr><td><code>systemctl</code></td><td>system control</td><td>管理 systemd 服务，例如查看 SSH 服务状态</td></tr><tr><td><code>sudo</code></td><td>常记作 “superuser do”</td><td>临时以管理员权限运行命令；运行前要确认命令内容</td></tr></tbody></table><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><code class="hljs bash">ps aux | <span class="hljs-built_in">head</span>                 <span class="hljs-comment"># 把进程列表交给 head，只看开头几行</span><br><span class="hljs-built_in">ls</span> /usr/bin | <span class="hljs-built_in">wc</span> -l           <span class="hljs-comment"># 列出命令，再统计输出行数</span><br><span class="hljs-built_in">tail</span> -n 50 ~/deploy.log       <span class="hljs-comment"># 看日志最后 50 行；-n 指定行数</span><br>find / -name <span class="hljs-string">&quot;package.json&quot;</span> 2&gt;/dev/null  <span class="hljs-comment"># 找文件，同时丢弃错误输出</span><br></code></pre></td></tr></table></figure><p>记住一条就够用：先认命令名，再看减号后面的选项，最后看路径或文件名；遇到不熟悉的写法，先查 <code>--help</code> 或 <code>man</code>，不要直接给不懂的命令加 <code>sudo</code>。</p><h3 id="先确认位置和账号"><a href="#先确认位置和账号" class="headerlink" title="先确认位置和账号"></a>先确认位置和账号</h3><table><thead><tr><th>命令</th><th>作用</th><th>例子</th></tr></thead><tbody><tr><td><code>pwd</code></td><td>显示当前所在目录</td><td>输出 <code>/root</code></td></tr><tr><td><code>whoami</code></td><td>显示当前用户名</td><td>输出 <code>root</code></td></tr><tr><td><code>hostname</code></td><td>查看这台机器的主机名</td><td>输出当前主机名</td></tr><tr><td><code>id</code></td><td>查看用户 ID 和所属用户组</td><td>输出 UID、GID 和 groups</td></tr></tbody></table><h3 id="查看和切换目录"><a href="#查看和切换目录" class="headerlink" title="查看和切换目录"></a>查看和切换目录</h3><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><code class="hljs bash"><span class="hljs-built_in">ls</span>                         <span class="hljs-comment"># 列出当前目录</span><br><span class="hljs-built_in">ls</span> -la                     <span class="hljs-comment"># 显示详细信息和隐藏文件</span><br><span class="hljs-built_in">ls</span> -R                      <span class="hljs-comment"># 递归列出子目录</span><br><span class="hljs-built_in">cd</span> /                       <span class="hljs-comment"># 切换到根目录</span><br><span class="hljs-built_in">cd</span> ~                       <span class="hljs-comment"># 回到当前用户的家目录</span><br>tree -L 2                  <span class="hljs-comment"># 用树状结构显示两层目录</span><br></code></pre></td></tr></table></figure><p>Ubuntu 默认可能没有 <code>tree</code>，需要先安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt update &amp;&amp; <span class="hljs-built_in">sudo</span> apt install tree -y<br></code></pre></td></tr></table></figure><h3 id="找到项目目录"><a href="#找到项目目录" class="headerlink" title="找到项目目录"></a>找到项目目录</h3><p>项目通常放在家目录、<code>/opt</code> 或 <code>/var/www</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><code class="hljs bash"><span class="hljs-built_in">ls</span> -la ~<br><span class="hljs-built_in">ls</span> -la /home /opt /var/www<br></code></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></pre></td><td class="code"><pre><code class="hljs bash">find / -<span class="hljs-built_in">type</span> d -name <span class="hljs-string">&quot;.git&quot;</span> 2&gt;/dev/null<br>find / -name <span class="hljs-string">&quot;package.json&quot;</span> 2&gt;/dev/null<br>find / -<span class="hljs-built_in">type</span> d -name <span class="hljs-string">&quot;*taest*&quot;</span> 2&gt;/dev/null<br></code></pre></td></tr></table></figure><p>全盘搜索可能比较慢；如果已经大致知道项目放在哪里，先把 <code>/</code> 换成 <code>~</code>、<code>/opt</code> 或 <code>/var/www</code>，会更快一些。项目目录的例子统一写作 <code>taest</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/taest &amp;&amp; <span class="hljs-built_in">ls</span> -la<br></code></pre></td></tr></table></figure><h3 id="快速了解系统"><a href="#快速了解系统" class="headerlink" title="快速了解系统"></a>快速了解系统</h3><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><code class="hljs bash"><span class="hljs-built_in">cd</span> / &amp;&amp; <span class="hljs-built_in">ls</span> -la              <span class="hljs-comment"># 查看根目录下的主要目录</span><br><span class="hljs-built_in">ls</span> -ld /bin /sbin /lib      <span class="hljs-comment"># 查看系统目录及软链接信息</span><br><span class="hljs-built_in">ls</span> /usr/bin | <span class="hljs-built_in">wc</span> -l         <span class="hljs-comment"># 粗略统计 /usr/bin 中的命令数量</span><br><span class="hljs-built_in">cat</span> /etc/os-release         <span class="hljs-comment"># 查看 Ubuntu 发行版信息</span><br><span class="hljs-built_in">uname</span> -a                    <span class="hljs-comment"># 查看内核和系统架构信息</span><br></code></pre></td></tr></table></figure><p>Ubuntu 中 <code>/bin</code>、<code>/sbin</code>、<code>/lib</code> 常会链接到 <code>/usr</code> 下对应目录。检查 <code>/tmp</code> 时要记得它用于临时文件，系统可能按自身策略定期清理其中的内容。</p><h3 id="查看服务器状态"><a href="#查看服务器状态" class="headerlink" title="查看服务器状态"></a>查看服务器状态</h3><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><code class="hljs bash"><span class="hljs-built_in">df</span> -h                       <span class="hljs-comment"># 查看各文件系统的磁盘使用量</span><br><span class="hljs-built_in">du</span> -sh ~/*                  <span class="hljs-comment"># 查看家目录下各项的大小</span><br>free -h                     <span class="hljs-comment"># 查看内存使用情况</span><br><span class="hljs-built_in">nproc</span>                       <span class="hljs-comment"># 查看可用 CPU 核数</span><br><span class="hljs-built_in">uptime</span>                      <span class="hljs-comment"># 查看运行时间和系统负载</span><br>top                         <span class="hljs-comment"># 实时查看进程，按 q 退出</span><br>ps aux | <span class="hljs-built_in">head</span>               <span class="hljs-comment"># 快速查看进程列表</span><br>w                           <span class="hljs-comment"># 查看当前登录用户和活动</span><br></code></pre></td></tr></table></figure><h3 id="查看网络和服务"><a href="#查看网络和服务" class="headerlink" title="查看网络和服务"></a>查看网络和服务</h3><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><code class="hljs bash">ip addr                     <span class="hljs-comment"># 查看网卡和 IP 地址</span><br>ss -tlnp                    <span class="hljs-comment"># 查看 TCP 监听端口及进程</span><br>systemctl list-units --<span class="hljs-built_in">type</span>=service --state=running  <span class="hljs-comment"># 查看运行中的服务</span><br></code></pre></td></tr></table></figure><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><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/taest &amp;&amp; <span class="hljs-built_in">ls</span> -la<br>git <span class="hljs-built_in">log</span> --oneline -5        <span class="hljs-comment"># 查看最近 5 次提交</span><br>git remote -v               <span class="hljs-comment"># 查看 Git 远程仓库地址</span><br><span class="hljs-built_in">cat</span> requirements.txt        <span class="hljs-comment"># 查看 Python 项目的依赖清单（如果有）</span><br><span class="hljs-built_in">cat</span> package.json            <span class="hljs-comment"># 查看 Node.js 项目的依赖和脚本（如果有）</span><br><span class="hljs-built_in">tail</span> -n 50 ~/deploy.log     <span class="hljs-comment"># 查看部署日志的最后 50 行</span><br><span class="hljs-built_in">history</span>                     <span class="hljs-comment"># 查看当前账号的命令历史</span><br></code></pre></td></tr></table></figure><p>查看配置、日志或命令历史时，注意不要把密码、访问令牌、私钥等凭据复制到公开位置。</p><h3 id="Ubuntu-目录结构速记"><a href="#Ubuntu-目录结构速记" class="headerlink" title="Ubuntu 目录结构速记"></a>Ubuntu 目录结构速记</h3><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><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></pre></td><td class="code"><pre><code class="hljs text">/             根目录，整个文件系统的起点<br>├── etc/      系统和服务配置，例如 SSH、Nginx 配置<br>├── home/     普通用户的家目录<br>├── root/     root 用户的家目录<br>├── opt/      常见的第三方软件或自建项目目录<br>├── var/      经常变化的数据<br>│   ├── log/  系统和服务日志<br>│   └── www/  常见的网站文件目录<br>├── usr/      大量系统程序和共享文件<br>├── bin/      基础命令，Ubuntu 上常链接到 /usr/bin<br>├── tmp/      临时文件目录，内容可能被系统清理<br>└── proc/     提供进程和内核信息的虚拟文件系统<br></code></pre></td></tr></table></figure><p>我自己的记法是：配置先去 <code>/etc</code> 找，项目先看 <code>/home</code>、<code>/opt</code> 和 <code>/var/www</code>，日志先看 <code>/var/log</code>，系统命令通常在 <code>/usr/bin</code>。</p><h3 id="最实用的“五连击”"><a href="#最实用的“五连击”" class="headerlink" title="最实用的“五连击”"></a>最实用的“五连击”</h3><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><code class="hljs bash"><span class="hljs-built_in">pwd</span>; <span class="hljs-built_in">whoami</span>; <span class="hljs-built_in">ls</span> -la                    <span class="hljs-comment"># 我在哪、我是谁、当前目录有什么</span><br><span class="hljs-built_in">cd</span> / &amp;&amp; <span class="hljs-built_in">ls</span> -la                         <span class="hljs-comment"># 看系统根目录</span><br>find ~ -name <span class="hljs-string">&quot;.git&quot;</span> 2&gt;/dev/null       <span class="hljs-comment"># 在家目录下找 Git 项目</span><br><span class="hljs-built_in">df</span> -h; free -h; <span class="hljs-built_in">uptime</span>                 <span class="hljs-comment"># 快速看磁盘、内存和负载</span><br><span class="hljs-built_in">cd</span> ~/taest &amp;&amp; <span class="hljs-built_in">ls</span> -la                   <span class="hljs-comment"># 进入项目目录</span><br></code></pre></td></tr></table></figure><p>熟悉这些基础命令后，遇到“项目在哪、端口有没有监听、磁盘是否满了”这类问题，就可以先在 Tabby 里自己定位。</p><h2 id="建议改用-SSH-密钥登录"><a href="#建议改用-SSH-密钥登录" class="headerlink" title="建议改用 SSH 密钥登录"></a>建议改用 SSH 密钥登录</h2><p>密码可以用于首次连接，但日常管理更适合使用 SSH 密钥。私钥留在自己的电脑上，服务器只保存与之对应的公钥；不要把私钥上传到服务器或提交到 Git 仓库。</p><h3 id="在-Windows-生成密钥"><a href="#在-Windows-生成密钥" class="headerlink" title="在 Windows 生成密钥"></a>在 Windows 生成密钥</h3><p>在本地 PowerShell 中运行：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">ssh<span class="hljs-literal">-keygen</span> <span class="hljs-literal">-t</span> ed25519 <span class="hljs-literal">-C</span> <span class="hljs-string">&quot;aliyun-tabby&quot;</span><br></code></pre></td></tr></table></figure><p>按提示选择保存位置，并为私钥设置一个口令。默认密钥通常保存在：</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><code class="hljs text">C:\Users\你的用户名\.ssh\id_ed25519<br>C:\Users\你的用户名\.ssh\id_ed25519.pub<br></code></pre></td></tr></table></figure><p>其中 <code>.pub</code> 文件是公钥，可以放到服务器；没有 <code>.pub</code> 后缀的文件是私钥，只留在本地。</p><h3 id="将公钥放到服务器"><a href="#将公钥放到服务器" class="headerlink" title="将公钥放到服务器"></a>将公钥放到服务器</h3><p>先用 Tabby 的密码方式连接服务器，然后在服务器终端运行：</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><code class="hljs bash"><span class="hljs-built_in">mkdir</span> -p ~/.ssh<br><span class="hljs-built_in">chmod</span> 700 ~/.ssh<br>nano ~/.ssh/authorized_keys<br></code></pre></td></tr></table></figure><p>在本地 PowerShell 显示公钥内容：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Get-Content</span> <span class="hljs-string">&quot;<span class="hljs-variable">$env:USERPROFILE</span>\.ssh\id_ed25519.pub&quot;</span><br></code></pre></td></tr></table></figure><p>复制整行公钥，粘贴到服务器的 <code>authorized_keys</code> 文件中。保存退出后执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">chmod</span> 600 ~/.ssh/authorized_keys<br></code></pre></td></tr></table></figure><p>然后在 Tabby 的 SSH 配置中选择密钥认证，并指向本地 <code>id_ed25519</code> 私钥文件。先新开一个 Tabby 连接测试密钥确实能登录，再考虑关闭密码认证；不要在密钥登录验证成功前关闭密码登录。</p><h2 id="常见连接问题"><a href="#常见连接问题" class="headerlink" title="常见连接问题"></a>常见连接问题</h2><h3 id="连接超时"><a href="#连接超时" class="headerlink" title="连接超时"></a>连接超时</h3><p>优先检查公网 IP 是否正确、实例是否运行，以及阿里云防火墙有没有放行 SSH 端口。若使用了 UFW 等系统防火墙，也要检查系统内部规则。阿里云建议在无法远程连接时逐项检查端口放行和本地网络。<a href="https://help.aliyun.com/zh/simple-application-server/user-guide/faq-about-remote-connection">远程连接常见问题</a></p><h3 id="Connection-refused"><a href="#Connection-refused" class="headerlink" title="Connection refused"></a>Connection refused</h3><p>这通常表示网络已经到达服务器，但目标端口没有 SSH 服务监听，或端口填写不正确。可以通过阿里云 Workbench 登录后检查服务：</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><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl status ssh<br><span class="hljs-built_in">sudo</span> ss -tlnp | grep ssh<br></code></pre></td></tr></table></figure><p>Ubuntu 的 SSH 服务单元通常名为 <code>ssh</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><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt install openssh-server<br><span class="hljs-built_in">sudo</span> systemctl <span class="hljs-built_in">enable</span> --now ssh<br></code></pre></td></tr></table></figure><h3 id="Permission-denied"><a href="#Permission-denied" class="headerlink" title="Permission denied"></a>Permission denied</h3><p>检查 Tabby 中的用户名、认证方式和密钥路径。密码登录时要确认密码是当前服务器密码；密钥登录时确认服务器 <code>authorized_keys</code> 中保存的是配对的公钥，并检查目录和文件权限。</p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>这台服务器的连接流程可以概括为：在阿里云确认公网 IP 和 SSH 端口、检查防火墙规则、在 Tabby 保存 SSH 配置，首次连接后完成系统更新，再切换为密钥登录。</p><p>海外服务器的访问速度会受本地网络、运营商路由、实例地域和线路等因素影响。新加坡只是实例所在地域，具体体验还要以自己的网络测试为准。配置完成后，Tabby 可以保存连接配置，后续打开配置就能登录，也可以使用 SFTP 浏览和传输服务器文件。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/23/aliyun-singapore-server-tabby/</id>
    <link href="https://zuige.cc.cd/2026/09/23/aliyun-singapore-server-tabby/"/>
    <published>2026-09-23T07:00:00.000Z</published>
    <summary>记录购买阿里云新加坡轻量应用服务器后，如何检查防火墙、使用 Tabby 建立 SSH 连接、配置密钥登录并完成 Ubuntu 的基础初始化。</summary>
    <title>轻量服务器入门</title>
    <updated>2026-09-24T11:53:14.637Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="Codex" scheme="https://zuige.cc.cd/tags/Codex/"/>
    <category term="Windows" scheme="https://zuige.cc.cd/tags/Windows/"/>
    <category term="故障排查" scheme="https://zuige.cc.cd/tags/%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5/"/>
    <category term="沙盒" scheme="https://zuige.cc.cd/tags/%E6%B2%99%E7%9B%92/"/>
    <content>
      <![CDATA[<p>昨天用 Codex 改博客时，终端和文件编辑工具突然变得不稳定：普通 PowerShell 有时可以执行，但需要受限环境的操作会失败或卡住。最后弹出了一个更直接的错误窗口：Windows 找不到 <code>codex-windows-sandbox-setup.exe</code>。</p><p><img src="/img/codex-windows-sandbox-setup-error.png" alt="Windows 找不到 codex-windows-sandbox-setup.exe"></p><p>这篇文章记录问题的判断过程，以及在 Windows 上可行的恢复方法。</p><h2 id="现象：不是项目坏了，也不只是终端坏了"><a href="#现象：不是项目坏了，也不只是终端坏了" class="headerlink" title="现象：不是项目坏了，也不只是终端坏了"></a>现象：不是项目坏了，也不只是终端坏了</h2><p>一开始很容易把问题归因于 Hexo、PowerShell 或网络代理。但实际表现有些矛盾：</p><ul><li>PowerShell 的基础命令可以运行；</li><li>工作目录中的常规文件读写可以通过；</li><li>GitHub 网络检测可以返回成功；</li><li>Codex 发起某些终端会话、应用补丁或沙盒检查时，却可能失败。</li></ul><p>弹窗中的文件名很关键：<code>codex-windows-sandbox-setup.exe</code>。它是 Codex 在 Windows 上准备沙盒环境时会用到的初始化程序。找不到该程序时，失败的是这一步初始化，而不是某个具体的博客项目。</p><h2 id="原因：Windows-提权沙盒初始化没有完成"><a href="#原因：Windows-提权沙盒初始化没有完成" class="headerlink" title="原因：Windows 提权沙盒初始化没有完成"></a>原因：Windows 提权沙盒初始化没有完成</h2><p>Codex 在 Windows 原生环境中有两种沙盒实现：</p><table><thead><tr><th>配置</th><th>含义</th></tr></thead><tbody><tr><td><code>elevated</code></td><td>使用带提权的 Windows 沙盒初始化流程，也是默认推荐方式。</td></tr><tr><td><code>unelevated</code></td><td>使用不依赖提权助手的兼容初始化&#x2F;预检流程。</td></tr></tbody></table><p>当 <code>elevated</code> 的初始化程序无法找到、权限提升失败，或其初始化环境发生异常时，Codex 就可能无法正常创建受限终端。出现“找不到 <code>codex-windows-sandbox-setup.exe</code>”的窗口，正是这一类问题的明确信号。</p><p>至于初始化程序为什么不可用，可能与应用更新不完整、旧路径残留、权限环境或安全软件拦截有关。单凭这个窗口无法准确判定是哪一种，所以不建议一上来就删除配置、重置登录信息或修改项目文件。</p><h2 id="解决：切换到-unelevated"><a href="#解决：切换到-unelevated" class="headerlink" title="解决：切换到 unelevated"></a>解决：切换到 unelevated</h2><p>打开 Codex 的用户配置文件：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">C:\Users\你的用户名\.codex\config.toml<br></code></pre></td></tr></table></figure><p>在文件中添加或修改为：</p><figure class="highlight toml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs toml"><span class="hljs-section">[windows]</span><br><span class="hljs-attr">sandbox</span> = <span class="hljs-string">&quot;unelevated&quot;</span><br></code></pre></td></tr></table></figure><p>保存后，<strong>完全退出 Codex 再重新打开</strong>。只关闭当前对话或窗口不一定会让沙盒初始化程序重新加载。</p><p>我的情况切换后，终端命令、文件修改、Hexo 构建和 GitHub Pages 部署都恢复了正常。</p><h2 id="unelevated-是不是关闭沙盒？"><a href="#unelevated-是不是关闭沙盒？" class="headerlink" title="unelevated 是不是关闭沙盒？"></a>unelevated 是不是关闭沙盒？</h2><p>不是。</p><p><code>unelevated</code> 只是换了一种 Windows 沙盒的底层初始化方式，Codex 的文件访问和命令权限仍会按照当前的权限策略执行。它适合没有管理员权限，或者 <code>elevated</code> 初始化失败的场景。</p><p>OpenAI 的 Codex 配置文档也说明：Windows 上通常推荐 <code>elevated</code>；当管理员权限不可用，或提权初始化失败时，可以将 <code>unelevated</code> 作为回退方案。 <a href="https://learn.chatgpt.com/fr-FR/docs/config-file/config-basic">Codex 配置说明</a></p><h2 id="恢复后如何确认"><a href="#恢复后如何确认" class="headerlink" title="恢复后如何确认"></a>恢复后如何确认</h2><p>重启后，可以依次做几个轻量测试：</p><ol><li>在 Codex 内运行一个简单的 PowerShell 命令，例如 <code>Get-Location</code>；</li><li>让 Codex 在当前工作目录新建或修改一个普通文本文件；</li><li>再执行项目的构建命令，例如 Hexo 项目的 <code>npm.cmd run build</code>。</li></ol><p>这几项都正常，基本就说明终端、文件写入和项目运行所需的沙盒流程恢复了。</p><h2 id="要不要改回-elevated？"><a href="#要不要改回-elevated？" class="headerlink" title="要不要改回 elevated？"></a>要不要改回 elevated？</h2><p>目前不用急着改回。只要 <code>unelevated</code> 运行稳定，就可以继续使用。以后 Codex 更新后，如果想确认提权沙盒是否已修复，再把配置改回：</p><figure class="highlight toml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs toml"><span class="hljs-section">[windows]</span><br><span class="hljs-attr">sandbox</span> = <span class="hljs-string">&quot;elevated&quot;</span><br></code></pre></td></tr></table></figure><p>重启后测试即可；如果问题再次出现，切回 <code>unelevated</code>。</p><p>另外，代理软件最好先于 Codex 启动。但代理连接问题和这个“找不到沙盒初始化程序”的错误并不是一回事；不要为了修复这个错误随意删除 <code>.codex</code> 目录、修改 <code>auth.json</code>，或取消已有的代理设置。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/07/codex-windows-sandbox-setup/</id>
    <link href="https://zuige.cc.cd/2026/09/07/codex-windows-sandbox-setup/"/>
    <published>2026-09-07T06:10:00.000Z</published>
    <summary>Codex 在 Windows 上无法启动受限终端、提示找不到 codex-windows-sandbox-setup.exe 时，可以将 Windows 沙盒实现从 elevated 切换为 unelevated，并重启 Codex。</summary>
    <title>Codex Windows 沙盒启动失败及解决办法</title>
    <updated>2026-09-07T05:26:11.965Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="杂记" scheme="https://zuige.cc.cd/categories/%E6%9D%82%E8%AE%B0/"/>
    <category term="路" scheme="https://zuige.cc.cd/tags/%E8%B7%AF/"/>
    <category term="方向" scheme="https://zuige.cc.cd/tags/%E6%96%B9%E5%90%91/"/>
    <category term="思考" scheme="https://zuige.cc.cd/tags/%E6%80%9D%E8%80%83/"/>
    <category term="考研" scheme="https://zuige.cc.cd/tags/%E8%80%83%E7%A0%94/"/>
    <category term="人生" scheme="https://zuige.cc.cd/tags/%E4%BA%BA%E7%94%9F/"/>
    <content>
      <![CDATA[<p>一年级下半学期，我经常路过5号楼。<br>里面总是坐满备考的人，就在一楼，玻璃窗，很透，路人监督吗，有意思。<br>后面一天一点多，刚好走过，好多人趴着睡觉，累了吗。<br>我都觉得累。<br>考研考公，到底多少的努力才能上岸，我思考了很久，摇了摇头。<br>觉得没意思。太累了，我也不聪明，我不想这样。<br>保研难，考研也不见得简单。<br>另外，有人问我你不想读研吗？<br>我沉默了。<br>他以为我不想读。<br>……</p><p>我觉得备考太累太累，很压抑。﻿<br>中考，高考，考研……无穷尽也，何时才是个头。<br>只想有个自己喜欢的生活，悠闲，惬意，慢节奏。<br>其实我想过很多，怎么去实现，最后发现也很简单，<br>就是有钱。<br>真就是现实。<br>有钱想怎么样就怎么样，除了一些东西，<br>搞几套小楼，养点小宠物，腻歪腻歪对象，不用去想着明天，花钱不用计较。<br>可现实呢，又给我一巴掌，天天在这里幻想，不切实际，我想，总有一天，我要做到。总有一天的。﻿<br>想了很久，路还是要走下去，怎么走。<br>我想﻿<br>就业吧，本科直接出来干活吧。要是四年里面，跟着奈文老师搞点小作品，可能也有不错的就业。<br>做点软件做点硬件，学学嵌入式，学习freertos，学学单片机。<br>搞了不少，也不多，<br>claude老师，还有codex老师，还有trae老师，还有ds老师，他们也一直在帮我<br>不会的可以请教他们，也还不错，<br>只是囊中羞涩，没有见识到全力以赴的老师，<br>有时他们也会有点忙，告诉我Reconnecting…1&#x2F;5<br>我不解，追问，老师你去哪里了<br>他不语，只是一味的将数字增加了一位…2&#x2F;5<br>老师失联了。<br>后来有一次我再问它，他瞥了一眼我的校园网，这些日子很多老师失联吧。<br>……</p><p>后来，无意间在父母前面提到，不考研了，就业吧，他们似乎抓到了什么，一直不放。<br>苦口婆心，劝我<br>“森啊，看看争取保研就好啦，实在不行，试试考研嘛，总有机会的”<br>我说，<br>太累了，太难了，我不想走这条路了。我说直接就业也能找到好工作的，说不定读研出来就更加学历贬值了。我还是不想考研。<br>我有我的想法，但也不一定是对的，只是觉得他们思想落后<br>跟不上时代，他们的提醒他们想我的路，似乎也不一定对。<br>某一天我认识到，<br>我错了。<br>……</p><p>二年级，一晃就一年了，似乎也没有什么作为，我更伤心了<br>除了谈了个对象，似乎也没有什么拿得出手的<br>好在对象很爱我，<br>很理解我，也很体贴我，甚至曾经说过要赚钱养我读书，<br>我笑了，不用，谢谢。<br>因为我那个时候，可能已经不想考研了，<br>但是，谢谢。<br>后面，开班会了，结束后跟班主任聊了聊，我才觉得我可能真的错了，我想过四条路，<br>一是本科进电网，二是保研，三是考研，四是本科做工程师。<br>本科进电网，就等着发配吧，流放岭南可不是说说的，偏远地区太多了，茂名汕头湛江…这还只是叫的出名的偏远地区，<br>我不想考出大山又走进大山。<br>除非成为master’s student，才能留在珠三角干活，<br>那就还是要考研…我沉默了。<br>倪老师说，我还是建议有能力就去考研，出来会不一样。<br>可以选择进电网，也可以干出点成功，去做工程师，更高级那种。<br>是啊，选择更多了，薪水跟多了，谁不想呢。<br>至于保研，已经是几乎不可能，GPA要求太高了，还要搞综评，参加一大堆乱七八糟的东西，去完成一大堆毫无意义的凑数的东西，或许只是我觉得无意义吧。<br>脑子很乱。<br>考研，不考研，在打架。<br>……</p><p>我这个时候，觉得最好的路，应该是一边考研一边搞点成果，考研后干工程师。<br>我又去问ds老师，他也认同我的选择，让我多参加比赛，多跟实验室做课题，总是有益的。对考研似乎也有点用。<br>奈文老师也很上心，问他就说方便语音联系。<br>只是他的想法有点不同，觉得兴趣之上，热爱之上，这点我也是认同。<br>唯有兴趣，才能给你稳定的产出。<br>才能提升能力，才能提升自己，这样才是想要的。<br>还提到英语其实也是很重要，是一个区别于人的特别加分项。<br>我想，默默开始背单词，练听力，练口语。<br>或许也对，不过我也想好了，<br>目标华工。<br>课内电路专业课还是要认真学，毕竟考研也用得上，奈文老师那边也继续跟着，努努力，干出点成果。<br>以成果激励自己继续摘取成果。<br>岂不闻，天无绝人之路，只要我想走，路就在脚下。<br>确定了路，我想，<br>我该走了。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/05/some%20thoughts/</id>
    <link href="https://zuige.cc.cd/2026/09/05/some%20thoughts/"/>
    <published>2026-09-04T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>一年级下半学期，我经常路过5号楼。<br>里面总是坐满备考的人，就在一楼，玻璃窗，很透，路人监督吗，有意思。<br>后面一天一点多，刚好走过，好多人趴着睡觉，累了吗。<br>我都觉得累。<br>考研考公，到底多少的努力才能上岸，我思考了很久，摇了摇头。<br>觉得没意思。太]]>
    </summary>
    <title>我沉默了，他以为我不想读研</title>
    <updated>2026-09-06T06:39:12.706Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="教程" scheme="https://zuige.cc.cd/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="Hexo" scheme="https://zuige.cc.cd/tags/Hexo/"/>
    <category term="Fluid" scheme="https://zuige.cc.cd/tags/Fluid/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>博客搭好了，但怎么改标题、加图标、管理分类标签？本文以当前博客为例，讲解 Hexo + Fluid 的目录结构和常用配置。</p><h2 id="项目结构"><a href="#项目结构" class="headerlink" title="项目结构"></a>项目结构</h2><figure class="highlight nix"><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></pre></td><td class="code"><pre><code class="hljs nix">hexo<span class="hljs-symbol">/</span><br>├── _config.yml           <span class="hljs-comment"># Hexo 主配置</span><br>├── _config.fluid.yml     <span class="hljs-comment"># Fluid 主题配置</span><br>├── package.json          <span class="hljs-comment"># 依赖管理</span><br>├── source<span class="hljs-symbol">/</span><br>│   ├── _posts<span class="hljs-symbol">/</span>           <span class="hljs-comment"># 博客文章</span><br>│   ├── images<span class="hljs-symbol">/</span>           <span class="hljs-comment"># 图片资源</span><br>│   ├── about<span class="hljs-symbol">/</span>            <span class="hljs-comment"># 关于页</span><br>│   ├── categories<span class="hljs-symbol">/</span>       <span class="hljs-comment"># 分类页</span><br>│   ├── tags<span class="hljs-symbol">/</span>             <span class="hljs-comment"># 标签页</span><br>│   └── links<span class="hljs-symbol">/</span>            <span class="hljs-comment"># 友链页</span><br>└── themes<span class="hljs-symbol">/</span>               <span class="hljs-comment"># 主题目录</span><br></code></pre></td></tr></table></figure><p>两个核心配置文件：</p><table><thead><tr><th>文件</th><th>作用</th></tr></thead><tbody><tr><td><code>_config.yml</code></td><td>站点名称、URL、作者、语言等全局设置</td></tr><tr><td><code>_config.fluid.yml</code></td><td>导航栏、颜色、字体、页面布局等主题设置</td></tr></tbody></table><h2 id="修改站点信息"><a href="#修改站点信息" class="headerlink" title="修改站点信息"></a>修改站点信息</h2><p>编辑根目录 <code>_config.yml</code>：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-comment"># Site</span><br><span class="hljs-attr">title:</span> <span class="hljs-string">zuige</span> <span class="hljs-string">blog</span>              <span class="hljs-comment"># 站点标题（浏览器标签页显示）</span><br><span class="hljs-attr">subtitle:</span> <span class="hljs-string">&#x27;落魄谷中寒风吹，春秋蝉鸣少年归。&#x27;</span>  <span class="hljs-comment"># 首页副标题</span><br><span class="hljs-attr">description:</span> <span class="hljs-string">&#x27;A blog about technology and life&#x27;</span>  <span class="hljs-comment"># 站点描述（SEO）</span><br><span class="hljs-attr">author:</span> <span class="hljs-string">zuige66</span>                <span class="hljs-comment"># 作者名</span><br><span class="hljs-attr">language:</span> <span class="hljs-string">zh-CN</span>                <span class="hljs-comment"># 语言</span><br></code></pre></td></tr></table></figure><p>修改后执行 <code>hexo clean &amp;&amp; hexo deploy</code> 生效。</p><h2 id="首页配置"><a href="#首页配置" class="headerlink" title="首页配置"></a>首页配置</h2><p>编辑 <code>_config.fluid.yml</code> 的 <code>index</code> 部分：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">index:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">/img/default.png</span>     <span class="hljs-comment"># 首页大图</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">100</span>           <span class="hljs-comment"># 图片高度（屏幕百分比）</span><br>  <span class="hljs-attr">banner_mask_alpha:</span> <span class="hljs-number">0.3</span>           <span class="hljs-comment"># 蒙版透明度</span><br><br>  <span class="hljs-attr">slogan:</span><br>    <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>    <span class="hljs-attr">text:</span> <span class="hljs-string">&quot;落魄谷中寒风吹，春秋蝉鸣少年归。&quot;</span>  <span class="hljs-comment"># 首页副标题文字</span><br><br>  <span class="hljs-attr">auto_excerpt:</span><br>    <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span>                   <span class="hljs-comment"># 首页自动截取摘要</span><br><br>  <span class="hljs-attr">post_meta:</span><br>    <span class="hljs-attr">date:</span> <span class="hljs-literal">true</span>                     <span class="hljs-comment"># 显示发布日期</span><br>    <span class="hljs-attr">category:</span> <span class="hljs-literal">true</span>                 <span class="hljs-comment"># 显示分类</span><br>    <span class="hljs-attr">tag:</span> <span class="hljs-literal">true</span>                      <span class="hljs-comment"># 显示标签</span><br></code></pre></td></tr></table></figure><h2 id="添加-GitHub-图标到首页"><a href="#添加-GitHub-图标到首页" class="headerlink" title="添加 GitHub 图标到首页"></a>添加 GitHub 图标到首页</h2><p>在 <code>_config.fluid.yml</code> 的 <code>about</code> 部分配置关于页的社交图标：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">about:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">avatar:</span> <span class="hljs-string">/images/zuige.jpg</span><br>  <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;zuige&quot;</span><br>  <span class="hljs-attr">intro:</span> <span class="hljs-string">&quot;欢迎来到我的博客&quot;</span><br>  <span class="hljs-attr">icons:</span><br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">class:</span> <span class="hljs-string">&quot;iconfont icon-github-fill&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;https://github.com/zuige66&quot;</span>, <span class="hljs-attr">tip:</span> <span class="hljs-string">&quot;GitHub&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">class:</span> <span class="hljs-string">&quot;iconfont icon-email-fill&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;mailto:your@email.com&quot;</span>, <span class="hljs-attr">tip:</span> <span class="hljs-string">&quot;Email&quot;</span> &#125;<br></code></pre></td></tr></table></figure><p>如果想在导航栏也显示 GitHub 图标，修改 <code>navbar</code> 部分：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">navbar:</span><br>  <span class="hljs-attr">blog_title:</span> <span class="hljs-string">&quot;zuige blog&quot;</span><br>  <span class="hljs-attr">menu:</span><br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;home&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-home-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;archive&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/archives/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-archive-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;category&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/categories/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-category-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;tag&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/tags/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-tags-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;about&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/about/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-user-fill&quot;</span> &#125;<br></code></pre></td></tr></table></figure><h2 id="管理分类"><a href="#管理分类" class="headerlink" title="管理分类"></a>管理分类</h2><h3 id="创建分类页"><a href="#创建分类页" class="headerlink" title="创建分类页"></a>创建分类页</h3><p><code>source/categories/index.md</code> 已存在，内容为：</p><figure class="highlight markdown"><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><code class="hljs markdown">---<br>title: 分类<br>date: 2026-09-03<br><span class="hljs-section">type: categories</span><br><span class="hljs-section">---</span><br></code></pre></td></tr></table></figure><h3 id="给文章添加分类"><a href="#给文章添加分类" class="headerlink" title="给文章添加分类"></a>给文章添加分类</h3><p>在文章的 front-matter 中指定：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-meta">---</span><br><span class="hljs-attr">title:</span> <span class="hljs-string">我的文章</span><br><span class="hljs-attr">categories:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">技术</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">前端</span><br><span class="hljs-meta">---</span><br></code></pre></td></tr></table></figure><p>一个文章可以属于多个分类。如果分类不存在，Hexo 会自动创建。</p><h3 id="分类页配置"><a href="#分类页配置" class="headerlink" title="分类页配置"></a>分类页配置</h3><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">category:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">/img/default.png</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">60</span><br>  <span class="hljs-attr">order_by:</span> <span class="hljs-string">&quot;-length&quot;</span>          <span class="hljs-comment"># 按文章数倒序</span><br>  <span class="hljs-attr">collapse_depth:</span> <span class="hljs-number">0</span>            <span class="hljs-comment"># 折叠深度，0 为全部折叠</span><br>  <span class="hljs-attr">post_limit:</span> <span class="hljs-number">10</span>               <span class="hljs-comment"># 单个分类最多显示文章数</span><br></code></pre></td></tr></table></figure><h2 id="管理标签"><a href="#管理标签" class="headerlink" title="管理标签"></a>管理标签</h2><h3 id="创建标签页"><a href="#创建标签页" class="headerlink" title="创建标签页"></a>创建标签页</h3><p><code>source/tags/index.md</code> 内容为：</p><figure class="highlight markdown"><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><code class="hljs markdown">---<br>title: 标签<br>date: 2026-09-03<br><span class="hljs-section">type: tags</span><br><span class="hljs-section">---</span><br></code></pre></td></tr></table></figure><h3 id="给文章添加标签"><a href="#给文章添加标签" class="headerlink" title="给文章添加标签"></a>给文章添加标签</h3><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-meta">---</span><br><span class="hljs-attr">title:</span> <span class="hljs-string">我的文章</span><br><span class="hljs-attr">tags:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">Hexo</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">Markdown</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">博客</span><br><span class="hljs-meta">---</span><br></code></pre></td></tr></table></figure><h3 id="标签云配置"><a href="#标签云配置" class="headerlink" title="标签云配置"></a>标签云配置</h3><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">tag:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">80</span><br>  <span class="hljs-attr">tagcloud:</span><br>    <span class="hljs-attr">min_font:</span> <span class="hljs-number">15</span>         <span class="hljs-comment"># 最小字号</span><br>    <span class="hljs-attr">max_font:</span> <span class="hljs-number">30</span>         <span class="hljs-comment"># 最大字号</span><br>    <span class="hljs-attr">unit:</span> <span class="hljs-string">px</span><br>    <span class="hljs-attr">start_color:</span> <span class="hljs-string">&quot;#BBBBEE&quot;</span>  <span class="hljs-comment"># 起始颜色</span><br>    <span class="hljs-attr">end_color:</span> <span class="hljs-string">&quot;#337ab7&quot;</span>    <span class="hljs-comment"># 结束颜色</span><br></code></pre></td></tr></table></figure><h2 id="写新文章"><a href="#写新文章" class="headerlink" title="写新文章"></a>写新文章</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">hexo new <span class="hljs-string">&quot;文章标题&quot;</span><br></code></pre></td></tr></table></figure><p>在 <code>source/_posts/</code> 下生成 <code>文章标题.md</code>，编辑后部署：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">hexo clean &amp;&amp; hexo deploy<br></code></pre></td></tr></table></figure><p>文章 front-matter 完整示例：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-meta">---</span><br><span class="hljs-attr">title:</span> <span class="hljs-string">文章标题</span><br><span class="hljs-attr">date:</span> <span class="hljs-number">2026-09-04</span><br><span class="hljs-attr">tags:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">标签1</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">标签2</span><br><span class="hljs-attr">categories:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">分类1</span><br><span class="hljs-attr">index_img:</span> <span class="hljs-string">/images/cover.jpg</span>    <span class="hljs-comment"># 首页封面图（可选）</span><br><span class="hljs-attr">banner_img:</span> <span class="hljs-string">/images/banner.jpg</span>  <span class="hljs-comment"># 文章页大图（可选）</span><br><span class="hljs-attr">math:</span> <span class="hljs-literal">true</span>                      <span class="hljs-comment"># 启用数学公式（可选）</span><br><span class="hljs-meta">---</span><br><span class="hljs-meta"></span><br><span class="hljs-string">正文内容...</span><br></code></pre></td></tr></table></figure><h2 id="关于页"><a href="#关于页" class="headerlink" title="关于页"></a>关于页</h2><p>编辑 <code>source/about/index.md</code>：</p><figure class="highlight markdown"><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></pre></td><td class="code"><pre><code class="hljs markdown">---<br>title: 关于我<br><span class="hljs-section">date: 2026-09-03</span><br><span class="hljs-section">---</span><br><br><span class="hljs-section">## Hi there!</span><br><br>这里写你的个人介绍。<br><br><span class="hljs-section">### 联系方式</span><br><br><span class="hljs-bullet">-</span> GitHub: [<span class="hljs-string">zuige66</span>](<span class="hljs-link">https://github.com/zuige66</span>)<br><span class="hljs-bullet">-</span> Email: your@email.com<br></code></pre></td></tr></table></figure><h2 id="自定义样式"><a href="#自定义样式" class="headerlink" title="自定义样式"></a>自定义样式</h2><p>如需修改颜色、字体等细节，可创建自定义 CSS 文件。</p><p>在 <code>_config.fluid.yml</code> 中指定：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">custom_css:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">/css/custom.css</span><br></code></pre></td></tr></table></figure><p>然后在 <code>source/css/custom.css</code> 中编写样式：</p><figure class="highlight css"><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><code class="hljs css"><span class="hljs-comment">/* 修改文章标题颜色 */</span><br><span class="hljs-selector-class">.post-title</span> <span class="hljs-selector-tag">a</span> &#123;<br>  <span class="hljs-attribute">color</span>: <span class="hljs-number">#2c3e50</span>;<br>&#125;<br><br><span class="hljs-comment">/* 修改正文行高 */</span><br><span class="hljs-selector-class">.post-body</span> &#123;<br>  <span class="hljs-attribute">line-height</span>: <span class="hljs-number">2</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="颜色主题"><a href="#颜色主题" class="headerlink" title="颜色主题"></a>颜色主题</h2><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">color:</span><br>  <span class="hljs-attr">body_bg_color:</span> <span class="hljs-string">&quot;#f5f5f5&quot;</span>       <span class="hljs-comment"># 页面背景</span><br>  <span class="hljs-attr">navbar_bg_color:</span> <span class="hljs-string">&quot;#2f4154&quot;</span>     <span class="hljs-comment"># 导航栏背景</span><br>  <span class="hljs-attr">navbar_text_color:</span> <span class="hljs-string">&quot;#fff&quot;</span>      <span class="hljs-comment"># 导航栏文字</span><br>  <span class="hljs-attr">text_color:</span> <span class="hljs-string">&quot;#3c4858&quot;</span>          <span class="hljs-comment"># 正文文字</span><br>  <span class="hljs-attr">post_text_color:</span> <span class="hljs-string">&quot;#2c3e50&quot;</span>     <span class="hljs-comment"># 文章文字</span><br>  <span class="hljs-attr">post_heading_color:</span> <span class="hljs-string">&quot;#1a202c&quot;</span>  <span class="hljs-comment"># 文章标题</span><br>  <span class="hljs-attr">post_link_color:</span> <span class="hljs-string">&quot;#0366d6&quot;</span>     <span class="hljs-comment"># 文章链接</span><br>  <span class="hljs-attr">link_hover_color:</span> <span class="hljs-string">&quot;#30a9de&quot;</span>    <span class="hljs-comment"># 链接悬浮</span><br>  <span class="hljs-attr">board_color:</span> <span class="hljs-string">&quot;#fff&quot;</span>            <span class="hljs-comment"># 卡片背景</span><br></code></pre></td></tr></table></figure><h2 id="常用操作速查"><a href="#常用操作速查" class="headerlink" title="常用操作速查"></a>常用操作速查</h2><table><thead><tr><th>需求</th><th>操作</th></tr></thead><tbody><tr><td>改站点标题</td><td><code>_config.yml</code> → <code>title</code></td></tr><tr><td>改首页副标题</td><td><code>_config.fluid.yml</code> → <code>index.slogan.text</code></td></tr><tr><td>加 GitHub 图标</td><td><code>_config.fluid.yml</code> → <code>about.icons</code></td></tr><tr><td>加新分类</td><td>文章 front-matter 里加 <code>categories</code></td></tr><tr><td>加新标签</td><td>文章 front-matter 里加 <code>tags</code></td></tr><tr><td>改导航栏</td><td><code>_config.fluid.yml</code> → <code>navbar.menu</code></td></tr><tr><td>改颜色</td><td><code>_config.fluid.yml</code> → <code>color</code></td></tr><tr><td>改字体</td><td><code>_config.fluid.yml</code> → <code>font</code></td></tr><tr><td>改悬停、浮起与搜索高亮动效</td><td><code>source/css/site-motion.css</code></td></tr><tr><td>改站内搜索定位效果</td><td><code>themes/fluid/source/js/local-search.js</code> 与 <code>source/js/site-interactions.js</code></td></tr><tr><td>写新文章</td><td><code>hexo new &quot;标题&quot;</code> → 编辑 md → <code>hexo deploy</code></td></tr></tbody></table><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>核心就两个文件：</p><ol><li><code>_config.yml</code> 管全局设置</li><li><code>_config.fluid.yml</code> 管主题样式</li></ol><p>改完配置执行 <code>hexo clean &amp;&amp; hexo deploy</code> 即可生效。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/04/hexo-customize-guide/</id>
    <link href="https://zuige.cc.cd/2026/09/04/hexo-customize-guide/"/>
    <published>2026-09-03T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>博客搭好了，但怎么改标题、加图标、管理分类标签？本文以当前博客为例，讲解 Hexo + Fluid 的目录结构和常用配置。</p>
<h2]]>
    </summary>
    <title>Hexo + Fluid 博客管理与自定义配置</title>
    <updated>2026-10-04T06:22:16.620Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="教程" scheme="https://zuige.cc.cd/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="Hexo" scheme="https://zuige.cc.cd/tags/Hexo/"/>
    <category term="Giscus" scheme="https://zuige.cc.cd/tags/Giscus/"/>
    <category term="评论系统" scheme="https://zuige.cc.cd/tags/%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>静态博客没有后端，评论数据无处存储。Giscus 基于 GitHub Discussions，免费、稳定、支持 Markdown，是 Hexo 博客的最佳评论方案之一。</p><p>本文记录从零接入 Giscus 的完整流程，包括踩坑点。</p><h2 id="一、GitHub-仓库准备"><a href="#一、GitHub-仓库准备" class="headerlink" title="一、GitHub 仓库准备"></a>一、GitHub 仓库准备</h2><h3 id="1-1-开启-Discussions"><a href="#1-1-开启-Discussions" class="headerlink" title="1.1 开启 Discussions"></a>1.1 开启 Discussions</h3><p>进入博客 GitHub 仓库 → Settings → Features → 勾选 <strong>Discussions</strong>。</p><h3 id="1-2-创建-Announcement-分类"><a href="#1-2-创建-Announcement-分类" class="headerlink" title="1.2 创建 Announcement 分类"></a>1.2 创建 Announcement 分类</h3><p>进入仓库 → Discussions → 右侧 <code>Edit categories</code> → <code>New category</code>：</p><ul><li>名称：<code>Announcements</code></li><li><strong>类型必须选 Announcement（公告）</strong></li></ul><blockquote><p>这一步很关键。如果选成 General，访客可以在仓库里随意新建帖子，造成混乱。Announcement 类型下，只有 Giscus 机器人能创建主帖，访客只能回复。</p></blockquote><h3 id="1-3-安装-Giscus-应用"><a href="#1-3-安装-Giscus-应用" class="headerlink" title="1.3 安装 Giscus 应用"></a>1.3 安装 Giscus 应用</h3><p>访问 <a href="https://github.com/apps/giscus">https://github.com/apps/giscus</a> ，点击 Install。</p><ul><li>只授权你的博客仓库</li><li>不要全仓库授权</li></ul><h2 id="二、Giscus-官网配置"><a href="#二、Giscus-官网配置" class="headerlink" title="二、Giscus 官网配置"></a>二、Giscus 官网配置</h2><p>访问 <a href="https://giscus.app/zh-CN">https://giscus.app/zh-CN</a> ，按以下步骤配置：</p><h3 id="2-1-仓库"><a href="#2-1-仓库" class="headerlink" title="2.1 仓库"></a>2.1 仓库</h3><p>填入：<code>用户名/仓库名</code>（如 <code>zuige66/hexo</code>）</p><h3 id="2-2-映射方式"><a href="#2-2-映射方式" class="headerlink" title="2.2 映射方式"></a>2.2 映射方式</h3><p>选择：<strong>Discussion 的标题包含页面的 pathname</strong></p><p>这种方式下，每篇文章的 URL 路径会作为 Discussion 的标题，一一对应。</p><h3 id="2-3-Discussion-分类"><a href="#2-3-Discussion-分类" class="headerlink" title="2.3 Discussion 分类"></a>2.3 Discussion 分类</h3><p>选择：<code>Announcements</code></p><h3 id="2-4-特性勾选"><a href="#2-4-特性勾选" class="headerlink" title="2.4 特性勾选"></a>2.4 特性勾选</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>输出 discussion 的元数据</td><td>☐ 不勾选</td></tr></tbody></table><h3 id="2-5-主题配色"><a href="#2-5-主题配色" class="headerlink" title="2.5 主题配色"></a>2.5 主题配色</h3><p>选择：<strong>用户偏好的色彩方案</strong></p><p>这样评论区会自动跟随博客的亮色&#x2F;暗色模式切换。</p><h3 id="2-6-复制代码"><a href="#2-6-复制代码" class="headerlink" title="2.6 复制代码"></a>2.6 复制代码</h3><p>页面会生成一段 <code>&lt;script&gt;</code> 代码，类似：</p><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><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><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://giscus.app/client.js&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-repo</span>=<span class="hljs-string">&quot;zuige66/hexo&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-repo-id</span>=<span class="hljs-string">&quot;R_kgDOUNLYKw&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-category</span>=<span class="hljs-string">&quot;Announcements&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-category-id</span>=<span class="hljs-string">&quot;DIC_kwDOUNLYK84DE1jw&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-mapping</span>=<span class="hljs-string">&quot;pathname&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-strict</span>=<span class="hljs-string">&quot;0&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-reactions-enabled</span>=<span class="hljs-string">&quot;1&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-emit-metadata</span>=<span class="hljs-string">&quot;0&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-input-position</span>=<span class="hljs-string">&quot;top&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-theme</span>=<span class="hljs-string">&quot;preferred_color_scheme&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-lang</span>=<span class="hljs-string">&quot;zh-CN&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">data-loading</span>=<span class="hljs-string">&quot;lazy&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">crossorigin</span>=<span class="hljs-string">&quot;anonymous&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">async</span>&gt;</span><span class="language-javascript"></span><br><span class="language-javascript"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br></code></pre></td></tr></table></figure><p>记住里面的 <code>repo-id</code> 和 <code>category-id</code>，下一步要用。</p><h2 id="三、嵌入-Hexo-博客"><a href="#三、嵌入-Hexo-博客" class="headerlink" title="三、嵌入 Hexo 博客"></a>三、嵌入 Hexo 博客</h2><h3 id="3-1-编辑主题配置"><a href="#3-1-编辑主题配置" class="headerlink" title="3.1 编辑主题配置"></a>3.1 编辑主题配置</h3><p>打开 <code>_config.fluid.yml</code>，添加两处配置：</p><p><strong>启用评论（在 post 段落内）：</strong></p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">post:</span><br>  <span class="hljs-comment"># ... 其他配置</span><br>  <span class="hljs-attr">comments:</span><br>    <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">giscus</span><br></code></pre></td></tr></table></figure><p><strong>Giscus 参数（文件末尾添加）：</strong></p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">giscus:</span><br>  <span class="hljs-attr">repo:</span> <span class="hljs-string">zuige66/hexo</span><br>  <span class="hljs-attr">repo-id:</span> <span class="hljs-string">R_kgDOUNLYKw</span><br>  <span class="hljs-attr">category:</span> <span class="hljs-string">Announcements</span><br>  <span class="hljs-attr">category-id:</span> <span class="hljs-string">DIC_kwDOUNLYK84DE1jw</span><br>  <span class="hljs-attr">mapping:</span> <span class="hljs-string">pathname</span><br>  <span class="hljs-attr">strict:</span> <span class="hljs-number">0</span><br>  <span class="hljs-attr">reactions-enabled:</span> <span class="hljs-number">1</span><br>  <span class="hljs-attr">emit-metadata:</span> <span class="hljs-number">0</span><br>  <span class="hljs-attr">input-position:</span> <span class="hljs-string">top</span><br>  <span class="hljs-attr">theme-light:</span> <span class="hljs-string">light</span><br>  <span class="hljs-attr">theme-dark:</span> <span class="hljs-string">dark</span><br>  <span class="hljs-attr">lang:</span> <span class="hljs-string">zh-CN</span><br></code></pre></td></tr></table></figure><blockquote><p>注意：Fluid 主题要求 <code>theme-light</code> 和 <code>theme-dark</code> 两个字段，不要写成 <code>theme</code>。</p></blockquote><h3 id="3-2-部署"><a href="#3-2-部署" class="headerlink" title="3.2 部署"></a>3.2 部署</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">hexo clean &amp;&amp; hexo deploy<br></code></pre></td></tr></table></figure><h2 id="四、上线后验证"><a href="#四、上线后验证" class="headerlink" title="四、上线后验证"></a>四、上线后验证</h2><ol><li>访问线上博客文章页面，滚动到底部</li><li>首次访问某篇文章时，Giscus 机器人会自动在仓库 Announcements 分类下创建一条 Discussion 主帖（标题是文章路径）</li><li>用 GitHub 账号登录后即可发表评论</li><li>未登录的访客可以查看评论，登录后可回复</li></ol><blockquote><p>本地 <code>hexo s</code> 预览只能看到评论区 UI 框架，不会真正创建 Discussion。必须部署到线上才能正常使用。</p></blockquote><h2 id="五、工作原理"><a href="#五、工作原理" class="headerlink" title="五、工作原理"></a>五、工作原理</h2><figure class="highlight dart"><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><code class="hljs dart">文章 URL: /<span class="hljs-number">2026</span>/<span class="hljs-number">09</span>/<span class="hljs-number">04</span>/my-post/<br>        ↓<br><span class="hljs-title class_">Giscus</span> 根据 pathname 查找对应的 <span class="hljs-title class_">Discussion</span><br>        ↓<br>找到 → 显示评论<br>没找到 → 自动创建新的 <span class="hljs-title class_">Discussion</span> 主帖<br>        ↓<br>评论存储在 <span class="hljs-title class_">GitHub</span> <span class="hljs-title class_">Discussions</span><br></code></pre></td></tr></table></figure><ul><li>每篇文章 &#x3D; 1 个 Discussion 主帖</li><li>所有评论都是该主帖下的 Reply</li><li>只要文章路径不变，修改标题不会丢失历史评论</li></ul><h3 id="自定义评论区标题"><a href="#自定义评论区标题" class="headerlink" title="自定义评论区标题"></a>自定义评论区标题</h3><p>Giscus 默认用文章路径作为 Discussion 标题。如需自定义，可在 giscus.app 配置时修改映射方式。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><table><thead><tr><th>步骤</th><th>操作</th></tr></thead><tbody><tr><td>1</td><td>仓库开启 Discussions</td></tr><tr><td>2</td><td>创建 Announcement 分类</td></tr><tr><td>3</td><td>安装 Giscus 应用并授权</td></tr><tr><td>4</td><td>giscus.app 配置并获取参数</td></tr><tr><td>5</td><td><code>_config.fluid.yml</code> 添加 giscus 配置</td></tr><tr><td>6</td><td>部署上线验证</td></tr></tbody></table><p>整个流程约 15 分钟完成，无需服务器，无需付费。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/04/hexo-giscus-guide/</id>
    <link href="https://zuige.cc.cd/2026/09/04/hexo-giscus-guide/"/>
    <published>2026-09-03T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>静态博客没有后端，评论数据无处存储。Giscus 基于 GitHub Discussions，免费、稳定、支持 Markdown，是 Hex]]>
    </summary>
    <title>Giscus，让博客接入评论</title>
    <updated>2026-09-06T06:43:01.398Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="笔记" scheme="https://zuige.cc.cd/categories/%E7%AC%94%E8%AE%B0/"/>
    <category term="学习" scheme="https://zuige.cc.cd/tags/%E5%AD%A6%E4%B9%A0/"/>
    <category term="笔记" scheme="https://zuige.cc.cd/tags/%E7%AC%94%E8%AE%B0/"/>
    <category term="Markdown" scheme="https://zuige.cc.cd/tags/Markdown/"/>
    <category term="写作" scheme="https://zuige.cc.cd/tags/%E5%86%99%E4%BD%9C/"/>
    <content>
      <![CDATA[<h1 id="Markdown-语法入门指南"><a href="#Markdown-语法入门指南" class="headerlink" title="Markdown 语法入门指南"></a>Markdown 语法入门指南</h1><h2 id="一、标题-Heading"><a href="#一、标题-Heading" class="headerlink" title="一、标题 (Heading)"></a>一、标题 (Heading)</h2><p>使用 <code>#</code> 符号创建标题，<code>#</code> 的数量决定标题级别：</p><figure class="highlight markdown"><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><code class="hljs markdown"><span class="hljs-section"># 一级标题 (H1)</span><br><span class="hljs-section">## 二级标题 (H2)</span><br><span class="hljs-section">### 三级标题 (H3)</span><br><span class="hljs-section">#### 四级标题 (H4)</span><br><span class="hljs-section">##### 五级标题 (H5)</span><br><span class="hljs-section">###### 六级标题 (H6)</span><br></code></pre></td></tr></table></figure><p><strong>效果：</strong></p><h1 id="一级标题"><a href="#一级标题" class="headerlink" title="一级标题"></a>一级标题</h1><h2 id="二级标题"><a href="#二级标题" class="headerlink" title="二级标题"></a>二级标题</h2><h3 id="三级标题"><a href="#三级标题" class="headerlink" title="三级标题"></a>三级标题</h3><hr><h2 id="二、文本样式"><a href="#二、文本样式" class="headerlink" title="二、文本样式"></a>二、文本样式</h2><h3 id="粗体-Bold"><a href="#粗体-Bold" class="headerlink" title="粗体 (Bold)"></a>粗体 (Bold)</h3><p>使用 <code>**文本**</code> 或 <code>__文本__</code>：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs markdown"><span class="hljs-strong">**这是粗体文本**</span><br><span class="hljs-strong">__这也是粗体文本__</span><br></code></pre></td></tr></table></figure><p><strong>效果：</strong> <strong>这是粗体文本</strong></p><h3 id="斜体-Italic"><a href="#斜体-Italic" class="headerlink" title="斜体 (Italic)"></a>斜体 (Italic)</h3><p>使用 <code>*文本*</code> 或 <code>_文本_</code>：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs markdown"><span class="hljs-emphasis">*这是斜体文本*</span><br><span class="hljs-emphasis">_这也是斜体文本_</span><br></code></pre></td></tr></table></figure><p><strong>效果：</strong> <em>这是斜体文本</em></p><h3 id="粗斜体-Bold-Italic"><a href="#粗斜体-Bold-Italic" class="headerlink" title="粗斜体 (Bold + Italic)"></a>粗斜体 (Bold + Italic)</h3><p>组合使用：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs markdown"><span class="hljs-strong">**<span class="hljs-emphasis">*粗斜体文本*</span>**</span><br><span class="hljs-strong">__<span class="hljs-emphasis">_粗斜体文本_</span>__</span><br></code></pre></td></tr></table></figure><p><strong>效果：</strong> <em><strong>粗斜体文本</strong></em></p><h3 id="删除线-Strikethrough"><a href="#删除线-Strikethrough" class="headerlink" title="删除线 (Strikethrough)"></a>删除线 (Strikethrough)</h3><p>使用 <code>~~文本~~</code>：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs markdown">~~这是被删除的文本~~<br></code></pre></td></tr></table></figure><p><strong>效果：</strong> <del>这是被删除的文本</del></p><hr><h2 id="三、列表-List"><a href="#三、列表-List" class="headerlink" title="三、列表 (List)"></a>三、列表 (List)</h2><h3 id="无序列表-Unordered-List"><a href="#无序列表-Unordered-List" class="headerlink" title="无序列表 (Unordered List)"></a>无序列表 (Unordered List)</h3><p>使用 <code>-</code>、<code>*</code> 或 <code>+</code>：</p><figure class="highlight markdown"><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><code class="hljs markdown"><span class="hljs-bullet">-</span> 列表项1<br><span class="hljs-bullet">-</span> 列表项2<br><span class="hljs-bullet">-</span> 列表项3<br><span class="hljs-bullet">  -</span> 嵌套项3.1<br><span class="hljs-bullet">  -</span> 嵌套项3.2<br></code></pre></td></tr></table></figure><p><strong>效果：</strong></p><ul><li>列表项1</li><li>列表项2</li><li>列表项3<ul><li>嵌套项3.1</li><li>嵌套项3.2</li></ul></li></ul><h3 id="有序列表-Ordered-List"><a href="#有序列表-Ordered-List" class="headerlink" title="有序列表 (Ordered List)"></a>有序列表 (Ordered List)</h3><p>使用 <code>数字.</code>：</p><figure class="highlight markdown"><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><code class="hljs markdown"><span class="hljs-bullet">1.</span> 第一项<br><span class="hljs-bullet">2.</span> 第二项<br><span class="hljs-bullet">3.</span> 第三项<br><span class="hljs-bullet">   1.</span> 子项3.1<br><span class="hljs-bullet">   2.</span> 子项3.2<br></code></pre></td></tr></table></figure><p><strong>效果：</strong></p><ol><li>第一项</li><li>第二项</li><li>第三项<ol><li>子项3.1</li><li>子项3.2</li></ol></li></ol><h3 id="任务列表-Task-List"><a href="#任务列表-Task-List" class="headerlink" title="任务列表 (Task List)"></a>任务列表 (Task List)</h3><p>使用 <code>- [ ]</code> 和 <code>- [x]</code>：</p><figure class="highlight markdown"><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><code class="hljs markdown"><span class="hljs-bullet">-</span> [ ] 未完成任务<br><span class="hljs-bullet">-</span> [x] 已完成任务<br><span class="hljs-bullet">-</span> [ ] 待办事项<br></code></pre></td></tr></table></figure><p><strong>效果：</strong></p><ul><li><input disabled="" type="checkbox"> 未完成任务</li><li><input checked="" disabled="" type="checkbox"> 已完成任务</li><li><input disabled="" type="checkbox"> 待办事项</li></ul><hr><h2 id="四、链接-Link"><a href="#四、链接-Link" class="headerlink" title="四、链接 (Link)"></a>四、链接 (Link)</h2><h3 id="基础链接"><a href="#基础链接" class="headerlink" title="基础链接"></a>基础链接</h3><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs markdown">[<span class="hljs-string">链接文本</span>](<span class="hljs-link">URL地址</span>)<br>[<span class="hljs-string">百度</span>](<span class="hljs-link">https://www.baidu.com</span>)<br></code></pre></td></tr></table></figure><p><strong>效果：</strong> <a href="https://www.baidu.com/">百度</a></p><h3 id="带标题的链接"><a href="#带标题的链接" class="headerlink" title="带标题的链接"></a>带标题的链接</h3><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs markdown">[<span class="hljs-string">链接文本</span>](<span class="hljs-link">URL地址 &quot;鼠标悬停提示&quot;</span>)<br>[<span class="hljs-string">Google</span>](<span class="hljs-link">https://www.google.com &quot;访问Google&quot;</span>)<br></code></pre></td></tr></table></figure><p><strong>效果：</strong> <a href="https://www.google.com/" title="访问Google">Google</a></p><h3 id="引用式链接"><a href="#引用式链接" class="headerlink" title="引用式链接"></a>引用式链接</h3><figure class="highlight markdown"><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><code class="hljs markdown">[<span class="hljs-string">链接文本</span>][<span class="hljs-symbol">引用标签</span>]<br><br>[<span class="hljs-symbol">引用标签</span>]: <span class="hljs-link">URL地址 &quot;可选标题&quot;</span><br><br>示例：<br>[<span class="hljs-string">GitHub</span>][<span class="hljs-symbol">1</span>]<br><br>[<span class="hljs-symbol">1</span>]: <span class="hljs-link">https://github.com &quot;GitHub官网&quot;</span><br></code></pre></td></tr></table></figure><hr><h2 id="五、图片-Image"><a href="#五、图片-Image" class="headerlink" title="五、图片 (Image)"></a>五、图片 (Image)</h2><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs markdown">![<span class="hljs-string">替代文本</span>](<span class="hljs-link">图片URL</span>)<br>![<span class="hljs-string">示例图片</span>](<span class="hljs-link">https://picsum.photos/200/100</span>)<br></code></pre></td></tr></table></figure><p><strong>效果：</strong><br><img src="https://picsum.photos/200/100" alt="示例图片"></p><p>带标题的图片：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs markdown">![<span class="hljs-string">替代文本</span>](<span class="hljs-link">图片URL &quot;图片标题&quot;</span>)<br></code></pre></td></tr></table></figure><hr><h2 id="六、代码-Code"><a href="#六、代码-Code" class="headerlink" title="六、代码 (Code)"></a>六、代码 (Code)</h2><h3 id="行内代码-Inline-Code"><a href="#行内代码-Inline-Code" class="headerlink" title="行内代码 (Inline Code)"></a>行内代码 (Inline Code)</h3><p>使用反引号 <code>`</code>：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs markdown">使用 <span class="hljs-code">`console.log()`</span> 输出信息<br></code></pre></td></tr></table></figure><p><strong>效果：</strong> 使用 <code>console.log()</code> 输出信息</p><h3 id="代码块-Code-Block"><a href="#代码块-Code-Block" class="headerlink" title="代码块 (Code Block)"></a>代码块 (Code Block)</h3><p>使用三个反引号 &#96;&#96;&#96;，可指定语言高亮：</p><figure class="highlight markdown"><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><code class="hljs markdown"><span class="hljs-code">```javascript</span><br><span class="hljs-code">function hello() &#123;</span><br><span class="hljs-code">  console.log(&quot;Hello World!&quot;);</span><br><span class="hljs-code">&#125;</span><br></code></pre></td></tr></table></figure><figure class="highlight dns"><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><code class="hljs dns"><br>**效果：**<br>```javascript<br>function hello<span class="hljs-punctuation">(</span><span class="hljs-punctuation">)</span> &#123;<br>  console.log<span class="hljs-punctuation">(</span><span class="hljs-string">&quot;Hello World!&quot;</span><span class="hljs-punctuation">)</span><span class="hljs-comment">;</span><br>&#125;<br></code></pre></td></tr></table></figure><hr><h2 id="七、表格-Table"><a href="#七、表格-Table" class="headerlink" title="七、表格 (Table)"></a>七、表格 (Table)</h2><p>使用 <code>|</code> 分隔列，<code>-</code> 分隔表头和内容：</p><figure class="highlight markdown"><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><code class="hljs markdown">| 姓名 | 年龄 | 城市 |<br>|------|------|------|<br>| 张三 | 25 | 北京 |<br>| 李四 | 30 | 上海 |<br>| 王五 | 28 | 广州 |<br></code></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>25</td><td>北京</td></tr><tr><td>李四</td><td>30</td><td>上海</td></tr><tr><td>王五</td><td>28</td><td>广州</td></tr></tbody></table><h3 id="对齐方式"><a href="#对齐方式" class="headerlink" title="对齐方式"></a>对齐方式</h3><figure class="highlight markdown"><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><code class="hljs markdown">| 左对齐 | 居中对齐 | 右对齐 |<br>|:------|:-------:|------:|<br>| 内容 | 内容 | 内容 |<br></code></pre></td></tr></table></figure><p><strong>效果：</strong></p><table><thead><tr><th align="left">左对齐</th><th align="center">居中对齐</th><th align="right">右对齐</th></tr></thead><tbody><tr><td align="left">内容</td><td align="center">内容</td><td align="right">内容</td></tr></tbody></table><hr><h2 id="八、引用-Blockquote"><a href="#八、引用-Blockquote" class="headerlink" title="八、引用 (Blockquote)"></a>八、引用 (Blockquote)</h2><p>使用 <code>&gt;</code> 符号：</p><figure class="highlight markdown"><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><code class="hljs markdown"><span class="hljs-quote">&gt; 这是一段引用文本</span><br><span class="hljs-quote">&gt; </span><br><span class="hljs-quote">&gt; 引用可以有多行</span><br><span class="hljs-quote">&gt; &gt; 嵌套引用</span><br></code></pre></td></tr></table></figure><p><strong>效果：</strong></p><blockquote><p>这是一段引用文本</p><p>引用可以有多行</p><blockquote><p>嵌套引用</p></blockquote></blockquote><hr><h2 id="九、水平线-Horizontal-Rule"><a href="#九、水平线-Horizontal-Rule" class="headerlink" title="九、水平线 (Horizontal Rule)"></a>九、水平线 (Horizontal Rule)</h2><p>使用 <code>---</code>、<code>***</code> 或 <code>___</code>：</p><figure class="highlight markdown"><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><code class="hljs markdown">---<br>***<br>___<br></code></pre></td></tr></table></figure><h2 id="效果："><a href="#效果：" class="headerlink" title="效果："></a><strong>效果：</strong></h2><hr><h2 id="十、脚注-Footnote"><a href="#十、脚注-Footnote" class="headerlink" title="十、脚注 (Footnote)"></a>十、脚注 (Footnote)</h2><figure class="highlight markdown"><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><code class="hljs markdown">这是带脚注的文本[^1]<br><br>[<span class="hljs-symbol">^1</span>]: <span class="hljs-link">这是脚注的内容</span><br></code></pre></td></tr></table></figure><p><strong>效果：</strong><br>这是带脚注的文本<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><span class="hint--top hint--rounded" aria-label="这是脚注的内容">[1]</span></a></sup></p><hr><h2 id="十一、表情符号-Emoji"><a href="#十一、表情符号-Emoji" class="headerlink" title="十一、表情符号 (Emoji)"></a>十一、表情符号 (Emoji)</h2><p>直接输入表情符号或使用代码：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs markdown">:smile: :heart: :star: :rocket:<br></code></pre></td></tr></table></figure><p><strong>效果：</strong> 😊 ❤️ ⭐ 🚀</p><hr><h2 id="常用快捷键"><a href="#常用快捷键" class="headerlink" title="常用快捷键"></a>常用快捷键</h2><table><thead><tr><th>快捷键</th><th>功能</th></tr></thead><tbody><tr><td>Ctrl+B</td><td>粗体</td></tr><tr><td>Ctrl+I</td><td>斜体</td></tr><tr><td>Ctrl+K</td><td>插入链接</td></tr><tr><td>Ctrl+Shift+C</td><td>插入代码块</td></tr><tr><td>Ctrl+L</td><td>插入链接</td></tr></tbody></table><hr><h2 id="编写建议"><a href="#编写建议" class="headerlink" title="编写建议"></a>编写建议</h2><ol><li><strong>保持简洁</strong>：使用合适的标题层级，避免过度嵌套</li><li><strong>使用列表</strong>：长文本使用列表提高可读性</li><li><strong>代码格式化</strong>：代码片段使用代码块包裹</li><li><strong>表格对齐</strong>：使用对齐符号使表格更美观</li><li><strong>预览检查</strong>：写完后预览确保格式正确</li></ol><hr><blockquote><p><strong>提示</strong>：不同的 Markdown 渲染器对语法的支持可能略有差异，以上是标准的 CommonMark 语法。</p></blockquote><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span>这是脚注的内容<a href="#fnref:1" rev="footnote" class="footnote-backref"> ↩</a></span></span></li></ol></div></section>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/04/markdown-guide/</id>
    <link href="https://zuige.cc.cd/2026/09/04/markdown-guide/"/>
    <published>2026-09-03T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="Markdown-语法入门指南"><a href="#Markdown-语法入门指南" class="headerlink" title="Markdown 语法入门指南"></a>Markdown 语法入门指南</h1><h2 id="一、标题-Heading"]]>
    </summary>
    <title>Markdown 语法规则</title>
    <updated>2026-09-05T02:28:31.188Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="教程" scheme="https://zuige.cc.cd/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="AI" scheme="https://zuige.cc.cd/tags/AI/"/>
    <category term="OpenCode" scheme="https://zuige.cc.cd/tags/OpenCode/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenCode 是一个基于命令行的 AI 编程助手，支持代码生成、调试、重构、项目搭建等场景。本文介绍从环境配置到实际使用的完整流程。</p><h2 id="环境准备"><a href="#环境准备" class="headerlink" title="环境准备"></a>环境准备</h2><h3 id="启动命令行"><a href="#启动命令行" class="headerlink" title="启动命令行"></a>启动命令行</h3><p>Windows 下启动终端的几种方式：</p><table><thead><tr><th>方式</th><th>操作</th></tr></thead><tbody><tr><td>快捷键</td><td><code>Win + R</code> → 输入 <code>cmd</code> → 回车</td></tr><tr><td>开始菜单</td><td>搜索”命令提示符”或”PowerShell”</td></tr><tr><td>右键菜单</td><td>在文件资源管理器空白处右键 → “在终端中打开”</td></tr></tbody></table><p>启动后确认路径前缀为 <code>C:\Users\你的用户名&gt;</code> 即可。</p><h3 id="安装-Node-js"><a href="#安装-Node-js" class="headerlink" title="安装 Node.js"></a>安装 Node.js</h3><p>OpenCode 依赖 Node.js 运行环境，需先完成安装。</p><p><strong>下载</strong></p><p>访问 <a href="https://nodejs.org,下载/">https://nodejs.org，下载</a> LTS 版本安装包。</p><p><strong>安装</strong></p><p>双击安装包，全程保持默认选项，点击 Install 完成安装。</p><p><strong>验证</strong></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><code class="hljs bash">node -v    <span class="hljs-comment"># 输出 v22.x.x 即为成功</span><br>npm -v     <span class="hljs-comment"># 输出 10.x.x 即为成功</span><br></code></pre></td></tr></table></figure><p>若提示”不是内部或外部命令”，重启终端后重试。</p><h2 id="安装-OpenCode"><a href="#安装-OpenCode" class="headerlink" title="安装 OpenCode"></a>安装 OpenCode</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm install -g opencode<br></code></pre></td></tr></table></figure><p><code>-g</code> 参数表示全局安装，安装完成后可在任意目录调用。</p><p>验证安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">opencode --version<br></code></pre></td></tr></table></figure><h2 id="模型切换"><a href="#模型切换" class="headerlink" title="模型切换"></a>模型切换</h2><p>OpenCode 内置免费模型，无需配置 API Key，开箱即用。</p><p>启动后按 <code>Shift + Tab</code> 可切换模型，常用免费模型：</p><table><thead><tr><th>模型</th><th>特点</th></tr></thead><tbody><tr><td>Gemini 2.5 Flash</td><td>响应快，推荐日常使用</td></tr><tr><td>Gemini 2.5 Pro</td><td>推理能力强，适合复杂任务</td></tr><tr><td>Llama 4 Maverick</td><td>Meta 开源模型</td></tr></tbody></table><h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><h3 id="启动"><a href="#启动" class="headerlink" title="启动"></a>启动</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">opencode<br></code></pre></td></tr></table></figure><h3 id="文件与命令操作"><a href="#文件与命令操作" class="headerlink" title="文件与命令操作"></a>文件与命令操作</h3><p>OpenCode 可直接操作文件系统和执行命令：</p><figure class="highlight node-repl"><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><code class="hljs node-repl"><span class="hljs-meta prompt_">&gt;</span> <span class="language-javascript">列出当前目录下的文件</span><br><span class="hljs-meta prompt_">&gt;</span> <span class="language-javascript">创建 index.<span class="hljs-property">html</span> 并写入基础 <span class="hljs-variable constant_">HTML</span> 结构</span><br><span class="hljs-meta prompt_">&gt;</span> <span class="language-javascript">删除 src/ 下所有 .<span class="hljs-property">bak</span> 文件</span><br><span class="hljs-meta prompt_">&gt;</span> <span class="language-javascript">执行 npm run build 并查看输出</span><br></code></pre></td></tr></table></figure><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="npm-安装速度慢"><a href="#npm-安装速度慢" class="headerlink" title="npm 安装速度慢"></a>npm 安装速度慢</h3><p>切换至国内镜像源：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm config <span class="hljs-built_in">set</span> registry https://registry.npmmirror.com<br></code></pre></td></tr></table></figure><h3 id="权限不足"><a href="#权限不足" class="headerlink" title="权限不足"></a>权限不足</h3><p>Windows 下右键终端图标，选择”以管理员身份运行”。</p><h3 id="更新-OpenCode"><a href="#更新-OpenCode" class="headerlink" title="更新 OpenCode"></a>更新 OpenCode</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm update -g opencode<br></code></pre></td></tr></table></figure><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><ol><li>安装 Node.js 并验证</li><li><code>npm install -g opencode</code> 全局安装</li><li>配置 API Key 和模型</li><li><code>opencode</code> 启动，开始使用</li></ol><p>完整流程约 10 分钟完成。</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/04/opencode-tutorial/</id>
    <link href="https://zuige.cc.cd/2026/09/04/opencode-tutorial/"/>
    <published>2026-09-03T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenCode 是一个基于命令行的 AI 编程助手，支持代码生成、调试、重构、项目搭建等场景。本文介绍从环境配置到实际使用的完整流程。</]]>
    </summary>
    <title>OpenCode 上手</title>
    <updated>2026-09-06T06:40:56.248Z</updated>
  </entry>
  <entry>
    <author>
      <name>zuige</name>
    </author>
    <category term="技术" scheme="https://zuige.cc.cd/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="教程" scheme="https://zuige.cc.cd/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="Hexo" scheme="https://zuige.cc.cd/tags/Hexo/"/>
    <category term="博客" scheme="https://zuige.cc.cd/tags/%E5%8D%9A%E5%AE%A2/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>花了几个小时搭建了这个博客，记录一下过程，也给想建博客的朋友一个参考。</p><h2 id="为什么选-Hexo？"><a href="#为什么选-Hexo？" class="headerlink" title="为什么选 Hexo？"></a>为什么选 Hexo？</h2><p>对比了几种方案：</p><table><thead><tr><th>方案</th><th>优点</th><th>缺点</th></tr></thead><tbody><tr><td>WordPress</td><td>功能强大、插件多</td><td>需要服务器、维护成本高</td></tr><tr><td>Hugo</td><td>速度快</td><td>主题生态不如 Hexo</td></tr><tr><td>Hexo</td><td>主题丰富、部署简单</td><td>需要 Node.js 环境</td></tr></tbody></table><p>最终选了 Hexo，主要因为：</p><ul><li>免费托管在 GitHub Pages，不用买服务器</li><li>Fluid 主题颜值高、中文文档好</li><li>Markdown 写文章很舒服</li></ul><h2 id="环境准备"><a href="#环境准备" class="headerlink" title="环境准备"></a>环境准备</h2><p>需要安装两个东西：</p><p><strong>Node.js</strong> - 去官网下载安装即可，自带 npm</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><code class="hljs bash"><span class="hljs-comment"># 验证安装</span><br>node -v    <span class="hljs-comment"># v22.x.x</span><br>npm -v     <span class="hljs-comment"># 10.x.x</span><br></code></pre></td></tr></table></figure><p><strong>Git</strong> - 用于版本管理和部署</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git --version  <span class="hljs-comment"># 2.x.x</span><br></code></pre></td></tr></table></figure><h2 id="安装-Hexo"><a href="#安装-Hexo" class="headerlink" title="安装 Hexo"></a>安装 Hexo</h2><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></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 全局安装 Hexo CLI</span><br>npm install -g hexo-cli<br><br><span class="hljs-comment"># 初始化博客项目</span><br><span class="hljs-built_in">mkdir</span> my-blog &amp;&amp; <span class="hljs-built_in">cd</span> my-blog<br>hexo init .<br><br><span class="hljs-comment"># 安装依赖</span><br>npm install<br></code></pre></td></tr></table></figure><p>初始化后的目录结构：</p><figure class="highlight nix"><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><code class="hljs nix">my-blog<span class="hljs-symbol">/</span><br>├── _config.yml    <span class="hljs-comment"># 主配置文件</span><br>├── package.json   <span class="hljs-comment"># 依赖管理</span><br>├── scaffolds<span class="hljs-symbol">/</span>     <span class="hljs-comment"># 文章模板</span><br>├── source<span class="hljs-symbol">/</span>        <span class="hljs-comment"># 文章和资源</span><br>│   └── _posts<span class="hljs-symbol">/</span>    <span class="hljs-comment"># 博客文章放这里</span><br>└── themes<span class="hljs-symbol">/</span>        <span class="hljs-comment"># 主题目录</span><br></code></pre></td></tr></table></figure><h2 id="安装-Fluid-主题"><a href="#安装-Fluid-主题" class="headerlink" title="安装 Fluid 主题"></a>安装 Fluid 主题</h2><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><code class="hljs bash"><span class="hljs-comment"># 在博客根目录执行</span><br>npm install hexo-theme-fluid --save<br></code></pre></td></tr></table></figure><p>然后编辑根目录的 <code>_config.yml</code>，把主题改为 fluid：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">theme:</span> <span class="hljs-string">fluid</span><br></code></pre></td></tr></table></figure><p>创建主题配置文件 <code>_config.fluid.yml</code>（在根目录），基础配置：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">navbar:</span><br>  <span class="hljs-attr">blog_title:</span> <span class="hljs-string">&quot;我的博客&quot;</span><br>  <span class="hljs-attr">menu:</span><br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;home&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-home-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;archive&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/archives/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-archive-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;category&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/categories/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-category-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;tag&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/tags/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-tags-fill&quot;</span> &#125;<br>    <span class="hljs-bullet">-</span> &#123; <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;about&quot;</span>, <span class="hljs-attr">link:</span> <span class="hljs-string">&quot;/about/&quot;</span>, <span class="hljs-attr">icon:</span> <span class="hljs-string">&quot;iconfont icon-user-fill&quot;</span> &#125;<br></code></pre></td></tr></table></figure><h2 id="写第一篇文章"><a href="#写第一篇文章" class="headerlink" title="写第一篇文章"></a>写第一篇文章</h2><h3 id="方式一：命令行创建"><a href="#方式一：命令行创建" class="headerlink" title="方式一：命令行创建"></a>方式一：命令行创建</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">hexo new <span class="hljs-string">&quot;文章标题&quot;</span><br></code></pre></td></tr></table></figure><p>会在 <code>source/_posts/</code> 下生成一个 <code>文章标题.md</code> 文件。</p><h3 id="方式二：直接新建文件"><a href="#方式二：直接新建文件" class="headerlink" title="方式二：直接新建文件"></a>方式二：直接新建文件</h3><p>在 <code>source/_posts/</code> 下新建 <code>.md</code> 文件，文件名就是文章的 URL。</p><h3 id="文章格式"><a href="#文章格式" class="headerlink" title="文章格式"></a>文章格式</h3><figure class="highlight markdown"><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><code class="hljs markdown">---<br>title: 文章标题<br>date: 2026-09-03<br>tags:<br><span class="hljs-bullet">  -</span> 标签1<br><span class="hljs-bullet">  -</span> 标签2<br>categories:<br><span class="hljs-section">  - 分类</span><br><span class="hljs-section">---</span><br><br>这里是正文内容，使用 Markdown 语法。<br></code></pre></td></tr></table></figure><h3 id="Markdown-常用语法"><a href="#Markdown-常用语法" class="headerlink" title="Markdown 常用语法"></a>Markdown 常用语法</h3><p>想系统了解 Markdown 写作，可以继续阅读 <a href="/2026/09/04/markdown-guide/" title="Markdown 语法规则">Markdown 语法规则</a>。</p><h2 id="部署到-GitHub"><a href="#部署到-GitHub" class="headerlink" title="部署到 GitHub"></a>部署到 GitHub</h2><h3 id="1-创建-GitHub-仓库"><a href="#1-创建-GitHub-仓库" class="headerlink" title="1. 创建 GitHub 仓库"></a>1. 创建 GitHub 仓库</h3><p>仓库名必须是 <code>用户名.github.io</code>（个人主页）或自定义名称（项目页面）。</p><h3 id="2-配置部署"><a href="#2-配置部署" class="headerlink" title="2. 配置部署"></a>2. 配置部署</h3><p>编辑 <code>_config.yml</code>：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">url:</span> <span class="hljs-string">https://zuige66.github.io/hexo</span><br><span class="hljs-attr">deploy:</span><br>  <span class="hljs-attr">type:</span> <span class="hljs-string">git</span><br>  <span class="hljs-attr">repo:</span> <span class="hljs-string">git@github.com:zuige66/hexo.git</span><br>  <span class="hljs-attr">branch:</span> <span class="hljs-string">gh-pages</span><br></code></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><code class="hljs bash">npm install hexo-deployer-git --save<br></code></pre></td></tr></table></figure><h3 id="3-一键部署"><a href="#3-一键部署" class="headerlink" title="3. 一键部署"></a>3. 一键部署</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">hexo clean &amp;&amp; hexo deploy<br></code></pre></td></tr></table></figure><h2 id="常用命令速查"><a href="#常用命令速查" class="headerlink" title="常用命令速查"></a>常用命令速查</h2><table><thead><tr><th>命令</th><th>说明</th></tr></thead><tbody><tr><td><code>hexo new &quot;标题&quot;</code></td><td>新建文章</td></tr><tr><td><code>hexo server</code></td><td>本地预览（默认 <a href="http://localhost:4000）">http://localhost:4000）</a></td></tr><tr><td><code>hexo generate</code></td><td>生成静态文件</td></tr><tr><td><code>hexo deploy</code></td><td>部署到 GitHub</td></tr><tr><td><code>hexo clean</code></td><td>清除缓存和 public 目录</td></tr><tr><td><code>hexo clean &amp;&amp; hexo deploy</code></td><td>重新生成并部署（最常用）</td></tr></tbody></table><h2 id="目录结构说明"><a href="#目录结构说明" class="headerlink" title="目录结构说明"></a>目录结构说明</h2><figure class="highlight nix"><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></pre></td><td class="code"><pre><code class="hljs nix">source<span class="hljs-symbol">/</span><br>├── _posts<span class="hljs-symbol">/</span>          <span class="hljs-comment"># 博客文章</span><br>│   ├── hello-world.md<br>│   └── 我的第一篇博客.md<br>├── about<span class="hljs-symbol">/</span>           <span class="hljs-comment"># 关于页面</span><br>│   └── index.md<br>├── categories<span class="hljs-symbol">/</span>      <span class="hljs-comment"># 分类页面</span><br>│   └── index.md<br>├── tags<span class="hljs-symbol">/</span>            <span class="hljs-comment"># 标签页面</span><br>│   └── index.md<br>└── images<span class="hljs-symbol">/</span>          <span class="hljs-comment"># 图片资源</span><br>    └── zuige.jpg<br></code></pre></td></tr></table></figure><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>整个流程就是：</p><ol><li>安装 Node.js + Git</li><li>安装 Hexo CLI</li><li>初始化项目 + 安装主题</li><li>写 Markdown 文章</li><li><code>hexo deploy</code> 部署</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></pre></td><td class="code"><pre><code class="hljs bash">hexo new <span class="hljs-string">&quot;标题&quot;</span><br><span class="hljs-comment"># 编辑 md 文件</span><br>hexo clean &amp;&amp; hexo deploy<br></code></pre></td></tr></table></figure><p>就这么简单，开始写博客吧！</p>]]>
    </content>
    <id>https://zuige.cc.cd/2026/09/03/hexo-fluid/</id>
    <link href="https://zuige.cc.cd/2026/09/03/hexo-fluid/"/>
    <published>2026-09-03T13:29:39.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>花了几个小时搭建了这个博客，记录一下过程，也给想建博客的朋友一个参考。</p>
<h2 id="为什么选-Hexo？"><a href="#]]>
    </summary>
    <title>Hexo + Fluid 搭建个人博客</title>
    <updated>2026-09-06T06:46:14.905Z</updated>
  </entry>
</feed>
