<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>INCORRUPTIBLE</title>
      <link>https://www.aspchang.com</link>
      <description>GEMILUXVII 的个人博客，记录技术探索与实践，分享文选、书评、时事观察和个人随笔</description>
      <generator>Zola</generator>
      <language>zh-cn</language>
      <atom:link
      href="https://www.aspchang.com/rss.xml" rel="self" type="application/rss+xml" />
      <lastBuildDate>Tue, 18 Aug 2026 00:00:00 +0000</lastBuildDate> <item>
      <title>「NodeQuality」DMIT LAX.AN4.Pro.Echo (TYO)</title>
      <pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-echo-tyo/</link>
      <guid>https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-echo-tyo/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-echo-tyo/">&lt;p&gt;DMIT LAX.AN4.Pro.Echo (TYO)，45.9USD&#x2F;Y。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1787058359730_image.png&quot; alt=&quot;image.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1787058391204_image.png&quot; alt=&quot;image.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1787058409423_image.png&quot; alt=&quot;image.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1787058419199_image.png&quot; alt=&quot;image.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;iHjqxeWN2zzqgea8XOMBe1qqIc1m8Qlx&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>阻止 GeForce Experience 强制升级至 NVIDIA App 及旧版 GeForce Experience 下载</title>
      <pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/geforce-experience-block-nvidia-app-upgrade/</link>
      <guid>https://www.aspchang.com/posts/geforce-experience-block-nvidia-app-upgrade/</guid>
      <description xml:base="https://www.aspchang.com/posts/geforce-experience-block-nvidia-app-upgrade/">&lt;p&gt;我之所以到现在还在使用 GeForce Experience，是因为 NVIDIA App 的即时回放一直会花屏。NVIDIA App 刚推出时我就尝试用过，当时录制出来的回放画面会出现花屏，基本没法正常使用。本以为经过这么多次更新，这个问题应该已经解决了，最近重新试了一次，结果还是一样。&lt;&#x2F;p&gt;
&lt;p&gt;即时回放又是我平时经常使用的功能，所以最后只能退回旧版 GeForce Experience。麻烦在于，NVIDIA 已逐步将 GFE 的功能迁移到 NVIDIA App，旧版 GFE 会检测更新，并尝试启动 NVIDIA App 安装程序。&lt;&#x2F;p&gt;
&lt;p&gt;网上常见的方案包括禁用计划任务、修改 NTFS 权限、锁定 &lt;code&gt;gfeupdate.json&lt;&#x2F;code&gt;，或者禁止 Downloader 写入。实际上，如果目的只是阻止 GeForce Experience 自己启动升级程序，可以使用一个影响范围更小的方法：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;删除 GeForce Experience 配置文件中的 &lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这种方法不会破坏 NVIDIA Downloader，也不需要修改系统权限。它只是切断 GFE 自身调用更新安装程序的路径。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;本文方法阻止的是 GeForce Experience 通过自身更新入口启动 NVIDIA App 安装程序，并不会阻止 NVIDIA 后台组件检查或下载更新。NVIDIA 驱动、GFE 的修复或重新安装也可能还原配置，届时需要重新检查。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;h2 id=&quot;修改方法&quot;&gt;修改方法&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#修改方法&quot;
   aria-label=&quot;Anchor link for: 修改方法&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;准备：下载旧版_GeForce_Experience&quot;&gt;准备：下载旧版 GeForce Experience&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#准备：下载旧版_GeForce_Experience&quot;
   aria-label=&quot;Anchor link for: 准备：下载旧版_GeForce_Experience&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;本文使用的是 GeForce Experience &lt;code&gt;3.28.0.417&lt;&#x2F;code&gt;。为了方便需要旧版安装包的用户，我将原版安装程序保存在 Google Drive：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drive.google.com&#x2F;file&#x2F;d&#x2F;1Q4mrtzIWEscqXm1YQiyB-2GhAcconzBY&#x2F;view?usp=drive_link&quot;&gt;下载 GeForce Experience 3.28.0.417（Google Drive）&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;该链接是个人保存的安装包镜像，并非 NVIDIA 官方下载页面。文件未重新打包，Windows Authenticode 校验结果为有效，签名方是 &lt;code&gt;NVIDIA Corporation&lt;&#x2F;code&gt;。下载后建议核对 SHA-256：&lt;code&gt;8DDDB758D45F0F46BC2A9D71294A3625EA0C7F53174616B9935F8AC5064AD57E&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;文件名&lt;&#x2F;strong&gt;：&lt;code&gt;nvidia-geforce-experience-3-28-0-417.exe&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;文件大小&lt;&#x2F;strong&gt;：125.56 MiB（131,655,600 字节）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;数字签名&lt;&#x2F;strong&gt;：NVIDIA Corporation&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;1._找到配置文件&quot;&gt;1. 找到配置文件&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1._找到配置文件&quot;
   aria-label=&quot;Anchor link for: 1._找到配置文件&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;进入下面的目录：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;C:\Program Files\NVIDIA Corporation\NVIDIA GeForce Experience
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;找到其中的：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;NVIDIA GeForce Experience.json
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;2._备份原文件&quot;&gt;2. 备份原文件&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2._备份原文件&quot;
   aria-label=&quot;Anchor link for: 2._备份原文件&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;修改之前，先复制一份 &lt;code&gt;NVIDIA GeForce Experience.json&lt;&#x2F;code&gt;，例如命名为：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;NVIDIA GeForce Experience.json.bak
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;以后需要恢复时，可以直接换回原文件。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3._删除自更新配置&quot;&gt;3. 删除自更新配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3._删除自更新配置&quot;
   aria-label=&quot;Anchor link for: 3._删除自更新配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;使用记事本、Notepad++、VS Code 等文本编辑器打开 &lt;code&gt;NVIDIA GeForce Experience.json&lt;&#x2F;code&gt;，找到并删除下面这一整行：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;&amp;quot;nv-self-update-path=Downloader\\gfeupdate.json&amp;quot;,
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;例如，修改前为：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;switches&amp;quot;: [
    &amp;quot;nv-custom-black-window=true&amp;quot;,
    &amp;quot;nv-gpu-accel=true&amp;quot;,
    &amp;quot;nv-background-color=0xFF000000&amp;quot;,
    &amp;quot;nv-min-window-size=900,600&amp;quot;,
    &amp;quot;nv-def-window-size=1218,845&amp;quot;,
    &amp;quot;nv-self-update-path=Downloader\\gfeupdate.json&amp;quot;,
    &amp;quot;nv-node-app=NvNode\\nvnodejslauncher.exe&amp;quot;,
    &amp;quot;nv-node-data=NvNode\\nodejs.json&amp;quot;,
    &amp;quot;nv-allow-file-access-from-files=true&amp;quot;,
    &amp;quot;nv-app-hidpi=true&amp;quot;,
    &amp;quot;nv-url-relative=.&#x2F;www&#x2F;index.html&amp;quot;,
    &amp;quot;nv-secure-icon-window-url-relative=.&#x2F;www&#x2F;security-certificate-app.html#&#x2F;security-certificate&amp;quot;,
    &amp;quot;nv-plugin-folder-relative=.&#x2F;cef&#x2F;gfe;.&#x2F;cef&#x2F;common&amp;quot;,
    &amp;quot;nv-plugin-dependencies-relative=.&#x2F;dependencies&amp;quot;
  ]
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;修改后为：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;switches&amp;quot;: [
    &amp;quot;nv-custom-black-window=true&amp;quot;,
    &amp;quot;nv-gpu-accel=true&amp;quot;,
    &amp;quot;nv-background-color=0xFF000000&amp;quot;,
    &amp;quot;nv-min-window-size=900,600&amp;quot;,
    &amp;quot;nv-def-window-size=1218,845&amp;quot;,
    &amp;quot;nv-node-app=NvNode\\nvnodejslauncher.exe&amp;quot;,
    &amp;quot;nv-node-data=NvNode\\nodejs.json&amp;quot;,
    &amp;quot;nv-allow-file-access-from-files=true&amp;quot;,
    &amp;quot;nv-app-hidpi=true&amp;quot;,
    &amp;quot;nv-url-relative=.&#x2F;www&#x2F;index.html&amp;quot;,
    &amp;quot;nv-secure-icon-window-url-relative=.&#x2F;www&#x2F;security-certificate-app.html#&#x2F;security-certificate&amp;quot;,
    &amp;quot;nv-plugin-folder-relative=.&#x2F;cef&#x2F;gfe;.&#x2F;cef&#x2F;common&amp;quot;,
    &amp;quot;nv-plugin-dependencies-relative=.&#x2F;dependencies&amp;quot;
  ]
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;确认 JSON 的逗号仍然正确，然后保存文件。&lt;&#x2F;p&gt;
&lt;p&gt;由于配置文件位于 &lt;code&gt;C:\Program Files&lt;&#x2F;code&gt;，Windows 可能要求管理员权限。如果直接保存失败，可以使用管理员权限运行文本编辑器，再重新打开该文件进行修改。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4._启动_GeForce_Experience&quot;&gt;4. 启动 GeForce Experience&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4._启动_GeForce_Experience&quot;
   aria-label=&quot;Anchor link for: 4._启动_GeForce_Experience&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;在修改这项配置之前，GeForce Experience 会被强制更新弹窗拦住，要求安装 NVIDIA App，无法正常进入主界面。删除 &lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt; 并保存配置后，再重新启动 GFE。&lt;&#x2F;p&gt;
&lt;p&gt;此时应该可以直接进入 GeForce Experience，不再通过原来的自更新入口启动 NVIDIA App 安装程序。如果 GFE 仍停留在之前的更新界面，可以先结束相关 NVIDIA 界面进程，或者重启电脑后再试。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;工作原理&quot;&gt;工作原理&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#工作原理&quot;
   aria-label=&quot;Anchor link for: 工作原理&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;GeForce Experience 的主程序配置文件位于：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;C:\Program Files\NVIDIA Corporation\NVIDIA GeForce Experience\NVIDIA GeForce Experience.json
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;默认配置的 &lt;code&gt;switches&lt;&#x2F;code&gt; 中包含类似下面的一项：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;&amp;quot;nv-self-update-path=Downloader\\gfeupdate.json&amp;quot;,
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;完整配置的一部分大致如下：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;switches&amp;quot;: [
    &amp;quot;nv-custom-black-window=true&amp;quot;,
    &amp;quot;nv-gpu-accel=true&amp;quot;,
    &amp;quot;nv-background-color=0xFF000000&amp;quot;,
    &amp;quot;nv-min-window-size=900,600&amp;quot;,
    &amp;quot;nv-def-window-size=1218,845&amp;quot;,
    &amp;quot;nv-self-update-path=Downloader\\gfeupdate.json&amp;quot;,
    &amp;quot;nv-node-app=NvNode\\nvnodejslauncher.exe&amp;quot;,
    &amp;quot;nv-node-data=NvNode\\nodejs.json&amp;quot;,
    &amp;quot;nv-allow-file-access-from-files=true&amp;quot;,
    &amp;quot;nv-app-hidpi=true&amp;quot;,
    &amp;quot;nv-url-relative=.&#x2F;www&#x2F;index.html&amp;quot;,
    &amp;quot;nv-secure-icon-window-url-relative=.&#x2F;www&#x2F;security-certificate-app.html#&#x2F;security-certificate&amp;quot;,
    &amp;quot;nv-plugin-folder-relative=.&#x2F;cef&#x2F;gfe;.&#x2F;cef&#x2F;common&amp;quot;,
    &amp;quot;nv-plugin-dependencies-relative=.&#x2F;dependencies&amp;quot;
  ]
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt; 指定了 GeForce Experience 自更新流程需要读取的更新配置。它对应的文件通常位于：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;C:\ProgramData\NVIDIA Corporation\Downloader\gfeupdate.json
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个文件可能包含类似下面的内容：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;url&amp;quot;: &amp;quot;C:\\ProgramData\\NVIDIA Corporation\\Downloader\\xxxxxxxx\\NvidiaAppSetupInt_xxx.exe&amp;quot;,
  &amp;quot;isMandatory&amp;quot;: true
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;也就是说，NVIDIA 后台组件仍然可以检查更新，并将 NVIDIA App 安装程序的位置写入 &lt;code&gt;gfeupdate.json&lt;&#x2F;code&gt;。真正需要阻断的是下面这条链路：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;GeForce Experience
        ↓
nv-self-update-path
        ↓
Downloader\gfeupdate.json
        ↓
NVIDIA App 安装程序
        ↓
执行升级
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;删除 &lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt; 后，相当于从 GFE 的配置中移除了这条自更新入口：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;GeForce Experience
        ↓
找不到 self-update path
        ✕
不再通过该配置调用更新安装程序
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;为什么_gfeupdate.json_还会更新&quot;&gt;为什么 &lt;code&gt;gfeupdate.json&lt;&#x2F;code&gt; 还会更新&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#为什么_gfeupdate.json_还会更新&quot;
   aria-label=&quot;Anchor link for: 为什么_gfeupdate.json_还会更新&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;修改以后，下面这个文件仍然可能继续变化：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;C:\ProgramData\NVIDIA Corporation\Downloader\gfeupdate.json
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;其中甚至可能重新出现：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;url&amp;quot;: &amp;quot;...\\NvidiaAppSetupInt_xxx.exe&amp;quot;,
  &amp;quot;isMandatory&amp;quot;: true
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这是正常现象，因为更新检测与 GFE 自更新是两个不同的环节。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;更新检测仍可进行&quot;&gt;更新检测仍可进行&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#更新检测仍可进行&quot;
   aria-label=&quot;Anchor link for: 更新检测仍可进行&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;NVIDIA 后台组件仍然可以执行：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;连接 NVIDIA 服务器
→ 查询更新
→ 下载更新信息
→ 写入 gfeupdate.json
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;本文没有修改这一部分。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;GFE_自更新入口已被移除&quot;&gt;GFE 自更新入口已被移除&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#GFE_自更新入口已被移除&quot;
   aria-label=&quot;Anchor link for: GFE_自更新入口已被移除&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;原来的调用链是：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;GeForce Experience
→ nv-self-update-path
→ gfeupdate.json
→ 启动安装程序
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;删除配置项以后变成：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;GeForce Experience
→ 无 nv-self-update-path
→ 自更新调用链被切断
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;所以，&lt;code&gt;gfeupdate.json&lt;&#x2F;code&gt; 被更新，并不等于 GeForce Experience 一定会执行更新，两件事情并不矛盾。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;为什么不需要锁定_Downloader&quot;&gt;为什么不需要锁定 Downloader&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#为什么不需要锁定_Downloader&quot;
   aria-label=&quot;Anchor link for: 为什么不需要锁定_Downloader&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;有些教程会建议修改下面目录的 NTFS 权限，禁止 NVIDIA 写入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;C:\ProgramData\NVIDIA Corporation\Downloader
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;也有方案会把 &lt;code&gt;gfeupdate.json&lt;&#x2F;code&gt; 清空后设成只读。如果只是为了阻止 GFE 强制升级，这通常没有必要。&lt;&#x2F;p&gt;
&lt;p&gt;锁定 Downloader 会影响整个 NVIDIA 下载机制。以后升级显卡驱动或其他组件时，也更难判断究竟是哪一层权限导致了故障。删除 &lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt; 的影响范围更小：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;功能&lt;&#x2F;th&gt;&lt;th&gt;修改后的状态&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Downloader&lt;&#x2F;td&gt;&lt;td&gt;正常&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;更新检测&lt;&#x2F;td&gt;&lt;td&gt;正常&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;更新信息下载&lt;&#x2F;td&gt;&lt;td&gt;正常&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;GFE 本体&lt;&#x2F;td&gt;&lt;td&gt;正常&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ShadowPlay &#x2F; 即时回放&lt;&#x2F;td&gt;&lt;td&gt;正常&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;GFE 自更新入口&lt;&#x2F;td&gt;&lt;td&gt;禁用&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;为什么不需要禁用_NVIDIA_计划任务&quot;&gt;为什么不需要禁用 NVIDIA 计划任务&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#为什么不需要禁用_NVIDIA_计划任务&quot;
   aria-label=&quot;Anchor link for: 为什么不需要禁用_NVIDIA_计划任务&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;系统中通常还能看到类似下面的计划任务：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;NvDriverUpdateCheckDaily
NVIDIA GeForce Experience SelfUpdate
NvNodeLauncher
NvProfileUpdaterDaily
NvProfileUpdaterOnLogon
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;没有必要为了本文方法将它们全部关闭。删除 &lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt; 本身并不依赖 &lt;code&gt;NVIDIA GeForce Experience SelfUpdate&lt;&#x2F;code&gt; 任务处于禁用状态。即使计划任务仍然存在且显示为已启用，也不能据此判断配置修改失败。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;如何恢复_GeForce_Experience_自动更新&quot;&gt;如何恢复 GeForce Experience 自动更新&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#如何恢复_GeForce_Experience_自动更新&quot;
   aria-label=&quot;Anchor link for: 如何恢复_GeForce_Experience_自动更新&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;最简单的方式是恢复之前备份的 JSON 文件。也可以手工把下面这一行重新添加到 &lt;code&gt;switches&lt;&#x2F;code&gt; 数组中：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;&amp;quot;nv-self-update-path=Downloader\\gfeupdate.json&amp;quot;,
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意保持 JSON 的逗号正确，例如：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;&amp;quot;nv-def-window-size=1218,845&amp;quot;,
&amp;quot;nv-self-update-path=Downloader\\gfeupdate.json&amp;quot;,
&amp;quot;nv-node-app=NvNode\\nvnodejslauncher.exe&amp;quot;,
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;保存并重新启动 GeForce Experience 即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;几个常见误区&quot;&gt;几个常见误区&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#几个常见误区&quot;
   aria-label=&quot;Anchor link for: 几个常见误区&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;不要锁定整个_GFE_安装目录&quot;&gt;不要锁定整个 GFE 安装目录&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#不要锁定整个_GFE_安装目录&quot;
   aria-label=&quot;Anchor link for: 不要锁定整个_GFE_安装目录&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;不建议为了阻止更新而禁止下面目录的 &lt;code&gt;SYSTEM&lt;&#x2F;code&gt;、&lt;code&gt;Administrators&lt;&#x2F;code&gt; 或安装程序写权限：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;C:\Program Files\NVIDIA Corporation\NVIDIA GeForce Experience
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这种方式虽然也可能阻止升级，但以后卸载、修复或者重新安装 GFE 时容易遇到权限问题。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;不要用_gfeupdate.json_是否变化判断结果&quot;&gt;不要用 &lt;code&gt;gfeupdate.json&lt;&#x2F;code&gt; 是否变化判断结果&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#不要用_gfeupdate.json_是否变化判断结果&quot;
   aria-label=&quot;Anchor link for: 不要用_gfeupdate.json_是否变化判断结果&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;这个文件继续被更新是正常现象。真正应该检查的是 &lt;code&gt;NVIDIA GeForce Experience.json&lt;&#x2F;code&gt; 中是否还存在 &lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;不要只删除_NVIDIA_App_安装包&quot;&gt;不要只删除 NVIDIA App 安装包&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#不要只删除_NVIDIA_App_安装包&quot;
   aria-label=&quot;Anchor link for: 不要只删除_NVIDIA_App_安装包&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Downloader 之后仍然可能重新下载安装包。单纯删除 &lt;code&gt;NvidiaAppSetupInt_xxx.exe&lt;&#x2F;code&gt;，并不能解决自更新入口本身的问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;总结&quot;&gt;总结&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#总结&quot;
   aria-label=&quot;Anchor link for: 总结&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;要阻止旧版 GeForce Experience 通过自身更新机制迁移到 NVIDIA App，不一定需要锁定文件权限，也不需要破坏 NVIDIA Downloader。核心操作只有一个：编辑&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;C:\Program Files\NVIDIA Corporation\NVIDIA GeForce Experience\NVIDIA GeForce Experience.json
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;并删除：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;&amp;quot;nv-self-update-path=Downloader\\gfeupdate.json&amp;quot;,
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;需要特别区分的是：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;该方法阻止的是 GeForce Experience 调用自身更新安装器，而不是阻止 NVIDIA 检查和下载更新。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;因此，即使以后发现 &lt;code&gt;gfeupdate.json&lt;&#x2F;code&gt; 被重新修改、&lt;code&gt;isMandatory&lt;&#x2F;code&gt; 变成 &lt;code&gt;true&lt;&#x2F;code&gt;，甚至 Downloader 中已经存在 NVIDIA App 安装程序，也不一定意味着修改失效。只要 &lt;code&gt;NVIDIA GeForce Experience.json&lt;&#x2F;code&gt; 中仍然没有 &lt;code&gt;nv-self-update-path&lt;&#x2F;code&gt;，这条自更新入口就仍然处于被移除的状态。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>为什么 HESOYAM 能生效：GTA:SA 作弊码背后的识别机制</title>
      <pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/gta-sa-crc32-sha256/</link>
      <guid>https://www.aspchang.com/posts/gta-sa-crc32-sha256/</guid>
      <description xml:base="https://www.aspchang.com/posts/gta-sa-crc32-sha256/">&lt;p&gt;在《Grand Theft Auto: San Andreas》的众多作弊码中，&lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 无疑是最具代表性的一个。&lt;&#x2F;p&gt;
&lt;p&gt;在 PC 版游戏中输入这七个字母，CJ 会恢复生命值与护甲，并获得 25 万美元。效果直接而实用，这也让它成为许多玩家最早记住的作弊码之一。然而，与 &lt;code&gt;INEEDSOMEHELP&lt;&#x2F;code&gt; 这类语义明确的短句相比，&lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 更像一组无规则的字母：它不是英文单词，也无法从字面上和生命、护甲或金钱建立任何联系。&lt;&#x2F;p&gt;
&lt;p&gt;这种古怪并非翻译问题，也不是开发者刻意设计的暗号。&lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 之所以有效，是因为它和另一条字符串经过同样的计算后，得到了完全相同的 32 位数值：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;JAMCRC(reverse(&amp;quot;HESOYAM&amp;quot;))
= 0xEECCEA2B

JAMCRC(reverse(&amp;quot;INEEDSOMEHELP&amp;quot;))
= 0xEECCEA2B
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;游戏最终比较的并非作弊码原文，而是计算后得到的数值——不同字符串只要产生相同结果，就能触发同一种效果。这正是许多 GTA:SA 作弊码缺乏直观语义的根本原因。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;一、HESOYAM_在程序中的识别方式&quot;&gt;一、HESOYAM 在程序中的识别方式&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、HESOYAM_在程序中的识别方式&quot;
   aria-label=&quot;Anchor link for: 一、HESOYAM_在程序中的识别方式&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;GTA:SA 没有专门的作弊码输入框，也不要求玩家输入后按下 Enter。游戏在运行过程中持续监听键盘输入，按下相应字母序列即可触发识别。&lt;&#x2F;p&gt;
&lt;p&gt;根据社区对经典 PC 版的逆向分析，游戏会持续记录最近输入的字符。每当玩家按下一个新按键，它就会取出最近 6～29 个字符，计算出一个 32 位的 Key，再与内置的作弊码表进行比较：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;玩家按下按键
   ↓
更新作弊码输入缓冲区
   ↓
计算最近 6～29 个字符的 Key
   ↓
与游戏内置的数值表比较
   ↓
命中后执行相应效果
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;逆向项目 &lt;code&gt;gta-reversed&lt;&#x2F;code&gt; 中可以看到两个相关常量：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;cpp&quot;&gt;static constexpr auto CHEAT_STRING_SIZE = 30;
static constexpr auto CHEAT_MIN_HASH_SIZE = 6;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;与上述流程对应的逆向函数是 &lt;code&gt;CCheat::AddToCheatString&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&#x2F;&#x2F; 0x438480
void CCheat::AddToCheatString(char lastPressedKey) {
    &#x2F;&#x2F; 旧字符整体右移一位，为最新按键腾出 buffer[0]
    for (int i = CHEAT_STRING_SIZE - 2; i &amp;gt;= 1; --i) {
        m_CheatString[i] = m_CheatString[i - 1];
    }

    m_CheatString[0] = lastPressedKey;       &#x2F;&#x2F; 最新字符放在最前面
    m_CheatString[CHEAT_STRING_SIZE - 1] = 0; &#x2F;&#x2F; 保证以 \0 结尾

    if (strlen(m_CheatString) &amp;lt; CHEAT_MIN_HASH_SIZE) {
        return; &#x2F;&#x2F; 少于 6 个字符时不进行匹配
    }

    &#x2F;&#x2F; 依次检查最近 6、7、8……29 个字符
    for (int length = CHEAT_MIN_HASH_SIZE;
         length &amp;lt; CHEAT_STRING_SIZE;
         ++length) {
        const uint32 hash = CKeyGen::GetKey(m_CheatString, length);

        &#x2F;&#x2F; 原源码在 m_aCheatHashKeys 中逐项查找相同数值
        for (int id = 0; id &amp;lt; TOTAL_CHEATS; ++id) {
            if (m_aCheatHashKeys[id] != hash) {
                continue;
            }

            ApplyCheat(static_cast&amp;lt;eCheats&amp;gt;(id)); &#x2F;&#x2F; 命中后执行效果
            m_CheatString[0] = &amp;#39;\0&amp;#39;;              &#x2F;&#x2F; 清空输入缓冲区
            return;
        }
    }
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;原函数可在 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gta-reversed&#x2F;gta-reversed&#x2F;blob&#x2F;master&#x2F;source&#x2F;game_sa&#x2F;Cheat.cpp#L125-L172&quot;&gt;&lt;code&gt;Cheat.cpp&lt;&#x2F;code&gt; 的 &lt;code&gt;AddToCheatString&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; 中查看。&lt;code&gt;DoCheats&lt;&#x2F;code&gt; 则遍历键盘按键，并在检测到新按键时调用该函数，因此整个过程不需要输入框或确认键。&lt;&#x2F;p&gt;
&lt;p&gt;输入缓冲区最多容纳 29 个有效字符，游戏从 6 个字符开始逐一尝试匹配。因此作弊码不需要任何结束符：每产生一次新的键盘输入，游戏都会重新判断最近输入的内容是否命中某项效果。&lt;&#x2F;p&gt;
&lt;p&gt;在程序逻辑中，&lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 并不直接代表“生命、护甲和金钱”，真正参与匹配的是数值 &lt;code&gt;0xEECCEA2B&lt;&#x2F;code&gt;。只要另一字符串能产生相同结果，程序便不会对二者作出任何区分。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;二、反向输入缓冲区的设计&quot;&gt;二、反向输入缓冲区的设计&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二、反向输入缓冲区的设计&quot;
   aria-label=&quot;Anchor link for: 二、反向输入缓冲区的设计&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;GTA:SA 的输入缓冲区采用了一种不太直观的存储顺序：新字符写入最前端，已有字符则依次向后移动。&lt;&#x2F;p&gt;
&lt;p&gt;假设玩家依次输入 &lt;code&gt;A&lt;&#x2F;code&gt;、&lt;code&gt;B&lt;&#x2F;code&gt;、&lt;code&gt;C&lt;&#x2F;code&gt;、&lt;code&gt;D&lt;&#x2F;code&gt;，缓冲区内容会这样变化：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;输入 A → A
输入 B → BA
输入 C → CBA
输入 D → DCBA
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;因此，当玩家输入 &lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 时，实际参与计算的其实是反转后的 &lt;code&gt;MAYOSEH&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;这种保存方式并非为了进一步隐藏作弊码，而是出于实现上的便利：游戏始终需要检查“最近输入的 N 个字符”，把最新字符放在数组开头后，无论要检查最近 6 个、7 个还是更多字符，都能从同一位置读取，只需改变读取长度即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;三、HESOYAM_与_INEEDSOMEHELP&quot;&gt;三、HESOYAM 与 INEEDSOMEHELP&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三、HESOYAM_与_INEEDSOMEHELP&quot;
   aria-label=&quot;Anchor link for: 三、HESOYAM_与_INEEDSOMEHELP&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;严格来说，&lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 本身并没有可以翻译的语义。&lt;&#x2F;p&gt;
&lt;p&gt;后续研究者从移动版本中恢复了更接近开发者原始意图的作弊字符串，其中对应生命、护甲和金钱效果的是：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;INEEDSOMEHELP
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这句话意为“我需要一些帮助”，与作弊效果之间有着明确的语义联系。玩家熟悉的 &lt;code&gt;HESOYAM&lt;&#x2F;code&gt;，只是一条更短、但计算结果恰好与之相同的字符串。&lt;&#x2F;p&gt;
&lt;p&gt;二者的关系可以概括为：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;INEEDSOMEHELP&lt;&#x2F;code&gt; 是开发阶段便于理解和管理的意图字符串；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 是能命中同一个 32 位数值的另一组字符；&lt;&#x2F;li&gt;
&lt;li&gt;PC 版只需要保存计算结果，不必保留两条字符串的明文。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;逆向项目中的作弊码表也直接记录了这一对应关系：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&#x2F;&#x2F; 函数地址       执行函数                         目标 Key      效果枚举
{ 0x438e40, CCheat::MoneyArmourHealthCheat, ..., 0xeeccea2b,
  CHEAT_HEALTH_ARMOR_250K },
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;表中没有 &lt;code&gt;HESOYAM&lt;&#x2F;code&gt; 或 &lt;code&gt;INEEDSOMEHELP&lt;&#x2F;code&gt; 的明文，只有目标值 &lt;code&gt;0xEECCEA2B&lt;&#x2F;code&gt;、执行函数与效果枚举。输入字符串只要计算出这一数值，最终都会进入 &lt;code&gt;MoneyArmourHealthCheat&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;这种现象并不限于 &lt;code&gt;HESOYAM&lt;&#x2F;code&gt;。GTA:SA 的 PC 版作弊码中，有的近似缩写，有的接近可读单词，也有的几乎不具备任何语义。对这些字符串而言，首要条件从来不是构成一句可读的话，而是计算后能否命中游戏内置的目标值。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;四、CRC32_与字符串碰撞&quot;&gt;四、CRC32 与字符串碰撞&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四、CRC32_与字符串碰撞&quot;
   aria-label=&quot;Anchor link for: 四、CRC32_与字符串碰撞&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;GTA:SA 使用的计算方式属于 CRC32，具体形式通常称为 &lt;strong&gt;CRC-32&#x2F;JAMCRC&lt;&#x2F;strong&gt;：采用常见的反射多项式 &lt;code&gt;0xEDB88320&lt;&#x2F;code&gt; 和初始值 &lt;code&gt;0xFFFFFFFF&lt;&#x2F;code&gt;，但省略了标准 CRC-32 最后的异或步骤。&lt;&#x2F;p&gt;
&lt;p&gt;CRC32 本质上就是一种计算很快、但安全强度较弱的哈希函数：对任意输入数据进行运算，输出一个固定为 32 位的结果。它常被用于数据完整性校验，例如文件传输、存储介质检错等场景。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;gta-reversed&lt;&#x2F;code&gt; 中的 &lt;code&gt;CKeyGen::GetKey&lt;&#x2F;code&gt; 与上述参数完全对应：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&#x2F;&#x2F; 0x53CED0
[[nodiscard]] static constexpr uint32 GetKey(
    const char* str,
    int32 size
) noexcept {
    &#x2F;&#x2F; GTA:SA 使用 0xFFFFFFFF 作为初始余数
    uint32 key = INITIAL_REMAINDER;

    for (int32 i = 0; i &amp;lt; size; ++i) {
        &#x2F;&#x2F; 取当前字符与 key 的低 8 位异或，作为查表索引
        const uint8 index = static_cast&amp;lt;uint8&amp;gt;(str[i] ^ key);

        &#x2F;&#x2F; 查表结果与右移后的旧状态异或，得到下一状态
        key = KeyTable[index] ^ (key &amp;gt;&amp;gt; 8);
    }

    &#x2F;&#x2F; 此处没有再与 0xFFFFFFFF 异或，因此结果属于 JAMCRC 形式
    return key;
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;完整实现位于 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gta-reversed&#x2F;gta-reversed&#x2F;blob&#x2F;master&#x2F;source&#x2F;game_sa&#x2F;Core&#x2F;KeyGen.h#L27-L34&quot;&gt;&lt;code&gt;Core&#x2F;KeyGen.h&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;。其中 &lt;code&gt;KeyTable&lt;&#x2F;code&gt; 是由反射多项式 &lt;code&gt;0xEDB88320&lt;&#x2F;code&gt; 生成的 256 项查找表。代码依次读取反向缓冲区中的字符并更新 &lt;code&gt;key&lt;&#x2F;code&gt;，最终得到一个 32 位整数；作弊码表比较的正是该结果，原始字符的语义完全不参与判断。&lt;&#x2F;p&gt;
&lt;p&gt;32 位输出一共只有：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;2^32 = 4,294,967,296
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;种可能，而可能的输入字符串数量是无限的，比输出空间大得多。输入数量既然超过输出取值范围，肯定会有不同输入对应同一输出，这就是“碰撞”。对 CRC32 这样的非密码学哈希而言，碰撞不仅存在，而且可以被主动构造。&lt;&#x2F;p&gt;
&lt;p&gt;只考虑 26 个大写英文字母，字符串数量会随长度迅速增加：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;长度&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;可选字符串数量&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;相对于全部 32 位结果的平均数量&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;&lt;code&gt;26^6 = 308,915,776&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;约 &lt;code&gt;0.072&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;&lt;code&gt;26^7 = 8,031,810,176&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;约 &lt;code&gt;1.87&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;&lt;code&gt;26^8 = 208,827,064,576&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;约 &lt;code&gt;48.6&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;长度达到 7 个字母时，可能的字符串数量就已经超过 CRC32 的全部输出；长度达到 8 个字母时，平均每个 32 位结果能对应近 49 个大写字符串。&lt;&#x2F;p&gt;
&lt;p&gt;这里的“平均”并不意味着每个目标值都必然存在 49 条易于输入的作弊码，但这一数量关系足以说明：在如此庞大的候选集合中找到另一条结果相同的字符串，并非什么极端偶然的事件。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;五、碰撞字符串的搜索&quot;&gt;五、碰撞字符串的搜索&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#五、碰撞字符串的搜索&quot;
   aria-label=&quot;Anchor link for: 五、碰撞字符串的搜索&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;最直接的方法是穷举：将 8 位大写字母的所有组合逐一尝试，直到找到命中目标数值的那一个。但这样要检查超过 2088 亿种可能，普通电脑硬算的成本相当高。&lt;&#x2F;p&gt;
&lt;p&gt;更高效的做法是 &lt;strong&gt;Meet-in-the-Middle（中间相遇）&lt;&#x2F;strong&gt;，利用了 CRC32 运算可以双向进行的特点：已知一个字符时，既可以正向计算下一个状态，也可以从结果反推上一个状态。具体步骤如下：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;将 8 个字符拆成两半：&lt;code&gt;ABCD | EFGH&lt;&#x2F;code&gt;；&lt;&#x2F;li&gt;
&lt;li&gt;前半段 &lt;code&gt;ABCD&lt;&#x2F;code&gt; 从初始值正向计算，枚举并保存所有可能的中间状态；&lt;&#x2F;li&gt;
&lt;li&gt;后半段 &lt;code&gt;EFGH&lt;&#x2F;code&gt; 从目标值反向计算，同样枚举所有可能的中间状态；&lt;&#x2F;li&gt;
&lt;li&gt;若两边在某个中间状态上相等，拼接得到的 &lt;code&gt;ABCDEFGH&lt;&#x2F;code&gt; 就是一条能命中目标值的字符串。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;这里的 &lt;code&gt;ABCDEFGH&lt;&#x2F;code&gt; 指传给 &lt;code&gt;CKeyGen::GetKey&lt;&#x2F;code&gt; 的字节顺序。由于 GTA:SA 会把键盘输入反向保存，若程序找到的 CRC 输入为 &lt;code&gt;PPWAAGGF&lt;&#x2F;code&gt;，玩家实际需要输入的是反转后的 &lt;code&gt;FGGAAWPP&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;中间相遇并不是游戏本身的逻辑，而是建立在 &lt;code&gt;CKeyGen::GetKey&lt;&#x2F;code&gt; 状态转移之上的搜索方法。以下 C++ 代码给出其核心实现，其中 &lt;code&gt;kKeyTable&lt;&#x2F;code&gt; 对应 &lt;code&gt;CKeyGen::KeyTable&lt;&#x2F;code&gt; 的 256 项内容：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;array&amp;gt;
#include &amp;lt;cstdint&amp;gt;
#include &amp;lt;optional&amp;gt;
#include &amp;lt;unordered_map&amp;gt;

using State = std::uint32_t;
using Half  = std::array&amp;lt;char, 4&amp;gt;;
using Input = std::array&amp;lt;char, 8&amp;gt;;

constexpr State kPolynomial = 0xEDB88320u;
constexpr State kInitial    = 0xFFFFFFFFu;
constexpr std::uint32_t kHalfSpace = 26u * 26u * 26u * 26u;

&#x2F;&#x2F; 生成与 CKeyGen::KeyTable 相同的 256 项查找表
consteval std::array&amp;lt;State, 256&amp;gt; BuildKeyTable() {
    std::array&amp;lt;State, 256&amp;gt; table{};
    for (State i = 0; i &amp;lt; table.size(); ++i) {
        State value = i;
        for (int bit = 0; bit &amp;lt; 8; ++bit) {
            value = (value &amp;gt;&amp;gt; 1) ^ ((value &amp;amp; 1) ? kPolynomial : 0);
        }
        table[i] = value;
    }
    return table;
}

constexpr auto kKeyTable = BuildKeyTable();

&#x2F;&#x2F; 由查找表最高字节反查索引，用于撤销一次状态转移
consteval std::array&amp;lt;std::uint8_t, 256&amp;gt; BuildReverseIndex() {
    std::array&amp;lt;std::uint8_t, 256&amp;gt; reverseIndex{};
    for (std::uint32_t i = 0; i &amp;lt; kKeyTable.size(); ++i) {
        reverseIndex[kKeyTable[i] &amp;gt;&amp;gt; 24] = static_cast&amp;lt;std::uint8_t&amp;gt;(i);
    }
    return reverseIndex;
}

constexpr auto kReverseIndex = BuildReverseIndex();

State ForwardByte(State state, std::uint8_t byte) {
    const auto index = static_cast&amp;lt;std::uint8_t&amp;gt;(state ^ byte);
    return kKeyTable[index] ^ (state &amp;gt;&amp;gt; 8);
}

State ReverseByte(State nextState, std::uint8_t byte) {
    &#x2F;&#x2F; nextState 的最高字节只可能来自某一个查表项
    const auto index = kReverseIndex[nextState &amp;gt;&amp;gt; 24];

    &#x2F;&#x2F; 撤销查表异或与右移，并由 index ^ byte 恢复旧状态低字节
    const State upper = (nextState ^ kKeyTable[index]) &amp;lt;&amp;lt; 8;
    return upper | static_cast&amp;lt;std::uint8_t&amp;gt;(index ^ byte);
}

Half DecodeBase26(std::uint32_t value) {
    Half result{};
    for (int i = 3; i &amp;gt;= 0; --i) {
        result[i] = static_cast&amp;lt;char&amp;gt;(&amp;#39;A&amp;#39; + value % 26);
        value &#x2F;= 26;
    }
    return result;
}

State ForwardHalf(const Half&amp;amp; half) {
    State state = kInitial;
    for (const auto ch : half) {
        state = ForwardByte(state, static_cast&amp;lt;std::uint8_t&amp;gt;(ch));
    }
    return state;
}

State ReverseHalf(State target, const Half&amp;amp; half) {
    State state = target;
    for (auto it = half.rbegin(); it != half.rend(); ++it) {
        state = ReverseByte(state, static_cast&amp;lt;std::uint8_t&amp;gt;(*it));
    }
    return state;
}

std::optional&amp;lt;Input&amp;gt; FindEightLetterInput(State target) {
    std::unordered_map&amp;lt;State, Half&amp;gt; leftStates;
    leftStates.reserve(kHalfSpace);

    &#x2F;&#x2F; 枚举 ABCD，保存 initial --ABCD--&amp;gt; middle
    for (std::uint32_t i = 0; i &amp;lt; kHalfSpace; ++i) {
        const auto left = DecodeBase26(i);
        leftStates.try_emplace(ForwardHalf(left), left);
    }

    &#x2F;&#x2F; 枚举 EFGH，计算 middle --EFGH--&amp;gt; target 的逆过程
    for (std::uint32_t i = 0; i &amp;lt; kHalfSpace; ++i) {
        const auto right = DecodeBase26(i);
        const State middle = ReverseHalf(target, right);

        const auto found = leftStates.find(middle);
        if (found == leftStates.end()) {
            continue;
        }

        Input result{};
        std::copy(found-&amp;gt;second.begin(), found-&amp;gt;second.end(), result.begin());
        std::copy(right.begin(), right.end(), result.begin() + 4);
        return result;
    }

    return std::nullopt;
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;以 &lt;code&gt;0xEECCEA2B&lt;&#x2F;code&gt; 为目标值，可以得到如下一组结果：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;参与 CRC 计算的顺序： PPWAAGGF
玩家在游戏中的输入： FGGAAWPP
结果校验： 0xeeccea2b
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;ReverseByte&lt;&#x2F;code&gt; 是这段代码的核心。正向更新时，旧状态先右移 8 位，因此新状态的最高字节完全来自某个查表项；反向计算先用这一最高字节确定查表索引，再恢复旧状态被移走的最低字节。由此，每个已知字符对应的状态转移都可以精确撤销。&lt;&#x2F;p&gt;
&lt;p&gt;这样一来，原本需要逐个尝试的 &lt;code&gt;26^8 = 208,827,064,576&lt;&#x2F;code&gt; 种组合，拆成两半后只需分别准备 &lt;code&gt;26^4 = 456,976&lt;&#x2F;code&gt; 种可能，合计 &lt;code&gt;26^4 + 26^4 = 913,952&lt;&#x2F;code&gt; 次运算。搜索规模由两千多亿降到了百万级，代价是要先将一边的所有中间结果保存下来，供另一边查找比对，但这已经是普通电脑可以胜任的规模。&lt;&#x2F;p&gt;
&lt;p&gt;但找到数学上成立的碰撞字符串，并不代表它能在 GTA:SA 中直接使用，还存在两个限制：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;字符范围&lt;&#x2F;strong&gt;：CRC32 也可以在已知目标结果的情况下，反推出几个特定字节使整段数据刚好得到该值，但这样得到的字节未必落在英文字母范围内，需要额外筛选出可输入、便于记忆的组合；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;游戏的匹配规则&lt;&#x2F;strong&gt;：GTA:SA 从第 6 个字符起就会开始判断是否命中作弊码。如果一条较长候选码的前 6 位或前 7 位提前命中了别的效果，游戏会立即执行该效果并清空输入缓冲区，后续字符就无法再组成原本设想的那条作弊码了。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;六、CRC32_与_SHA-256_的用途差异&quot;&gt;六、CRC32 与 SHA-256 的用途差异&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#六、CRC32_与_SHA-256_的用途差异&quot;
   aria-label=&quot;Anchor link for: 六、CRC32_与_SHA-256_的用途差异&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;CRC32 容易产生相同结果，这也引出另一个问题：Rockstar 为什么不使用 SHA-256 这类密码学哈希？&lt;&#x2F;p&gt;
&lt;p&gt;原因在于两种算法的设计目标本就不同。&lt;&#x2F;p&gt;
&lt;p&gt;CRC32 的目标是快速发现数据中的意外错误，而不是防止攻击者主动构造相同结果。它的输出只有 32 位，内部结构也便于分析，所以可以寻找碰撞，甚至定向调整数据以得到需要的结果。&lt;&#x2F;p&gt;
&lt;p&gt;SHA-256 则面向密码学用途：输出是 256 位，计算过程经过多轮混合，特意避免了 CRC32 那种容易被利用的线性关系。理论上 SHA-256 也必然存在碰撞——毕竟固定长度的输出无法容纳无限多的输入——但在现实计算能力下，人们无法用对付 CRC32 的方法轻易找到它们。&lt;&#x2F;p&gt;
&lt;p&gt;讨论哈希时，还需要区分三个相近的概念：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;碰撞&lt;&#x2F;strong&gt;：自由寻找两条不同内容，使它们的结果相同；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;原像&lt;&#x2F;strong&gt;：给定一个结果，寻找一条能得到该结果的内容；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;第二原像&lt;&#x2F;strong&gt;：给定一条现有内容，再寻找另一条结果相同的内容。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;寻找一条能触发指定 GTA:SA 作弊效果的字符串，更接近带有长度与字符范围限制的原像搜索；从 &lt;code&gt;INEEDSOMEHELP&lt;&#x2F;code&gt; 出发寻找另一条结果相同的字符串，则可以视为第二原像问题。日常表述常把这些情况统称为“哈希碰撞”，但它们在密码学中的含义并不完全相同。&lt;&#x2F;p&gt;
&lt;p&gt;SHA-256 属于密码学哈希，但并不适合直接保存密码。现代密码存储仍应使用带盐、计算缓慢并具有一定内存成本的专用方案，例如 Argon2、scrypt、bcrypt 或 PBKDF2。文件的 SHA-256 摘要，也只有在来源可信，或配合 HMAC、数字签名等认证机制时，才能证明文件未被恶意替换。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;七、CRC32_是否适合这一场景&quot;&gt;七、CRC32 是否适合这一场景&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#七、CRC32_是否适合这一场景&quot;
   aria-label=&quot;Anchor link for: 七、CRC32_是否适合这一场景&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;若用 CRC32 保存密码、验证数字签名或防范主动篡改，显然并不合适。但 GTA:SA 的作弊码系统并不承担这些安全职责。&lt;&#x2F;p&gt;
&lt;p&gt;这套系统的主要需求其实是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;快速处理玩家的每次按键；&lt;&#x2F;li&gt;
&lt;li&gt;避免在程序中直接保存明显的作弊码明文；&lt;&#x2F;li&gt;
&lt;li&gt;以较低成本完成匹配；&lt;&#x2F;li&gt;
&lt;li&gt;把正常游戏中的误触概率控制在可接受范围内。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;即便玩家找到了另一串字符，最终也只会触发一项既有的单机游戏功能，不会绕过账户认证或获取服务器权限。对这样的使用场景而言，轻量的 32 位 Key 已经足够。换成 SHA-256 固然会让碰撞更难寻找，却不会为这款单机游戏带来什么实际价值。&lt;&#x2F;p&gt;
&lt;p&gt;所以，GTA:SA 的作弊码看似古怪，并不是设计者随意排列字母的结果，而更像是游戏实现方式留下的痕迹：程序保存的是数值，玩家输入的是能命中这些数值的字符组合，可读性从来都不是首要条件。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;参考资料&quot;&gt;参考资料&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#参考资料&quot;
   aria-label=&quot;Anchor link for: 参考资料&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gta-reversed&#x2F;gta-reversed&quot;&gt;gta-reversed：GTA SA 1.0 US 的社区逆向实现&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gta-reversed&#x2F;gta-reversed&#x2F;blob&#x2F;master&#x2F;source&#x2F;game_sa&#x2F;Cheat.cpp&quot;&gt;CCheat::AddToCheatString：作弊输入缓冲与 6～29 字符匹配逻辑&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gta-reversed&#x2F;gta-reversed&#x2F;blob&#x2F;master&#x2F;source&#x2F;game_sa&#x2F;Core&#x2F;KeyGen.h&quot;&gt;CKeyGen：GTA SA 使用的 CRC-32-IEEE 查表实现&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gtag.sannybuilder.com&#x2F;sanandreas&#x2F;cheats&#x2F;&quot;&gt;GTAG San Andreas Cheats：意图字符串、常用碰撞码与 Hash 表&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;csrc.nist.gov&#x2F;pubs&#x2F;fips&#x2F;180-4&#x2F;upd1&#x2F;final&quot;&gt;NIST FIPS 180-4：Secure Hash Standard&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;csrc.nist.gov&#x2F;Projects&#x2F;hash-functions&quot;&gt;NIST Hash Functions：碰撞、原像和第二原像安全强度&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rfc-editor.org&#x2F;rfc&#x2F;rfc3385&quot;&gt;RFC 3385：CRC 的线性性质与增量更新&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
    </item> <item>
      <title>无题</title>
      <pubDate>Tue, 21 Jul 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/no-talent/</link>
      <guid>https://www.aspchang.com/posts/no-talent/</guid>
      <description xml:base="https://www.aspchang.com/posts/no-talent/">&lt;p&gt;小学的时候，我在少年宫跳拉丁舞。别的小朋友都可以穿漂亮的舞鞋和舞裙，因为我个子高，老师就一直让我跳男步。我很不开心，因为我根本不喜欢跳男生的部分，也不能穿好看的衣服。汇报演出后，老师跟我妈说我根本没有跳舞的天赋，不要再浪费钱了。&lt;&#x2F;p&gt;
&lt;p&gt;初中的时候，我妈给我报钢琴课。我没有一点乐理基础，很多东西理解起来很困难，小县城的老师教得又不好。我在家练琴，我妈说怎么感觉我怎么弹都不如隔壁的姐姐。隔壁的姐姐跟央音的老师培训，那时已经在准备钢琴艺考。&lt;&#x2F;p&gt;
&lt;p&gt;现在我二十多了，公司里的人会大声嘲笑我唱歌不如其他艺人好听。而他们给我报名的老师，一节课仅仅三百块，学生的年龄普遍十岁左右。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」NETCUP VPS 8000 G12</title>
      <pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-netcup-vps-8000-g12/</link>
      <guid>https://www.aspchang.com/posts/nq-netcup-vps-8000-g12/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-netcup-vps-8000-g12/">&lt;p&gt;NETCUP VPS 8000 G12，46.35EUR&#x2F;M，另有4.20EUR一次性设置费。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784260520559_image.png&quot; alt=&quot;NETCUP VPS 8000 G12 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784260543832_image.png&quot; alt=&quot;NETCUP VPS 8000 G12 IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784260557587_image.png&quot; alt=&quot;NETCUP VPS 8000 G12 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784260577929_image.png&quot; alt=&quot;NETCUP VPS 8000 G12 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;MfMzEFStOQTnFbha27OdT04YQjOi6M80&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」AaITR Frontier 静态家宽</title>
      <pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-aaitr-frontier-static-residential/</link>
      <guid>https://www.aspchang.com/posts/nq-aaitr-frontier-static-residential/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-aaitr-frontier-static-residential/">&lt;p&gt;AaITR Frontier 美国静态家宽，149CNY&#x2F;M。&lt;&#x2F;p&gt;
&lt;p&gt;个人使用时，我用 &lt;a href=&quot;&#x2F;posts&#x2F;nq-dmit-lax-an4-pro-malibu&#x2F;&quot;&gt;DMIT LAX.AN4.Pro.MALIBU&lt;&#x2F;a&gt; 作为线路机中转，AaITR Frontier 作为落地机；配置方法见 &lt;a href=&quot;&#x2F;posts&#x2F;3xui-nat-ss-exit&#x2F;&quot;&gt;如何用 3X-UI 让线路机对接动态 IP NAT 落地机&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784259835433_image.png&quot; alt=&quot;AaITR Frontier 静态家宽 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784259850686_image.png&quot; alt=&quot;AaITR Frontier 静态家宽 IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784259871619_image.png&quot; alt=&quot;AaITR Frontier 静态家宽 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1784259896251_image.png&quot; alt=&quot;AaITR Frontier 静态家宽 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;NaHE4hSFLsIYs4dyxWTx79SI1f6aBFMK&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>无海外银行卡和美区 PayPal，修改美区 Apple ID 账单地址到免税州</title>
      <pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/apple-id-us-billing-tax-free-state/</link>
      <guid>https://www.aspchang.com/posts/apple-id-us-billing-tax-free-state/</guid>
      <description xml:base="https://www.aspchang.com/posts/apple-id-us-billing-tax-free-state/">&lt;p&gt;美区 Apple ID 想改账单地址到免税州，但经常会遇到一个问题：付款方式里没有「无」，自己也没有海外银行卡和美区 PayPal。&lt;&#x2F;p&gt;
&lt;p&gt;这时候不要在 iPhone 的「付款与配送」里硬卡，可以换到 iTunes、Apple Music 或 Mac App Store 的账户信息页改 &lt;strong&gt;Billing Address&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;适用情况&quot;&gt;适用情况&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#适用情况&quot;
   aria-label=&quot;Anchor link for: 适用情况&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Apple ID 已经是美区&lt;&#x2F;li&gt;
&lt;li&gt;没有海外银行卡&lt;&#x2F;li&gt;
&lt;li&gt;没有美区 PayPal&lt;&#x2F;li&gt;
&lt;li&gt;付款方式没有 &lt;strong&gt;None &#x2F; 无&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;只是修改账单地址，不是切换 Apple ID 国家&#x2F;地区&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;方法一：Apple_Music&quot;&gt;方法一：Apple Music&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#方法一：Apple_Music&quot;
   aria-label=&quot;Anchor link for: 方法一：Apple_Music&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Windows 新版 Apple Music 可以这样进：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;strong&gt;Apple Music&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;登录美区 Apple ID&lt;&#x2F;li&gt;
&lt;li&gt;点击账号名&lt;&#x2F;li&gt;
&lt;li&gt;进入 &lt;strong&gt;View My Account&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;找到 &lt;strong&gt;Billing Address&lt;&#x2F;strong&gt; 或 &lt;strong&gt;Payment Information&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;点 &lt;strong&gt;Edit&lt;&#x2F;strong&gt; 修改地址&lt;&#x2F;li&gt;
&lt;li&gt;保存&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;重点是改 &lt;strong&gt;Billing Address&lt;&#x2F;strong&gt;，不是添加新的银行卡。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;方法二：iTunes&quot;&gt;方法二：iTunes&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#方法二：iTunes&quot;
   aria-label=&quot;Anchor link for: 方法二：iTunes&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;使用 iTunes 也可以改：&lt;&#x2F;p&gt;
&lt;p&gt;如果电脑上像我一样一开始装机就精简了 Microsoft Store，可以直接用 winget 安装：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;winget install -e --id Apple.iTunes --accept-source-agreements --accept-package-agreements
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;安装后可以确认一下版本：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;winget list iTunes
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果后面不需要了，也可以卸载：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;winget uninstall -e --id Apple.iTunes
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;装好后按下面流程改地址：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;strong&gt;iTunes&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;菜单栏点击 &lt;strong&gt;Account&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;选择 &lt;strong&gt;View My Account&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;登录 Apple ID&lt;&#x2F;li&gt;
&lt;li&gt;找到 &lt;strong&gt;Billing Address&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;点 &lt;strong&gt;Edit&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;修改并保存&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;方法三：Mac_App_Store&quot;&gt;方法三：Mac App Store&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#方法三：Mac_App_Store&quot;
   aria-label=&quot;Anchor link for: 方法三：Mac_App_Store&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Mac 上可以从 App Store 改：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;strong&gt;App Store&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;点击左下角账号名&lt;&#x2F;li&gt;
&lt;li&gt;进入 &lt;strong&gt;Account Settings&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;找到 &lt;strong&gt;Payment Information&lt;&#x2F;strong&gt; 或 &lt;strong&gt;Billing Address&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;编辑账单地址&lt;&#x2F;li&gt;
&lt;li&gt;保存&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;如果某个入口要求你必须添加银行卡，就换另一个入口试。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;地址怎么填&quot;&gt;地址怎么填&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#地址怎么填&quot;
   aria-label=&quot;Anchor link for: 地址怎么填&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;常见免税州：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;州&lt;&#x2F;th&gt;&lt;th&gt;缩写&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Oregon&lt;&#x2F;td&gt;&lt;td&gt;OR&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Delaware&lt;&#x2F;td&gt;&lt;td&gt;DE&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;New Hampshire&lt;&#x2F;td&gt;&lt;td&gt;NH&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Montana&lt;&#x2F;td&gt;&lt;td&gt;MT&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Alaska&lt;&#x2F;td&gt;&lt;td&gt;AK&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;账单地址一般要填：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Street&lt;&#x2F;td&gt;&lt;td&gt;街道地址&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;City&lt;&#x2F;td&gt;&lt;td&gt;城市&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;State&lt;&#x2F;td&gt;&lt;td&gt;州&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ZIP&lt;&#x2F;td&gt;&lt;td&gt;邮编&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Phone&lt;&#x2F;td&gt;&lt;td&gt;电话&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;State、City、ZIP 要对应。比如 Oregon 就填 OR，邮编也要是 Oregon 对应城市的邮编。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;验证&quot;&gt;验证&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#验证&quot;
   aria-label=&quot;Anchor link for: 验证&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;改完后打开 App Store，找一个付费 App 或订阅，走到付款确认前，看价格里有没有 sales tax。不要真付款也能看出来。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;总结&quot;&gt;总结&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#总结&quot;
   aria-label=&quot;Anchor link for: 总结&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;没有海外银行卡、没有美区 PayPal、付款方式没有「无」时，不要只盯着 iPhone 设置。&lt;&#x2F;p&gt;
&lt;p&gt;优先试：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Apple Music 的 &lt;strong&gt;View My Account&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;iTunes 的 &lt;strong&gt;Account -&amp;gt; View My Account&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Mac App Store 的 &lt;strong&gt;Account Settings&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;找到 &lt;strong&gt;Billing Address&lt;&#x2F;strong&gt; 后直接改账单地址即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;参考&quot;&gt;参考&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#参考&quot;
   aria-label=&quot;Anchor link for: 参考&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;support.apple.com&#x2F;en-us&#x2F;118293&quot;&gt;Apple：Change or update your Apple Account payment method&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
    </item> <item>
      <title>「NodeQuality」GatewaySentry AMS1 VPS-4</title>
      <pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-gatewaysentry-ams1-vps-4/</link>
      <guid>https://www.aspchang.com/posts/nq-gatewaysentry-ams1-vps-4/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-gatewaysentry-ams1-vps-4/">&lt;p&gt;书接上回买了一个 LAX1 区域的 VPS 后，寻思再买一个，使用了 LET 促销码，最终价格为 4USD&#x2F;M。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704063619_image.png&quot; alt=&quot;GatewaySentry AMS1 VPS-4 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704096755_image.png&quot; alt=&quot;GatewaySentry AMS1 VPS-4 IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704112120_image.png&quot; alt=&quot;GatewaySentry AMS1 VPS-4 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704128879_image.png&quot; alt=&quot;GatewaySentry AMS1 VPS-4 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;JG8IqdXSpBQQndcWk19AFK8j4eA0JWmk&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」GatewaySentry LAX1 VPS-8</title>
      <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-gatewaysentry-lax1-vps-8/</link>
      <guid>https://www.aspchang.com/posts/nq-gatewaysentry-lax1-vps-8/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-gatewaysentry-lax1-vps-8/">&lt;p&gt;之前想买 DigitalFyre 的 10USD&#x2F;M 区域 VPS，苦于没有库存，于是改用 GatewaySentry 的 8USD&#x2F;M 区域 VPS，使用了促销码 nodeseek，价格优惠，同为9950X，少了 4C，但是也够用了，正好拿来跑 BOT 和 n8n，非常的不错。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704436740_image.png&quot; alt=&quot;GatewaySentry LAX1 VPS-8 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704449446_image.png&quot; alt=&quot;GatewaySentry LAX1 VPS-8 IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704457703_image.png&quot; alt=&quot;GatewaySentry LAX1 VPS-8 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1782704480847_image.png&quot; alt=&quot;GatewaySentry LAX1 VPS-8 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;T5Y3NRHa5OMmoQnLQU9zk0gyRs8WmFGA&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>Debian&#x2F;Ubuntu 服务器终端环境配置：Zsh、Starship 与命令行增强</title>
      <pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/zsh-starship-server-terminal/</link>
      <guid>https://www.aspchang.com/posts/zsh-starship-server-terminal/</guid>
      <description xml:base="https://www.aspchang.com/posts/zsh-starship-server-terminal/">&lt;p&gt;最近给几台服务器统一配置了一下终端环境，目标很简单：保留 Bash 的使用习惯，同时获得更舒服的提示符、历史命令建议和语法高亮。&lt;&#x2F;p&gt;
&lt;p&gt;服务器终端不需要配置得特别花哨，毕竟大部分时间还是在敲命令。只要提示符清楚一点、输过的命令能快速找回来、打错命令时能提前看出来，日常使用就会舒服很多。&lt;&#x2F;p&gt;
&lt;p&gt;最终方案是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zsh&lt;&#x2F;strong&gt;：作为默认 Shell&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Starship&lt;&#x2F;strong&gt;：跨平台提示符&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;zsh-autosuggestions&lt;&#x2F;strong&gt;：输入时提示历史命令&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;zsh-syntax-highlighting&lt;&#x2F;strong&gt;：命令语法高亮&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;fzf&lt;&#x2F;strong&gt;：增强历史搜索体验&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;这套方案没有使用 Oh My Zsh，也不需要额外的插件管理器。配置不长，换服务器时复制起来也比较方便。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;为什么不用_Fish&quot;&gt;为什么不用 Fish&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#为什么不用_Fish&quot;
   aria-label=&quot;Anchor link for: 为什么不用_Fish&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Fish 的交互体验很好，默认就有自动建议和补全，但它和 Bash 的语法兼容性一般。服务器上经常会执行各种 Bash 脚本，所以我更倾向于使用 Zsh。&lt;&#x2F;p&gt;
&lt;p&gt;Zsh 能保留大部分 Bash 使用习惯，再通过插件实现接近 Fish 的体验。&lt;&#x2F;p&gt;
&lt;p&gt;当然，把 Zsh 设为默认 Shell 并不会影响带有正确 Shebang 的 Bash 脚本。这里主要考虑的还是交互环境：临时复制一段命令、改几个变量或者写一个简单循环时，不用在两套语法之间切换思路。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;一键安装&quot;&gt;一键安装&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一键安装&quot;
   aria-label=&quot;Anchor link for: 一键安装&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Debian &#x2F; Ubuntu 可以直接执行下面的命令。它会安装需要的软件、生成 Starship 配置，并写入一份新的 &lt;code&gt;~&#x2F;.zshrc&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;命令会覆盖当前用户已有的 &lt;code&gt;~&#x2F;.zshrc&lt;&#x2F;code&gt;，如有旧配置请先备份。非 &lt;code&gt;root&lt;&#x2F;code&gt; 用户需要给 &lt;code&gt;apt&lt;&#x2F;code&gt; 命令加上 &lt;code&gt;sudo&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;apt update &amp;amp;&amp;amp; apt install -y zsh zsh-autosuggestions zsh-syntax-highlighting fzf curl

mkdir -p ~&#x2F;.config

command -v starship &amp;gt;&#x2F;dev&#x2F;null 2&amp;gt;&amp;amp;1 || curl -sS https:&#x2F;&#x2F;starship.rs&#x2F;install.sh | sh -s -- -y

starship preset plain-text-symbols -o ~&#x2F;.config&#x2F;starship.toml

cat &amp;gt; ~&#x2F;.zshrc &amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
# History
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~&#x2F;.zsh_history
setopt HIST_IGNORE_DUPS
setopt INC_APPEND_HISTORY

# Completion
autoload -Uz compinit
compinit

# Keybindings
bindkey -e

# Starship prompt
eval &amp;quot;$(starship init zsh)&amp;quot;

# Autosuggestions
[ -f &#x2F;usr&#x2F;share&#x2F;zsh-autosuggestions&#x2F;zsh-autosuggestions.zsh ] &amp;amp;&amp;amp; source &#x2F;usr&#x2F;share&#x2F;zsh-autosuggestions&#x2F;zsh-autosuggestions.zsh

# fzf: Ctrl+R history search and other keybindings
[ -f &#x2F;usr&#x2F;share&#x2F;doc&#x2F;fzf&#x2F;examples&#x2F;key-bindings.zsh ] &amp;amp;&amp;amp; source &#x2F;usr&#x2F;share&#x2F;doc&#x2F;fzf&#x2F;examples&#x2F;key-bindings.zsh

# Syntax highlighting, keep near the end
[ -f &#x2F;usr&#x2F;share&#x2F;zsh-syntax-highlighting&#x2F;zsh-syntax-highlighting.zsh ] &amp;amp;&amp;amp; source &#x2F;usr&#x2F;share&#x2F;zsh-syntax-highlighting&#x2F;zsh-syntax-highlighting.zsh
EOF

exec zsh -l
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;配置中的几个细节&quot;&gt;配置中的几个细节&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#配置中的几个细节&quot;
   aria-label=&quot;Anchor link for: 配置中的几个细节&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;历史记录保留了 10000 条，并在每次执行命令后及时写入 &lt;code&gt;~&#x2F;.zsh_history&lt;&#x2F;code&gt;，避免终端意外断开时丢失本次会话的记录。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;zsh-autosuggestions&lt;&#x2F;code&gt; 会在输入时显示灰色的历史命令建议，按方向键右键即可接受。&lt;code&gt;fzf&lt;&#x2F;code&gt; 的按键绑定则接管了 &lt;code&gt;Ctrl+R&lt;&#x2F;code&gt;，查找很久以前执行过的命令会方便不少。&lt;&#x2F;p&gt;
&lt;p&gt;Starship 使用的是 &lt;code&gt;plain-text-symbols&lt;&#x2F;code&gt; 预设。服务器通常会从不同设备登录，这个预设不依赖 Nerd Font，能减少图标显示成方框或乱码的情况。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;zsh-syntax-highlighting&lt;&#x2F;code&gt; 放在配置文件末尾是有意为之。它需要在其他组件之后加载，以后继续修改 &lt;code&gt;.zshrc&lt;&#x2F;code&gt; 时，尽量也让它保持在靠后的位置。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;设为默认_Shell&quot;&gt;设为默认 Shell&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#设为默认_Shell&quot;
   aria-label=&quot;Anchor link for: 设为默认_Shell&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;exec zsh -l&lt;&#x2F;code&gt; 只会切换当前终端。确认配置正常后，可以将 Zsh 设为默认 Shell：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;chsh -s &amp;quot;$(command -v zsh)&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;退出并重新登录 SSH 后生效，可以执行 &lt;code&gt;echo $SHELL&lt;&#x2F;code&gt; 检查当前默认 Shell。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」Advin Servers KVM Premium S</title>
      <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-advin-servers-kvm-premium-s/</link>
      <guid>https://www.aspchang.com/posts/nq-advin-servers-kvm-premium-s/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-advin-servers-kvm-premium-s/">&lt;p&gt;Advin Servers KVM Premium S，10USD&#x2F;月，10G 的口子，拿来给 B 站传视频还是很不错的。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780401336322_image.png&quot; alt=&quot;Advin Servers KVM Premium S 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780401350291_image.png&quot; alt=&quot;Advin Servers KVM Premium S IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780401373476_image.png&quot; alt=&quot;Advin Servers KVM Premium S 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780401406477_image.png&quot; alt=&quot;Advin Servers KVM Premium S 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;jbfxRuTEfTkq50jEQXPkIuVBdokFkr3d&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」ColoCrossing Special 4GB RAM ZP</title>
      <pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-ccs-special-4gb-ram-zp/</link>
      <guid>https://www.aspchang.com/posts/nq-ccs-special-4gb-ram-zp/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-ccs-special-4gb-ram-zp/">&lt;p&gt;3C4G LA 20.99USD&#x2F;Y，收自&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nodeseek.com&#x2F;post-752667-1&quot;&gt;折价出ccs 3c4g 40T la $20.99&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;NodeQuality&quot;&gt;NodeQuality&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#NodeQuality&quot;
   aria-label=&quot;Anchor link for: NodeQuality&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780075129142_image.png&quot; alt=&quot;ColoCrossing Special 4GB RAM ZP 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780075176845_image.png&quot; alt=&quot;ColoCrossing Special 4GB RAM ZP IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780075200156_image.png&quot; alt=&quot;ColoCrossing Special 4GB RAM ZP 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1780075222359_image.png&quot; alt=&quot;ColoCrossing Special 4GB RAM ZP 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;u4xC055vBhKz7u6Vi1JnOPUFg8iDtqkV&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>Reality 如何正确「偷」域名：RealiTLScanner 扫描 + RealityChecker 检测</title>
      <pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/reality-steal-domain/</link>
      <guid>https://www.aspchang.com/posts/reality-steal-domain/</guid>
      <description xml:base="https://www.aspchang.com/posts/reality-steal-domain/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Reality 节点的目标站点（&lt;code&gt;target&lt;&#x2F;code&gt; &#x2F; 旧称 &lt;code&gt;dest&lt;&#x2F;code&gt;）和 SNI 填什么，直接决定节点的伪装质量、延迟与存活时间。多数教程给出的 &lt;code&gt;apple.com&lt;&#x2F;code&gt;、&lt;code&gt;microsoft.com&lt;&#x2F;code&gt; 等大厂域名虽然可用，却并非理想选择：使用者过多导致特征明显，对方调整 TLS 配置即可使其失效，相关 IP 也更容易被针对。&lt;&#x2F;p&gt;
&lt;p&gt;所谓「偷域名」，是指借用某个真实站点的 TLS 外观、证书链与握手特征，使代理流量在外部观察下尽量接近正常访问该站点的行为——你无需拥有这个域名。Reality 的基本原理见 &lt;a href=&quot;&#x2F;posts&#x2F;3xui-basic&#x2F;&quot;&gt;3x-ui 基本教程&lt;&#x2F;a&gt;，本文只解决一个问题：&lt;strong&gt;如何科学地选出延迟低、不易被封、伪装可信的目标站点。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;整个流程分三步：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;用 &lt;strong&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;XTLS&#x2F;RealiTLScanner&quot;&gt;XTLS&#x2F;RealiTLScanner&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; 在 VPS 同 IP 段扫描候选；&lt;&#x2F;li&gt;
&lt;li&gt;用 &lt;strong&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;V2RaySSR&#x2F;RealityChecker&quot;&gt;V2RaySSR&#x2F;RealityChecker&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; 批量检测，筛除不合格项；&lt;&#x2F;li&gt;
&lt;li&gt;填入 VLESS-REALITY 节点配置。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;本文仅供个人学习与自用，请遵守当地法律法规，禁止用于任何非法用途。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;一、目标站点的选取标准&quot;&gt;一、目标站点的选取标准&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、目标站点的选取标准&quot;
   aria-label=&quot;Anchor link for: 一、目标站点的选取标准&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Reality 的 &lt;code&gt;target&lt;&#x2F;code&gt; 是用于伪装的真实站点。对未通过 Reality 鉴权的连接，Xray 会将流量转发到 &lt;code&gt;target&lt;&#x2F;code&gt;，使探测流量看起来像在访问该站点。因此 &lt;code&gt;target&lt;&#x2F;code&gt; 须满足一组硬性条件，握手特征才自然、连接才稳定。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;条件&lt;&#x2F;th&gt;&lt;th&gt;要求&lt;&#x2F;th&gt;&lt;th&gt;原因&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;TLS 1.3&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;必须支持&lt;&#x2F;td&gt;&lt;td&gt;Reality 的握手伪装依赖 1.3，1.2 不可用&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;X25519&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;密钥交换使用 X25519&lt;&#x2F;td&gt;&lt;td&gt;TLS 1.3 常见算法，需与 Reality 特征一致&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;HTTP&#x2F;2&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;建议 ALPN 协商出 &lt;code&gt;h2&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;更贴近常见浏览器访问特征&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;未套 CDN&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;优先选择直连源站&lt;&#x2F;td&gt;&lt;td&gt;见下方说明&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;不跳转&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;首页尽量直接返回 200&lt;&#x2F;td&gt;&lt;td&gt;避免 HTTP 层行为不稳定&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;证书合法&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;CA 签发的有效证书&lt;&#x2F;td&gt;&lt;td&gt;自签或过期证书会暴露特征&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;进阶条件（可进一步提升成功率）：Cipher 为 &lt;code&gt;AES_128_GCM&lt;&#x2F;code&gt;、服务器签名为 &lt;code&gt;ECDSA with SHA-256&lt;&#x2F;code&gt;、站点内容丰富而非单页空壳、且未被 GFW 封锁（被墙域名作为 &lt;code&gt;target&lt;&#x2F;code&gt; 等于自断连接）。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;关于「未套 CDN」&lt;&#x2F;strong&gt;：若 &lt;code&gt;target&lt;&#x2F;code&gt; 套用了 CDN，Reality 转发到 &lt;code&gt;target&lt;&#x2F;code&gt; 的流量可能进入 CDN 节点，服务端实际沦为他人 CDN 的转发节点，最大的隐患就是流量偷跑。因此强烈建议优先选择未套 CDN、同 ASN &#x2F; 同机房的目标站点。CDN 目标不是一定不可用，但风险更高，这也是不建议直接套用大厂域名的原因之一——它们大多解析到 CDN。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;二、核心思路：在同_IP_段内选取&quot;&gt;二、核心思路：在同 IP 段内选取&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二、核心思路：在同_IP_段内选取&quot;
   aria-label=&quot;Anchor link for: 二、核心思路：在同_IP_段内选取&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;科学选取与随意填写的根本差别，在于目标站点是否与 VPS 同处一个机房。当 &lt;code&gt;target&lt;&#x2F;code&gt; 与 VPS 同机房、同 IP 段、同 ASN 时：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;延迟更低&lt;&#x2F;strong&gt;：通常显著低于跨地区目标，理想情况下可接近 1ms 级别；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;流量自然&lt;&#x2F;strong&gt;：同机房主机间的访问，比跨洲访问大厂域名更符合常理；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;冷门可控&lt;&#x2F;strong&gt;：便于选到少有人用的域名，避免与他人重复。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;因此正确做法是&lt;strong&gt;以 VPS 自身 IP 为起点，扫描其所在网段的相邻主机&lt;&#x2F;strong&gt;。可借助：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bgp.tools&#x2F;&quot;&gt;bgp.tools&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;：查询 VPS IP 所属的 ASN 与网段；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.shodan.io&#x2F;&quot;&gt;Shodan&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;：按 IP 反查域名，或直接寻找同机房站点。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;若同段结果不理想，可退而搜索 &lt;strong&gt;VPS 所在国家&#x2F;地区的高校官网&lt;&#x2F;strong&gt;——这类站点通常 TLS 配置规范、直连且未套 CDN，再逐项核对上节标准即可。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;三、扫描：RealiTLScanner&quot;&gt;三、扫描：RealiTLScanner&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三、扫描：RealiTLScanner&quot;
   aria-label=&quot;Anchor link for: 三、扫描：RealiTLScanner&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;RealiTLScanner 是 XTLS 官方的 TLS 扫描器，专为寻找 Reality 目标站点设计：它遍历指定 IP &#x2F; 网段，对每个开放 443 的主机做 TLS 握手，&lt;strong&gt;只记录同时满足 TLS 1.3 与 h2 的目标&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;XTLS&#x2F;RealiTLScanner&quot;
   data-github-repo=&quot;XTLS&amp;#x2F;RealiTLScanner&quot;
   aria-label=&quot;XTLS&amp;#x2F;RealiTLScanner on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;XTLS&amp;#x2F;RealiTLScanner&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;h3 id=&quot;3.1_获取&quot;&gt;3.1 获取&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.1_获取&quot;
   aria-label=&quot;Anchor link for: 3.1_获取&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;XTLS&#x2F;RealiTLScanner&#x2F;releases&quot;&gt;Releases&lt;&#x2F;a&gt; 下载预编译二进制（无需 Go 环境），或用 Go 自行编译（需 Go 1.21+）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;go install github.com&#x2F;XTLS&#x2F;RealiTLScanner@latest
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;3.2_参数&quot;&gt;3.2 参数&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.2_参数&quot;
   aria-label=&quot;Anchor link for: 3.2_参数&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;说明&lt;&#x2F;th&gt;&lt;th&gt;默认&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-addr&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;扫描的 IP &#x2F; CIDR &#x2F; 域名；填单个 IP 或域名进入 infinity 模式（持续向后扫描至 Ctrl+C）&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-port&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;检测端口&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;443&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-thread&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;并发线程数&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;1&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-timeout&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;单次握手超时（秒）&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;10&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-in&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;从文件读取目标列表（每行一个）&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-out&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;结果输出文件&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;out.csv&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-url&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;从某 URL 抓取域名列表再扫描&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;详细输出（含失败目标）&lt;&#x2F;td&gt;&lt;td&gt;关闭&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;部分教程将超时参数写作 &lt;code&gt;-timeOut&lt;&#x2F;code&gt;，请以官方的小写 &lt;code&gt;-timeout&lt;&#x2F;code&gt; 为准。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;h3 id=&quot;3.3_扫描同_IP_段&quot;&gt;3.3 扫描同 IP 段&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.3_扫描同_IP_段&quot;
   aria-label=&quot;Anchor link for: 3.3_扫描同_IP_段&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;将 &lt;code&gt;VPSIP&lt;&#x2F;code&gt; 替换为服务器真实 IP：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;.&#x2F;RealiTLScanner -addr VPSIP -port 443 -thread 100 -timeout 5 -out file.csv
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;裸 IP（不带 &lt;code&gt;&#x2F;24&lt;&#x2F;code&gt;）会进入 infinity 模式，从该 IP 起依次向后扫描，获取足够候选后按 &lt;code&gt;Ctrl+C&lt;&#x2F;code&gt; 停止。若需范围可控，将 &lt;code&gt;-addr&lt;&#x2F;code&gt; 写成 CIDR：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;.&#x2F;RealiTLScanner -addr 1.2.3.0&#x2F;24 -port 443 -thread 100 -timeout 5 -out file.csv
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;&#x2F;24&lt;&#x2F;code&gt; 覆盖最近 256 个地址，&lt;code&gt;&#x2F;21&lt;&#x2F;code&gt; 覆盖 2048 个地址，按需选择。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;strong&gt;扫描应在本地机器运行，而非生产 VPS。&lt;&#x2F;strong&gt; 对整段 IP 发起扫描易被机房判定为端口扫描滥用，进而收到 abuse 投诉。扫描源通常不影响目标是否支持 TLS 1.3 &#x2F; h2 的基本判断，但会影响延迟、可达性和风控风险。多次扫描请使用不同的输出文件名，避免覆盖。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;四、检测：RealityChecker&quot;&gt;四、检测：RealityChecker&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四、检测：RealityChecker&quot;
   aria-label=&quot;Anchor link for: 四、检测：RealityChecker&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;扫描得到的候选往往较多，逐个手检效率低。RealityChecker（V2RaySSR 出品）可批量检测候选是否适合作为 Reality 目标，支持 TLS 检测、地理位置分析与 CDN 识别，并给出星级推荐。&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;V2RaySSR&#x2F;RealityChecker&quot;
   data-github-repo=&quot;V2RaySSR&amp;#x2F;RealityChecker&quot;
   aria-label=&quot;V2RaySSR&amp;#x2F;RealityChecker on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;V2RaySSR&amp;#x2F;RealityChecker&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;h3 id=&quot;4.1_获取&quot;&gt;4.1 获取&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.1_获取&quot;
   aria-label=&quot;Anchor link for: 4.1_获取&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;下载预编译包（以 x86 为例）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;apt update &amp;amp;&amp;amp; apt install -y unzip curl wget
wget https:&#x2F;&#x2F;github.com&#x2F;V2RaySSR&#x2F;RealityChecker&#x2F;releases&#x2F;latest&#x2F;download&#x2F;reality-checker-linux-amd64.zip
unzip reality-checker-linux-amd64.zip
chmod +x reality-checker
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ARM64 机型换用 &lt;code&gt;reality-checker-linux-arm64.zip&lt;&#x2F;code&gt;，CentOS 将 &lt;code&gt;apt&lt;&#x2F;code&gt; 换成 &lt;code&gt;yum&lt;&#x2F;code&gt;。也可源码编译：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone https:&#x2F;&#x2F;github.com&#x2F;V2RaySSR&#x2F;RealityChecker.git
cd RealityChecker
go build -o reality-checker
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;4.2_三种检测模式&quot;&gt;4.2 三种检测模式&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.2_三种检测模式&quot;
   aria-label=&quot;Anchor link for: 4.2_三种检测模式&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 单个域名
.&#x2F;reality-checker check apple.com

# 多个域名（空格分隔）
.&#x2F;reality-checker batch apple.com tesla.com microsoft.com

# 直接读取 RealiTLScanner 导出的 CSV —— 与上一步衔接
.&#x2F;reality-checker csv file.csv
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;直接运行 &lt;code&gt;.&#x2F;reality-checker&lt;&#x2F;code&gt; 查看帮助，&lt;code&gt;.&#x2F;reality-checker version&lt;&#x2F;code&gt; 查看版本。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;RealityChecker 会尝试自动下载所需数据文件。若自动下载失败，可手动将 &lt;code&gt;Country.mmdb&lt;&#x2F;code&gt;、&lt;code&gt;gfwlist.conf&lt;&#x2F;code&gt;、&lt;code&gt;cdn_keywords.txt&lt;&#x2F;code&gt;、&lt;code&gt;hot_websites.txt&lt;&#x2F;code&gt; 放入程序的 &lt;code&gt;data&#x2F;&lt;&#x2F;code&gt; 目录。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;h3 id=&quot;4.3_新版_RealiTLScanner_CSV_兼容性&quot;&gt;4.3 新版 RealiTLScanner CSV 兼容性&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.3_新版_RealiTLScanner_CSV_兼容性&quot;
   aria-label=&quot;Anchor link for: 4.3_新版_RealiTLScanner_CSV_兼容性&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;aside class=&quot;github-alert github-alert--warning&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;WARNING&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;XTLS&#x2F;RealiTLScanner 新版本导出的 CSV 与 V2RaySSR&#x2F;RealityChecker 当前读取逻辑不完全兼容。RealityChecker 旧格式默认把第 3 列当作 &lt;code&gt;CERT_DOMAIN&lt;&#x2F;code&gt;，如果直接读取新版 CSV，可能会把 &lt;code&gt;TLS 1.3&lt;&#x2F;code&gt; 当成域名检测，出现「从 CSV 文件提取到 1 个域名」「正在检测 [1&#x2F;1]: TLS 1.3... 不适合 - 网络不可达」这类结果。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;遇到这种情况，不要直接执行 &lt;code&gt;.&#x2F;reality-checker csv file.csv&lt;&#x2F;code&gt;，先把 RealiTLScanner 的 CSV 转成 RealityChecker 兼容格式：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;python3 - &amp;lt;&amp;lt;&amp;#39;PY&amp;#39;
import csv

inp = &amp;quot;file.csv&amp;quot;
out = &amp;quot;checker.csv&amp;quot;

bad_values = {
    &amp;quot;&amp;quot;,
    &amp;quot;CloudFlare Origin Certificate&amp;quot;,
}

seen = set()

with open(inp, newline=&amp;quot;&amp;quot;, encoding=&amp;quot;utf-8-sig&amp;quot;) as f, open(out, &amp;quot;w&amp;quot;, newline=&amp;quot;&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as g:
    r = csv.DictReader(f)
    w = csv.writer(g)

    # 兼容 RealityChecker 旧格式：第 3 列就是 CERT_DOMAIN
    w.writerow([&amp;quot;IP&amp;quot;, &amp;quot;ORIGIN&amp;quot;, &amp;quot;CERT_DOMAIN&amp;quot;, &amp;quot;CERT_ISSUER&amp;quot;, &amp;quot;GEO_CODE&amp;quot;])

    for row in r:
        ip = (row.get(&amp;quot;IP&amp;quot;) or &amp;quot;&amp;quot;).strip()
        origin = (row.get(&amp;quot;ORIGIN&amp;quot;) or &amp;quot;&amp;quot;).strip()
        domain = (row.get(&amp;quot;CERT_DOMAIN&amp;quot;) or &amp;quot;&amp;quot;).strip()
        issuer = (row.get(&amp;quot;CERT_ISSUER&amp;quot;) or &amp;quot;&amp;quot;).strip()
        geo = (row.get(&amp;quot;GEO_CODE&amp;quot;) or &amp;quot;&amp;quot;).strip()

        if domain in bad_values:
            continue

        if domain.startswith(&amp;quot;*.&amp;quot;):
            domain = domain[2:]

        if &amp;quot;.&amp;quot; not in domain:
            continue

        key = (ip, domain)
        if key in seen:
            continue
        seen.add(key)

        w.writerow([ip, origin, domain, issuer, geo])

print(f&amp;quot;生成 {out}，有效记录 {len(seen)} 条&amp;quot;)
PY

.&#x2F;reality-checker csv checker.csv
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果你的扫描文件不是 &lt;code&gt;file.csv&lt;&#x2F;code&gt;，把脚本里的 &lt;code&gt;inp&lt;&#x2F;code&gt; 改成实际文件名即可。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4.4_读取结果&quot;&gt;4.4 读取结果&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.4_读取结果&quot;
   aria-label=&quot;Anchor link for: 4.4_读取结果&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;工具按推荐星级排序候选，并标注 TLS、CDN、地理位置等判读结果，优先选择&lt;strong&gt;星级高、握手延迟低且稳定&lt;&#x2F;strong&gt;的冷门站点。&lt;&#x2F;p&gt;
&lt;p&gt;或者选择可信非个人站点，比如如下网站，大学站点，无CDN，是完美的选择对象。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;最终域名&lt;&#x2F;th&gt;&lt;th&gt;基础条件&lt;&#x2F;th&gt;&lt;th&gt;握手时间&lt;&#x2F;th&gt;&lt;th&gt;证书时间&lt;&#x2F;th&gt;&lt;th&gt;CDN&lt;&#x2F;th&gt;&lt;th&gt;热门&lt;&#x2F;th&gt;&lt;th&gt;推荐&lt;&#x2F;th&gt;&lt;th&gt;页面状态&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;arch.linux.ucla.edu&lt;&#x2F;td&gt;&lt;td&gt;✓&lt;&#x2F;td&gt;&lt;td&gt;13ms&lt;&#x2F;td&gt;&lt;td&gt;64天&lt;&#x2F;td&gt;&lt;td&gt;无&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;td&gt;*****&lt;&#x2F;td&gt;&lt;td&gt;200&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;cinema.usc.edu&lt;&#x2F;td&gt;&lt;td&gt;✓&lt;&#x2F;td&gt;&lt;td&gt;19ms&lt;&#x2F;td&gt;&lt;td&gt;167天&lt;&#x2F;td&gt;&lt;td&gt;无&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;td&gt;*****&lt;&#x2F;td&gt;&lt;td&gt;200&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;五、填入_Reality_配置&quot;&gt;五、填入 Reality 配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#五、填入_Reality_配置&quot;
   aria-label=&quot;Anchor link for: 五、填入_Reality_配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;常规面板配置中，&lt;code&gt;target&lt;&#x2F;code&gt; 与 SNI 通常使用&lt;strong&gt;同一域名&lt;&#x2F;strong&gt;（面板内具体填法见 &lt;a href=&quot;&#x2F;posts&#x2F;3xui-basic&#x2F;&quot;&gt;3x-ui 基本教程&lt;&#x2F;a&gt; 的 Reality 章节）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;Target &#x2F; Dest:  your-stolen-domain.com:443
SNI:            your-stolen-domain.com
Fingerprint:    chrome
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;对应客户端分享链接中的 &lt;code&gt;sni&lt;&#x2F;code&gt; 与 &lt;code&gt;fp&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;vless:&#x2F;&#x2F;&amp;lt;UUID&amp;gt;@&amp;lt;服务器IP&amp;gt;:443?encryption=none&amp;amp;flow=xtls-rprx-vision&amp;amp;security=reality&amp;amp;sni=your-stolen-domain.com&amp;amp;fp=chrome&amp;amp;pbk=&amp;lt;公钥&amp;gt;&amp;amp;sid=&amp;lt;ShortId&amp;gt;&amp;amp;type=tcp#vless-reality
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;常规配置下，建议 SNI 与 &lt;code&gt;target&lt;&#x2F;code&gt; 域名保持一致；严格来说，客户端 SNI 应是服务端 &lt;code&gt;serverNames&lt;&#x2F;code&gt; 允许的值，并与目标站证书的 SAN &#x2F; 服务端接受的 SNI 行为相匹配。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;六、长期维护&quot;&gt;六、长期维护&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#六、长期维护&quot;
   aria-label=&quot;Anchor link for: 六、长期维护&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;选定的域名未必长期可用——对方可能调整 TLS、启用 CDN 或直接下线。因此：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;建立域名池&lt;&#x2F;strong&gt;：保留 5–10 个候选，按延迟与稳定性排序，主用失效时立即切换；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;定期复测&lt;&#x2F;strong&gt;：每周用 RealityChecker 检测一次，剔除握手异常的域名；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;「偷自己」最稳&lt;&#x2F;strong&gt;：在符合条件的服务器上自建真实站点（直连源站、TLS 1.3 + H2、未套 CDN）作为 &lt;code&gt;target&lt;&#x2F;code&gt;，完全自主可控、不受第三方变动影响，是社区公认最稳妥的方案。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;七、命令速查&quot;&gt;七、命令速查&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#七、命令速查&quot;
   aria-label=&quot;Anchor link for: 七、命令速查&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;# 1. 查询 ASN &#x2F; 同网段
bgp.tools

# 2. 本地扫描同段（足够候选后 Ctrl+C）
.&#x2F;RealiTLScanner -addr VPSIP -port 443 -thread 100 -timeout 5 -out file.csv

# 3. 若 RealityChecker 把 TLS 1.3 当作域名，先按 4.3 脚本生成 checker.csv
.&#x2F;reality-checker csv checker.csv

# 4. 正常读取旧格式 CSV 时，也可直接检测
.&#x2F;reality-checker csv file.csv

# 5. 复核高星候选：TLS1.3 &#x2F; X25519 &#x2F; h2 &#x2F; 非 CDN &#x2F; 不跳转

# 6. 填入配置：target = 域名:443，SNI 通常使用同一域名
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;参考与工具&quot;&gt;参考与工具&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#参考与工具&quot;
   aria-label=&quot;Anchor link for: 参考与工具&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;XTLS&#x2F;RealiTLScanner&quot;&gt;XTLS&#x2F;RealiTLScanner&lt;&#x2F;a&gt; —— 官方 TLS 扫描器&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;V2RaySSR&#x2F;RealityChecker&quot;&gt;V2RaySSR&#x2F;RealityChecker&lt;&#x2F;a&gt; —— 批量检测工具&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bgp.tools&#x2F;&quot;&gt;bgp.tools&lt;&#x2F;a&gt; —— 查询 ASN &#x2F; 同网段&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.shodan.io&#x2F;&quot;&gt;Shodan&lt;&#x2F;a&gt; —— IP 反查域名&lt;&#x2F;li&gt;
&lt;li&gt;站内：&lt;a href=&quot;&#x2F;posts&#x2F;3xui-basic&#x2F;&quot;&gt;3x-ui 基本教程：VLESS+Reality 节点搭建&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
    </item> <item>
      <title>「NodeQuality」Aliyun SWAS 200M&#x2F;BGP_PEK</title>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-aliyun-swas-200m/</link>
      <guid>https://www.aspchang.com/posts/nq-aliyun-swas-200m/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-aliyun-swas-200m/">&lt;p&gt;本次测试服务器为阿里云 SWAS 200M，BGP 线路北京区。使用 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nodeseek.com&#x2F;post-480326-1&quot;&gt;『NodeQuality 代理启动器』发布上线 | 解决国内网络受限、一键运行&lt;&#x2F;a&gt; 中的方法运行 NodeQuality，代理替换为 &lt;code&gt;https:&#x2F;&#x2F;ghfast.top&#x2F;&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;NodeQuality&quot;&gt;NodeQuality&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#NodeQuality&quot;
   aria-label=&quot;Anchor link for: NodeQuality&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1778432032892_image.png&quot; alt=&quot;Aliyun SWAS 200M&#x2F;BGP_PEK 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1778432043141_image.png&quot; alt=&quot;Aliyun SWAS 200M&#x2F;BGP_PEK IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1778432066750_image.png&quot; alt=&quot;Aliyun SWAS 200M&#x2F;BGP_PEK 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1778432081591_image.png&quot; alt=&quot;Aliyun SWAS 200M&#x2F;BGP_PEK 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;KJXJFAL2UzAKnGVkgU4paVsW5RAd8K7Y&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;-3&quot;&gt;GeekBench 5&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-3&quot;
   aria-label=&quot;Anchor link for: -3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1778432095885_image.png&quot; alt=&quot;Aliyun SWAS 200M&#x2F;BGP_PEK Geekbench 5 测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>自用代理节点 TCP 内核参数调优存档</title>
      <pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/tcp-tuning-proxy-node/</link>
      <guid>https://www.aspchang.com/posts/tcp-tuning-proxy-node/</guid>
      <description xml:base="https://www.aspchang.com/posts/tcp-tuning-proxy-node/">&lt;p&gt;已针对 &lt;strong&gt;2GB 内存&lt;&#x2F;strong&gt; 服务器进行缓冲区动态调整，并启用了 &lt;strong&gt;BBR&lt;&#x2F;strong&gt; 与 &lt;strong&gt;MPTCP&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;核心特性&quot;&gt;核心特性&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#核心特性&quot;
   aria-label=&quot;Anchor link for: 核心特性&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;拥塞控制&lt;&#x2F;strong&gt;: 启用 BBR，提升高丢包环境下的吞吐量。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;内存优化&lt;&#x2F;strong&gt;: 针对 2GB RAM 调整 tcp_mem，防止高并发下的内存溢出。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;快速回收&lt;&#x2F;strong&gt;: 优化 fin_timeout 与 tw_reuse，加速释放孤儿连接。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;协议增强&lt;&#x2F;strong&gt;: 开启 TCP FastOpen 和 MPTCP 支持。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;调参效果展示&quot;&gt;调参效果展示&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#调参效果展示&quot;
   aria-label=&quot;Anchor link for: 调参效果展示&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;调参前：
&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1778263113899_2026-05-07T20-14-58.592-com.png&quot; alt=&quot;TCP 调优前的网络测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;调参后：
&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1778263151893_2026-05-07T20-22-54.421-com.png&quot; alt=&quot;TCP 调优后的网络测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;&quot;&gt;一键部署指令&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;直接在终端执行以下命令，即可自动从 GitHub 获取最新配置并实时生效：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo wget -qO &#x2F;etc&#x2F;sysctl.d&#x2F;99-proxy-tcp.conf &amp;quot;https:&#x2F;&#x2F;gist.githubusercontent.com&#x2F;GEMILUXVII&#x2F;673f21a906ee2f158b003514cec1a632&#x2F;raw&#x2F;f2fc52404505a1241482652f35fb593f5ca346b1&#x2F;99-proxy-tcp.conf&amp;quot; &amp;amp;&amp;amp; sudo sysctl -p &#x2F;etc&#x2F;sysctl.d&#x2F;99-proxy-tcp.conf
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-1&quot;&gt;验证状态&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;执行以下命令确认 BBR 是否生效：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sysctl net.ipv4.tcp_congestion_control
# 输出应为: net.ipv4.tcp_congestion_control = bbr
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-2&quot;&gt;配置文件原文 (99-proxy-tcp.conf)&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;pre&gt;&lt;code data-lang=&quot;ini&quot;&gt;# BBR 拥塞控制
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_fastopen = 3

# 内存缓冲区 (针对 2GB 内存优化)
net.ipv4.tcp_mem = 20508 27348 41016
net.ipv4.tcp_rmem = 16384 262144 536870912
net.ipv4.tcp_wmem = 16384 262144 536870912
net.ipv4.tcp_moderate_rcvbuf = 1

# 连接复用与超时
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_orphans = 4096

# 保活设置
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 3

# 传输性能
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_adv_win_scale = -2
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_recovery = 1
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_notsent_lowat = 4294967295
net.ipv4.tcp_syncookies = 1

# MPTCP 支持
net.mptcp.enabled = 1
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-3&quot;&gt;进阶指南：如何根据 VPS 内存微调 TCP 参数&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-3&quot;
   aria-label=&quot;Anchor link for: -3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;只有 &lt;code&gt;tcp_mem&lt;&#x2F;code&gt; 需要按内存大小手动计算，&lt;code&gt;tcp_rmem&lt;&#x2F;code&gt; &#x2F; &lt;code&gt;tcp_wmem&lt;&#x2F;code&gt; 内核会自动伸缩，无需改动。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;单位&lt;&#x2F;strong&gt;：&lt;code&gt;tcp_mem&lt;&#x2F;code&gt; 的单位是 &lt;strong&gt;Page（内存页）&lt;&#x2F;strong&gt;，Linux 下 1 Page = 4KB。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;三个阈值含义&lt;&#x2F;strong&gt;：
&lt;code&gt;net.ipv4.tcp_mem = [正常运行上限] [触发内存压力] [强制丢包上限]&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;计算公式&lt;&#x2F;strong&gt;（建议 TCP 缓冲池占物理内存的 4%~8%）：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;总页数 = 物理内存 GB × 262144&lt;&#x2F;p&gt;
&lt;p&gt;min = 总页数 × 4%，pressure = 总页数 × 5.5%，max = 总页数 × 8%&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;以 2GB 内存为例&lt;&#x2F;strong&gt;：总页数 = 524,288，得出：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;net.ipv4.tcp_mem = 20971 28835 41943&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>如何用 3X-UI 让线路机对接动态 IP NAT 落地机</title>
      <pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/3xui-nat-ss-exit/</link>
      <guid>https://www.aspchang.com/posts/3xui-nat-ss-exit/</guid>
      <description xml:base="https://www.aspchang.com/posts/3xui-nat-ss-exit/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;本文是基于已搭建 3x-ui 的线路机做中转，使用动态家宽的 NAT VPS 落地，达到动态纯净 IP 出口的目的。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;仅用于学习与个人自用，请遵守当地法律与服务条款。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;方案概览&quot;&gt;方案概览&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#方案概览&quot;
   aria-label=&quot;Anchor link for: 方案概览&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;div class=&quot;flow&quot; role=&quot;list&quot;&gt;
&lt;div class=&quot;flow__node&quot; role=&quot;listitem&quot;&gt;&lt;span class=&quot;flow__node-icon&quot;&gt;🖥️&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-title&quot;&gt;客户端&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-sub&quot;&gt;任意客户端&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
&lt;div class=&quot;flow__edge&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;flow__edge-label&quot;&gt;发起连接&lt;&#x2F;span&gt;&lt;span class=&quot;flow__edge-arrow&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
&lt;div class=&quot;flow__node&quot; role=&quot;listitem&quot;&gt;&lt;span class=&quot;flow__node-icon&quot;&gt;🛰️&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-title&quot;&gt;主 VPS&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-sub&quot;&gt;公网 IP&lt;br&gt;3x-ui 入口&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
&lt;div class=&quot;flow__edge&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;flow__edge-label&quot;&gt;SS 出站配置&lt;&#x2F;span&gt;&lt;span class=&quot;flow__edge-arrow&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
&lt;div class=&quot;flow__node&quot; role=&quot;listitem&quot;&gt;&lt;span class=&quot;flow__node-icon&quot;&gt;🏠&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-title&quot;&gt;NAT VPS&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-sub&quot;&gt;SS2022 协议&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
&lt;div class=&quot;flow__edge&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;flow__edge-label&quot;&gt;流量出站&lt;&#x2F;span&gt;&lt;span class=&quot;flow__edge-arrow&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
&lt;div class=&quot;flow__node&quot; role=&quot;listitem&quot;&gt;&lt;span class=&quot;flow__node-icon&quot;&gt;🌍&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-title&quot;&gt;公网出口&lt;&#x2F;span&gt;&lt;span class=&quot;flow__node-sub&quot;&gt;NAT VPS 最终落地 IP&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;准备清单&quot;&gt;准备清单&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#准备清单&quot;
   aria-label=&quot;Anchor link for: 准备清单&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;一台有公网 IP 的主 VPS 作为线路机（跑 3x-ui 作为入口）&lt;&#x2F;li&gt;
&lt;li&gt;一台 NAT VPS（作为 SS 服务端，提供出口）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;保证 NAT VPS 有可达端口&lt;&#x2F;strong&gt;——关键前提：要么提供端口映射层，要么提供 IPv6
&lt;ul&gt;
&lt;li&gt;端口映射方案：NAT 提供商在控制面板设定映射规则（如公网端口 20000 -&amp;gt; 内网端口 8388）&lt;&#x2F;li&gt;
&lt;li&gt;IPv6 方案：NAT VPS 直接分配 IPv6，主 VPS 能通过 IPv6 直连&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;一、前提检查：NAT_VPS_可达性&quot;&gt;一、前提检查：NAT VPS 可达性&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、前提检查：NAT_VPS_可达性&quot;
   aria-label=&quot;Anchor link for: 一、前提检查：NAT_VPS_可达性&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1.1_端口映射&quot;&gt;1.1 端口映射&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1.1_端口映射&quot;
   aria-label=&quot;Anchor link for: 1.1_端口映射&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;如果 NAT VPS 由提供商托管（如某些 NAT 机房），通常提供&lt;strong&gt;控制面板端口映射&lt;&#x2F;strong&gt;功能。&lt;&#x2F;p&gt;
&lt;p&gt;示例：在提供商面板设定映射规则&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;公网端口 &lt;code&gt;20000&lt;&#x2F;code&gt; -&amp;gt; 内网端口 &lt;code&gt;8388&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;你的主 VPS 会连接到&quot;NAT VPS 的公网 IP:20000&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;1.2_直接可用端口&quot;&gt;1.2 直接可用端口&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1.2_直接可用端口&quot;
   aria-label=&quot;Anchor link for: 1.2_直接可用端口&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;部分服务商会直接给出可用端口，无需映射，如下图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777695707432_image.png&quot; alt=&quot;NAT VPS 可用端口信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;此时直接使用其端口即可，无需映射。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;&quot;&gt;二、在 NAT VPS 搭建 Shadowsocks2022 节点&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;-1&quot;&gt;2.1 一键脚本&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;本文使用此一键脚本在 NAT VPS 上搭建 SS2022 节点（sing-box）：&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;caigouzi121380&#x2F;singbox-deploy&quot;
   data-github-repo=&quot;caigouzi121380&amp;#x2F;singbox-deploy&quot;
   aria-label=&quot;caigouzi121380&amp;#x2F;singbox-deploy on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;caigouzi121380&amp;#x2F;singbox-deploy&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;SS2022 节点将会作为落地节点，出口为其动态家宽出口。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;-2&quot;&gt;2.2 搭建 SS 节点&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;SSH 到 NAT VPS，复制一键脚本指令：&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;bash -c &amp;quot;$(curl -fsSL https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;caigouzi121380&#x2F;singbox-deploy&#x2F;main&#x2F;install-singbox-yyds.sh)&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;节点名称&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;[INFO] 依赖安装完成
请输入节点名称(留空则默认议名):
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;此处随便填写，选择一个好记顺眼的名称即可。&lt;&#x2F;p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;协议选择&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;[INFO] === 选择要部署的协议 ===
1) Shadowsocks (SS)
2) Hysteria2 (HY2)
3) TUIC
4) VLESS Reality

请输入要部署的协议编号(多个用空格分隔,如: 1 2 4):
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;选择 1：&lt;mark&gt;1) Shadowsocks (SS)&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;加密方式选择&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;[INFO] === 选择 Shadowsocks 加密方式 ===
1) 2022-blake3-aes-128-gcm (推荐)
2) aes-128-gcm

请输入选择(默认为 1):
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;选择 1：&lt;mark&gt;1) 2022-blake3-aes-128-gcm (推荐)&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;输入 IP&#x2F;域名&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;请输入节点连接 IP 或 DDNS域名(留空默认出口IP):
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;此处填写&lt;mark&gt; SSH 到 NAT VPS 时所用的 IP&#x2F;域名&lt;&#x2F;mark&gt;，即 NAT VPS 的入口&lt;&#x2F;p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;配置 Shadowsocks (SS)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;请输入 SS 端口(留空则随机 10000-60000):
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;此处填写&lt;mark&gt;内部任意端口&lt;&#x2F;mark&gt;，并非服务商分配给 NAT 机的可用端口，比如我们填写一个 8443 作为内部端口，之后我们会将此端口映射到外部服务商分配的可用端口。&lt;&#x2F;p&gt;
&lt;p&gt;如果服务商直接给出了可用端口，那么直接填写可用端口即可，比如开放端口为 21043~21044，直接填写 21043&#x2F;21044即可。&lt;&#x2F;p&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;部署完成&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;输出类似如下内容即为部署完成，我们就在 NAT VPS 上搭建好了一个可用于落地的 SS2022 节点。&lt;&#x2F;p&gt;
&lt;p&gt;记住此处的密码，端口和加密方式。&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;==========================================
[INFO] 🎉 Sing-box 部署完成!
==========================================

[INFO] 📋 配置信息:
   SS 端口: 8443 | 密码: OUXioj8pk&#x2F;VU4UA&#x2F;f+fxmA== | 加密: 2022-blake3-aes-128-gcm
   服务器: YOUR_SERVER_IP
   Reality server_name(SNI): addons.mozilla.org

[INFO] 📂 文件位置:
   配置: &#x2F;etc&#x2F;sing-box&#x2F;config.json
   服务: &#x2F;etc&#x2F;init.d&#x2F;sing-box

[INFO] 📜 客户端链接:
   === Shadowsocks (SS) ===
   ss:&#x2F;&#x2F;2022-blake3-aes-128-gcm%3AOUXioj8pk%2FVU4UA%2Ff%2BfxmA%3D%3D@YOUR_SERVER_IP:49520#ss
   ss:&#x2F;&#x2F;MjAyMi1ibGFrZTMtYWVzLTEyOC1nY206T1VYaW9qOHBrL1ZVNFVBL2YrZnhtQT09@YOUR_SERVER_IP:49520#ss
   

[INFO] 🔧 管理命令:
   启动: rc-service sing-box start
   停止: rc-service sing-box stop
   重启: rc-service sing-box restart
   状态: rc-service sing-box status
   日志: tail -f &#x2F;var&#x2F;log&#x2F;sing-box.log

==========================================
[INFO] 正在创建 sb 管理面板: &#x2F;usr&#x2F;local&#x2F;bin&#x2F;sb
[INFO] ✅ 管理面板已创建,可输入 sb 打开管理面板
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;-3&quot;&gt;2.3 端口映射&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-3&quot;
   aria-label=&quot;Anchor link for: -3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;此步我们要将在 2.2 中 NAT VPS 的内部端口映射到外部，以便 3x-ui 能从公网访问其 SS2022 节点。&lt;&#x2F;p&gt;
&lt;p&gt;以懒猫云的 NAT VPS 为例，&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777690937655_image.png&quot; alt=&quot;NAT VPS 端口映射配置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我的节点内部端口为 8443，我将其映射为外部可用端口 18443，记住映射的外部端口，这将是我们后面 3x-ui 出站到 NAT VPS 所用的端口。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;服务商直接提供可用端口者无需进行端口映射&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-4&quot;&gt;三、主 VPS 上 3x-ui 新增 SS 出站&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-4&quot;
   aria-label=&quot;Anchor link for: -4&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;进入 3x-ui → &lt;strong&gt;Xray设置&lt;&#x2F;strong&gt; → &lt;strong&gt;出站规则&lt;&#x2F;strong&gt; → &lt;strong&gt;添加出站&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;基本信息：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;类型：&lt;code&gt;Shadowsocks&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;备注&#x2F;标签：任意，比如 &lt;code&gt;nat-ss&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;连接信息：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;地址：&lt;code&gt;NAT VPS 公网 IP&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;端口：使用公网映射外部端口&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;如我们在 2.3 节中例子，我将 8443 --&amp;gt; 18443，18443 为外部端口，此处就应该填写 18443 作为线路机连接到 NAT 机 SS 节点的端口。若服务商直接给出可用端口，那么就填写你使用的可用端口即可&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;ul&gt;
&lt;li&gt;加密方式：&lt;code&gt;BLAKE3_AES_128_GCM&lt;&#x2F;code&gt;（与服务端一致）&lt;&#x2F;li&gt;
&lt;li&gt;密码：&lt;code&gt;PASSWORD&lt;&#x2F;code&gt;（为 NAT SS 节点的密码，例如在 2.2 节中，密码即为 &lt;code&gt;OUXioj8pk&#x2F;VU4UA&#x2F;f+fxmA==&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777695985557_image.png&quot; alt=&quot;3x-ui Shadowsocks 出站配置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击添加出站即可。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-5&quot;&gt;四、3x-ui 路由策略&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-5&quot;
   aria-label=&quot;Anchor link for: -5&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777815128988_image.png&quot; alt=&quot;3x-ui 路由规则配置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;A. 全量落地&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;进入 3x-ui → &lt;strong&gt;Xray设置&lt;&#x2F;strong&gt; → &lt;strong&gt;路由规则&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;点击 &lt;mark&gt;Inbound Tags&lt;&#x2F;mark&gt; 选择你的入站端口，比如要将 443 端口搭建了的节点路由到 NAT 机就选择 inbound-443&lt;&#x2F;li&gt;
&lt;li&gt;然后点击 &lt;mark&gt;Outbound Tag&lt;&#x2F;mark&gt; 选择出站名为你刚添加出站的出站标签，比如 &lt;code&gt;nat-ss&lt;&#x2F;code&gt;，添加规则&lt;&#x2F;li&gt;
&lt;li&gt;选择左上角保存，然后点击重新启动 Xray&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--warning&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;WARNING&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;保存后一定要点击重新启动 Xray！否则无法生效！&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;&lt;strong&gt;B. 分流落地&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;同 &lt;strong&gt;A. 全量落地&lt;&#x2F;strong&gt; ，但是添加你想要分流的网站，比如填写Domain部分为 &lt;code&gt;claude.ai,geosite:openai&lt;&#x2F;code&gt;，此时经由此节点的相关网站均会流向 NAT VPS 的出口，其余网站保持不变。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-6&quot;&gt;提醒：非 NAT 落地同样适用&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-6&quot;
   aria-label=&quot;Anchor link for: -6&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;本文以 NAT 机为例，本质是“线路机 → SS 出站 → 落地机”。如果你的落地机是&lt;strong&gt;非 NAT&lt;&#x2F;strong&gt; 公网机，同样只需在落地机上搭建一个 SS 节点，再在 3x-ui 添加对应出站即可，步骤完全一致。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>3x-ui 基本教程：安装、配置与 VLESS+Reality 节点搭建</title>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/3xui-basic/</link>
      <guid>https://www.aspchang.com/posts/3xui-basic/</guid>
      <description xml:base="https://www.aspchang.com/posts/3xui-basic/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;3x-ui 是一个基于 Xray 的开源管理面板，适合在 VPS 上快速搭建并管理入站规则。它是 X-UI 的增强分支，强调更高的稳定性与更广的协议支持。本文给出一套&lt;strong&gt;最小可用&lt;&#x2F;strong&gt;的安装与配置流程，并以 &lt;strong&gt;VLESS + Reality&lt;&#x2F;strong&gt; 为例，演示如何搭建一个抗检测能力强的代理节点。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;本文统一以 &lt;strong&gt;3x-ui v2.9.4&lt;&#x2F;strong&gt; 为准，后文的命令、菜单编号与字段均基于该版本。官方最新版已进入 v3.x（前端重写、部分字段变动），但本文不涉及——个人自用 v2.9.4 已足够，界面与教程也更稳定。版本说明见 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MHSanaei&#x2F;3x-ui&#x2F;releases&#x2F;tag&#x2F;v2.9.4&quot;&gt;v2.9.4 Release&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;官方提示：仅供个人学习与自用，不建议用于生产环境，禁止用于任何非法用途。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;一、准备工作&quot;&gt;一、准备工作&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、准备工作&quot;
   aria-label=&quot;Anchor link for: 一、准备工作&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;安装脚本会在安装过程中&lt;strong&gt;自动申请域名证书&lt;&#x2F;strong&gt;，因此&lt;strong&gt;域名解析&lt;&#x2F;strong&gt;与 &lt;strong&gt;80 端口&lt;&#x2F;strong&gt;必须在运行脚本前就绪，否则中途会失败。开始前先准备：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;一台 VPS（推荐 Debian 12 或 Ubuntu 22.04 及以上），具备 &lt;code&gt;root&lt;&#x2F;code&gt; 权限&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;一个已解析到 VPS 的域名&lt;&#x2F;strong&gt;：安装时用它申请面板 HTTPS 证书（例如 &lt;code&gt;xui.example.com&lt;&#x2F;code&gt;）；需提前在 DNS 添加 &lt;code&gt;A&lt;&#x2F;code&gt; 记录，指向 VPS 公网 IP&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;注意区分两类「域名」：上面这个是&lt;strong&gt;面板自己的域名&lt;&#x2F;strong&gt;；而 VLESS+Reality 节点握手伪装用的是&lt;strong&gt;目标域名&lt;&#x2F;strong&gt;，不需要你拥有（见 4.2），两者互不相干。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;h3 id=&quot;1.1_需要开放的端口&quot;&gt;1.1 需要开放的端口&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1.1_需要开放的端口&quot;
   aria-label=&quot;Anchor link for: 1.1_需要开放的端口&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;端口&lt;&#x2F;th&gt;&lt;th&gt;用途&lt;&#x2F;th&gt;&lt;th&gt;何时放行&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;80&#x2F;tcp&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;申请 &#x2F; 续期域名证书&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;运行安装脚本前&lt;&#x2F;strong&gt;——脚本用它做 Let&#x27;s Encrypt 验证；之后续期也靠它，需&lt;strong&gt;长期&lt;&#x2F;strong&gt;保持&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;面板端口&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;登录 3x-ui 面板&lt;&#x2F;td&gt;&lt;td&gt;安装后；端口在安装时随机或自定义生成&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;入站端口&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Reality 节点连接&lt;&#x2F;td&gt;&lt;td&gt;创建入站后，推荐使用 &lt;code&gt;443&#x2F;tcp&lt;&#x2F;code&gt;；若 443 已被占用，再改用其他高位端口&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;1.2_放行方法&quot;&gt;1.2 放行方法&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1.2_放行方法&quot;
   aria-label=&quot;Anchor link for: 1.2_放行方法&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;① 安装前——放行 80。&lt;&#x2F;strong&gt; 此时面板还没装，用云服务商&lt;strong&gt;安全组&lt;&#x2F;strong&gt;加系统防火墙放行；若用 &lt;code&gt;ufw&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo ufw allow 80&#x2F;tcp
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;② 安装后——放行面板端口与入站端口。&lt;&#x2F;strong&gt; 装完后用 3x-ui 自带的防火墙管理更省事：运行 &lt;code&gt;x-ui&lt;&#x2F;code&gt; → 选择 &lt;strong&gt;「防火墙管理（Firewall Management）」&lt;&#x2F;strong&gt;（v2.9.4 中通常是 &lt;strong&gt;21&lt;&#x2F;strong&gt;），多个端口用英文逗号分隔，例如 &lt;code&gt;面板端口,入站端口&lt;&#x2F;code&gt;。也可继续用 &lt;code&gt;ufw&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo ufw allow &amp;lt;面板端口&amp;gt;&#x2F;tcp
sudo ufw allow &amp;lt;入站端口&amp;gt;&#x2F;tcp
sudo ufw reload
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--warning&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;WARNING&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;strong&gt;最容易踩的坑&lt;&#x2F;strong&gt;：3x-ui 创建入站后，对应端口在系统层面&lt;strong&gt;默认仍是关闭的&lt;&#x2F;strong&gt;。「面板能打开、节点却连不通」几乎都是入站端口没放行——创建 Reality 入站后，记得回到这里放行它。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;使用云服务商&lt;strong&gt;安全组&lt;&#x2F;strong&gt;（AWS、GCP、Vultr 等）时，以上端口需在系统防火墙与安全组中&lt;strong&gt;同时&lt;&#x2F;strong&gt;放行，少一处都连不通。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;二、安装（官方脚本一条龙）&quot;&gt;二、安装（官方脚本一条龙）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二、安装（官方脚本一条龙）&quot;
   aria-label=&quot;Anchor link for: 二、安装（官方脚本一条龙）&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MHSanaei&#x2F;3x-ui&quot;
   data-github-repo=&quot;MHSanaei&amp;#x2F;3x-ui&quot;
   aria-label=&quot;MHSanaei&amp;#x2F;3x-ui on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;MHSanaei&amp;#x2F;3x-ui&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;确认上一节的域名解析与 80 端口已就绪后，使用官方安装脚本，并在命令末尾指定版本号（建议先查看脚本内容再运行）。&lt;strong&gt;该脚本需以 root 身份运行&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;bash &amp;lt;(curl -Ls https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;mhsanaei&#x2F;3x-ui&#x2F;master&#x2F;install.sh) v2.9.4
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;若你是 sudo 用户（AWS、GCP、Lightsail 等默认登录用户如 &lt;code&gt;admin&lt;&#x2F;code&gt;、&lt;code&gt;ubuntu&lt;&#x2F;code&gt; 都是），请先执行 &lt;code&gt;sudo -i&lt;&#x2F;code&gt; 切到 root，再运行上面的命令。&lt;strong&gt;不要&lt;&#x2F;strong&gt;直接用 &lt;code&gt;sudo bash &amp;lt;(curl ...)&lt;&#x2F;code&gt;——进程替换 &lt;code&gt;&amp;lt;(...)&lt;&#x2F;code&gt; 创建的文件描述符会被 &lt;code&gt;sudo&lt;&#x2F;code&gt; 关闭，导致 &lt;code&gt;bash: &#x2F;dev&#x2F;fd&#x2F;63: No such file or directory&lt;&#x2F;code&gt;。或者先把脚本下载成文件，再 &lt;code&gt;sudo bash install.sh v2.9.4&lt;&#x2F;code&gt; 运行（也方便先 &lt;code&gt;cat&lt;&#x2F;code&gt; 审阅）。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;aside class=&quot;github-alert github-alert--warning&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;WARNING&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;如果不在命令末尾写版本号，官方脚本会直接安装 GitHub 当前 &lt;code&gt;latest&lt;&#x2F;code&gt; 版本。本文为了稳定复现，建议固定安装 &lt;code&gt;v2.9.4&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;脚本以&lt;strong&gt;交互方式一步到位&lt;&#x2F;strong&gt;，依次完成数据库、端口、账号与 SSL 证书的配置——用户名、密码、访问路径（webBasePath）均随机生成，几乎无需人工干预。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;① 选择数据库&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;1) SQLite     (default — recommended for &amp;lt; 500 clients)
2) PostgreSQL (recommended for high client counts &#x2F; many nodes)
Choose [1]:
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;个人自用直接选 &lt;code&gt;1&lt;&#x2F;code&gt;（SQLite），数据库文件位于 &lt;code&gt;&#x2F;etc&#x2F;x-ui&#x2F;x-ui.db&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;② 自定义面板端口&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;Would you like to customize the Panel Port settings? (If not, a random port will be applied) [y&#x2F;n]
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;选 &lt;code&gt;y&lt;&#x2F;code&gt; 可指定固定高位端口；直接回车则随机分配。随后脚本自动生成用户名、密码与随机访问路径。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;③ SSL 证书设置&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;证书直接在安装阶段申请并写入面板，无需事后手动操作：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;1. Let&amp;#39;s Encrypt for Domain (90-day validity, auto-renews)
2. Let&amp;#39;s Encrypt for IP Address (6-day validity, auto-renews)
3. Custom SSL Certificate (Path to existing files)
4. Skip SSL
Choose an option (default 2 for IP):
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;默认是 2（IP 证书），用域名证书必须手动输入 &lt;code&gt;1&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;，随后：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;输入你的域名（需已解析到本机）；&lt;&#x2F;li&gt;
&lt;li&gt;验证端口直接回车用 &lt;strong&gt;80&lt;&#x2F;strong&gt;；&lt;&#x2F;li&gt;
&lt;li&gt;脚本自动安装 acme.sh 并签发证书；&lt;&#x2F;li&gt;
&lt;li&gt;遇到 &lt;code&gt;Would you like to modify --reloadcmd?&lt;&#x2F;code&gt; 选 &lt;code&gt;n&lt;&#x2F;code&gt;（用默认，续期后自动重启面板加载新证书）；&lt;&#x2F;li&gt;
&lt;li&gt;遇到 &lt;code&gt;Would you like to set this certificate for the panel?&lt;&#x2F;code&gt; 选 &lt;code&gt;y&lt;&#x2F;code&gt;，脚本自动把证书路径写入面板。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--warning&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;WARNING&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;如果域名托管在 Cloudflare，签发证书前务必把该域名的 DNS 记录设为 &lt;strong&gt;DNS only（仅 DNS，灰云）&lt;&#x2F;strong&gt;，不要开启 &lt;strong&gt;Proxied（已代理，橙云&#x2F;小黄云）&lt;&#x2F;strong&gt;。3x-ui 默认会随机生成面板端口，而 Cloudflare 普通代理只转发&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developers.cloudflare.com&#x2F;fundamentals&#x2F;reference&#x2F;network-ports&#x2F;&quot;&gt;指定的 HTTP&#x2F;HTTPS 端口&lt;&#x2F;a&gt;；随机高位端口通常不在支持列表中，开启代理后将无法通过 &lt;code&gt;https:&#x2F;&#x2F;域名:随机端口&lt;&#x2F;code&gt; 访问面板。只要继续使用该随机端口，就应保持灰云。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;完成后打印最终凭据，Access URL 已是 &lt;code&gt;https:&#x2F;&#x2F;&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;Username:    &amp;lt;随机生成&amp;gt;
Password:    &amp;lt;随机生成&amp;gt;
Port:        &amp;lt;面板端口&amp;gt;
WebBasePath: &amp;lt;随机路径&amp;gt;
Database:    SQLite (&#x2F;etc&#x2F;x-ui&#x2F;x-ui.db)
Access URL:  https:&#x2F;&#x2F;&amp;lt;你的域名&amp;gt;:&amp;lt;面板端口&amp;gt;&#x2F;&amp;lt;webBasePath&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;请立即记录这些凭据，尤其是密码&lt;&#x2F;strong&gt;——密码经加密存储，安装后 &lt;code&gt;x-ui settings&lt;&#x2F;code&gt; 也查不到明文，忘记只能重置（见第三节）。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;安装中可能出现两条&lt;strong&gt;无害报错&lt;&#x2F;strong&gt;，可忽略：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Failed to restart x-ui.service: Unit x-ui.service not found&lt;&#x2F;code&gt; &#x2F; &lt;code&gt;rc-service: command not found&lt;&#x2F;code&gt;——签发证书时面板服务尚未创建，续期时即正常；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;flag provided but not defined: -getApiToken&lt;&#x2F;code&gt;——最新 &lt;code&gt;install.sh&lt;&#x2F;code&gt; 调用了 v2.9.4 尚未提供的参数，仅使 API Token 显示为空，不影响使用。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;更完整的说明可参考项目 Wiki：&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MHSanaei&#x2F;3x-ui&#x2F;wiki&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;MHSanaei&#x2F;3x-ui&#x2F;wiki&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;三、首次登录与基础安全&quot;&gt;三、首次登录与基础安全&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三、首次登录与基础安全&quot;
   aria-label=&quot;Anchor link for: 三、首次登录与基础安全&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;安装时若选了域名 SSL，证书已配好，直接用打印出的 HTTPS 地址访问即可（结尾随机路径不可省略）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;https:&#x2F;&#x2F;&amp;lt;你的域名&amp;gt;:&amp;lt;面板端口&amp;gt;&#x2F;&amp;lt;webBasePath&amp;gt;&#x2F;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;code&gt;x-ui settings&lt;&#x2F;code&gt; 可查看 Access URL、端口、访问路径与用户名，但&lt;strong&gt;不显示密码明文&lt;&#x2F;strong&gt;（密码为加密存储）。&lt;strong&gt;忘记密码只能重置&lt;&#x2F;strong&gt;：运行 &lt;code&gt;x-ui&lt;&#x2F;code&gt; 进入菜单 → 选择 &lt;strong&gt;「Reset Username &amp;amp; Password」&lt;&#x2F;strong&gt;，按提示设置新账号密码，重置后面板会自动重启生效。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;凭据虽已随机化，登录后仍建议：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;面板设置&lt;&#x2F;strong&gt; → 按需修改管理员用户名与密码；&lt;&#x2F;li&gt;
&lt;li&gt;视情况调整面板端口与访问路径（Sub Path），改动后记得同步防火墙 &#x2F; 安全组；&lt;&#x2F;li&gt;
&lt;li&gt;开启面板自带的登录失败限制 &#x2F; Fail2ban（如有）。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;3.1_关于证书&quot;&gt;3.1 关于证书&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.1_关于证书&quot;
   aria-label=&quot;Anchor link for: 3.1_关于证书&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;先分清两件事：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VLESS + Reality 节点不需要你自己的证书&lt;&#x2F;strong&gt;。Reality 借用目标网站的 TLS 握手特征，客户端用的是 Reality 公钥、Short ID、SNI 等参数，与你 VPS 上的证书无关。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;面板建议启用 HTTPS 证书&lt;&#x2F;strong&gt;，用来保护登录面板时的账号、密码与操作请求，与 Reality 节点是两码事。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;按第二节的流程，&lt;strong&gt;安装时选了「Let&#x27;s Encrypt for Domain」的话，证书已自动签发并写入面板&lt;&#x2F;strong&gt;，路径如下，可直接用 &lt;code&gt;https:&#x2F;&#x2F;&lt;&#x2F;code&gt; 访问：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;&#x2F;root&#x2F;cert&#x2F;&amp;lt;你的域名&amp;gt;&#x2F;fullchain.pem
&#x2F;root&#x2F;cert&#x2F;&amp;lt;你的域名&amp;gt;&#x2F;privkey.pem
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;域名证书有效期约 90 天，由 &lt;code&gt;acme.sh&lt;&#x2F;code&gt; 自动续期；续期同样走 &lt;strong&gt;80&lt;&#x2F;strong&gt; 端口，务必保持 &lt;strong&gt;80&#x2F;tcp&lt;&#x2F;strong&gt; 长期放行。安装阶段那条 &lt;code&gt;x-ui.service not found&lt;&#x2F;code&gt; 的 reload 报错可忽略——续期时服务已存在，会正常重启面板加载新证书。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;&lt;strong&gt;安装时若选了「Skip SSL」想后补&lt;&#x2F;strong&gt;：运行 &lt;code&gt;x-ui&lt;&#x2F;code&gt; → 选择 &lt;strong&gt;「SSL 证书管理（SSL Certificate Management）」&lt;&#x2F;strong&gt;（通常为 &lt;strong&gt;18&lt;&#x2F;strong&gt;）申请域名证书，再用菜单里的 &lt;strong&gt;「Set Cert paths for the panel」&lt;&#x2F;strong&gt; 自动把证书配到面板。&lt;&#x2F;p&gt;
&lt;p&gt;若暂时不配证书，至少做到：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;保留随机 &lt;code&gt;webBasePath&lt;&#x2F;code&gt;，不要改成 &lt;code&gt;&#x2F;&lt;&#x2F;code&gt;、&lt;code&gt;&#x2F;admin&lt;&#x2F;code&gt; 这类常见路径；&lt;&#x2F;li&gt;
&lt;li&gt;使用强密码，开启面板的失败登录限制 &#x2F; Fail2ban（如有）；&lt;&#x2F;li&gt;
&lt;li&gt;面板端口不要和节点端口混用；&lt;&#x2F;li&gt;
&lt;li&gt;更稳妥的做法是只允许固定 IP 访问面板端口，或通过 SSH 隧道访问。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;面板端口或路径改动后，别忘了同步更新防火墙与安全组规则。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;四、VLESS_+_Reality_节点搭建&quot;&gt;四、VLESS + Reality 节点搭建&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四、VLESS_+_Reality_节点搭建&quot;
   aria-label=&quot;Anchor link for: 四、VLESS_+_Reality_节点搭建&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;4.1_为什么选择_VLESS_+_Reality&quot;&gt;4.1 为什么选择 VLESS + Reality&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.1_为什么选择_VLESS_+_Reality&quot;
   aria-label=&quot;Anchor link for: 4.1_为什么选择_VLESS_+_Reality&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Reality 是 Xray 独有的传输层安全方案，核心思路是&lt;strong&gt;借用真实网站的 TLS 握手&lt;&#x2F;strong&gt;——连接看上去与访问合法网站无异，无需自己申请证书，也没有自签证书的特征。配合 VLESS 协议，是目前抗检测能力较强的方案之一。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;优点：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;无需域名，无需申请 SSL 证书&lt;&#x2F;li&gt;
&lt;li&gt;流量特征极难被识别（TLS 指纹与目标网站一致）&lt;&#x2F;li&gt;
&lt;li&gt;配置相对简单&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;适合场景：&lt;&#x2F;strong&gt; 个人自用，对抗 DPI 深度包检测。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;4.2_选择目标伪装域名（SNI）&quot;&gt;4.2 选择目标伪装域名（SNI）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.2_选择目标伪装域名（SNI）&quot;
   aria-label=&quot;Anchor link for: 4.2_选择目标伪装域名（SNI）&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Reality 需要指定一个&lt;strong&gt;目标域名（dest &#x2F; SNI）&lt;&#x2F;strong&gt;，Xray 会向该域名发起真实的 TLS 握手以获取合法证书指纹。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--warning&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;WARNING&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;虽然 3x-ui v2.9.4 默认填入 &lt;code&gt;microsoft.com:443&lt;&#x2F;code&gt;（SNI 为 &lt;code&gt;microsoft.com, www.microsoft.com&lt;&#x2F;code&gt;），但&lt;strong&gt;不要沿用这个默认值，也不要选择微软域名作为 Reality 目标&lt;&#x2F;strong&gt;。&lt;code&gt;www.microsoft.com&lt;&#x2F;code&gt; 返回的 TLS Certificate 记录可能达到 8273 字节，超过 REALITY 当前硬编码的 8192 字节限制，从而导致握手失败、连接被重置。请先将 Target 与 SNI 一并换成其他已验证的目标域名，详见 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;XTLS&#x2F;Xray-core&#x2F;issues&#x2F;6356&quot;&gt;Xray-core #6356&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;目标域名的&lt;strong&gt;最低标准&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;国外、&lt;strong&gt;未被 GFW 封锁&lt;&#x2F;strong&gt;的域名；&lt;&#x2F;li&gt;
&lt;li&gt;支持 &lt;strong&gt;TLS 1.3 与 X25519&lt;&#x2F;strong&gt;；&lt;&#x2F;li&gt;
&lt;li&gt;支持 &lt;strong&gt;HTTP&#x2F;2（h2）&lt;&#x2F;strong&gt;；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;未套 CDN&lt;&#x2F;strong&gt;、访问不跳转。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;目标域名不需要你拥有或控制——你只是在握手阶段&quot;借用&quot;其 TLS 证书指纹，真实流量不会流向该网站。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;排除存在兼容性问题的微软域名后，其他热门大厂域名也可能因使用者过多而特征明显，且对方随时可能调整配置。&lt;strong&gt;更稳妥的做法是扫描自己 VPS 同机房 IP 段内的冷门域名作为目标&lt;&#x2F;strong&gt;——具体方法见站内文：&lt;a href=&quot;&#x2F;posts&#x2F;reality-steal-domain&#x2F;&quot;&gt;Reality 如何正确「偷」域名：RealiTLScanner 扫描 + RealityChecker 检测&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;4.3_在面板中创建入站&quot;&gt;4.3 在面板中创建入站&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.3_在面板中创建入站&quot;
   aria-label=&quot;Anchor link for: 4.3_在面板中创建入站&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;进入面板 → &lt;strong&gt;入站列表&lt;&#x2F;strong&gt; → &lt;strong&gt;添加入站&lt;&#x2F;strong&gt;，按以下参数填写：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;基本信息&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;填写内容&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;启用&lt;&#x2F;td&gt;&lt;td&gt;开启&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;备注&lt;&#x2F;td&gt;&lt;td&gt;任意（如 &lt;code&gt;vless-reality&lt;&#x2F;code&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;协议&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;vless&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;监听&lt;&#x2F;td&gt;&lt;td&gt;留空（监听所有）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;端口&lt;&#x2F;td&gt;&lt;td&gt;推荐 443&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;总流量&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;0&lt;&#x2F;code&gt; 表示不限制&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;流量重置&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;从不&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;到期时间&lt;&#x2F;td&gt;&lt;td&gt;留空表示不过期&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;创建后请记下面板分配 &#x2F; 你填写的端口，&lt;strong&gt;回到第一节「1.2 放行方法」放行它&lt;&#x2F;strong&gt;，否则无法连接。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;Reality 入站优先推荐 &lt;code&gt;443&lt;&#x2F;code&gt;，外观更接近普通 HTTPS 访问。若服务器上已有 Nginx、Caddy、Apache 或其他服务占用 443，再选择一个高位端口，并确保系统防火墙与云安全组都已放行。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;&lt;strong&gt;客户端（Client）&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;展开 &lt;strong&gt;客户端&lt;&#x2F;strong&gt; 区域，保持 &lt;code&gt;decryption = none&lt;&#x2F;code&gt;、&lt;code&gt;encryption = none&lt;&#x2F;code&gt;。&lt;code&gt;Authentication&lt;&#x2F;code&gt; 保持默认或点击 &lt;strong&gt;Get New keys&lt;&#x2F;strong&gt; 生成客户端认证信息；如果当前版本显示 &lt;strong&gt;Flow&lt;&#x2F;strong&gt; 字段，将其设为 &lt;code&gt;xtls-rprx-vision&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;传输（Transport）&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;填写内容&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;传输&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;TCP (RAW)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Proxy Protocol&lt;&#x2F;td&gt;&lt;td&gt;关闭&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;HTTP 伪装&lt;&#x2F;td&gt;&lt;td&gt;关闭&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Sockopt&lt;&#x2F;td&gt;&lt;td&gt;关闭；确有路由 &#x2F; 出站绑定需求时再单独配置&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;TCP Masks&lt;&#x2F;td&gt;&lt;td&gt;默认即可&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;External Proxy&lt;&#x2F;td&gt;&lt;td&gt;关闭；只有需要外置前置代理时才开启&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;安全（Reality）&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;填写内容&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;安全&lt;&#x2F;td&gt;&lt;td&gt;选择 &lt;code&gt;Reality&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Show&lt;&#x2F;td&gt;&lt;td&gt;关闭&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Xver&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;0&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;uTLS&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;chrome&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Target&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;&amp;lt;你的目标域名&amp;gt;:443&lt;&#x2F;code&gt;，如截图中的 &lt;code&gt;www.tesla.com:443&lt;&#x2F;code&gt; 只是示例&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;SNI&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;&amp;lt;你的目标域名&amp;gt;&lt;&#x2F;code&gt;，不带端口，需与 Target 的域名部分一致&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Reality 密钥&lt;&#x2F;td&gt;&lt;td&gt;若面板显示 Public Key &#x2F; Private Key，使用对应生成按钮；私钥留服务端，导出链接使用公钥 &lt;code&gt;pbk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Short ID&lt;&#x2F;td&gt;&lt;td&gt;自动生成即可&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;mldsa65 Seed&lt;&#x2F;td&gt;&lt;td&gt;留空；不需要后量子签名时不要点 &lt;strong&gt;Get New Seed&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;mldsa65 Verify&lt;&#x2F;td&gt;&lt;td&gt;留空；只有启用 mldsa65 Seed 后才需要配套填写&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Sniffing&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;填写内容&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;开启&lt;&#x2F;td&gt;&lt;td&gt;开启&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;HTTP &#x2F; TLS &#x2F; QUIC &#x2F; FAKEDNS&lt;&#x2F;td&gt;&lt;td&gt;全部勾选&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Metadata Only&lt;&#x2F;td&gt;&lt;td&gt;关闭&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Route Only&lt;&#x2F;td&gt;&lt;td&gt;关闭&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;IPs Excluded&lt;&#x2F;td&gt;&lt;td&gt;保持默认 &lt;code&gt;IP&#x2F;CIDR&#x2F;geoip:*&#x2F;ext:*&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Domains Excluded&lt;&#x2F;td&gt;&lt;td&gt;保持默认 &lt;code&gt;domain:*&#x2F;ext:*&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;完整参数示意：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;协议:      VLESS
端口:      443（推荐；若被占用再换高位端口）
客户端:    Authentication &#x2F; UUID 自动生成
Flow:      xtls-rprx-vision（如果面板显示该字段）
传输:      TCP (RAW)
安全:      reality
uTLS:      chrome
Target:    &amp;lt;你的目标域名&amp;gt;:443
SNI:       &amp;lt;你的目标域名&amp;gt;
Reality密钥: Public &#x2F; Private Key 自动生成（导出链接使用 pbk）
ShortId:   &amp;lt;自动生成&amp;gt;
Sniffing:  开启，勾选 HTTP &#x2F; TLS &#x2F; QUIC &#x2F; FAKEDNS
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;填写完毕后点击 &lt;strong&gt;添加 &#x2F; 保存&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;4.4_获取客户端配置&quot;&gt;4.4 获取客户端配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.4_获取客户端配置&quot;
   aria-label=&quot;Anchor link for: 4.4_获取客户端配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;回到入站列表，找到刚创建的入站（标签会显示 &lt;code&gt;vless&lt;&#x2F;code&gt; &lt;code&gt;tcp&lt;&#x2F;code&gt; &lt;code&gt;reality&lt;&#x2F;code&gt;），点击该行前方的 &lt;strong&gt;三个点（⋮）&#x2F; 操作&lt;&#x2F;strong&gt; → &lt;strong&gt;导出链接&lt;&#x2F;strong&gt; 或 &lt;strong&gt;二维码&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;生成的分享链接格式类似：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;vless:&#x2F;&#x2F;&amp;lt;UUID&amp;gt;@&amp;lt;服务器IP&amp;gt;:&amp;lt;端口&amp;gt;?encryption=none&amp;amp;flow=xtls-rprx-vision&amp;amp;security=reality&amp;amp;sni=&amp;lt;你的目标域名&amp;gt;&amp;amp;fp=chrome&amp;amp;pbk=&amp;lt;公钥&amp;gt;&amp;amp;sid=&amp;lt;ShortId&amp;gt;&amp;amp;type=tcp#vless-reality
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;将该链接导入客户端（v2rayN、v2rayNG、Shadowrocket、NekoBox 等）即可使用。&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;链接中包含你的服务器 IP 与认证信息，&lt;strong&gt;请勿公开分享&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;4.5_客户端关键参数说明&quot;&gt;4.5 客户端关键参数说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.5_客户端关键参数说明&quot;
   aria-label=&quot;Anchor link for: 4.5_客户端关键参数说明&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;说明&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;security=reality&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;启用 Reality 传输层&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;sni&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;伪装目标域名，与服务端 SNI 一致&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;fp&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;TLS 指纹，建议设为 &lt;code&gt;chrome&lt;&#x2F;code&gt; 或 &lt;code&gt;firefox&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;pbk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;服务端公钥，客户端用于验证&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;sid&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Short ID，服务端用于识别合法客户端&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;flow=xtls-rprx-vision&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;XTLS Vision 流控，提升性能与抗检测&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;五、备份与维护&quot;&gt;五、备份与维护&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#五、备份与维护&quot;
   aria-label=&quot;Anchor link for: 五、备份与维护&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;固定使用 v2.9.4，不必为追新频繁升级。但在调整配置或迁移服务器前，务必先备份数据目录（默认位于 &lt;code&gt;&#x2F;etc&#x2F;x-ui&#x2F;&lt;&#x2F;code&gt;，含数据库 &lt;code&gt;x-ui.db&lt;&#x2F;code&gt; 与全部设置）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;cp -r &#x2F;etc&#x2F;x-ui&#x2F; &#x2F;root&#x2F;x-ui-backup-$(date +%Y%m%d)&#x2F;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;v2.9.4 重做了 &lt;strong&gt;VLESS reverse&lt;&#x2F;strong&gt; 并移除了旧版 reverse。若你从更早版本带着 reverse 配置迁移过来，请在 Xray 配置页点击 &lt;strong&gt;Reset to Default&lt;&#x2F;strong&gt;，否则相关配置可能不生效。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;迁移、还原等更完整的操作可参考项目 Wiki：&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MHSanaei&#x2F;3x-ui&#x2F;wiki&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;MHSanaei&#x2F;3x-ui&#x2F;wiki&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;六、常见问题&quot;&gt;六、常见问题&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#六、常见问题&quot;
   aria-label=&quot;Anchor link for: 六、常见问题&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;节点连不上 &#x2F; 面板能开但节点不通&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;最常见原因：&lt;strong&gt;入站端口未放行&lt;&#x2F;strong&gt;。回到第一节用 &lt;code&gt;x-ui&lt;&#x2F;code&gt; 防火墙管理放行该端口；&lt;&#x2F;li&gt;
&lt;li&gt;同步检查云服务商安全组。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;无法访问面板&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;确认地址、端口与访问路径（webBasePath）与 &lt;code&gt;x-ui settings&lt;&#x2F;code&gt; 输出一致；&lt;&#x2F;li&gt;
&lt;li&gt;确认防火墙 &#x2F; 安全组已放行面板端口；&lt;&#x2F;li&gt;
&lt;li&gt;检查服务状态：&lt;code&gt;systemctl status x-ui&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;修改端口或路径后访问不了&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;同步修改防火墙与安全组规则，确保新端口已放行。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;面板 HTTPS 证书申请失败&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;确认域名已经解析到当前 VPS：&lt;code&gt;dig +short &amp;lt;你的域名&amp;gt;&lt;&#x2F;code&gt;；&lt;&#x2F;li&gt;
&lt;li&gt;若域名托管在 Cloudflare，确认 DNS 记录为 &lt;strong&gt;DNS only（灰云）&lt;&#x2F;strong&gt;，没有开启 Proxied（橙云&#x2F;小黄云）；&lt;&#x2F;li&gt;
&lt;li&gt;确认 &lt;strong&gt;80&#x2F;tcp&lt;&#x2F;strong&gt; 在系统防火墙和云安全组里都已放行；&lt;&#x2F;li&gt;
&lt;li&gt;确认 80 端口没有被 Nginx、Caddy、Apache 等服务占用。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;证书配置好了，但 Reality 仍然连不上&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;面板证书只保护管理后台，不影响 Reality 入站；&lt;&#x2F;li&gt;
&lt;li&gt;Reality 连接失败应重点检查入站端口、防火墙、&lt;code&gt;pbk&lt;&#x2F;code&gt;、&lt;code&gt;sid&lt;&#x2F;code&gt;、&lt;code&gt;sni&lt;&#x2F;code&gt;、&lt;code&gt;dest&lt;&#x2F;code&gt; 与目标域名可用性。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;节点可以连接但速度慢&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;检查 VPS 线路，Reality 本身不会引入额外延迟；&lt;&#x2F;li&gt;
&lt;li&gt;尝试更换 SNI 目标域名，部分域名延迟较高（建议按 &lt;a href=&quot;&#x2F;posts&#x2F;reality-steal-domain&#x2F;&quot;&gt;偷域名&lt;&#x2F;a&gt; 的方法找同机房低延迟目标）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;客户端提示&quot;证书错误&quot;或连接失败&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;确认客户端 &lt;code&gt;pbk&lt;&#x2F;code&gt;（公钥）与服务端一致；&lt;&#x2F;li&gt;
&lt;li&gt;确认 &lt;code&gt;sni&lt;&#x2F;code&gt; 与服务端配置的域名一致；&lt;&#x2F;li&gt;
&lt;li&gt;确认没有使用 &lt;code&gt;microsoft.com&lt;&#x2F;code&gt;、&lt;code&gt;www.microsoft.com&lt;&#x2F;code&gt; 等微软域名作为 Target &#x2F; SNI；&lt;&#x2F;li&gt;
&lt;li&gt;确认服务端端口已在防火墙放行；&lt;&#x2F;li&gt;
&lt;li&gt;检查目标域名是否可正常访问：&lt;code&gt;curl -I https:&#x2F;&#x2F;&amp;lt;你的目标域名&amp;gt;&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;查看 Xray 日志&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;x-ui log
# 或
journalctl -u x-ui -f
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
    </item> <item>
      <title>「NodeQuality」ClawCloud China Optimized - 2C &#x2F; 2G &#x2F; 40G &#x2F; 1T</title>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-clawcloud-china-optimized/</link>
      <guid>https://www.aspchang.com/posts/nq-clawcloud-china-optimized/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-clawcloud-china-optimized/">&lt;p&gt;收自&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nodeseek.com&#x2F;post-709139-1&quot;&gt;【出】五一摆摊出几台机，有搬瓦工、ClawCloud、DreamCloud、Wap等&lt;&#x2F;a&gt;，正好家里搞了联通宽带，买来玩一玩&lt;&#x2F;p&gt;
&lt;h3 id=&quot;NodeQuality&quot;&gt;NodeQuality&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#NodeQuality&quot;
   aria-label=&quot;Anchor link for: NodeQuality&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777639733690_image.png&quot; alt=&quot;ClawCloud China Optimized - 2C &#x2F; 2G &#x2F; 40G &#x2F; 1T 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777639765096_image.png&quot; alt=&quot;ClawCloud China Optimized - 2C &#x2F; 2G &#x2F; 40G &#x2F; 1T IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777639790323_image.png&quot; alt=&quot;ClawCloud China Optimized - 2C &#x2F; 2G &#x2F; 40G &#x2F; 1T 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777639808928_image.png&quot; alt=&quot;ClawCloud China Optimized - 2C &#x2F; 2G &#x2F; 40G &#x2F; 1T 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;u4xC055vBhKz7u6Vi1JnOPUFg8iDtqkV&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;-3&quot;&gt;GeekBench 5&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-3&quot;
   aria-label=&quot;Anchor link for: -3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1777639832476_image.png&quot; alt=&quot;ClawCloud China Optimized - 2C &#x2F; 2G &#x2F; 40G &#x2F; 1T Geekbench 5 测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」DMIT LAX.AN4.Pro.MALIBU</title>
      <pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-malibu/</link>
      <guid>https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-malibu/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-malibu/">&lt;p&gt;DMIT LAX.AN4.Pro.MALIBU，600收自&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nodeseek.com&#x2F;post-669073-1&quot;&gt;NodeSeek论坛&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774877533395_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.MALIBU 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774877548511_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.MALIBU IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774877570637_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.MALIBU 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774877585976_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.MALIBU 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;LrF7W95Plv7J6x7hT06Uz7u7iRCiTaRD&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」DMIT LAX.AN4.Pro.TINY</title>
      <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-tiny/</link>
      <guid>https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-tiny/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-dmit-lax-an4-pro-tiny/">&lt;p&gt;DMIT LAX.AN4.Pro.TINY，正价9.9USD&#x2F;M。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774784732395_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.TINY 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774784762371_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.TINY IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774784777561_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.TINY 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774784794870_image.png&quot; alt=&quot;DMIT LAX.AN4.Pro.TINY 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;84Mny02w2yaJ8LYlrmQwYMInT8tF45NQ&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」RFCHOST JP2-CO-Micro</title>
      <pubDate>Sun, 22 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-rfchost-jp2-co-micro/</link>
      <guid>https://www.aspchang.com/posts/nq-rfchost-jp2-co-micro/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-rfchost-jp2-co-micro/">&lt;p&gt;RFCHOST JP 2 | China Optimization Network - JP2-CO-Micro&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774669871355_image.png&quot; alt=&quot;RFCHOST JP2-CO-Micro 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774669897500_image.png&quot; alt=&quot;RFCHOST JP2-CO-Micro IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774669919310_image.png&quot; alt=&quot;RFCHOST JP2-CO-Micro 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1774669935922_image.png&quot; alt=&quot;RFCHOST JP2-CO-Micro 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;HA72ZmyPGfxGva3YhS3tBrdgdVEbrJIB&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」AWS Lightsail Japan</title>
      <pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-aws-lightsail-japan/</link>
      <guid>https://www.aspchang.com/posts/nq-aws-lightsail-japan/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-aws-lightsail-japan/">&lt;p&gt;AWS Lightsail DC:ap-northeast-1a&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773325278709_image.png&quot; alt=&quot;AWS Lightsail Japan 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773325297529_image.png&quot; alt=&quot;AWS Lightsail Japan IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773325318590_image.png&quot; alt=&quot;AWS Lightsail Japan 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773325362892_image.png&quot; alt=&quot;AWS Lightsail Japan 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;I5QeyhmyJ4XcBRrEZmkAzm0tPZpfXdGr&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」Google Cloud e2-standard-2</title>
      <pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-google-cloud-e2-standard-2/</link>
      <guid>https://www.aspchang.com/posts/nq-google-cloud-e2-standard-2/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-google-cloud-e2-standard-2/">&lt;p&gt;GCP e2-standard-2 DC:asia-east1-c&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773297661141_image.png&quot; alt=&quot;Google Cloud e2-standard-2 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773297778470_image.png&quot; alt=&quot;Google Cloud e2-standard-2 IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773297800606_image.png&quot; alt=&quot;Google Cloud e2-standard-2 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1773297826559_image.png&quot; alt=&quot;Google Cloud e2-standard-2 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;0qFAfKza4B3ePXISI6cxF0FzYWUEzbMs&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>《说岳全传》节选——高宠挑滑车</title>
      <pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>钱彩</dc:creator>
      <link>https://www.aspchang.com/posts/shuoyue-gaochong/</link>
      <guid>https://www.aspchang.com/posts/shuoyue-gaochong/</guid>
      <description xml:base="https://www.aspchang.com/posts/shuoyue-gaochong/">&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; line-height: 2.2; font-size: 1.05em;&quot;&gt;
&lt;p&gt;再说兀术在营中对军师道：「岳飞叫人下山，拿我营中兵去当作福礼祭旗，可恨可恼！我如今也差人去拿他两个南蛮来祭旗，方泄我恨。」军师道：「不可！若是能到他山上去拿得人来，这座山久已抢了。请狼主免降此旨罢。」兀术想道：「军师此言，亦甚有理。这山如何上去得？我想张邦昌、王铎两人要他何用？不如将他当作福礼罢！」遂传令将二人拿下。一面准备猪羊祭礼，邀请各位王兄王弟，同了军师、参谋、左右丞相、大小元帅、众平章等一同祭旗。将张、王二人杀了，请众人同吃利市酒。他二人当初在武场对天立誓道：「如若欺君，日后在番邦变作猪羊。」不意今日有此果报。那兀术祭过了旗，正同众将在牛皮帐中吃酒，小番来报道：「元帅哈铁龙送『铁华车』至营。」兀术遂传令，叫他带领本部军兵，在西南方上埋伏，哈元帅得令而去！&lt;&#x2F;p&gt;
&lt;p&gt;次日，兀术自引大队人马，来至山前搦战。岳元帅调拨各将紧守要路，多设擂木炮石。张奎专管战阵儿郎，郑怀单管呜金士卒，高宠掌著三军司令的大旗。自己坐马提枪，祇带马前张保、马后王横两个下山，来与兀术交兵。祇见金阵内旗门开处，兀术出马，叫声：「岳飞！如今天下山东、山西、湖广、江西皆属某家所管。尔君臣兵不满十馀万，今被某家困住此山，量尔粮草不足，如釜中之鱼，何不将康王献出，归顺某家，不失封王之位！你意下如何？」岳元帅大喝道：「兀术，你等不识人伦，囚天子于沙漠，追吾主于湖广。本帅兵虽少而将勇，若不杀尽尔等，誓不回师！」大吼一声，走马上前，举枪便刺。兀术大怒，提起金雀斧，大战有十数个回合。那四面八方的番兵，呐喊连天，俱来抢牛头山。当有众将各路敌住。岳元帅记念有康王在山，恐惊了驾，勾开斧，虚晃一枪，转马回山去了。那张奎见元帅回山，即使鸣金收军。&lt;&#x2F;p&gt;
&lt;p&gt;不道那高宠想道：「元帅与兀术交战，没有几个回合，为何即便回山？必是这个兀术武艺高强，待我去试试，看是如何？」便对张奎道：「张哥，代我把这旗掌一掌。」张奎拿旗在手，高宠上马抡枪，往旁边下山来。兀术正冲上山来，劈头撞见。高宠劈面一枪，兀术抬斧招架。谁知枪重，招架不住，把头一低，被高宠把枪一拎，发断冠坠，吓得兀术魂不附体，回马就走。高宠大喝一声，随后赶来，撞进番营。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;这一杆碗口粗的枪，带挑带打，那些番兵番将，人亡马倒，死者不计其数。那高宠杀得高兴，进东营，出西营，如入无人之境，直杀得番兵叫苦连天，悲声震地。&lt;&#x2F;mark&gt;看看杀到下午，一马冲出番营，正要回山，望见西南角上有座番营，高宠想道：「此处必是屯粮之所。常言道：粮乃兵家之性命。我不如就便去放把火，烧他娘个乾净，绝了他的命根，岂不为美。」便拍马抡枪，来到番营，挺著枪冲将进去！小番慌忙报知哈元帅，哈铁龙吩咐快把「铁华车」推出去。众番兵得令，一片声响，把「铁华车」推来。高宠见了说道：「这是甚么东西？」就把枪一挑，将一辆「铁华车」挑过头去。后边接连著推来，&lt;mark&gt;高宠一连挑了十一辆。到得第十二辆，高宠又是一枪，谁知坐下那匹马力尽筋疲，口吐鲜血，蹲将下来，把高宠掀翻在地，早被「铁华车」碾得稀扁了。&lt;&#x2F;mark&gt;后人有诗吊之曰：&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; line-height: 2; margin: 20px 0; font-size: 1.1em; font-style: italic;&quot;&gt;
为国捐躯赴战场，丹心可并日争光。&lt;br&gt;
华车末破身先丧，可惜将军马不良。
&lt;&#x2F;div&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; line-height: 2.2; font-size: 1.05em;&quot;&gt;
&lt;p&gt;却说哈铁龙拿了尸首，来见兀术道：「这个南蛮连挑十一辆『铁华车』，真是楚霸王重生，好生厉害！」兀术吩咐哈元帅再去整备「铁华车」。叫小番在营门口立一高竿，将高宠尸首吊起。此时岳爷正同众将在山前打听高宠下落，忽见番营门首，吊起一个尸首来。牛皋远远望见，叫声：「不好了！」就拍马冲下山去。那岳爷此时也不能禁止，忙令张立、张用、张保、王横四人飞步下山，再命何元庆、余化龙、董先、张宪速去救应，众将得令，一齐下山。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; font-size: 1.5em; font-weight: bold; margin: 20px 0;&quot;&gt;短评&lt;&#x2F;div&gt;
&lt;p&gt;小学时候读《说岳全传》，翻来覆去看了好几遍的，就是这一段。&lt;&#x2F;p&gt;
&lt;p&gt;高宠出场极短，但写得极烈。一枪挑落兀术发冠，单骑冲穿番营，进东营出西营，万余番兵挡不住一杆枪。古典小说写猛将，多是阵前斗将、来一个斩一个，高宠却不是这个路数。他身上有一股不管不顾的蛮劲——不等调令自己拍马就下了山，杀穿敌营之后本可回山交差，偏偏又看见西南角的营寨，心想不如顺手烧他粮草。就是这一念之差，遇上了铁滑车。&lt;&#x2F;p&gt;
&lt;p&gt;一连挑了十一辆，到第十二辆，马力尽筋疲，口吐鲜血，蹲将下来。&lt;&#x2F;p&gt;
&lt;p&gt;人未力竭，马先倒了。&lt;&#x2F;p&gt;
&lt;p&gt;这是最好的写法。让一个最强的人死于最不甘的方式——不是技不如人，不是中了奸计，而是座下的马先倒了。英雄末路，全在一个「惜」字。&lt;&#x2F;p&gt;
&lt;p&gt;后人的吊诗写得好：「华车未破身先丧，可惜将军马不良。」一个「惜」字，道尽千古遗憾。&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 20px;&quot;&gt;
2026年3月 忆少时读《说岳》
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>利用 CF SaaS 回退源实现优选域名接入</title>
      <pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/better-cf/</link>
      <guid>https://www.aspchang.com/posts/better-cf/</guid>
      <description xml:base="https://www.aspchang.com/posts/better-cf/">&lt;h2 id=&quot;什么是_CF_优选&quot;&gt;什么是 CF 优选&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#什么是_CF_优选&quot;
   aria-label=&quot;Anchor link for: 什么是_CF_优选&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Cloudflare（下称 CF）通过 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cloudflare.com&#x2F;zh-cn&#x2F;learning&#x2F;cdn&#x2F;glossary&#x2F;anycast-network&#x2F;&quot;&gt;Anycast&lt;&#x2F;a&gt; 技术在全球部署了大量边缘节点，但在中国大陆，默认解析到的节点往往延迟高、速度慢。&lt;strong&gt;CF 优选&lt;&#x2F;strong&gt;就是找到更快的 CF 节点 IP 或域名来替代默认解析，改善访问质量。&lt;&#x2F;p&gt;
&lt;p&gt;建站用户不需要自己跑测速工具，直接使用社区维护的&lt;strong&gt;优选域名&lt;&#x2F;strong&gt;即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;优选域名是什么&quot;&gt;优选域名是什么&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#优选域名是什么&quot;
   aria-label=&quot;Anchor link for: 优选域名是什么&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;优选域名由社区维护者持续测试筛选，解析到的 CF 节点在大陆表现更好。CNAME 指向即可使用，相比自己跑工具优选 IP：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;免维护&lt;&#x2F;strong&gt;：IP 失效时自动切换&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;即用即走&lt;&#x2F;strong&gt;：一条 CNAME 记录搞定&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;适合建站&lt;&#x2F;strong&gt;：覆盖面比单一 IP 更广&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;优选域名从哪来&quot;&gt;优选域名从哪来&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#优选域名从哪来&quot;
   aria-label=&quot;Anchor link for: 优选域名从哪来&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;推荐使用 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cf.090227.xyz&#x2F;&quot;&gt;CF 优选域名汇总站&lt;&#x2F;a&gt; 提供的域名，由 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;t.me&#x2F;CMLiussss&quot;&gt;CMLiussss&lt;&#x2F;a&gt; 维护，持续更新。站内包含 CM 自维护域名、官方优选域名及多个第三方维护的优选域名，选一个填入即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;CF_支持的端口&quot;&gt;CF 支持的端口&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#CF_支持的端口&quot;
   aria-label=&quot;Anchor link for: CF_支持的端口&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;回源服务必须运行在 CF 支持的端口上：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;HTTP&lt;&#x2F;strong&gt;：&lt;code&gt;80&lt;&#x2F;code&gt;、&lt;code&gt;8080&lt;&#x2F;code&gt;、&lt;code&gt;8880&lt;&#x2F;code&gt;、&lt;code&gt;2052&lt;&#x2F;code&gt;、&lt;code&gt;2082&lt;&#x2F;code&gt;、&lt;code&gt;2086&lt;&#x2F;code&gt;、&lt;code&gt;2095&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;HTTPS&lt;&#x2F;strong&gt;：&lt;code&gt;443&lt;&#x2F;code&gt;、&lt;code&gt;2053&lt;&#x2F;code&gt;、&lt;code&gt;2083&lt;&#x2F;code&gt;、&lt;code&gt;2087&lt;&#x2F;code&gt;、&lt;code&gt;2096&lt;&#x2F;code&gt;、&lt;code&gt;8443&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;建站一般直接使用 &lt;code&gt;443&lt;&#x2F;code&gt; 或 &lt;code&gt;80&lt;&#x2F;code&gt; 即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;建站实操：如何使用优选域名&quot;&gt;建站实操：如何使用优选域名&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#建站实操：如何使用优选域名&quot;
   aria-label=&quot;Anchor link for: 建站实操：如何使用优选域名&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;首先你需要有两个托管在 CF 的域名，一个用于回源，一个用于解析。&lt;&#x2F;p&gt;
&lt;p&gt;本文以 &lt;mark&gt;www.example.com&lt;&#x2F;mark&gt; 作为网站域名，&lt;mark&gt;example.cf&lt;&#x2F;mark&gt; 作为回源域名，&lt;mark&gt;cf.xxx.xyz&lt;&#x2F;mark&gt; 作为第三方优选域名，&lt;mark&gt;1.2.3.4&lt;&#x2F;mark&gt; 作为源站 IP。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;第一步：回源域名配置&quot;&gt;第一步：回源域名配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第一步：回源域名配置&quot;
   aria-label=&quot;Anchor link for: 第一步：回源域名配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;对 &lt;mark&gt;example.cf&lt;&#x2F;mark&gt; 添加两条记录，分别为一条A记录，一条CNAME记录。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;名称&lt;&#x2F;th&gt;&lt;th&gt;内容&lt;&#x2F;th&gt;&lt;th&gt;代理状态&lt;&#x2F;th&gt;&lt;th&gt;TTL&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;A&lt;&#x2F;td&gt;&lt;td&gt;&lt;mark&gt;origin&lt;&#x2F;mark&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;mark&gt;1.2.3.4&lt;&#x2F;mark&gt;&lt;&#x2F;td&gt;&lt;td&gt;已代理（橙色云朵）&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;名称&lt;&#x2F;th&gt;&lt;th&gt;内容&lt;&#x2F;th&gt;&lt;th&gt;代理状态&lt;&#x2F;th&gt;&lt;th&gt;TTL&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;CNAME&lt;&#x2F;td&gt;&lt;td&gt;&lt;mark&gt;cdn&lt;&#x2F;mark&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;mark&gt;cf.xxx.xyz&lt;&#x2F;mark&gt;&lt;&#x2F;td&gt;&lt;td&gt;仅 DNS（灰色云朵）&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;在 &lt;mark&gt;example.cf&lt;&#x2F;mark&gt; 侧边栏找到 SSL&#x2F;TLS 下子项找到自定义主机名，初次进入需要验证支付方式，自行验证即可，非常宽松。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1772178012668_image.png&quot; alt=&quot;Cloudflare SaaS 回退源配置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击添加回退源，回退源为&lt;mark&gt;origin.example.cf&lt;&#x2F;mark&gt;，编辑保存。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;&quot;&gt;第二步：网站域名配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;将你网站所用域名 CNAME 指向上一步中添加的第二条记录，即 &lt;mark&gt;cdn.example.cf&lt;&#x2F;mark&gt;。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;名称&lt;&#x2F;th&gt;&lt;th&gt;内容&lt;&#x2F;th&gt;&lt;th&gt;代理状态&lt;&#x2F;th&gt;&lt;th&gt;TTL&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;CNAME&lt;&#x2F;td&gt;&lt;td&gt;&lt;mark&gt;www&lt;&#x2F;mark&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;mark&gt;cdn.example.cf&lt;&#x2F;mark&gt;&lt;&#x2F;td&gt;&lt;td&gt;仅 DNS（灰色云朵）&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;此时不要开启代理，即灰色云朵！这一点非常重要！&lt;&#x2F;p&gt;
&lt;h3 id=&quot;-1&quot;&gt;第三步：添加自定义主机名&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;回到 &lt;mark&gt;example.cf&lt;&#x2F;mark&gt; 中 SSL&#x2F;TLS 下自定义主机名处，点击添加自定义主机名，输入你的网站域名，比如 &lt;mark&gt;www.example.com&lt;&#x2F;mark&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;此时会要求你添加TXT记录进行验证，按照提示添加即可。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1772178517246_image.png&quot; alt=&quot;Cloudflare 自定义主机名 TXT 验证&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;验证通过后，证书状态和主机名状态均会显示为绿色，此时去 itdog 等拨测平台对你的网站域名进行拨测，即可显著地看到域名解析统计变多了，此便为优选成功。&lt;&#x2F;p&gt;
&lt;p&gt;如下是本博客优选后的效果，源站位于德国法兰克福：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1772179129430_image.png&quot; alt=&quot;Cloudflare 优选域名拨测结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-2&quot;&gt;注意事项&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;优选不是万能的&lt;&#x2F;strong&gt;：仅优化访客到 CF 节点的链路，回源速度不受影响&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;遵守法律法规&lt;&#x2F;strong&gt;：CF 在大陆暂无边缘节点，本文仅供参考与学习&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;定期关注更新&lt;&#x2F;strong&gt;：优选域名可能调整，建议收藏&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cf.090227.xyz&#x2F;&quot;&gt;汇总站&lt;&#x2F;a&gt;定期查看。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
    </item> <item>
      <title>「NodeQuality」BERO-HOST 12O</title>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-bero-host-12o/</link>
      <guid>https://www.aspchang.com/posts/nq-bero-host-12o/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-bero-host-12o/">&lt;p&gt;书接上回在买了&lt;a href=&quot;&#x2F;posts&#x2F;nq-berohost-linux-vps&#x2F;&quot;&gt;BERO-HOST Linux VPS&lt;&#x2F;a&gt;测试后，想着买一个12o玩玩，从nodeseek坛友手里+15收到了一台，单核1800分，相当不错：&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771901892390_image.png&quot; alt=&quot;BERO-HOST 12O 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771901910248_image.png&quot; alt=&quot;BERO-HOST 12O IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771901935945_image.png&quot; alt=&quot;BERO-HOST 12O 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771901966754_image.png&quot; alt=&quot;BERO-HOST 12O 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;nZJbcJHtOVpcJoU8PkbsrhBP5FTcs7SC&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」Dedirock Promo VPS Saver NY CM LEB 2025</title>
      <pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-promo-vps-saver-ny-cm-leb-2025/</link>
      <guid>https://www.aspchang.com/posts/nq-promo-vps-saver-ny-cm-leb-2025/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-promo-vps-saver-ny-cm-leb-2025/">&lt;p&gt;今天除夕，抢红包抢了点钱，正好看到Dedirock有促销，就买了一个Promo VPS Saver NY CM LEB 2025，加上优惠码dedirockcn，年付5.8刀，当多个小玩具了，以下是NodeQuality：&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771247864978_image.png&quot; alt=&quot;Dedirock Promo VPS Saver NY CM LEB 2025 基本信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771247894341_image.png&quot; alt=&quot;Dedirock Promo VPS Saver NY CM LEB 2025 IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771247914445_image.png&quot; alt=&quot;Dedirock Promo VPS Saver NY CM LEB 2025 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771247934733_image.png&quot; alt=&quot;Dedirock Promo VPS Saver NY CM LEB 2025 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;Pb2AKpzf1a0KjB3MU00B2IJlZXYAM0wB&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;祝大家新年快乐！&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」BEROHOST Linux VPS</title>
      <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-berohost-linux-vps/</link>
      <guid>https://www.aspchang.com/posts/nq-berohost-linux-vps/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-berohost-linux-vps/">&lt;p&gt;闲来无事买了一周BEROHOST的Linux VPS，以下是NodeQuality：&lt;&#x2F;p&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre&gt;&lt;code&gt;Basic System Information:
---------------------------------
Uptime     : 0 days, 0 hours, 2 minutes
Processor  : AMD EPYC 9275F 24-Core Processor
CPU cores  : 1 @ 4100.000 MHz
AES-NI     : ✔ Enabled
VM-x&#x2F;AMD-V : ✔ Enabled
RAM        : 958.7 MiB
Swap       : 542.0 MiB
Disk       : 11.0 GiB
Distro     : Debian GNU&#x2F;Linux 12 (bookworm)
Kernel     : 6.1.0-37-amd64
VM Type    : STANDARD PC (I440FX + PIIX, 1996)
IPv4&#x2F;IPv6  : ✔ Online &#x2F; ✔ Online

IPv6 Network Information:
---------------------------------
ISP        : Oliver Horscht is trading as \&amp;quot;SYNLINQ\&amp;quot;
ASN        : AS44486 synlinq.de
Host       : Rubv6
Location   : Frankfurt am Main, Hesse (HE)
Country    : Germany

fio Disk Speed Tests (Mixed R&#x2F;W 50&#x2F;50) (Partition -):
---------------------------------
| Block Size | 4k            (IOPS) | 64k           (IOPS) |
| ---------- | -------------------- | -------------------- |  |---- 
Read       | 276.81 MB&#x2F;s  (69.2k) | 3.61 GB&#x2F;s    (56.4k)
Write      | 277.54 MB&#x2F;s  (69.3k) | 3.63 GB&#x2F;s    (56.7k)
Total      | 554.36 MB&#x2F;s (138.5k) | 7.24 GB&#x2F;s   (113.1k)
           |                      |                     
| Block Size | 512k          (IOPS) | 1m            (IOPS) |
| ---------- | -------------------- | -------------------- |  |---- 
Read       | 13.09 GB&#x2F;s   (25.5k) | 2.55 GB&#x2F;s     (2.4k)
Write      | 13.79 GB&#x2F;s   (26.9k) | 2.72 GB&#x2F;s     (2.6k)
Total      | 26.88 GB&#x2F;s   (52.5k) | 5.27 GB&#x2F;s     (5.1k)

Geekbench 5 Benchmark Test:
---------------------------------
Test            | Value                         
                |                               
Single Core     | 1377                          
Multi Core      | 1380                          
Full Test       | https:&#x2F;&#x2F;browser.geekbench.com&#x2F;v5&#x2F;cpu&#x2F;24105820

 SysBench CPU 测试 (Fast Mode, 1-Pass @ 5sec)
---------------------------------
 1 线程测试(单核)得分:          4801 Scores
 SysBench 内存测试 (Fast Mode, 1-Pass @ 5sec)
---------------------------------
 单线程读测试:          66705.09 MB&#x2F;s
 单线程写测试:          28581.78 MB&#x2F;s
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;🎬IP质量&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#🎬IP质量&quot;
   aria-label=&quot;Anchor link for: 🎬IP质量&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771248858602_image.png&quot; alt=&quot;BEROHOST Linux VPS IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771248875535_image.png&quot; alt=&quot;BEROHOST Linux VPS 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771248897129_image.png&quot; alt=&quot;BEROHOST Linux VPS 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodequality.com&#x2F;r&#x2F;ETB56alqEn7hKcGwZqx0mPTm4uzJMn3k&quot;&gt;NodeQuality 测试报告&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;不得不说这种小钢炮非常之深得我心，有种把玩手串盘核桃的感觉，打算完了收一个12o玩一玩。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>日本推理小说的&quot;叙述诡计&quot;</title>
      <pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/narrative-tricks-in-japanese-mystery/</link>
      <guid>https://www.aspchang.com/posts/narrative-tricks-in-japanese-mystery/</guid>
      <description xml:base="https://www.aspchang.com/posts/narrative-tricks-in-japanese-mystery/">&lt;h2 id=&quot;什么是叙述诡计&quot;&gt;什么是叙述诡计&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#什么是叙述诡计&quot;
   aria-label=&quot;Anchor link for: 什么是叙述诡计&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;推理小说的诡计大致可分为两类：&lt;strong&gt;物理诡计&lt;&#x2F;strong&gt;与&lt;strong&gt;叙述诡计&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;物理诡计作用于故事世界之内——密室杀人、不在场证明、毒药投放——它欺骗的是侦探。而叙述诡计作用于故事世界之外——它欺骗的是&lt;mark&gt;读者本身&lt;&#x2F;mark&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;所谓叙述诡计（叙述トリック），是作者利用文本结构、叙事视角、语言歧义等手段，在不说一句假话的前提下，让读者自行建立起一座错误的认知框架，直到结局揭示的那一刻，读者才发现自己一直在阅读一个与想象截然不同的故事。&lt;&#x2F;p&gt;
&lt;p&gt;这不是&quot;作者撒了谎&quot;，而是&quot;读者自己骗了自己&quot;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;叙述诡计的谱系&quot;&gt;叙述诡计的谱系&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#叙述诡计的谱系&quot;
   aria-label=&quot;Anchor link for: 叙述诡计的谱系&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;如果按手法来分类，日本推理小说中的叙述诡计大致可以划入以下几个流派。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;一、多重视角与不可靠叙述者&quot;&gt;一、多重视角与不可靠叙述者&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、多重视角与不可靠叙述者&quot;
   aria-label=&quot;Anchor link for: 一、多重视角与不可靠叙述者&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;芥川龙之介的&lt;a href=&quot;&#x2F;posts&#x2F;in-a-grove&#x2F;&quot;&gt;《竹林中》&lt;&#x2F;a&gt;是这一手法的原型。&lt;&#x2F;p&gt;
&lt;p&gt;一桩简单的杀人案，七名证人各执一词。樵夫、僧人、捕快、岳母、强盗、妻子，乃至亡灵本身——每个人都声称自己掌握真相，每个人的叙述都经得起推敲，但它们在逻辑上彼此矛盾。&lt;&#x2F;p&gt;
&lt;p&gt;芥川的精妙之处在于：他从未指定哪个叙述者是&quot;可靠&quot;的：全文没有一个全知视角作为裁判，读者被抛入七种真相的漩涡之中，永远无法抵达确定性。&lt;&#x2F;p&gt;
&lt;p&gt;这不是典型的推理小说——没有侦探，没有真相揭示——但它建立了一个影响深远的范式：&lt;strong&gt;真相不是被隐藏的，而是被叙述本身所消解的。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这一手法在后来的推理文学中不断变形。折原一的&quot;叙述系列&quot;将不可靠叙述者推向极致——读者甚至无法确定叙述者的性别、年龄，乃至生死。殊能将之的《剪刀男》则走了另一条路：让读者在整部小说中与叙述者同行，以为自己跟随的是侦探的视角，直到最后才发现这个视角属于凶手本人。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;二、文本结构的欺骗&quot;&gt;二、文本结构的欺骗&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二、文本结构的欺骗&quot;
   aria-label=&quot;Anchor link for: 二、文本结构的欺骗&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;如果说不可靠叙述者是在&quot;说什么&quot;上做文章，那么文本结构诡计则是在&quot;怎么排列&quot;上设陷阱。&lt;&#x2F;p&gt;
&lt;p&gt;绫辻行人的&quot;馆系列&quot;是建筑与文本双重迷宫的典范。他的作品中，建筑物的空间结构本身就是谜题的一部分——但真正的诡计往往藏在叙事结构里。在《十角馆杀人事件》中，两条看似平行的叙事线——岛上的连续杀人与大陆上的调查——被读者自然地理解为同步进行。然而，绫辻利用了一个极其简单却非常有效的手法：&lt;strong&gt;他在两条线中用不同的称呼指代同一个人。&lt;&#x2F;strong&gt; 直到全书最震撼的那一行——&quot;ヴァン・ダインです&quot;——读者才意识到自己被两套命名系统所欺骗。&lt;&#x2F;p&gt;
&lt;p&gt;这种手法的本质是利用读者的&quot;阅读惯性&quot;：读者默认同一本书中的两条叙事线遵循同一套逻辑规则，而作者恰恰在这个默认中设下陷阱。&lt;&#x2F;p&gt;
&lt;p&gt;类似的结构性欺骗还包括时间线错位，读者以为两个章节描述的是同一时间段的事件，实际上它们相隔数年；又或者，读者以为自己在读一篇完整的叙事，实则读到的是经过裁剪的信件、日记、证词——而被裁剪掉的部分才是真相所在。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;三、读者预期的操纵&quot;&gt;三、读者预期的操纵&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三、读者预期的操纵&quot;
   aria-label=&quot;Anchor link for: 三、读者预期的操纵&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;松本清张的&lt;a href=&quot;&#x2F;posts&#x2F;the-cooperative-defendant&#x2F;&quot;&gt;《奇怪的被告》&lt;&#x2F;a&gt;展示了叙述诡计在社会派推理中的另一种面貌。&lt;&#x2F;p&gt;
&lt;p&gt;这篇小说的精妙之处在于，它操纵的不是&quot;谁是凶手&quot;的认知（凶手从一开始就是确定的），而是&lt;strong&gt;读者对&quot;正义&quot;的预期&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫被逮捕后立刻认罪，态度极其配合——甚至&quot;殷勤&quot;地主动展示凶器、复述犯罪过程，随后翻供，声称一切都是警方逼供的产物。读者的同情心自然倒向了这个看似被冤枉的弱者，法庭判定他无罪。&lt;&#x2F;p&gt;
&lt;p&gt;然而，故事的最后一幕揭示了一个令人脊背发凉的真相：植木曾在旧书店工作多年，他读过一本英国法官写的《无罪判决事例研究》，书中的那个案件——凶器指认方式、殴打次数的反复更改、对警察的&quot;殷勤&quot;态度——与他的行为模式如出一辙。&lt;strong&gt;他不是被冤枉的无辜者，而是一个精心研究过司法漏洞的杀人犯。&lt;&#x2F;strong&gt; 他的&quot;翻供&quot;不是伸冤，而是预谋的一部分。&lt;&#x2F;p&gt;
&lt;p&gt;松本清张在这里玩弄的不是文本结构，而是读者的道德直觉。我们天然地同情被告、怀疑权力，而植木正是利用了这种心理——不仅利用了法官的心理，也利用了读者的心理。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;四、嵌套文本与元叙事&quot;&gt;四、嵌套文本与元叙事&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四、嵌套文本与元叙事&quot;
   aria-label=&quot;Anchor link for: 四、嵌套文本与元叙事&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;江户川乱步的&lt;a href=&quot;&#x2F;posts&#x2F;the-human-chair&#x2F;&quot;&gt;《人间椅子》&lt;&#x2F;a&gt;代表了叙述诡计的另一个维度：&lt;strong&gt;文本的真假本身成为谜题。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;女作家佳子收到一封来信，信中一个丑陋的男人自称将自己的身体藏在一把扶手椅之中，从此在触感的黑暗世界里偷偷爱着坐在椅子上的每一个人——最后他告白，那把椅子正是佳子书房里的那一把。读者与佳子一起经历了恐惧、厌恶与震惊。&lt;&#x2F;p&gt;
&lt;p&gt;然而，就在佳子几乎崩溃的时刻，第二封信到来：前一封&quot;信&quot;只是一篇投稿小说。&lt;&#x2F;p&gt;
&lt;p&gt;这个结尾制造了一个无限递归的疑问：既然第一封信是小说，那第二封信会不会也是骗局？既然我们读到的整个故事本身就是江户川乱步写的小说，那么&quot;这只是小说&quot;的结尾究竟是在安慰读者，还是在进行更高层次的欺骗？&lt;&#x2F;p&gt;
&lt;p&gt;乱步在这里挑战的是虚构与现实的边界。椅子里的男人所描述的触觉世界——没有面孔、没有身份，只有纯粹的身体接触——本身就是对&quot;阅读&quot;的一个隐喻。读者也同样身处一个看不见作者面孔的黑暗空间里，只能凭借文字的&quot;触感&quot;去想象一个世界。而那个世界是真是假，我们永远无法确认。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;为什么叙述诡计是日本推理的特产&quot;&gt;为什么叙述诡计是日本推理的特产&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#为什么叙述诡计是日本推理的特产&quot;
   aria-label=&quot;Anchor link for: 为什么叙述诡计是日本推理的特产&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;叙述诡计并非日本独有，阿加莎·克里斯蒂的《罗杰疑案》就是早期经典。但日本推理对叙述诡计的痴迷程度，在全世界文学中几乎是独一无二的。&lt;&#x2F;p&gt;
&lt;p&gt;这可能与日语本身的特性有关。日语的主语省略极其频繁，一段大篇幅的叙述可以完全不出现主语，读者必须自行推断&quot;谁在说话&quot;——这为叙述诡计提供了天然的语言土壤。此外，日语的敬语体系可以暗示说话者与听话者的社会关系，而不必明确指出人物身份，这使得作者可以在不撒谎的前提下制造大量歧义。&lt;&#x2F;p&gt;
&lt;p&gt;更深层的原因或许与日本文学传统有关。从《竹取物语》到能乐的幽玄美学，日本文学一向对&quot;不说出口的东西&quot;比&quot;说出口的东西&quot;更感兴趣。叙述诡计的精髓正是如此——最关键的信息从未被明确否认，它只是从未被说起。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;结语&quot;&gt;结语&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#结语&quot;
   aria-label=&quot;Anchor link for: 结语&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;阅读叙述诡计小说的体验是独特的。当你翻到最后几页，突然意识到自己过去几个小时建立的整套理解都是错误的，那一瞬间的眩晕感不同于任何其他类型的文学体验。&lt;&#x2F;p&gt;
&lt;p&gt;你不会生气——因为作者确实没有撒谎，你也不会感到被愚弄——因为所有线索都曾摆在你面前。你只会意识到一件事：&lt;strong&gt;自己的阅读行为本身就是不可靠的。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这或许就是叙述诡计的终极哲学意义。它不仅是一种小说技巧，更是一面镜子，映照出我们作为&quot;读者&quot;——以及作为&quot;观察者&quot;——的根本局限性，我们总以为自己是客观的旁观者，但叙述诡计告诉我们：旁观者从来就不存在。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>「NodeQuality」Netcup VPS nano G11s 6M</title>
      <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nq-vpsnanog11s6m/</link>
      <guid>https://www.aspchang.com/posts/nq-vpsnanog11s6m/</guid>
      <description xml:base="https://www.aspchang.com/posts/nq-vpsnanog11s6m/">&lt;p&gt;一直很想要一台小鸡挂博客和探针，但是苦于之前不玩，最近又没什么活动促销可买，晚上正好看到有老哥在 nodeseek 论坛送 netcup 小鸡（🙏），这台小鸡就到了我手上，10,08 €半年付，正合我意，到手装了系统上了探针跑了 NodeQuality：&lt;&#x2F;p&gt;
&lt;details&gt;
&lt;summary&gt;展开查看 NodeQuality&lt;&#x2F;summary&gt;
&lt;h4 id=&quot;💻基本信息&quot;&gt;💻基本信息&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#💻基本信息&quot;
   aria-label=&quot;Anchor link for: 💻基本信息&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre&gt;&lt;code&gt;Basic System Information:
---------------------------------
Uptime     : 0 days, 0 hours, 5 minutes
Processor  : QEMU Virtual CPU version 2.5+
CPU cores  : 2 @ 2294.578 MHz
AES-NI     : ✔ Enabled
VM-x&#x2F;AMD-V : ❌ Disabled
RAM        : 1.9 GiB
Swap       : 0.0 KiB
Disk       : 61.0 GiB
Distro     : Debian GNU&#x2F;Linux 12 (bookworm)
Kernel     : 6.1.0-42-amd64
VM Type    : KVM SERVER
IPv4&#x2F;IPv6  : ✔ Online &#x2F; ✔ Online

IPv6 Network Information:
---------------------------------
ISP        : netcup GmbH
ASN        : AS197540 netcup GmbH
Host       : NETCUP-GMBH
Location   : Nuremberg, Bavaria (BY)
Country    : Germany

fio Disk Speed Tests (Mixed R&#x2F;W 50&#x2F;50) (Partition -):
-----------------------------------------------------------------------
| Block Size | 4k                (IOPS) | 64k               (IOPS)  |
| ---------- | ------------------------ | ------------------------- |
| Read       | 63.99 MB&#x2F;s       (15.9k) | 919.00 MB&#x2F;s       (14.3k) |
| Write      | 64.13 MB&#x2F;s       (16.0k) | 923.83 MB&#x2F;s       (14.4k) |
| Total      | 128.12 MB&#x2F;s      (32.0k) | 1.84 GB&#x2F;s         (28.7k) |
|            |                          |                           |
| Block Size | 512k              (IOPS) | 1m                (IOPS)  |
| ---------- | ------------------------ | ------------------------  |
| Read       | 1.43 GB&#x2F;s         (2.8k) | 1.35 GB&#x2F;s         (1.3k)  |
| Write      | 1.51 GB&#x2F;s         (2.9k) | 1.44 GB&#x2F;s         (1.4k)  |
| Total      | 2.95 GB&#x2F;s         (5.7k) | 2.79 GB&#x2F;s         (2.7k)  |
-----------------------------------------------------------------------

Geekbench 5 Benchmark Test:
-----------------------------------------------------------------------
Test            | Value
                |
Single Core     | 431
Multi Core      | 835
Full Test       | https:&#x2F;&#x2F;browser.geekbench.com&#x2F;v5&#x2F;cpu&#x2F;24086115
-----------------------------------------------------------------------

 SysBench CPU 测试 (Fast Mode, 1-Pass @ 5sec)
-----------------------------------------------------------------------
 1 线程测试(单核)得分:          676 Scores
 2 线程测试(多核)得分:          1568 Scores

 SysBench 内存测试 (Fast Mode, 1-Pass @ 5sec)
-----------------------------------------------------------------------
 单线程读测试:          15951.44 MB&#x2F;s
 单线程写测试:          11271.10 MB&#x2F;s
-----------------------------------------------------------------------
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;🎬IP质量&quot;&gt;🎬IP质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#🎬IP质量&quot;
   aria-label=&quot;Anchor link for: 🎬IP质量&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1770198510106_2snBiBpxdhLNxTDUG4dufm.webp&quot; alt=&quot;Netcup VPS nano G11s 6M IP 质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;🌐网络质量&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1770198517256_cT6jyNAYA8YtOe4MQYPh3u.webp&quot; alt=&quot;Netcup VPS nano G11s 6M 网络质量测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;📍回程路由&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1770198532133_JpDRoWm8AxtAbc3Ejb4yfg.webp&quot; alt=&quot;Netcup VPS nano G11s 6M 回程路由测试结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;details&gt;
&lt;&#x2F;br&gt;
&lt;p&gt;联通几近残废，不过无所谓，本来就是挂博客探针的，图个稳定&lt;&#x2F;p&gt;
&lt;p&gt;顺带还把自己的哪吒探针美化了一下。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1771094941531_image.png&quot; alt=&quot;哪吒监控面板自定义主题效果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;研究了一下怎么放视频背景来着，自定义代码如下：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;&amp;lt;meta name=&amp;quot;referrer&amp;quot; content=&amp;quot;no-referrer&amp;quot; &#x2F;&amp;gt;
&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;https:&#x2F;&#x2F;imgbed.aspchang.cn&#x2F;file&#x2F;1769929845750_52abba40d8f8e6353ea1dcfd3de5b6c1353403349.png_!web-article-pic.webp&amp;quot; type=&amp;quot;image&#x2F;png&amp;quot; &#x2F;&amp;gt;

&amp;lt;!-- ① 面板配置 + 强制暗色模式 --&amp;gt;
&amp;lt;script&amp;gt;
  window.CustomLogo = &amp;quot;https:&#x2F;&#x2F;imgbed.aspchang.cn&#x2F;file&#x2F;1769929845750_52abba40d8f8e6353ea1dcfd3de5b6c1353403349.png_!web-article-pic.webp&amp;quot;;
  window.ShowNetTransfer = &amp;quot;true&amp;quot;;
  window.DisableAnimatedMan = &amp;quot;true&amp;quot;;
  window.CustomDesc = &amp;#39;星星的星 闪耀双瞳的瞳&amp;#39;;

  document.documentElement.classList.add(&amp;#39;dark&amp;#39;);
  localStorage.setItem(&amp;#39;theme&amp;#39;, &amp;#39;dark&amp;#39;);
  new MutationObserver(function() {
    if (!document.documentElement.classList.contains(&amp;#39;dark&amp;#39;)) {
      document.documentElement.classList.add(&amp;#39;dark&amp;#39;);
    }
  }).observe(document.documentElement, { attributes: true, attributeFilter: [&amp;#39;class&amp;#39;] });
&amp;lt;&#x2F;script&amp;gt;

&amp;lt;!-- ② 毛玻璃主题样式 --&amp;gt;
&amp;lt;style id=&amp;quot;custom-glass-style&amp;quot;&amp;gt;

  &#x2F;* === 全局变量 === *&#x2F;
  :root, .dark, html, html.dark {
    --page-blur: 2px;
    --page-dim: rgba(0,0,0,0.45);
    --glass-blur: 16px;
    --glass-border: rgba(255,255,255,0.12);
    --glass-shadow: 0 8px 32px rgba(0,0,0,0.3);
    --color-background: transparent !important;
    --background: transparent !important;
    --color-ring: transparent !important;
    --ring: 0 0% 0% &#x2F; 0 !important;
  }
  .dark, html.dark {
    --color-card: rgba(0, 0, 0, 0.18) !important;
    --color-popover: rgba(0, 0, 0, 0.25) !important;
    --btn-glass-bg: rgba(0, 0, 0, 0.25);
    --btn-glass-hover: rgba(0, 0, 0, 0.35);
  }
  :root:not(.dark), html:not(.dark) {
    --color-card: rgba(255, 255, 255, 0.5) !important;
    --color-popover: rgba(255, 255, 255, 0.55) !important;
    --btn-glass-bg: rgba(255, 255, 255, 0.5);
    --btn-glass-hover: rgba(255, 255, 255, 0.65);
  }

  &#x2F;* === 容器透明 === *&#x2F;
  html, body, #root, #app, #__next, div.flex.min-h-screen, main, main.flex, main.bg-background, main[class*=&amp;quot;bg-background&amp;quot;], .bg-background, .flex.min-h-screen, div[class*=&amp;quot;flex&amp;quot;][class*=&amp;quot;min-h-screen&amp;quot;] {
    background: transparent !important; background-color: transparent !important; background-image: none !important;
  }
  section.scrollbar-hidden, section.flex.flex-col, section.grid, section:not(.bg-card), div.grid, div[class*=&amp;quot;grid&amp;quot;][class*=&amp;quot;gap&amp;quot;] {
    background: transparent !important; background-color: transparent !important;
  }

  &#x2F;* === 视频层 + 遮罩层 === *&#x2F;
  #video-wall {
    position: fixed !important; top: 0; left: 0; width: 100vw !important; height: 100vh !important;
    z-index: -9999 !important; pointer-events: none !important; overflow: hidden !important;
  }
  #video-wall video { width: 100%; height: 100%; object-fit: cover !important; }
  #glass-overlay {
    position: fixed !important; top: 0; left: 0; width: 100vw !important; height: 100vh !important;
    z-index: -9998 !important; pointer-events: none !important; background: var(--page-dim) !important;
    backdrop-filter: blur(var(--page-blur)) saturate(110%) !important;
    -webkit-backdrop-filter: blur(var(--page-blur)) saturate(110%) !important;
  }

  &#x2F;* === 卡片磨砂 === *&#x2F;
  .bg-card {
    background: var(--color-card) !important;
    backdrop-filter: blur(var(--glass-blur)) saturate(130%) !important;
    -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(130%) !important;
    border: 1px solid var(--glass-border) !important;
    border-radius: 16px !important;
    overflow: hidden !important;
    box-shadow: none !important; outline: none !important;
  }
  .bg-card:hover { border-color: rgba(255,255,255,0.22) !important; }
  .dark .bg-card:hover { background: rgba(0,0,0,0.26) !important; }
  :root:not(.dark) .bg-card:hover { background: rgba(255,255,255,0.6) !important; }

  &#x2F;* === 按钮磨砂（排除 Switch） === *&#x2F;
  button.rounded-full:not([role=&amp;quot;switch&amp;quot;]),
  button[class*=&amp;quot;rounded-full&amp;quot;]:not([role=&amp;quot;switch&amp;quot;]),
  .rounded-full.bg-white,
  .dark .rounded-full.bg-black {
    background: var(--btn-glass-bg) !important;
    backdrop-filter: blur(12px) saturate(130%) !important;
    -webkit-backdrop-filter: blur(12px) saturate(130%) !important;
    border: 1px solid var(--glass-border) !important;
    box-shadow: none !important;
  }
  button.rounded-full:not([role=&amp;quot;switch&amp;quot;]):hover,
  button[class*=&amp;quot;rounded-full&amp;quot;]:not([role=&amp;quot;switch&amp;quot;]):hover {
    background: var(--btn-glass-hover) !important;
  }

  &#x2F;* === Sort 按钮 + 标签切换器 === *&#x2F;
  .bg-stone-100, .bg-stone-800, [class*=&amp;quot;bg-stone-100&amp;quot;], [class*=&amp;quot;bg-stone-800&amp;quot;],
  .dark .bg-stone-800, .dark [class*=&amp;quot;bg-stone-800&amp;quot;] {
    background: var(--btn-glass-bg) !important;
    backdrop-filter: blur(12px) saturate(130%) !important;
    -webkit-backdrop-filter: blur(12px) saturate(130%) !important;
    border: 1px solid var(--glass-border) !important;
  }
  .bg-stone-100 .bg-white, .bg-stone-800 .bg-stone-700,
  [class*=&amp;quot;bg-stone-100&amp;quot;] .bg-white, [class*=&amp;quot;bg-stone-800&amp;quot;] .bg-stone-700,
  .dark .bg-stone-700, .dark [class*=&amp;quot;bg-stone-700&amp;quot;] {
    background: var(--btn-glass-hover) !important;
    backdrop-filter: blur(8px) !important;
    -webkit-backdrop-filter: blur(8px) !important;
  }

  &#x2F;* === 顶栏磨砂 === *&#x2F;
  header, nav { background: rgba(0,0,0,0.2) !important; backdrop-filter: blur(12px) saturate(120%) !important; -webkit-backdrop-filter: blur(12px) saturate(120%) !important; }
  html:not(.dark) header, html:not(.dark) nav { background: rgba(255,255,255,0.4) !important; }

  &#x2F;* === 文字对比度 === *&#x2F;
  .dark .opacity-40, .dark .opacity-50, .dark [class*=&amp;quot;opacity-40&amp;quot;], .dark [class*=&amp;quot;opacity-50&amp;quot;], html.dark .opacity-40, html.dark .opacity-50 {
    opacity: 0.9 !important; color: rgba(255, 255, 255, 0.95) !important; text-shadow: 0 1px 3px rgba(0,0,0,0.6) !important;
  }
  .dark .text-muted-foreground, html.dark .text-muted-foreground {
    color: rgba(255, 255, 255, 0.85) !important; text-shadow: 0 1px 3px rgba(0,0,0,0.5) !important;
  }
  .dark .bg-card p, .dark .bg-card span, .dark .bg-card div { text-shadow: 0 1px 2px rgba(0,0,0,0.5) !important; }
  :root:not(.dark) .opacity-40, :root:not(.dark) .opacity-50, html:not(.dark) .opacity-40, html:not(.dark) .opacity-50 {
    opacity: 1 !important; color: rgba(0, 0, 0, 0.85) !important; text-shadow: none !important;
  }
  :root:not(.dark) .text-muted-foreground, html:not(.dark) .text-muted-foreground {
    color: rgba(0, 0, 0, 0.75) !important; text-shadow: none !important;
  }

  &#x2F;* === 选项卡文字 === *&#x2F;
  .text-stone-400, .text-stone-500, [class*=&amp;quot;text-stone-400&amp;quot;], [class*=&amp;quot;text-stone-500&amp;quot;] { color: rgba(120, 113, 108, 1) !important; }
  .dark .text-stone-400, .dark .text-stone-500, html.dark .text-stone-400, html.dark .text-stone-500 { color: rgba(200, 195, 190, 1) !important; }
  .text-stone-600, [class*=&amp;quot;text-stone-600&amp;quot;] { color: rgba(90, 83, 78, 1) !important; }
  .dark .text-stone-600, html.dark .text-stone-600 { color: rgba(170, 165, 160, 1) !important; }

  &#x2F;* === Switch 开关 === *&#x2F;
  button[role=&amp;quot;switch&amp;quot;] { border: 2px solid transparent !important; box-shadow: none !important; }
  .dark button[data-state=&amp;quot;unchecked&amp;quot;][role=&amp;quot;switch&amp;quot;] { background-color: rgba(120, 120, 120, 0.5) !important; }
  :root:not(.dark) button[data-state=&amp;quot;unchecked&amp;quot;][role=&amp;quot;switch&amp;quot;] { background-color: rgba(100, 100, 100, 0.4) !important; }
  .dark button[data-state=&amp;quot;checked&amp;quot;][role=&amp;quot;switch&amp;quot;] { background-color: rgba(100, 200, 100, 0.7) !important; }
  :root:not(.dark) button[data-state=&amp;quot;checked&amp;quot;][role=&amp;quot;switch&amp;quot;] { background-color: rgba(34, 197, 94, 0.8) !important; }
  button[role=&amp;quot;switch&amp;quot;] &amp;gt; span { background-color: white !important; }
  .dark button[role=&amp;quot;switch&amp;quot;] &amp;gt; span { background-color: rgba(255, 255, 255, 0.95) !important; }

  &#x2F;* === 移除 ring &#x2F; shadow === *&#x2F;
  .ring, .ring-1, .ring-2, [class~=&amp;quot;ring&amp;quot;], [class*=&amp;quot;ring-stone&amp;quot;] {
    box-shadow: none !important; outline: none !important;
    --tw-ring-shadow: 0 0 #0000 !important; --tw-ring-color: transparent !important;
    --tw-ring-offset-shadow: 0 0 #0000 !important; --tw-ring-offset-color: transparent !important;
  }
  [class*=&amp;quot;shadow-stone&amp;quot;], [class*=&amp;quot;shadow-neutral&amp;quot;], [class*=&amp;quot;shadow-lg&amp;quot;], [class*=&amp;quot;shadow-md&amp;quot;] {
    --tw-shadow: 0 0 #0000 !important; box-shadow: none !important;
  }

  &#x2F;* === 隐藏元素 === *&#x2F;
  .nz-dashboard-cartoon, .nz-dashboard-illustration, footer kbd { display: none !important; }
  ::-webkit-scrollbar { display: none !important; }
  html, body { scrollbar-width: none !important; }
  button[aria-label=&amp;quot;Toggle theme&amp;quot;],
  button:has(svg.lucide-sun), button:has(svg.lucide-moon),
  button[title=&amp;quot;Search&amp;quot;],
  button[aria-label=&amp;quot;Search&amp;quot;] {
    display: none !important;
  }

&amp;lt;&#x2F;style&amp;gt;

&amp;lt;!-- ③ 视频壁纸初始化 --&amp;gt;
&amp;lt;script&amp;gt;
(function(){
  const VIDEO_SRC = &amp;quot;https:&#x2F;&#x2F;cdn.acetaffy.de&#x2F;4k-fps30.mp4&amp;quot;;

  function createLayers(){
    if(!document.getElementById(&amp;quot;video-wall&amp;quot;)){
      const wall = document.createElement(&amp;quot;div&amp;quot;);
      wall.id = &amp;quot;video-wall&amp;quot;;
      const video = document.createElement(&amp;quot;video&amp;quot;);
      video.id = &amp;quot;bg-video&amp;quot;;
      video.autoplay = true; video.loop = true; video.muted = true;
      video.playsInline = true; video.preload = &amp;quot;auto&amp;quot;; video.src = VIDEO_SRC;
      wall.appendChild(video);
      document.body.appendChild(wall);
      video.play().catch(()=&amp;gt;{});
    }
    if(!document.getElementById(&amp;quot;glass-overlay&amp;quot;)){
      const overlay = document.createElement(&amp;quot;div&amp;quot;);
      overlay.id = &amp;quot;glass-overlay&amp;quot;;
      document.body.appendChild(overlay);
    }
  }

  function ensureStyle(){
    const style = document.getElementById(&amp;quot;custom-glass-style&amp;quot;);
    if(style &amp;amp;&amp;amp; document.head) document.head.appendChild(style);
  }

  function init(){
    if(document.body){ createLayers(); ensureStyle(); }
  }

  if(document.readyState === &amp;quot;loading&amp;quot;){
    document.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, init);
  } else {
    init();
  }
  window.addEventListener(&amp;quot;load&amp;quot;, init);

  const observer = new MutationObserver(init);
  observer.observe(document.documentElement, {childList:true, subtree:false});

  setTimeout(init, 500);
  setTimeout(init, 1500);
})();
&amp;lt;&#x2F;script&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;自定义代码使用Claude 4.5 Thinking 生成，效果还不错。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>“官同凤阁鸾台平章事”到底是个什么官？</title>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/fengge-luantai/</link>
      <guid>https://www.aspchang.com/posts/fengge-luantai/</guid>
      <description xml:base="https://www.aspchang.com/posts/fengge-luantai/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;最近重温《神探狄仁杰》，看到狄公在方谦台上自我介绍时，字幕打出了一长串头衔：“官同凤阁鸾台平章事”。&lt;&#x2F;p&gt;
&lt;p&gt;当时我就愣了一下，少时不觉怪，如今一听这九个字连在一起气势磅礴，但读起来极其拗口，这到底是个什么官？为什么不是我们常说的“宰相”或者“尚书”？出于好奇，由此我特意去查了查唐朝尤其是武周时期的官制度，于是有了此文。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;一、_首先，这句话怎么读？&quot;&gt;&lt;strong&gt;一、 首先，这句话怎么读？&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、_首先，这句话怎么读？&quot;
   aria-label=&quot;Anchor link for: 一、_首先，这句话怎么读？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;字幕里的“官同凤阁鸾台平章事”，其实是文言句式，意思是“（我的）官职等同于……”。&lt;&#x2F;p&gt;
&lt;p&gt;正确的断句应该是：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;同 &#x2F; 凤阁 &#x2F; 鸾台 &#x2F; 平章事&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;如果我们把它翻译成现代的大白话，大概意思是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;同：&lt;&#x2F;strong&gt; 相当于、等同于&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;凤阁：&lt;&#x2F;strong&gt; 即中书省（负责起草红头文件）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;鸾台：&lt;&#x2F;strong&gt; 即门下省（负责审核红头文件）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;平章事：&lt;&#x2F;strong&gt; 商量并处理（国家大事）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;连起来说就是：&lt;strong&gt;“虽然我编制不一定在那里，但我拥有的权力等同于中书、门下两省的长官，我有资格去国务院（政事堂）开会拍板。”&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;二、_为什么名字起得这么花哨？&quot;&gt;&lt;strong&gt;二、 为什么名字起得这么花哨？&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二、_为什么名字起得这么花哨？&quot;
   aria-label=&quot;Anchor link for: 二、_为什么名字起得这么花哨？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;这里的“凤阁”和“鸾台”听起来仙气飘飘，其实是武则天时期的特产。&lt;&#x2F;p&gt;
&lt;p&gt;武则天特别喜欢改名字，她觉得唐朝原本的“中书省”、“门下省”不够霸气，不够好听，于是大手一挥：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;把 &lt;strong&gt;中书省&lt;&#x2F;strong&gt; 改名为 &lt;strong&gt;凤阁&lt;&#x2F;strong&gt;；&lt;&#x2F;li&gt;
&lt;li&gt;把 &lt;strong&gt;门下省&lt;&#x2F;strong&gt; 改名为 &lt;strong&gt;鸾台&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;所以，这个职位在李世民时期叫“同中书门下平章事”，到了武则天手里，就变成了限定版的“同凤阁鸾台平章事”。本质上，这就是&lt;strong&gt;宰相&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;三、_狄仁杰的“真身”：核心权力的“临时工”&quot;&gt;&lt;strong&gt;三、 狄仁杰的“真身”：核心权力的“临时工”&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三、_狄仁杰的“真身”：核心权力的“临时工”&quot;
   aria-label=&quot;Anchor link for: 三、_狄仁杰的“真身”：核心权力的“临时工”&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;这就引出了一个更有趣的问题：既然他是宰相，为什么不直接封个“凤阁令”或者“鸾台侍长”？非要加个“同……平章事”？&lt;&#x2F;p&gt;
&lt;p&gt;这就要提到唐朝官制里最精妙的**“本官”与“差遣”分离制度**。&lt;&#x2F;p&gt;
&lt;p&gt;在剧中这个时期，狄仁杰虽然行使宰相权力，但他真正的**本官（编制上的正式职位）**其实是——&lt;strong&gt;地官侍郎&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;地官&lt;&#x2F;strong&gt; = 户部（武则天把户部改叫地官）；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;侍郎&lt;&#x2F;strong&gt; = 副部长。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;也就是说，狄仁杰的&lt;strong&gt;行政级别&lt;&#x2F;strong&gt;只是一个&lt;strong&gt;正四品下的财政部副部长&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;四、_为什么皇帝要这么设计？&quot;&gt;&lt;strong&gt;四、 为什么皇帝要这么设计？&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四、_为什么皇帝要这么设计？&quot;
   aria-label=&quot;Anchor link for: 四、_为什么皇帝要这么设计？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;如果你是程序员，你可以这样理解：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;本官（地官侍郎）：&lt;&#x2F;strong&gt; 是你的&lt;code&gt;User Group&lt;&#x2F;code&gt;，决定了你的基础工资和社保等级（四品）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;差遣（同凤阁鸾台平章事）：&lt;&#x2F;strong&gt; 是你的&lt;code&gt;Sudo&lt;&#x2F;code&gt;权限，决定了你能否访问核心数据库（国家决策）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;这种设计是皇权（特别是武则天这种得位不正的皇帝）为了集权而搞出的“帝王心术”：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;便于控制：&lt;&#x2F;strong&gt; 如果直接给狄仁杰二品的“中书令”，位高权重，皇帝想动他很难。但如果他的本官只是个四品的“副部长”，皇帝看他不爽，随时可以撤掉他的宰相头衔，让他回户部去算账，甚至直接开除。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;以小博大：&lt;&#x2F;strong&gt; 让你拿着副部级的工资，操着正国级的心。官员会觉得这是皇恩浩荡，破格提拔，干活自然更卖力。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;结语&quot;&gt;&lt;strong&gt;结语&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#结语&quot;
   aria-label=&quot;Anchor link for: 结语&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;名字改得花里胡哨，是为了彰显新朝雅政，“官同凤阁鸾台平章事”，这句看似拗口的台词，其实就是那个特殊时代的缩影：皇权在膨胀，而官僚在裸奔。狄仁杰之所以能成名相，靠的不是这个虚名，而是他在随时可能被“收回权限”的高压下，依然敢于直言的那根脊梁。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>PowerShell 7 启动速度优化：从 2000ms 到 400ms</title>
      <pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/conda-powershell7/</link>
      <guid>https://www.aspchang.com/posts/conda-powershell7/</guid>
      <description xml:base="https://www.aspchang.com/posts/conda-powershell7/">&lt;p&gt;之前在自己电脑上用的 Powershell 7，但是呢启动老是很慢，有多慢呢，慢到 Loading personal and system profiles took 他妈的两千多 ms，直到昨天我终于受不了了，想起了之前用过的 nushell，遂换回 nushell，但是 nushell 还是老毛病，无法兼容 conda，此时我想到会不会我 PS7 启动慢的原因就是 conda 的原因呢，故有了这篇博客。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;前言：Windows_终端的“不可能三角”&quot;&gt;前言：Windows 终端的“不可能三角”&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言：Windows_终端的“不可能三角”&quot;
   aria-label=&quot;Anchor link for: 前言：Windows_终端的“不可能三角”&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;在 Windows 上做开发（尤其是 Python&#x2F;Rust），总会陷入一个终端选择的怪圈：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CMD&lt;&#x2F;strong&gt;：启动极快，但功能简陋，连 &lt;code&gt;ls&lt;&#x2F;code&gt; 都没有。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Nushell&lt;&#x2F;strong&gt;：现代、极速、结构化数据很爽，但对 Conda 虚拟环境的支持极其糟糕，生态隔离严重。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;PowerShell&lt;&#x2F;strong&gt;：兼容性最好，Conda 原生支持，但是&lt;strong&gt;启动太慢了&lt;&#x2F;strong&gt;！动辄 2-3 秒的加载时间，对于习惯了 Linux 秒开体验的人来说简直是折磨。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;在尝试了 Yori、Git Bash、Clink 等各种方案后，我最终决定：&lt;strong&gt;回归 PowerShell 7，但通过配置将其彻底“魔改”，实现速度、功能与颜值的完美统一。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本文将分享我是如何将 PowerShell 的启动速度从 &lt;strong&gt;2000ms+ 优化到 400ms&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;第一步：寻找“启动慢”的真凶&quot;&gt;第一步：寻找“启动慢”的真凶&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第一步：寻找“启动慢”的真凶&quot;
   aria-label=&quot;Anchor link for: 第一步：寻找“启动慢”的真凶&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;默认的 PowerShell 7 其实不慢，慢的是我们装的工具。经过排查，导致卡顿的核心原因有两个：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Conda 的全量初始化&lt;&#x2F;strong&gt;：&lt;code&gt;conda init&lt;&#x2F;code&gt; 会在配置文件里塞入一大段脚本，每次启动终端都会运行 &lt;code&gt;conda.exe&lt;&#x2F;code&gt; 进行检测，这是最大的延迟来源。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;隐蔽的全局配置文件&lt;&#x2F;strong&gt;：即使清空了自己的 &lt;code&gt;$PROFILE&lt;&#x2F;code&gt;，Conda 甚至可能把代码写在 &lt;code&gt;AllUsersAllHosts&lt;&#x2F;code&gt; (&lt;code&gt;$PSHOME\Profile.ps1&lt;&#x2F;code&gt;) 里，导致你以为清理干净了，其实它还在后台偷偷跑。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;解决方案：Conda_懒加载_(Lazy_Loading)&quot;&gt;解决方案：Conda 懒加载 (Lazy Loading)&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#解决方案：Conda_懒加载_(Lazy_Loading)&quot;
   aria-label=&quot;Anchor link for: 解决方案：Conda_懒加载_(Lazy_Loading)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;核心思路是：&lt;strong&gt;启动时不加载 Conda，直到我第一次输入 &lt;code&gt;conda&lt;&#x2F;code&gt; 命令时，才瞬间加载它。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这样可以实现 &lt;strong&gt;400ms 延迟启动&lt;&#x2F;strong&gt;。只有当你真正需要用 Conda 时，才会付出那 0.5 秒的加载成本。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;第二步：打造“跟手”的输入体验_(复刻_Nushell)&quot;&gt;第二步：打造“跟手”的输入体验 (复刻 Nushell)&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第二步：打造“跟手”的输入体验_(复刻_Nushell)&quot;
   aria-label=&quot;Anchor link for: 第二步：打造“跟手”的输入体验_(复刻_Nushell)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Nushell 最吸引人的地方在于它的&lt;strong&gt;历史记录预测（幽灵文字）和列表式补全&lt;&#x2F;strong&gt;。其实 PowerShell 7 自带的 &lt;code&gt;PSReadLine&lt;&#x2F;code&gt; 模块完全可以做到这一点，只是默认没开启。&lt;&#x2F;p&gt;
&lt;p&gt;我们需要开启：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ListView&lt;&#x2F;code&gt;：按 Tab 键时弹出菜单选择，而不是一个个切。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;InlinePrediction&lt;&#x2F;code&gt;：根据历史记录显示灰色的预测文字，按 &lt;code&gt;→&lt;&#x2F;code&gt; 直接补全。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;第三步：颜值与细节修复&quot;&gt;第三步：颜值与细节修复&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第三步：颜值与细节修复&quot;
   aria-label=&quot;Anchor link for: 第三步：颜值与细节修复&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;解决双重提示符&lt;&#x2F;strong&gt;：Conda 激活后会强制在前面加 &lt;code&gt;(env_name)&lt;&#x2F;code&gt;，和 Starship 的显示重复了。需要在 &lt;code&gt;.condarc&lt;&#x2F;code&gt; 里设置 &lt;code&gt;env_prompt: &quot;&quot;&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;修复 &lt;code&gt;ll&lt;&#x2F;code&gt; 命令&lt;&#x2F;strong&gt;：Windows 没有 &lt;code&gt;ll&lt;&#x2F;code&gt;，通过函数别名实现 &lt;code&gt;ls -Force&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;最终成品&quot;&gt;最终成品&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#最终成品&quot;
   aria-label=&quot;Anchor link for: 最终成品&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1._清理旧环境&quot;&gt;1. 清理旧环境&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1._清理旧环境&quot;
   aria-label=&quot;Anchor link for: 1._清理旧环境&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;首先，检查全局配置文件，删掉里面所有 Conda 自动生成的代码（这一步至关重要，否则优化无效）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;notepad $PSHOME\Profile.ps1
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;2._配置个人_$PROFILE&quot;&gt;2. 配置个人 &lt;code&gt;$PROFILE&lt;&#x2F;code&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2._配置个人_$PROFILE&quot;
   aria-label=&quot;Anchor link for: 2._配置个人_$PROFILE&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;运行 &lt;code&gt;code $PROFILE&lt;&#x2F;code&gt; 或 &lt;code&gt;notepad $PROFILE&lt;&#x2F;code&gt;，全选粘贴以下代码。这是集成了&lt;strong&gt;懒加载、Starship、智能补全、错误修复&lt;&#x2F;strong&gt;的终极配置：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;# =============================================================================
# Conda 懒加载
# =============================================================================
# 请修改为你的 miniconda&#x2F;anaconda 安装路径
$env:CONDA_HOME = &amp;quot;D:\miniconda3&amp;quot;

function conda {
    # 移除这个“假”函数
    Remove-Item Function:\conda -ErrorAction SilentlyContinue

    # 找到真正的初始化脚本
    $CondaHook = &amp;quot;$env:CONDA_HOME\shell\condabin\conda-hook.ps1&amp;quot;

    if (Test-Path $CondaHook) {
        # 只有在真正输入 conda 时才运行这段耗时代码
        &amp;amp; $CondaHook
        # 自动激活 base 环境 (可选)
        conda activate base
    }

    # 补发刚才拦截的用户命令 (比如 &amp;#39;conda activate env&amp;#39;)
    if ($args.Count -gt 0) { Invoke-Expression &amp;quot;conda $args&amp;quot; }
}

# =============================================================================
# Starship 主题
# =============================================================================
# 确保你已经安装过 starship
Invoke-Expression (&amp;amp;starship init powershell)

# =============================================================================
# 智能补全
# =============================================================================
Import-Module PSReadLine -ErrorAction SilentlyContinue

try {
    # 列表视图：按 Tab 弹菜单
    Set-PSReadLineOption -PredictionViewStyle ListView
    # 幽灵提示：历史记录预测
    Set-PSReadLineOption -PredictionSource History
    # 设置预测文本颜色 (PS 7.5+ 使用 InlinePrediction)
    Set-PSReadLineOption -Colors @{ &amp;quot;InlinePrediction&amp;quot; = [ConsoleColor]::DarkGray }
} catch {}

# =============================================================================
# 实用工具别名
# =============================================================================
# 让 Windows 也能用 ll 查看详细列表 (含隐藏文件)
function ll { Get-ChildItem -Force -Verbose $args }

fastfetch

&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;3._去除_Conda_重复提示符&quot;&gt;3. 去除 Conda 重复提示符&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3._去除_Conda_重复提示符&quot;
   aria-label=&quot;Anchor link for: 3._去除_Conda_重复提示符&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;为了防止 Conda 的 &lt;code&gt;(base)&lt;&#x2F;code&gt; 和 Starship 重复显示，修改 Conda 配置文件：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;notepad $env:USERPROFILE\.condarc

&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在末尾添加：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;env_prompt: &amp;#39;&amp;#39;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;如此这般这般如此我便解决了PS7启动奇慢的问题&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>写在 ChatGPT 3.5 发布三周年：被折叠的时间</title>
      <pubDate>Sun, 30 Nov 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/chatgpt-3rd-anniversary/</link>
      <guid>https://www.aspchang.com/posts/chatgpt-3rd-anniversary/</guid>
      <description xml:base="https://www.aspchang.com/posts/chatgpt-3rd-anniversary/">&lt;h3 id=&quot;引言：时间感的丧失&quot;&gt;引言：时间感的丧失&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#引言：时间感的丧失&quot;
   aria-label=&quot;Anchor link for: 引言：时间感的丧失&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;今天是 2025 年 11 月 30 日，三年前，OpenAI 发布了 ChatGPT 3.5。&lt;&#x2F;p&gt;
&lt;p&gt;三年，我们就从 GPT-3.5 跨越到了如今的推理模型。这是不可想象的进步。技术发展的速度快得已经让我们丧失了对时间的敏感。&lt;&#x2F;p&gt;
&lt;p&gt;作为工科出身的人，我对好的、能提高效率的工具向来是持积极态度的。以前我或许会避讳“依赖”这个词，强调人的主体性，但现在我不得不诚实地说：&lt;strong&gt;我对 AI 产生了依赖，且并不为此感到羞愧。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;现状：与概率共存&quot;&gt;现状：与概率共存&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#现状：与概率共存&quot;
   aria-label=&quot;Anchor link for: 现状：与概率共存&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;这种依赖并非盲目，而是建立在一个清醒的技术认知之上：目前的生成式 AI，无论表现得多么智能，本质上依然是基于 &lt;strong&gt;Next Token Prediction（下一个词预测）&lt;&#x2F;strong&gt; 的概率模型。&lt;&#x2F;p&gt;
&lt;p&gt;很多人好奇：“为什么 AI 写代码时偶尔会虚构不存在的库函数？”原因很简单，它并没有人类那样的全局架构思想。它写代码并非先构思蓝图再填充细节，而是在计算：在当前语境下，下一个字符出现概率最高的是谁。&lt;&#x2F;p&gt;
&lt;p&gt;但正是这种架构，带来了旧模型无法比拟的优势。所有的 Token 都坐在桌边。模型不需要按顺序记忆，通过计算权重，它可以瞬间“看到”几千字之前的某个变量定义。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;未来：相互叠加的_S_型曲线&quot;&gt;未来：相互叠加的 S 型曲线&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#未来：相互叠加的_S_型曲线&quot;
   aria-label=&quot;Anchor link for: 未来：相互叠加的_S_型曲线&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;站在三周年的节点向后看，我认为 AI 的发展不会是一条单调的直线，而更像是一系列相互叠加、彼此推动的 &lt;strong&gt;S 型曲线&lt;&#x2F;strong&gt;，未来大致可分为三个阶段：&lt;&#x2F;p&gt;
&lt;h4 id=&quot;1._短期_(1-3_年)：代理化与小型化&quot;&gt;1. 短期 (1-3 年)：代理化与小型化&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1._短期_(1-3_年)：代理化与小型化&quot;
   aria-label=&quot;Anchor link for: 1._短期_(1-3_年)：代理化与小型化&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;这是&lt;strong&gt;实用化与民主化&lt;&#x2F;strong&gt;的阶段。AI 将从昂贵的云端大模型向更高效的端侧小模型下沉。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI Agents 的完备&lt;&#x2F;strong&gt;：AI 将会变为三头六臂之器物，不再止于坐而论道。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;模型的小型化&lt;&#x2F;strong&gt;：并不是所有任务都需要动辄几千亿参数的巨型模型。未来我们将看到更多针对特定方向微调的小型模型，它们可以毫无阻碍运行在自己的设备上，近期刚开源的阿里千问生图模型 &lt;strong&gt;&lt;code&gt;Z-Image&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; 就是一个很好的例子，其仅用 6B 参数就能达到很好的生成效果。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Tongyi-MAI&#x2F;Z-Image&quot;
   data-github-repo=&quot;Tongyi-MAI&amp;#x2F;Z-Image&quot;
   aria-label=&quot;Tongyi-MAI&amp;#x2F;Z-Image on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;Tongyi-MAI&amp;#x2F;Z-Image&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;h4 id=&quot;2._中期_(3-10_年)：架构突破&quot;&gt;2. 中期 (3-10 年)：架构突破&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2._中期_(3-10_年)：架构突破&quot;
   aria-label=&quot;Anchor link for: 2._中期_(3-10_年)：架构突破&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;这是&lt;strong&gt;深层推理与架构重构&lt;&#x2F;strong&gt;的阶段。当前的技术栈将面临物理瓶颈的挑战。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;超越 Transformer&lt;&#x2F;strong&gt;：当前的 Transformer 架构依赖于注意力机制，其计算复杂度随上下文长度呈二次方增长 ($O(n^2)$)。新的架构（如状态空间模型 Mamba）可能会取代现有的 Transformer。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;3._长期_(10_年以上)：科学探索与后摩尔计算&quot;&gt;3. 长期 (10 年以上)：科学探索与后摩尔计算&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3._长期_(10_年以上)：科学探索与后摩尔计算&quot;
   aria-label=&quot;Anchor link for: 3._长期_(10_年以上)：科学探索与后摩尔计算&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;这是&lt;strong&gt;自主发现与算力跃迁&lt;&#x2F;strong&gt;的阶段。AI 的发展将倒逼底层硬件的革命。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;后摩尔定律计算&lt;&#x2F;strong&gt;：传统的冯·诺依曼架构和 GPU 正逼近物理极限，这就要求硬件必须摆脱通用计算的束缚，例如新型计算方式来实现更高的计算效率。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;结语&quot;&gt;结语&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#结语&quot;
   aria-label=&quot;Anchor link for: 结语&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;有人说 20 年后我们会领先现在的宇宙一个身位，我不知道那么远的事情。我只知道，这三年时间，足以让一项技术从陌生变得不可或缺。&lt;&#x2F;p&gt;
&lt;p&gt;如果过去的三年是某种预兆，那么所谓的“瓶颈”或许只是我们的想象罢了。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>利用 Cloudflare Tunnel 搭建浏览器端 SSH 页面</title>
      <pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/cloudflare-tunnel-web-ssh-tutorial/</link>
      <guid>https://www.aspchang.com/posts/cloudflare-tunnel-web-ssh-tutorial/</guid>
      <description xml:base="https://www.aspchang.com/posts/cloudflare-tunnel-web-ssh-tutorial/">&lt;h3 id=&quot;引言：什么是_Cloudflare_Tunnel？&quot;&gt;引言：什么是 Cloudflare Tunnel？&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#引言：什么是_Cloudflare_Tunnel？&quot;
   aria-label=&quot;Anchor link for: 引言：什么是_Cloudflare_Tunnel？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Cloudflare Tunnel (以前叫 Argo Tunnel) 是 Cloudflare 提供的一项免费服务。它的工作原理是在你的服务器内部运行一个轻量级的守护进程（&lt;code&gt;cloudflared&lt;&#x2F;code&gt;），这个进程会主动向 Cloudflare 的全球边缘网络发起一个加密隧道连接。&lt;&#x2F;p&gt;
&lt;p&gt;当外部用户访问你设定的域名时，请求会先到达 Cloudflare 最近的节点，然后通过这个加密隧道直接转发到你服务器的内部端口。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;使用 Tunnel 做 SSH 的好处在于：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;加速连接&lt;&#x2F;strong&gt;：流量走的是 Cloudflare 优化的全球骨干网，避开了拥堵的公网线路。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;浏览器即客户端&lt;&#x2F;strong&gt;：你可以在任何设备（iPad、手机、网吧电脑）上，只要有浏览器就能管理服务器，无需安装专门的 SSH App。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;安全性爆表&lt;&#x2F;strong&gt;：你的服务器甚至不需要拥有公网 IP，也不用开放 22 端口给公网。并且，Cloudflare 会在 SSH 前面加一把“锁”（比如邮箱验证），只有你认证通过了才能看到 SSH 登录界面。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;准备工作&quot;&gt;准备工作&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#准备工作&quot;
   aria-label=&quot;Anchor link for: 准备工作&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;一台 Linux 服务器（本文以一台新加坡服务器为例）。&lt;&#x2F;li&gt;
&lt;li&gt;一个托管在 Cloudflare 上的域名。&lt;&#x2F;li&gt;
&lt;li&gt;Cloudflare 账号（免费版即可）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;搭建步骤&quot;&gt;搭建步骤&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#搭建步骤&quot;
   aria-label=&quot;Anchor link for: 搭建步骤&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;整个过程在 Cloudflare 的网页后台即可完成，无需复杂的配置文件。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;第一步：创建隧道并安装连接器&quot;&gt;第一步：创建隧道并安装连接器&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第一步：创建隧道并安装连接器&quot;
   aria-label=&quot;Anchor link for: 第一步：创建隧道并安装连接器&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;登录 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dash.cloudflare.com&#x2F;&quot;&gt;Cloudflare Dashboard&lt;&#x2F;a&gt;，在左侧菜单栏找到并点击 &lt;strong&gt;Zero Trust&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764332878989_pic-1.png&quot; alt=&quot;Cloudflare Zero Trust 控制台入口&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;em&gt;开启Zero Trust需要绑定一张外币卡（不会进行扣费）&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;在 Zero Trust 面板中，导航至 &lt;strong&gt;网络&lt;&#x2F;strong&gt; -&amp;gt; &lt;strong&gt;连接器&lt;&#x2F;strong&gt;，点击 &lt;strong&gt;创建隧道&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764333763071_image.png&quot; alt=&quot;Cloudflare Tunnel 创建隧道页面&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;连接器类型选择默认的 Cloudflared，点击 Next。给隧道随便起个名字（例如 &lt;code&gt;web-ssh-sg&lt;&#x2F;code&gt;），保存。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在接下来的页面中，选择你服务器的操作系统架构（通常是 Linux&#x2F;Debian&#x2F;64-bit）。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;页面下方会生成一串安装命令。复制这行命令，登录到你的服务器终端粘贴并运行。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764333332425_image.png&quot; alt=&quot;Cloudflared 连接器安装命令&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;当命令执行完毕，网页上的隧道状态变绿色时，说明隧道已打通。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;&quot;&gt;第二步：配置内网穿透（Public Hostname）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;这一步的目的是告诉 Cloudflare：当有人访问特定域名时，把请求转发给服务器的哪个端口。&lt;&#x2F;p&gt;
&lt;p&gt;紧接上步，配置路由隧道&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764333832789_image.png&quot; alt=&quot;Cloudflare Tunnel 公共主机名路由&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;子域名&lt;&#x2F;strong&gt;: 可选项，比如 &lt;code&gt;ssh&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;域&lt;&#x2F;strong&gt;: 选择你已托管到 Cloudflare 的域名。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;路径&lt;&#x2F;strong&gt;: 留空。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;服务&lt;&#x2F;strong&gt;:
&lt;ul&gt;
&lt;li&gt;类型 选择 &lt;strong&gt;SSH&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;URL 填入 &lt;code&gt;localhost:22&lt;&#x2F;code&gt;。（如果你修改过 SSH 端口，请填写对应的端口号）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764334012162_image.png&quot; alt=&quot;Cloudflare Tunnel SSH 服务地址配置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;保存后，Cloudflare 就知道该把 &lt;code&gt;ssh.yourdomain.com&lt;&#x2F;code&gt; 的流量往哪里送了。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;第三步：配置浏览器渲染（最关键的一步）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;到目前为止，隧道虽然通了，但如果你直接访问那个域名，浏览器是不知道如何解析 SSH 协议的。我们需要借助 Cloudflare Access 的能力把它渲染成网页。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;在 Zero Trust 左侧菜单，点击 &lt;strong&gt;访问控制&lt;&#x2F;strong&gt; -&amp;gt; &lt;strong&gt;应用程序&lt;&#x2F;strong&gt;，点击 &lt;strong&gt;添加应用程序&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764334117362_image.png&quot; alt=&quot;Cloudflare Access 添加应用程序&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;选择 &lt;strong&gt;自托管&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置应用基本信息&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;应用程序名称&lt;&#x2F;strong&gt;: 随便填，如 &lt;code&gt;My Web Terminal&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;会话持续时间&lt;&#x2F;strong&gt;: 选择登录状态保持多久，如 &lt;code&gt;24h&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加公共主机名&lt;&#x2F;strong&gt;: &lt;strong&gt;必须&lt;&#x2F;strong&gt;填写你在第二步设置的完整域名，将子域，域都正确填入（例如 &lt;code&gt;ssh.yourdomain.com&lt;&#x2F;code&gt;）。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;strong&gt;设置浏览器渲染（重中之重）&lt;&#x2F;strong&gt;：&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;ul&gt;
&lt;li&gt;点击下方的 &lt;strong&gt;浏览器呈现设置&lt;&#x2F;strong&gt; 标签页。&lt;&#x2F;li&gt;
&lt;li&gt;向下滚动找到 &lt;strong&gt;浏览器呈现&lt;&#x2F;strong&gt; 选项。&lt;&#x2F;li&gt;
&lt;li&gt;在下拉菜单中，务必选择 &lt;strong&gt;SSH&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764334309105_image.png&quot; alt=&quot;Cloudflare Access 浏览器呈现 SSH 设置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;strong&gt;配置身份验证策略&lt;&#x2F;strong&gt;：&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;为了安全，你需要设置谁能访问。例如，设置规则为 “Email” “Is” “你的邮箱地址”，这样只有你能接收验证码登录。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764334454426_image.png&quot; alt=&quot;Cloudflare Access 身份验证策略&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1764334429685_image.png&quot; alt=&quot;Cloudflare Access 应用配置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;如果不做这最后一步，访问域名时浏览器会尝试下载文件，而不是显示终端界面。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击保存，大功告成！&lt;&#x2F;p&gt;
&lt;h3 id=&quot;-2&quot;&gt;最终体验&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;现在，打开你喜欢的浏览器，访问你设置好的域名（如 &lt;code&gt;https:&#x2F;&#x2F;ssh.yourdomain.com&lt;&#x2F;code&gt;）。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;首先是 Cloudflare 的安全验证页面。输入你的邮箱，获取并填入验证码。&lt;&#x2F;li&gt;
&lt;li&gt;验证通过后再输入用户名和私钥密码即可登录到终端。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;这样我们就搭建好了一个可以网页访问的 ssh 终端。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>NixOS 下 NVIDIA 显卡驱动配置</title>
      <pubDate>Mon, 10 Nov 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/nixos-nvidia-guide/</link>
      <guid>https://www.aspchang.com/posts/nixos-nvidia-guide/</guid>
      <description xml:base="https://www.aspchang.com/posts/nixos-nvidia-guide/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;NixOS 是一个高度模块化、配置即代码的 Linux 发行版，但初次上手时，尤其是涉及 NVIDIA 显卡驱动配置，常常让人摸不着头脑。本文记录了我在闲置笔记本上 NVIDIA 独显的相关配置。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;我的设备环境&quot;&gt;我的设备环境&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#我的设备环境&quot;
   aria-label=&quot;Anchor link for: 我的设备环境&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;系统&lt;&#x2F;strong&gt;：Nix0S 25.11 (Xantusia) x86_64&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;CPU&lt;&#x2F;strong&gt;：AMD Ryzen 7 5800H[8C &#x2F; 16T] @ 4.46 GHz&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;显卡&lt;&#x2F;strong&gt;：GeForce RTX 3060 Mobile&#x2F; Max-Q [Discrete]&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1769613848133_NixOS.jpg&quot; alt=&quot;NixOS 设备硬件信息&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;&quot;&gt;配置文件示例（nvidia.nix）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;下面是我的 &lt;code&gt;nvidia.nix&lt;&#x2F;code&gt; 配置，直接复制到你的配置文件里，然后根据自己硬件调整 Bus ID：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;{ config, pkgs, ... }:
{
  hardware.graphics = {
    enable = true;
    enable32Bit = true; # 兼容 Steam&#x2F;Wine 等 32 位程序
  };
  services.xserver.videoDrivers = [ &amp;quot;nvidia&amp;quot; ];
  hardware.nvidia = {
    open = true; # RTX 20 系列及以上建议开启
    prime = {
      sync.enable = true; # 开启同步模式，防止撕裂
      amdgpuBusId = &amp;quot;PCI:6:0:0&amp;quot;; # 替换为你自己的核显 Bus ID,如果是 intel 就换为 intelgpuBusId
      nvidiaBusId = &amp;quot;PCI:1:0:0&amp;quot;; # 替换为你自己的独显 Bus ID
    };
  };
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;-1&quot;&gt;主要参数说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hardware.graphics&lt;&#x2F;code&gt;：新版 NixOS 用这个代替 &lt;code&gt;hardware.opengl&lt;&#x2F;code&gt;，记得开启 &lt;code&gt;enable32Bit&lt;&#x2F;code&gt;，否则很多游戏和老程序跑不了。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;hardware.nvidia.open&lt;&#x2F;code&gt;：如果你的显卡是 RTX 20 系列或更新的，可以用开源驱动（&lt;code&gt;open = true&lt;&#x2F;code&gt;），老显卡建议用闭源（&lt;code&gt;open = false&lt;&#x2F;code&gt;），否则可能黑屏。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;prime.sync&lt;&#x2F;code&gt;：Sync 模式能解决撕裂问题，适合需要高性能的场景，但会让独显一直工作，耗电会高一些。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;-2&quot;&gt;如何查 Bus ID？&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;每台电脑的 Bus ID 都不一样，不能直接抄。用下面命令查：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;lspci | grep -E &amp;quot;VGA|3D&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;你会看到类似：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;01:00.0 VGA compatible controller: NVIDIA Corporation ...
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. ...
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;把前面的编号（比如 &lt;code&gt;01:00.0&lt;&#x2F;code&gt;）填到配置里的 &lt;code&gt;nvidiaBusId&lt;&#x2F;code&gt; 和 &lt;code&gt;amdgpuBusId&lt;&#x2F;code&gt;，格式如上。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-3&quot;&gt;个人 NixOS Config 仓库&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-3&quot;
   aria-label=&quot;Anchor link for: -3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;使用 Nix Flakes 和 home-manager管理&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;GEMILUXVII&#x2F;nixos-config&quot;
   data-github-repo=&quot;GEMILUXVII&amp;#x2F;nixos-config&quot;
   aria-label=&quot;GEMILUXVII&amp;#x2F;nixos-config on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;GEMILUXVII&amp;#x2F;nixos-config&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
</description>
    </item> <item>
      <title>EchoLife HS8346R5光猫获取超级密码</title>
      <pubDate>Mon, 27 Oct 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/superadmin/</link>
      <guid>https://www.aspchang.com/posts/superadmin/</guid>
      <description xml:base="https://www.aspchang.com/posts/superadmin/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;这几天回老家，村里的路由器是个老旧的联通给的破猫，想进 admin 后台发现不知道管理员密码，遂激起了我的兴趣，翻找教程，多方寻找教程后，找到了型号类似的一篇源自五年前的教程，故有了此文。&lt;&#x2F;p&gt;
&lt;p&gt;本教程启发自&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.eaglemoe.com&#x2F;archives&#x2F;216&quot;&gt;&lt;strong&gt;【教程】华为 HN8145V 补全 shell 获取超级密码教程&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;一、准备工作&quot;&gt;一、准备工作&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、准备工作&quot;
   aria-label=&quot;Anchor link for: 一、准备工作&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;在开始之前，请确保完成以下准备：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;下载 Telnet 客户端&lt;&#x2F;strong&gt;：下载 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.chiark.greenend.org.uk&#x2F;~sgtatham&#x2F;putty&#x2F;latest.html&quot;&gt;PuTTY&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;下载工具&lt;&#x2F;strong&gt;：下载教程中提到的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drive.google.com&#x2F;file&#x2F;d&#x2F;1caJNhKcFf8iOYc55VaGGH4jr4kEqhFML&#x2F;view?usp=sharing&quot;&gt;HS8346R5.zip&lt;&#x2F;a&gt;，并解压备用&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;关闭防火墙&lt;&#x2F;strong&gt;：登录 192.168.1.1 原有 user 账户关闭防火墙&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;二、补全光猫_Shell&quot;&gt;二、补全光猫 Shell&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二、补全光猫_Shell&quot;
   aria-label=&quot;Anchor link for: 二、补全光猫_Shell&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;2.1_补全说明&quot;&gt;2.1 补全说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2.1_补全说明&quot;
   aria-label=&quot;Anchor link for: 2.1_补全说明&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;设备制造商对 Shell 进行了限制。他们提供了一个极度精简的命令行环境，只保留了极少数用于诊断或特定操作的接口，而屏蔽了像 &lt;code&gt;cp&lt;&#x2F;code&gt;、&lt;code&gt;cd&lt;&#x2F;code&gt;、&lt;code&gt;ls&lt;&#x2F;code&gt;、&lt;code&gt;rm&lt;&#x2F;code&gt; 甚至 &lt;code&gt;help&lt;&#x2F;code&gt; 这样的标准 Linux 命令。故我们需要使用一些工具对其进行补全，以便能使用完整的命令。&lt;&#x2F;p&gt;
&lt;p&gt;此工具通过利用设备固件中预留的维护协议来解锁后台。
其原理是向局域网发送一个设备能够识别的特定组播（Multicast）数据包。光猫内置的服务在接收到这个数据包后，会执行其中包含的预设指令，主要完成两项关键任务：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;开启 Telnet 服务&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;激活被固件默认关闭的 Telnet 守护进程，从而允许我们通过命令行远程登录到设备系统。&lt;&#x2F;p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;补全运行环境 (Shell)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;向设备内存中注入一个功能完整的 BusyBox 程序。这为当前高度受限的 Shell 环境临时补充了所有必需的 Linux 标准命令（如 cp, cd, gzip 等），使后续提取配置文件的操作得以执行。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2.2_操作流程&quot;&gt;2.2 操作流程&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2.2_操作流程&quot;
   aria-label=&quot;Anchor link for: 2.2_操作流程&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;拔掉光猫的光纤&lt;&#x2F;strong&gt;，然后重新启动光猫。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;再次连接网络。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;打开解压好的 &lt;code&gt;ONT组播配置工具V3-V5_2.0.exe&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在工具界面中，网卡选择你当前连接光猫的有线网卡。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;版本选择 &lt;strong&gt;&lt;code&gt;V5使能&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;“启动”&lt;&#x2F;strong&gt; 按钮。程序会自动扫描并开启光猫的 Telnet 功能。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;当工具右侧状态栏显示 &lt;code&gt;Success&lt;&#x2F;code&gt;，且光猫的 LED 灯全亮时，表示 Telnet 已成功开启。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1769613894044_superadmin-1.png&quot; alt=&quot;华为光猫 Telnet 开启成功&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;手动断电重启光猫，然后插回光纤。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;&quot;&gt;三、提取解密&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;-1&quot;&gt;3.1 提取密码&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;光猫重启后，打开 PuTTY，输入以下地址登录，端口为默认 23：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;192.168.1.1
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;根据提示，输入用户名 &lt;code&gt;root&lt;&#x2F;code&gt; 和密码 &lt;code&gt;adminHW&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;成功登录后，依次执行以下命令：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;su
shell
cp &#x2F;mnt&#x2F;jffs2&#x2F;hw_ctree.xml &#x2F;mnt&#x2F;jffs2&#x2F;myhwcfg.xml.gz
cd &#x2F;mnt&#x2F;jffs2&#x2F;
aescrypt2 1 myhwcfg.xml.gz tem
gzip -d myhwcfg.xml.gz
grep WebUserInfoInstance myhwcfg.xml
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;执行 &lt;code&gt;grep&lt;&#x2F;code&gt; 命令后，终端会输出一行包含 &lt;code&gt;Password&lt;&#x2F;code&gt; 字段的文本。&lt;strong&gt;将引号内的加密密码字符串完整复制下来&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;-2&quot;&gt;3.2 解密密码&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开工具包中的 &lt;code&gt;华为光猫配置加解密工具.exe&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;选择 &lt;strong&gt;&lt;code&gt;$2解密&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; 选项卡&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;将上一步复制的加密字符串粘贴到输入框中&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;&amp;quot;解密&amp;quot;&lt;&#x2F;strong&gt; 按钮，即可获得明文的超级管理员密码&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;-3&quot;&gt;四、配置光猫桥接&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-3&quot;
   aria-label=&quot;Anchor link for: -3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;获取超级密码后，即可登录后台修改为桥接模式。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;登录超级管理后台&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;在浏览器中访问 &lt;code&gt;http:&#x2F;&#x2F;192.168.1.1&#x2F;cu.html&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;使用刚刚解密出来的密码进行登录&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改桥接&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;进入网络或高级设置中的 WAN 配置页面&lt;&#x2F;li&gt;
&lt;li&gt;找到 &lt;code&gt;连接名称&lt;&#x2F;code&gt; 为 &lt;code&gt;2_INTERNET_R_VID_xxxx&lt;&#x2F;code&gt; 的那一项（&lt;code&gt;xxxx&lt;&#x2F;code&gt; 是你的 VLAN ID）&lt;&#x2F;li&gt;
&lt;li&gt;在配置页面中，找到 &lt;strong&gt;WAN 类型&lt;&#x2F;strong&gt; 或 &lt;strong&gt;模式&lt;&#x2F;strong&gt; 选项&lt;&#x2F;li&gt;
&lt;li&gt;将其值从 &lt;strong&gt;路由 WAN&lt;&#x2F;strong&gt; 修改为 &lt;strong&gt;桥接 WAN&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;保存设置&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;至此，光猫已成功设置为桥接模式。现在你可以使用自己的路由器，在路由器的 WAN 设置中选择 &lt;code&gt;PPPoE&lt;&#x2F;code&gt; 拨号，填入你的宽带账号和密码来上网了。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>《亮剑》节选与个人短评</title>
      <pubDate>Mon, 22 Sep 2025 00:00:00 +0000</pubDate>
      <dc:creator>都梁</dc:creator>
      <link>https://www.aspchang.com/posts/drawing-sword/</link>
      <guid>https://www.aspchang.com/posts/drawing-sword/</guid>
      <description xml:base="https://www.aspchang.com/posts/drawing-sword/">&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; font-size: 1.5em; font-weight: bold; margin: 20px 0;&quot;&gt;第四十二章&lt;&#x2F;div&gt;
&lt;p&gt;马天生最近又多了一个职务，李云龙专案组副组长，他知道这是个吃力不讨好的差事，他了解李云龙的为人和性格，这是个软硬不吃的人，对这个人他不抱任何希望，用那个时代的时髦术语评价，这是典型的花岗岩脑袋。&lt;&#x2F;p&gt;
&lt;p&gt;马天生在没调到这个军之前，也曾参加过一些专案组的工作，一般来说，一个人一旦被逮捕，精神上就委顿了一半，再坚强的人面对强大的国家机器也难以做到神态自若。此外，审讯的方式对于被审者而言也带有极大的压力，被审者通常是被喝令坐在一个和地浇铸为一体的水泥墩上，这是防止脾气暴躁的被审者抄起座椅以暴力袭击审讯者的必要措施。审讯者把雪亮的、令人炫目的灯光射向被审者，他自己却隐藏在灯后的黑暗之中，只听其声不见其人，这些心理学上的小把戏一般都能奏效，被审者常常是诚惶诚恐地去配合审讯者的问话，或急于表白自己的清白，或搜肠刮肚地把肚里的东西和盘托出，在这点上，大人物和小人物基本没什么区别。而李云龙却属于那种极少数的死硬分子。他的态度极为傲慢，通常是在灯光的照射下闭着眼一声不吭。马天生便以连珠炮式的发问去扰乱他的思维，谁知他竟然打起鼾来，闹了半天他早睡着了，白费了半天口舌等于放屁，这太让人恼火了。专案组用以致胜的法宝是以国家机器的强大压力从精神上摧毁对手，要使他明白，他是人民的敌人，在这块土地上，他只许老老实实，不许乱说乱动，只有这样他的身家性命才有可能苟全，但对于一个已将生死置之度外的人来说，就不大管用了。马天生很伤脑筋，到现在为止，审讯记录还是白纸一张，这可不太好向上面交待。&lt;&#x2F;p&gt;
&lt;p&gt;负责看守的战士都是按当时的时髦标准特意挑选出来的，对敌斗争坚决，路线斗争觉悟高，苦大仇深，根红苗正。最使李云龙气愤的是，一个青年战士在给他送饭时竟然往他饭碗里啐唾沫，李云龙长这么大还没受过这样的侮辱，不禁大怒，他把饭碗连饭一起扣在那个小子脸上，他还没来得及继续教训这个小混蛋，就被冲进来的几个战士按倒在地上拳打脚踢，他拼命反抗，一把掐住那个战士的喉咙，他完全可以捏碎这小子的喉骨，但他下不了手，这毕竟都是些不懂事的孩子，他们有什么过错？就这么一迟疑，他的软肋就挨了一记重拳，李云龙的抵抗结束了，毕竟是快六十岁的人了，就算年轻时练过几天拳脚，在这些身强力壮、受过格斗训练的战士面前，还是显得不堪一击，他被打得昏死过去。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙醒来后一吸气，肋骨就疼得受不了，凭经验判断，是左胸第五、六两根肋骨被打断了，他想起在淮海战役那次负伤时，这两根肋骨曾被弹片打断过，是旧伤了，这次不知是从旧茬上断的还是新处断的。他觉得头晕得很厉害，这是一个战士揪着他的头发把他的头向水泥地连连撞击造成的脑震荡。这些狗娘养的，下手够狠的，他不恨这些无知的战士，他们从入伍第一天开始就受这种教育，“对同志要像春天一样温暖，对敌人要像严冬一样残酷无情”。扪心自问，他李云龙也没少这样教育战士，想到这里，他禁不住苦笑起来。&lt;&#x2F;p&gt;
&lt;p&gt;他思索的是另外一个问题，这些无知的战士用对付敌人的手段毒打了他，这不难理解。问题是，究竞是什么人教会了他们去虐待别人，去侮辱别人？难道是敌人就可以去虐待，可以侮辱人格吗？他为此感到震惊，同时也感到愧疚。他想起二十多年前他枪毙了受伤的日军俘虏，政委赵刚得知后大发雷霆，他从没见过平时温文尔雅的赵刚发过这么大的火。赵刚吼道：“咱们是人，是正规军的军人，不是野兽，不是土匪，不管是什么人，只要放下武器，我们就应该以人道的方式去对待他们，你这样做，和日本鬼子有什么区别……”事后，赵刚找他谈心，说过几句话，使李云龙铭心刻骨，至今不能忘怀。赵刚说：“每个正常人身上都同时存在着人性和兽性，或者也可以称为善良和邪恶，如果不善于调整自己，随时加强自我修养，那么兽性的、邪恶的东西随时都会抬头。”李云龙懊悔的想，要是时光能倒流，他一定会拜赵刚为师，好好学学做人的道理。那时他对文化人有种莫名其妙的反感，经常以大老粗为荣，现在想起来真有些可笑。多少年过去了，赵刚的智慧、宽容、深沉和人格的魅力仍使他感到神往……&lt;&#x2F;p&gt;
&lt;p&gt;马天生和黄特派员研究李云龙的问题，他们一致认为，李云龙这个家伙已经是不可救药了，他是那种带着花岗岩脑袋去见上帝的人，对他的问题，从正面突破似乎是不可能了。此时需要的是迂回进攻，从他身边的工作人员身上打开缺口。他的警卫员是没什么希望了，这个吴永生是个从农村入伍的士兵，脑袋像榆木疙瘩，除了他的老首长，他谁也不认，你和他讲革命道理讲无产阶级专政下继续革命的理论，等于是对牛弹琴，这种人属于李云龙的死党，没什么挽救的必要了。李云龙的司机老常，马天生认为这是个老滑头，他总拿自己没文化说事，装傻充愣，一问三不知，你给他做工作，指出李云龙的罪行的严重性，老常做出一副博得懂懂的样子，傻乎平地问马天生：“政委，我咋听说李军长是台湾派来的特务？这就是你们当领导的不对了，咋让台湾特务当了军长呢？咱共产党挺机灵的，咋让台湾特务给蒙啦？”马天生一怒之下把他轰走。&lt;&#x2F;p&gt;
&lt;p&gt;马天生也找了一些师团级干部和司令部的几个参谋，向他们晓之以理动之以情，希望他们能配合专案组，揭发李云龙的罪行。但这些军官的回答都差不多：军长的职务是中央军委任命的，谁当军长他们就听谁的，这也是组织上的一贯要求。换句话说，就算刘少奇来当军长，他们照样也得服从命令，因为除了伟大领袖毛主席，谁能有这本事识破刘少奇的反动嘴脸呢？对于这些李云龙的死党，马天生一时还没什么办法。&lt;&#x2F;p&gt;
&lt;p&gt;看来李云龙身边的工作人员中，只有郑波是个突破口，他是大学毕业分配到部队工作的，这种书生气十足的军人往往比较软弱、胆小。前些日子听说郑波执行命令不坚决，被李云龙撤职，现在正在干部部等待重新分配工作。马天生认为，在准备召开的对李云龙的批斗大会上，除了造反派们的血泪控诉外，还应该有李云龙身边工作人员的反戈一击，这才有说服力和教育意义，用这个事实教育群众，只要是对毛主席的革命路线采取对抗态度，哪怕你功劳再大，职务再高，也会众叛亲离。当年张国焘的职务够高的了，他叛逃时连个警卫员都拒绝跟他走，这些例子难道还不能说明问题吗？&lt;&#x2F;p&gt;
&lt;p&gt;马天生认为郑秘书有文化，熟读中共党史，这种人对党内的政治斗争是很熟悉的，此时李云龙在政治上已经彻底垮台，一个有头脑的人是不会甘心为李云龙殉葬的，响鼓不用重锤敲，此间道理应该是一点就透。&lt;&#x2F;p&gt;
&lt;p&gt;郑波进门来，规规矩矩行了军礼，然后拘谨地坐下等待训示。马天生温和地说：“小郑呀，不要拘束嘛，随便点儿，我来了这么多日子，还没找你谈过心呢。听说你前段时间表现不错，拒绝执行反革命分子李云龙的命令而遭到了迫害。你做得对，有觉悟，我看得出来，你是个很有前途的好干部。我看你的分配问题就这样定下来，去海防团当政委怎么样？职务升一级，正团级，对你这样的好干部，党是不会忘记的。”&lt;&#x2F;p&gt;
&lt;p&gt;郑波有些诚惶诚恐，他手足无措地站起来感激地说：“感谢首长们的信任，我的能力低，思想改造得不彻底，只怕是辜负了组织上的信任。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生大度地挥挥手说：“组织上信任你，你大胆地干就是，出了什么问题还有我嘛。我今天找你来，是想和你谈谈李云龙的问题，你在他身边工作的时间不短了，应该是了解他的，对他的反革命言行是不是早有察觉呢？”&lt;&#x2F;p&gt;
&lt;p&gt;郑波知道这个问题是早晚要提出来的，虽然当他听到李云龙被捕的消息时，曾为自己的先见之明感到庆幸，同时他也感激老首长对自己的保护，他承认自己是个胆小怕事的人，但他绝不想做个落井下石的小人，若是这样，他的良心永远不会安宁，这和他做人的准则相违背，这些念头已经折磨他很久了。他只好顾左右而言他：“马政委，您知道，我只是个小小的秘书，只做我分内的工作，比如说，抄抄写写之类，我的路线斗争觉悟不高，阶级斗争的弦也绷得不紧……”&lt;&#x2F;p&gt;
&lt;p&gt;马天生皱了皱眉头打断他的话：“小郑，你跑题了，你并没有回答我的问题，还需要我再说一遍吗？”&lt;&#x2F;p&gt;
&lt;p&gt;郑波觉得后背已经有冷汗在慢慢渗出，他仔细斟酌着词句：“当然，首长，我明白您的意思，如果我真发现什么反革命言行，不用您说，我当然会坚决抵制和斗争的，这点儿觉悟我还是有的。可是……如果我没有发现，也不能乱说，这也是对组织上的不忠诚……”&lt;&#x2F;p&gt;
&lt;p&gt;黄特派员见郑波说话吞吞吐吐，甚至坐在椅子上的身子都在一点儿一点儿地蜷缩起来，心里便有些厌恶，他也看不起这种精神上的委琐，于是他不耐烦地厉声打断郑波的话：”郑秘书，难道你就这样报答组织上对你的信任？难道你就不为自己的政治前途多想想？”&lt;&#x2F;p&gt;
&lt;p&gt;“小郑，在路线斗争的问题上，绝没有调和的余地，中庸之道是行不通的，你现在只有两条路可走，要么是站到毛主席的革命路线上来，大胆揭发李云龙的反动言行，在批判大会上公开做出揭发批判，以求得组织上和革命群众的谅解。党的政策你比我清楚，‘首恶必办，胁从不问，受蒙蔽无罪，反戈一击有功’嘛。反革命分子在没有公开跳出来之前，必然要有蛛丝马迹，必然要有所表现。这是符合事物发展规律的，你在李云龙身边工作多年，不可能没有察觉嘛，现在是党考验你的时候，坦率地讲，如果你执迷不悟，不听劝告，那么我只能认为，你是在用实际行动告诉党，你决心为反革命分子李云龙殉葬，这就是另外一条路了，请你考虑，我给你五分钟时间。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生是个善于观察的人，他喜欢通过直接观察，发掘对方心灵深处的思想活动，他知道自己刚才的话，每个字都带有常人无法承受的巨大压力，他不怀疑自己的判断，郑波会合作的。谁也无法知道郑波在这短短的五分钟里都想了些什么。马天生只是发现，郑波刚才蜷缩着的身子渐渐地膨胀起来，弯曲的腰板也慢慢地挺直了，整个身子犹如一面鼓满的风帆。他脸上刚才的拘谨和顺从的神态一点儿一点儿地消失了，随之而来的是一种决绝。他腰板挺直地坐在椅子上，两个膝盖微微叉开，双手自然地放在腿上，这种标准的军人坐姿使马天生和黄特派员感到一种破釜沉舟的气势，一种经过深思熟虑的果断，一种军人就要走上战场的凛然。五分钟没到，郑波就开口了：“我刚才忽然想起一个外国政治家的名言：‘就人性来说，惟一的向导，就是人的良心。’我了解自己，我是个崇尚英雄而自己又是个缺少勇气的人，我承认，作为男人，我是个糟糕的男人，自私、胆怯，就像契河夫笔下的那个小公务员，我身上缺少的东西虽然很多，但惟一还有的，也就是良心了。如果连这个也失去了，那我可真要成穷光蛋了，一无所有。所以，我不打算再失去它。马政委、黄特派员，没能满足你们的要求，我很抱歉，现在，我还是回去听候处理吧。”郑波站起来行了一个军礼，然后走出房门。&lt;&#x2F;p&gt;
&lt;p&gt;正在主持专案组会议的马天生听秘书通报，说外面有个女人找他。马天生来到会客室，一看是田雨。&lt;&#x2F;p&gt;
&lt;p&gt;田雨看见马天生没有任何客套，只是冷冷地直呼其名：“马天生，我要见我丈夫。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生略微皱了皱眉头，有些不快，以他的职务和地位，很少有人对他直呼其名。眼前这个女人的和她的丈夫一样，也是这样态度傲慢，你明明是来求我的嘛。他毕竟是个有涵养的人。不会把不快带到脸上，他和颜悦色地说：“啊呀，小田同志，这件事可不好办，李云龙现在正在接受审查，他的案子是中央文革点名的，我个人无权批准家属会见，请原谅。”&lt;&#x2F;p&gt;
&lt;p&gt;田雨脸上露出一丝不屑：“你太谦虚了，别说这点小权力，我家老李的生杀大权也是握在你手里嘛。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生以一个男人的眼光饶有兴味地端详着田雨，她体态丰满而不失苗条，不太讲究裁剪的制式军装仍遮盖不住她浑身柔和的曲线，白哲的皮肤保养得极好，尤其是脸上没有任何皱纹，一双黑多白少的眼睛沉静如水，这是个极成熟的女人，这样的女人是容不得任何轻视的。
马天生暗想，李云龙这个赳赳武夫，居然有这么个相貌与气质俱佳的者婆，这样的女人可不多见。&lt;&#x2F;p&gt;
&lt;p&gt;他岔开话题：“小田同志，我早听说你们夫妻感情不太好，这是真的吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“难道这也是专案组必须审查的吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“当然不是，请不要误会。我想说的是，李云龙的问题已经定性了，现行反革命分子。这个案子恐怕永远也翻不了了，这是中央领导同志定下的，作为他的家属，你考虑过和他划清界限的问题吗？有什么需要组织上出面的事你可以和我说，我会帮助你的。”&lt;&#x2F;p&gt;
&lt;p&gt;田雨冷冷地打断他的话：“我不明白，专案组为什么对别人的婚姻有着异乎寻常的兴趣？我的路线斗争觉悟低，请你指点一下，我和李云龙离婚与否和你们革命的事业有关系吗？是不是如果离婚，毛主席的革命路线就胜利了？‘文化大革命’的胜利成果就保住了？或者，世界革命就成功了？如果我们的离婚能带来这么大好处，那我们当然可以试试。”&lt;&#x2F;p&gt;
&lt;p&gt;“你看，你看，小田呀，你的情绪很不正常呀，这种态度不好，分明是一种抵触情绪嘛。说心里话，我个人对李云龙绝无成见，他这个人除了脾气暴躁一些，和他并不难处，在部队中也有一定的威信。问题是。李云龙的问题是直接对抗‘文化大革命’，对抗毛主席的革命路线。我以前多次和他谈过，苦口婆心的请他站过来，对‘文化大革命’要端正态度，可老李对我的劝告置若罔闻，一意孤行，最后发展到对抗中央文革小组，镇压革命群众，你想，死伤这么多人，全国震惊呀。不客气地说，就是枪毙他李云龙一百次，也抵偿不了他犯下的滔天大罪。这怨不得别人，是他自己主动跳出来表明了他的立场，是非要和无产阶级专政较量一番了，这是咎由自取，谁也没办法。唉，我曾经是他的战友、同事，他犯了罪，我很痛心，我没尽到责任。”马天生说的是心里话，他不是个虚伪的人。&lt;&#x2F;p&gt;
&lt;p&gt;田雨默默地听着，她心里有些厌恶，马天生喋喋不休说了半天，好像没有什么观点是他自己的，几乎是从报纸上照搬下来的，那个关于党内两条路线斗争的话题实在令人乏味，像是被嚼过一百遍的口香糖。田雨本是个对政治缺乏兴趣的女人，对于复杂的政治，她只是简单地凭女人的直觉去判断，她认为大人物们有些无聊，动不动就是两条路线的斗争，有这么严重吗？都是一起打江山的老战友，谁是无产阶级？谁又是资产阶级？非要人为地划出党内的两个司令部，非要整得你死我活，要是个人行为倒也罢了，还要把几亿老百姓也拉上，天下能不乱吗？田雨感慨地想，理论真是个要命的东西，世上大多数人都不大重视这东西，因为它看不见摸不着，似乎是文人之间玩的东西，充其量也只属于学术范畴。二战结束后，当人们面对上千万犹太人和斯拉夫人被杀戮的结果时，才发现，希特勒的种族灭绝理论早在若干年前就明白无误地写在《我的奋斗》中，他没打算蒙骗世人，早向世人宣告了自己的理论，并准备一步步付诸实行了。世人终于明白了，理论问题是忽视不得的。谁忽视了它，必然要付出沉重的代价。&lt;&#x2F;p&gt;
&lt;p&gt;想到此，田雨不禁看了马天生一眼，她有点可怜这个人，这家伙倒不是什么太坏的人，只可惜他读了一肚子的书，装了一肚子的理论，说到底，没有一点他自己思考的成分，连这点起码的道理还没悟透，他不是当政治家的材料，缺乏俯视众生的高度。他舞剑时大概把自己当成杜甫笔下的公孙大娘，自以为把剑器舞得水泼不进，其实随时会把剑锋舞到自己脖子上。&lt;&#x2F;p&gt;
&lt;p&gt;此时马天生可没觉着自己可怜，他倒有点可怜田雨，这女人真是红颜薄命，这么出色，这么富有魅力的女人怎么就嫁给李云龙这样的人了？这次李云龙可是没什么希望了，他不愿意看到这个出色的女人陪李云龙一起殉葬。他要挽救她，帮助她。他开导道：“小田同志，李云龙现在态度非常恶劣，拒不交待自己的问题，当然，有个别工作人员出于义愤，行为过火了些，我们也给予了批评教育，但李云龙是什么态度呢，他咬牙切齿地声称，有朝一日要宰了这个工作人员。你看，他的气焰太嚣张了，这是向无产阶级专政反扑嘛，这是自取灭亡。我看，李云龙这个人是没什么希望了，小田呀，你要好好想一想，为这样一个死不改悔的反革命分子去殉葬，值得吗？”&lt;&#x2F;p&gt;
&lt;p&gt;田雨态度缓和地说：“老李的脾气暴躁，好冲动，这是老毛病了。马政委，你看这样好不好？我去劝劝他。毛主席不是也说过吗？‘惩前毖后，治病救人’。‘对反革命分子也要做到一个不杀，大部不抓’。在中央没做出正式决定之前，是不是还应该以教育为主，批判为辅？马政委，请给我一次机会，我相信我能说服他，至少能使他配合专案组的工作。”&lt;&#x2F;p&gt;
&lt;p&gt;田雨的诚恳态度颇使马天生感到意外，他不太相信李云龙这种人能软下来。不过，若是真能使李云龙认罪，这倒也是专案组的一大收获，这不妨试一试。他考虑了一会儿，终于同意了。&lt;&#x2F;p&gt;
&lt;p&gt;当李云龙慢慢地、一瘸一拐地走进会客室时，田雨几乎惊呆了，她没想到才几天的时间，像牛一样壮实的李云龙成了这副样子，他穿着一身没有领章的二号军装，军装就像挂在衣架上，里面空荡荡的，消瘦之快令人惊骇。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙一见田雨就显得不大高兴，他哼了一声说：“专案组不是规定不准会见家属吗？怎么破例了？你求他们了？怎么这么没出息？”&lt;&#x2F;p&gt;
&lt;p&gt;田雨不顾一切地冲过去抱住丈夫，李云龙肋骨伤处的剧烈疼痛使他的身子猛地颤抖起来，冷汗立刻渗出来。田雨看到丈夫脸色惨白，连忙扶住他，失声痛哭起来：“老李，这是他们打的？告诉我，伤在哪里？”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙说：“没事，那群混蛋没有半点儿勇气，好几个打我一个，有本事咱们一对一的交手，我不宰了他狗日的就不姓李。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生一看这情景心里就有了点儿上当的感觉，这田雨分明骗了他，这哪里是协助专案组做工作？他大声训斥道：“李云龙，你不要太嚣张，这样下去对你和你的家庭都没有好处。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙瞪起眼：“你什么时候养成这种毛病？我们两口子在这里亲热，你瞪着眼看什么？要不要脸？去去去！出去！”&lt;&#x2F;p&gt;
&lt;p&gt;马天生尽量使自己不生气：“李云龙你不要搞错了，是我批准你们见面的，这是对你的挽救，如果你坚持这种恶劣态度，我可以马上停止你会见家属。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙丝毫不领情：“我又没求你，是你把老子请来的，老子不领情。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生显出良好的涵养：“好吧，我不想和你吵，你们可以谈，但我必须按规定坐在这里。”田雨轻轻抚摸着丈夫的脸，恨不能把满腔的柔情一下子倾泻出来。她柔声道：“家里的事都安排好了，没有后顾之忧，你放心。现在我来陪你，我只想让你知道，无论你在哪里，我都在离你不远的地方伴陪着你。我知道，以后咱们单独相见的机会恐怕不会有了，但你要时时感受到，我无时无刻不在你身边……”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙的眼睛有些湿润了，他不善于表达情感，只是轻轻地问了一句：“小田，要是你觉得压力太大，要和我划清界限，我一点儿也不会怨你。嗨，这辈子让你受委屈啦，就算我想弥补，也没有机会了，等下辈子吧，我还会娶你做老婆。”&lt;&#x2F;p&gt;
&lt;p&gt;田雨仿佛回到了少女时代，她伸出一根手指轻轻按在丈夫嘴上，阻止他继续说下去，然后把脸贴在丈夫的胸膛上轻声说：“以前曾经后悔过，不过早就不后悔了，而且越来越爱你，你知道吗？在咱们这个时代，真正的男子汉越来越少了。生为女人，我算是够有福气了，我为你感到骄傲，惟一后悔的是，这辈子没能为你多生几个儿子，要是有下辈子，我发誓要替你多生几个。老李啊，你知道吗？我们女人命苦啊，婚前一旦没选择好丈夫，就要痛苦一生。而我是多么幸运，上苍垂顾，把你给了我，我太知足了，只想告诉你，这一生，我很幸福，真的，非常非常幸福……”&lt;&#x2F;p&gt;
&lt;p&gt;就算马天生涵养再好，这次也忍不住蹦了起来。在他看来，这田雨是个善于制造氛围的女人，看看这对夫妻诀别的样子，就好像电影里经常出现的那样，共产党员慷慨就义前的镜头。这是什么地方？这里是中央文革小组的要案专案组，是无产阶级对资产阶级实行专政的地方，这不是中美合作所，你们也不是江姐和许云锋，摆出这么悲壮的姿态给谁看？他再也忍不住了，猛地拍着桌子吼起来：“李云龙，你非要带着花岗岩脑袋去见上帝那谁也没办法，现在停止会见。来人！把李云龙带回牢房。”田雨抱着李云龙不松手，几个战士费了好大劲儿才把两人生生拉开，田雨挣扎着向李云龙喊：“老李，将军有将军的尊严，可杀不可辱！要硬就要硬到底，这才是我丈夫。老李，要是有一天你不在了，我绝不苟活在这世上，云龙啊，你是龙，我是云，龙和云是分不开的，我们生是夫妻，死也是夫妻，谁也不可能拆散我们……”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙被拖下去，田雨说完了她要说的话，心里平静下来，又恢复了冷漠的神态，她冷冷地对马天生说：“多谢你的帮忙，我没什么事了，现在，是不是该给我腾出一间牢房了？”&lt;&#x2F;p&gt;
&lt;p&gt;马天生也恢复了常态，他摇摇头说：“既然你要说的话说完了，那可以走了，监狱可不是旅店，不是谁想进来住就能住的。”田雨冷笑道：“别打官腔了，谁不知道进天堂难，下地狱容易？在这个时代，什么都难，就是进监狱不难。马天生，你听仔细了，如果李云龙的言行被称为是现行反革命，那么我告诉你，我永远和这个现行反革命站在一起，我同意他的观点，支持他的观点，你可以把我也称之为现行反革命分子，这些，够不够住监狱的资格了？要是还不够，我就再说几句，你听好，我反对，我厌恶你们那个‘文化大革命’，这绝不是什么无产阶级专政，这是纯粹的法西斯专政，是人类历史上最黑暗的一幕，中华民族五千年的文明、人性、传统和美德都要毁于一旦，它造成的破坏力和恶劣影响绝不是几十年能够恢复的，它是幽灵，是瘟疫，是噩梦，历史会永远诅咒它。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生听得浑身颤抖，他厉声喝道：“田雨，你赢了，你刚才的话已经取得了住进监狱的资格，你的要求可以满足了。现在，你就是想走也走不了了。”&lt;&#x2F;p&gt;
&lt;p&gt;田雨向房间角落指了指说：“行李我已经带来了，你派人检查一下，另外，我已经自己解除了我的军籍，不用劳你们的大驾了。”她指了指自己摘掉领章的衣领。&lt;&#x2F;p&gt;
&lt;p&gt;马天生这才发现，这个女人今天是带着行李的，她根本没打算回去。&lt;&#x2F;p&gt;
&lt;p&gt;特种分队的队部，队长段鹏和政委林汉正脸对脸地坐着抽烟，桌子上的烟灰缸里堆满了烟蒂，屋子里腾腾的烟雾已经使人睁不开眼了，这两人却一动不动地相互对视着。副队长梁军“砰”地一脚踢开房门闯了进来，见两人在沉默，便不问青红皂白地咆哮起来：“妈的，你们还在这儿坐着？我去看了地形，批斗大会的会场已经布置好了，明天他们就要把军长押来了，机会已经送到咱眼皮底下啦，再不动手就没机会了，你们要是怕事，就别管了，我来办这件事。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏和林汉觉得梁军的话有点儿不对味，什么话？老子们什么时候怕过事？这不是他妈的狗眼看人低吗？段鹏斜眼瞟了梁军一眼哼了一声：“你懂规矩不懂？我这队长还没被撤职呢，用你来瞎搀和？去去去！给老子一边儿凉快去。”&lt;&#x2F;p&gt;
&lt;p&gt;梁军一听更是火冒三丈：“你他妈的少拿队长牌子来压人，老子不喝这一壶，我就看不惯这个，有什么呀？大不了就是搭进条命进去，老子不稀罕这条命，不像有些人似的，关键时刻就想当缩头乌龟……”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏怒道：“你小子骂谁？怎么跟疯狗似的，逮谁咬谁？”&lt;&#x2F;p&gt;
&lt;p&gt;“啪！”梁军把手里茶杯摔在地上，碎玻璃和荼水溅得到处都是，他轻蔑地挑衅道：“谁认就是骂谁，怎么样？老子什么都怕，就是不怕吓唬，老子不喜欢逗嘴皮子，谁有种就去后面找个场子练练去。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏窜起来吼道：“操！给脸不要脸，走！老子和你讨教几招，咱们分队也真他妈的邪门啦，是个人就觉得自己是什么武林高手。”&lt;&#x2F;p&gt;
&lt;p&gt;林汉也火了，站起来吼道：“我说你们有完没完？事情当然要干，这不是正商量着吗？都他妈的什么时候了，还有工夫切磋拳脚？怎么火气一个比一个大？都他妈的坐下。”&lt;&#x2F;p&gt;
&lt;p&gt;正剑拔弩张的两个人一听，又一屁股坐下不吭声了。&lt;&#x2F;p&gt;
&lt;p&gt;林汉说：“我看也别商量了，这事用不了几个人，我带几个人去就行了，你们俩就别去了。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏不爱听了：“废话，凭什么你去？你是三头六臂咋的？”&lt;&#x2F;p&gt;
&lt;p&gt;林汉说：“问题不在这里，我想的是，把人抢出来怎么办？１号的脾气你们都知道，他不会躲起来，反而会臭骂咱们一顿。还有行动时不能伤人，这也增加了难度，那些警卫都是些不知深浅的头小子，要是和咱们胡打蛮缠，闹不好会一怒之下宰了他们。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏说：“算啦，咱们也别争了，干脆谁也别叫了，就咱们三个行动，再有几个人配合一下，一会儿咱们仔细研究一下计划，要一环扣一环，绝不能出岔子。我可说清楚，这是他妈的掉脑袋的事；谁有顾虑现在就说话，要是干，将来天塌下来咱们三个顶就是。”&lt;&#x2F;p&gt;
&lt;p&gt;梁军的脸上露出一丝笑容：“说这话才算条汉子。老段，刚才对不住啊，别怪我脾气急，我听说１号在里面受了不少罪，咱再不动手，老头子怕是活不了多久啦。管他娘的，先干了再说。党籍、职务、身家性命算什么？咱不要啦，凭咱们几个到哪儿混不上口饭吃？事情要干得不漂亮怨不得别人，只能怨咱自己笨蛋，大不了咱弟兄几个一起去投奔我二叔去，那边天高皇帝远，还能饿着咱们？”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏一拍桌子，下了决心：“干吧！咱们尽量做到不伤人，可要是哪个王八蛋不识相，就算他倒霉啦。现在各人都回家安顿一下，这不是件小事，一定要把家属妥善安置好，事情要是顺利，将来怎么办咱们听１号的，要是办砸了，那这兵咱不当啦，给他来个脚底抹油儿，反正不能让人家抓鸡似的把咱们抓进监狱，老子住不惯那地方……”&lt;&#x2F;p&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; font-size: 1.5em; font-weight: bold; margin: 20px 0;&quot;&gt;第四十三章&lt;&#x2F;div&gt;
&lt;p&gt;那个年代城市的体育场惟一功用就是集会。当然，开得最多的是批斗大会和公审大会。这种集会非常乏味，因为程序几乎是千篇一律，还没有见过哪个城市的此类大会有什么较新的创意，这种现象令许多后世人感到迷惑，难道当年的中国人竞如此缺乏想象力和创造力？数亿的国民，如此广大的国土，没有人为规定的统一模式，怎么从南到北所有的集会都开得这样毫无新意？如果读者不嫌乏味的话，我们不妨沿着当年集会主办者的思路去领略一下集会的氛围和程序。&lt;&#x2F;p&gt;
&lt;p&gt;会场布置：&lt;&#x2F;p&gt;
&lt;p&gt;主席台上方当然悬挂着领袖的巨幅画像，画像两侧是领袖语录，呈对称方式。左：领导我们事业的核心力量是中国共产党，右：指导我们思想的理论基础是马克思列宁主义。其实领袖说出这段话的时候，也根本没想到，不知是什么人把这段话肢解成一副时髦的对联，随之便在全国蔓延开来，成了约定俗成的规矩。&lt;&#x2F;p&gt;
&lt;p&gt;主席台前方是挂横幅的地方，就像一篇文章的点题一样，横幅是要表现此次大会的主题，公审谁，批斗谁，还不能忘了把被批斗者的名字用红笔打上叉。&lt;&#x2F;p&gt;
&lt;p&gt;首长的长条桌上应该是白桌布，上面放着麦克风，当地党政军首长按职务大小排座次，每人身前照例放一只茶杯，特别需要指出的是，这种带着把的茶杯的使用也有某种共性，全国如此。可以肯定地说，没有哪个中央文件规定在集会上必须使用这种茶杯。由此可见这种随大流的思维方式是我们中国人的思维特点。试想，若是用了传统的盖碗，首长们坐在主席台上跷起二郎腿，用三个手指头捏住盖碗撇撇茶沫儿，这似乎就不成体统了，有点八旗子弟的派头，哪还有点政治斗争的严肃性？看来最先使用这种茶杯的人是个非常细心的人，茶杯里也有政治。（若干年后，会场的模式变化不大，不过是矿泉水取代了茶杯。）&lt;&#x2F;p&gt;
&lt;p&gt;这类会场还有种必不可少的道具，就是会场四周，主席台两侧，甚至体育场环形跑道的圆径四周，都应该插满红旗，以此造成“风展红旗如画”的氛围。&lt;&#x2F;p&gt;
&lt;p&gt;会议程序：&lt;&#x2F;p&gt;
&lt;p&gt;此程序约需要二十多分钟，时间再紧也不得从简，不然要出大问题。&lt;&#x2F;p&gt;
&lt;p&gt;一、全场起立，高唱《东方红》。&lt;&#x2F;p&gt;
&lt;p&gt;二、敬祝我们伟大的导师、伟大的领袖、伟大的统帅、伟大的舵手，我们心中最红最红的红太阳毛主席万寿无疆！（三遍）敬祝毛主席的亲密战友，我们敬爱的林副统帅身体健康！永远健康！（三遍）这段程序很有讲究，毛主席前的一系列定语共 36 字，一字不能少。万寿无疆和永远健康也必须是连呼三遍，多了少了都不行，不然就要出大问题。&lt;&#x2F;p&gt;
&lt;p&gt;三、念领袖语录，内容应与本次大会主题有关。&lt;&#x2F;p&gt;
&lt;p&gt;四、全场高呼口号，公审对象或批斗对象出场，脖子上挂着大牌子，白底黑字，名字打叉，通常姿势为“喷气式”。若是准备判死刑的公审对象，该是五花大绑，捆得像个棕子。&lt;&#x2F;p&gt;
&lt;p&gt;五、批斗过程，各界代表轮流上台念稿子批判，革命口号穿插其间，以造声势。&lt;&#x2F;p&gt;
&lt;p&gt;六、尾声，由大会主持者进行批判总结，宣布将被批判者押出场，最后全体起立，高唱《大海航行靠舵手》后散会。&lt;&#x2F;p&gt;
&lt;p&gt;应该承认，这样年复一年、日复一日开这种没滋没味的集会，确实很容易使人提不起兴趣来，人类的天性是追求新鲜感，不然社会发展便失去了动力。若干年后的流行歌手们对此是深有体会的。&lt;&#x2F;p&gt;
&lt;p&gt;这种乏味的、千篇一律的批斗大会在某一天突然爆出个大冷门，以往的程序被破坏了，大会被迫中止。总之，说句时髦的话，这次批斗大会充满了戏剧性和新闻价值，以致这座城市的老百姓津津乐道了许多年。&lt;&#x2F;p&gt;
&lt;p&gt;对李云龙的批斗大会选在这座城市最大的体育场，体育场的看台上可以容纳上万人，那天会场经过精心布置，和全国其他城市的会场没什么两样，前面已经介绍过，在此不赘述。有所不同的是主席台前上方的横幅特别巨大，每个字高达 1.5 米，上面是黑体仿宋字“彻底清算现行反革命分子李云龙的反动罪行批判大会”。昔日田径比赛的环形跑道上，每隔十米就是一个全副武装的士兵，士兵们胸前挎着冲锋枪，雪白的手套在阳光下显得很醒目，他们以立正姿势面向看台，从这点上看，以往的批斗会可没有这么多全副武装的士兵。荷枪实弹显得火药味儿很足，这倒表现出一点儿新意。按马天生的意思，这是要造成一种强大的威慑力，体现出无产阶级专政的不可战胜的力量，还要体现出“人民大众开心之日，就是一小撮反革命分子难受之时”的气氛。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙的秘书郑波，警卫营长吴玉水，警卫员小吴，司机老常，还有司令部的七八个参谋都坐在主席台下的马扎上。郑波心里明白，凡此类大会，总有三个目的，一是发动群众，鼓舞群众斗志；二是震慑阶级敌人，起到杀一儆百的作用；三是使犯了严重错误而暂时还没发展成阶级敌人的人受受教育。郑波琢磨着，他们这些坐在台下马扎上的人无疑属于这第三种人。&lt;&#x2F;p&gt;
&lt;p&gt;大会开始，以往的会议程序在有条不紊地进行。二十分钟后，例常程序结束，正剧应该开始了。扩音器里传来一个嗓音频率极高的女人领呼口号，整个会场顿时喧闹起来，上万人呼口号很难同步，结果造成会场内的呼声此起彼伏，犹如山呼海啸一样。在一片喧嚣中，李云龙出场了。&lt;&#x2F;p&gt;
&lt;p&gt;他穿着一身洗得发白的旧军装，领章早被揪去，没有戴着军帽，三个身材高大的战士簇拥着李云龙，按标准的“喷气式”要求，由一个战士抓住他的头发使劲往下按，后面两个战士撅着他的两臂拼命向高抬。&lt;&#x2F;p&gt;
&lt;p&gt;坐在台下的郑波清楚地看见他的老首长在拼命地挣扎，想直起腰来，他甚至听见军长的骨头在咔咔作响。郑波浑身剧烈地颤抖起来。&lt;&#x2F;p&gt;
&lt;p&gt;坐在主席台上的马天生今天特地换了一身新军装，他端起茶杯喝了口茶，清清嗓子对麦克风说：“革命造反派的战友们、同志们，今天我们把现行反革命分子、残酷镇压革命群众的刽子手李云龙揪出示众了，这是毛泽东思想的伟大胜利……”&lt;&#x2F;p&gt;
&lt;p&gt;全场又一次沸腾了，口号声四起……&lt;&#x2F;p&gt;
&lt;p&gt;李云龙猛地抬起头来，抓住他头发的战士吃惊地发现，他手里抓的竟是李云龙的一把头发，上面还连着一块血淋淋的头皮……&lt;&#x2F;p&gt;
&lt;p&gt;一缕鲜血顺着李云龙的额头流下来。他暴怒地吼道：“马天生，放你娘的屁，我李云龙不是反革命，我是中国人民解放军的将军，为这个国家流过血……”&lt;&#x2F;p&gt;
&lt;p&gt;会场一片哗然，台上一片混乱，两个按着李云龙胳膊使劲向上撅的战士感到他正在不顾骨折的危险，用尽全身的力量想把腰直起来。两个身强力壮的战士自然不肯示弱，他们用力撅着李云龙的胳膊僵持着，离着很近的郑波听见一声脆响，李云龙的一条左臂竟拉下来，两个战士一时吓呆了，他们没有想到这个反革命分子竟如此暴烈，宁可骨折也不肯弯腰，两个战士在这一刹那竟吓得松了手。李云龙用那只没受伤的右手从脖子上摘下写着他名字的木牌，用力一甩，沉重的木牌径直砸在主席台的长条桌上，马天生和黄特派员身前的茶杯被砸得粉碎，碎瓷渣和茶水溅了他们一脸……&lt;&#x2F;p&gt;
&lt;p&gt;台下的郑波在心里喊了一句：伟哉，上将军！他泪水夺眶而出。&lt;&#x2F;p&gt;
&lt;p&gt;警卫员小吴抄起马扎扑向主席台哭喊着：“首长，咱们拼了……”&lt;&#x2F;p&gt;
&lt;p&gt;吴营长也蹿了起来破口大骂：“马天生，我操你姥姥……”&lt;&#x2F;p&gt;
&lt;p&gt;四周早有准备的警卫士兵扑过来按倒他们，小吴和几个血气方刚的年轻参谋抡起马扎和警卫人员厮打起来。此时，台上的李云龙已被几个战士拳打脚踢地按倒，李云龙用仅有的一只手臂进行徒劳的还击，台上台下已乱作一团。扩音器里传出尖锐的口号声：“坚决反击反革命分子的嚣张气焰！李云龙不投降就叫他灭亡！……”&lt;&#x2F;p&gt;
&lt;p&gt;体育场内上万人被眼前的突发事件惊呆了，他们从没见过如此刚烈的反革命分子，还有这么多不要命的死党，他们想不通，这些人难道吃了豹子胆？此时的会场秩序大乱，竟无人应呼口号。&lt;&#x2F;p&gt;
&lt;p&gt;马天生有些气急败坏，那块木牌差点就打破了他的脑袋，而且是众目睽睽之下，批斗大会开到这个份儿上，恐怕要在全国创个先例了。反革命分子在会场上公然反扑的事例还不曾有过，怎么就让他赶上了？马天生当机立断，下令把李云龙押下去，暂时休会。&lt;&#x2F;p&gt;
&lt;p&gt;浑身是血的李云龙被抬进了囚车，他的口鼻等处不停地流着血，一滴滴的流淌在地上，从主席台到囚车的一段距离，竟淌成一条血路。那些受过徒手格斗训练的警卫战士动起手来没有轻重的概念，李云龙的腹部、肋部多次遭到重击，受了严重的内伤，剧烈的疼痛使李云龙处于昏迷状态。&lt;&#x2F;p&gt;
&lt;p&gt;运载李云龙的囚车开动了，向监狱驶去。&lt;&#x2F;p&gt;
&lt;p&gt;离此不远的拐角处驶出一辆“嘎斯 69”型苏制吉普车，不远不近地跟了上去。&lt;&#x2F;p&gt;
&lt;p&gt;驾驶吉普车的段鹏一边开车一边泪流满面地发出野兽般的嗥叫，林汉脸色铁青把牙咬得咯咯响，刚才会场上惨烈的一幕他们全看见了。段鹏的嚎叫突然戛然而止，他狠狠擦了一把眼泪，阴森森地说：“我看清了，前面囚车上的那几个混蛋，就是他们动的手，妈的，什么不许伤人性命？老子可不管这些了，今天非宰了这几个混蛋不行。”&lt;&#x2F;p&gt;
&lt;p&gt;林汉显得很冷静，他低声说：“老段，你不能太冲动，那几个战士没什么错，他们就是受这种教育长大的，对敌斗争就得这样，你教育手下战士难道不是这样？我可警告你，千万不可伤人性命，不然１号知道了饶不了咱们，我一直认为你段鹏的心理素质是第一流的，怎么今天这样失态？别忘了你是特种兵。”&lt;&#x2F;p&gt;
&lt;p&gt;林汉的话很见效果，段鹏也感到自己的失态，他擦干眼泪，镇定下来对林汉说：“老林，你提醒得好，我今天有些失态，不过现在好了，你放心吧，我不会误事。”&lt;&#x2F;p&gt;
&lt;p&gt;囚车拐过一道弯，速度猛地减慢了，经验丰富的司机立刻感觉出汽车的两个后轮胎没气了，轮胎的钢圈和路面接触造成的颠簸使减震器发出怪声。他骂了一句停住车，推门下来准备换胎。&lt;&#x2F;p&gt;
&lt;p&gt;站在街道拐角处的梁军冷笑一声，吹吹枪口上的火药味，熟练地拧下消声器，把手枪插入腋下的枪套里，他握住装在袖子里的钢心橡胶棒晃晃悠悠向汽车走去……&lt;&#x2F;p&gt;
&lt;p&gt;与此同时，段鹏的吉普车也停了下来，林汉下了车，双手插在裤兜里闲逛般地凑过去……&lt;&#x2F;p&gt;
&lt;p&gt;昏迷中的李云龙觉得有人在轻轻摇自己，旁边有个熟悉的声音在轻喊：“１号、１号，您醒醒。”&lt;&#x2F;p&gt;
&lt;p&gt;他眼前的景物开始清晰了，发现是段鹏和林汉扶着自己，两人都穿着蓝色的劳动布工作服，扮成工人模样，汽车在高速行驶着，不过似乎不是刚才的囚车了。李云龙马上明白了，他冷冷地问：“刚才的司机和警卫战士呢？”&lt;&#x2F;p&gt;
&lt;p&gt;林汉回答：“１号，您放心，我们没伤人，只不过用橡皮棒敲了一下，这几个家伙可能要多睡一会儿，我们把那几个小子放在个安全地方，醒了会自己回去。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙叹了口气：“你们这几个无法无天的家伙，到底还是干了，你们想过没有？这次惹下的可是杀身之祸，一旦败露，军事法庭可要判死刑的。”&lt;&#x2F;p&gt;
&lt;p&gt;正在驾驶汽车的梁军回答：“１号，干我们这行的都认为，死和睡觉是一回事，一个破军事法庭能唬住谁？再说啦，我们现在的身份是‘井冈山兵团’的造反派战士，有点儿事也该‘井冈山兵团’负责，关我们屁事？”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙疲乏地闭上眼睛吩咐道：“把我送回家去。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏和林汉大惊失色道：“１号，千万不能回家，那是自投罗网。我们已经安排好了，一会儿就换车，这辆车是梁军从东风机械厂偷的，我们马上要把它扔掉，有人会把您送到渔船码头，船已经准备好，几天以后您就可以在辽宁葫芦岛附近登陆，东北那边的事有人安排，您先把风头躲过再说。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙睁开眼厉声道：“谁要你们安排这些？我再说一遍，现在我命令你们送我回家，听见了吗？”&lt;&#x2F;p&gt;
&lt;p&gt;三个部下无奈地服从了命令，梁军把偷来的吉普车甩在郊外的树林里，他们扶李云龙上了事先藏在那里的挂着军用牌照的吉普车，段鹏和林汉、梁军脱下印着“东风机械厂”字样的工作服扔进树林，换上了军装。李云龙发现这几个家伙把这辆吉普车里装备得像个军火库，有微型冲锋枪、微型手雷、燃烧弹和烟幕弹，还有几件进口的开夫拉防弹背心和一具“40”火箭筒。李云龙嘲讽道：“抢个李云龙还用费这么大的劲？你们的装备都可以去袭击装甲部队了。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏说：“这辆车我们改装过了，外表和普通‘北京吉普’一样，其实四周都加装了防弹钢板，轮胎也防漏的，前风挡是防弹玻璃，而且随时可以放下，能迎头发射火箭弹。１号，我们早计划好了，这次行动尽量做到不伤人，可万一哪个环节出了点儿问题，我们就豁出去大干一场了，所以我们不得不做点儿准备。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙笑了：“谢天谢地，幸亏顺利，不然不知有多少人要倒霉了，我不是早就和你们说过，要闹事去那边闹，这边可不能闹。”&lt;&#x2F;p&gt;
&lt;p&gt;梁军一边开车一边说：“１号，我怎么觉得自己都乖得像个才过门的小媳妇了？什么事都不敢干，谨小慎微的，这哪是特种分队？明明是‘南京路上好八连’。就说刚才吧，押送您的那几个毛头小子，收拾他们还得用橡皮棒？这是林汉的主意，这不是脱裤子放屁吗？要我说，一人给他一掌就完了。费这事干什么？１号您想吧，要是这也不许那也不许，那我们分队就改个名吧，叫乖孩子分队得啦。”&lt;&#x2F;p&gt;
&lt;p&gt;林汉苦笑道：“１号，那橡皮棒就是给他这种人预备的，不然这小子一掌上去，能把人家脑盖骨打碎，那几个战士再怎么样，也是出于无知嘛，咱们总不能一出手就杀人呀？”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙剧烈咳嗽起来，吐出一口鲜血，段鹏等人急了：“１号，您有内伤，咱们先去医院吧，铁路医院咱们有关系，保密没问题。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙吃力地喘息着说：“没事，当年十几块弹片差不多全打进肚子了，不是照样活了这么多年？林汉，你刚才说得对，那些新入伍的战士要听党的话，服从上级命令，这没什么不对，我刚当兵的时候脑子比他们还简单，现在问题是，党也有错的时候，党和国家犯了错误，不能要这些年轻战士负责嘛。看来当初梁山分队缺个军政素质全面的政委，我临时把林汉推上去是做对了。”&lt;&#x2F;p&gt;
&lt;p&gt;梁军回头报告：“１号，咱们到了，我已经在这一带转了几圈，仔细观察过了，我可以肯定没有情况，咱们可以下车了。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏用对讲机和部下联络：“06、07，报告你们的位置。”&lt;&#x2F;p&gt;
&lt;p&gt;“报告０１，你们在我的视线里，距离约一百米，听候指示……”&lt;&#x2F;p&gt;
&lt;p&gt;“06、07，马上秘密封锁这一带，如有武装军警进入，可以先提警告后开火，没有我的命令，任何武装人员不得进入这一带，执行吧。”段鹏冷冷地下了命令。&lt;&#x2F;p&gt;
&lt;p&gt;对讲机传来 06 惊喜的声音：“明白了，谁敢进入我的警戒圈，就开火打他狗日的……”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙住的小楼，在他被捕后就被查抄了，大门紧锁着，贴着封条。不过这难不住梁军，他用一截铁丝花了十秒钟就开了锁。段鹏和林汉一左一右搀扶着李云龙走进客厅坐在沙发里。李云龙喘息着指指壁炉说：“小梁，你把手伸进壁炉里，摸摸炉壁左上方，那里面凹进去一块，放着一个铁盒子，你把它掏出来。”&lt;&#x2F;p&gt;
&lt;p&gt;梁军取出铁盒，李云龙示意打开，他打开盒盖，掀开里面的蒙布又拆开几层油纸，发现一支袖珍型“勃朗宁”手枪静静地躺在铁盒里。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙伸手拿过手枪，仔细端详着，这是枝比利时 FN 公司出产的袖珍枪，枪身全长 115 毫米，口径 6.3 毫米，重量 375 克，弹容 6 发。李云龙曾把这手枪给一个研究常规兵器的工程师看过，那工程师一看就知道，曾告诉他，这种枪是 1906 年著名枪械设计大师勃朗宁先生设计的，并由比利时 FN 公司生产，成为名噪一时的名枪，后来由于此枪性能良好，欧洲很多国家都有仿制，据说销售量已达到四百万枝。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙默默地抚摸着蓝汪汪的枪身和枪柄上精致的花纹图案。这枝枪很能反映出制造国家的工业化水平，制造工艺极为精良。他想起了当年楚云飞送他这枝枪时的情景，心里突然感到一种暖意，这个楚云飞，倒真是个人物，他把玩着这枝手枪思念着它的前主人。&lt;&#x2F;p&gt;
&lt;p&gt;要说心里话，他还是挺喜欢楚云飞的，他和楚云飞打了大半辈子交道，一会儿是朋友，一会儿是对手，见了面除了喝酒就是谈军事，就是不能谈政治，一谈准要唇枪舌剑地干起来，彼此攻击对方的政党。淮海战场上的最后一别，李云龙送了他两发机枪弹，他回赠了一发迫击炮弹，那十几块弹片至今还留着呢。嗨，朋友嘛，平时惺惺相惜，战场上各为其主，先是一起和日本人干，打完了日本人，朋友自己又干起来，打得你死我活的。1949 年你小子跑了，我还挺高兴，不然逮住你我李云龙可救不了你，八成 1950 年镇反时就把你小子毙了。这还不是最好的结局？我还以为这辈子没有交手的机会了。想想吧，咱们当团长的时候吵，当师长的时候打，没想到都当了将军又隔着海干了起来，我的特种兵收拾了你一下，你反过手又折了我几员大将，这辈子和你小子算是粘上啦，你一嘴我一口，你一拳我一脚，谁也没占什么大便宜，咋老闹个扯平呢？楚兄，你我兄弟之间也该有个了结了，谢谢你送我的这把枪，我就带它上路了，怎么样？这够给面子了吧？老兄我先走一步，到了阎王爷那儿，要有机会，咱们接着干。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙拒绝了段鹏的帮忙，他两膝夹着手枪用那只没受伤的手依次卸下手枪套管、复进机簧、缓冲器和弹匣，很从容地用布擦拭着每一个零件，一边对段鹏等人说：“我刚当红军时，是扛着自家的梭标去的，那时红军队伍不发枪，除了有口饭吃，别的都要靠自己了，你们别看电影上的红军队伍，清一色灰布军装、八角帽，那是胡说八道。1927 年夏天我是下身只穿条裤权，上身光着膀子过来的，后来打土豪弄了件黑杭纺绸大褂，就是电影上财主爱穿的那种，黑底上印有‘福’字或‘万’字图案的绸大褂，这件大褂我穿了半年，你们想啊，行军队伍里有个穿财主绸大褂的人是什么样子？可当时就是这样，谁也别笑话谁，部队没有被服厂，没有后勤部，所有东西除了打土豪就是靠缴获，后来求乡村大嫂子织了几尺土布，用草木灰染成灰不溜秋的，好歹做了身军装。记得当时裁剪的很糟糕，裤裆勒着屁股沟，走起路来磨屁股，就这，还当宝贝呢。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏等人都笑了。&lt;&#x2F;p&gt;
&lt;p&gt;“我第一次参加战斗，用梭标捅死一个敌人，缴获一枝老套筒，你们没见过这种枪，是清末光绪年洋务派大臣张之洞创办的汉阳兵工厂的产品，射击精度极差，很容易卡壳，我那枝老套筒的膛线都磨平了，子弹总是翻着跟头出去。后来，我又缴获一枝‘中正’式步枪，是国民党河南巩县兵工厂的产品，抗战之前，这种枪算当时最好的步枪，只装备中央军部队，其实也只五发弹容，单发射击，人工退壳，射程和精度还不如日本的‘三八大盖’。抗战时我用一枝德国造驳壳枪，它的正式名称叫毛瑟‘M1932’式手枪，口径 7.63 毫米，弹容二十发，有效射程一百米，这种枪适合近战，枪身后有快慢机头，拨动连发机头，能顶枝小冲锋枪，在当时可是枝好枪。后来，就没意思了，官越做越大，枪越来越小，也没机会冲锋了……”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙笨拙地把手枪重新组装好，把子弹顶入枪膛，他仔细抚摸着蓝汪汪的枪身，枪柄在他的手掌中渐渐温暖起来，仿佛有了灵性。他自言自语地说：“玩儿一辈子枪，最后只剩下这枝小玩艺儿啦，这简直不算枪，是娘们儿玩儿的玩具。”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏等三人都以立正姿态站在一边注视着李云龙，他们闹不清军长要干什么。时间在一分一钞地流逝，他们都是老兵了，心里非常明白，在此处耽误的时间越久，危险就越大，但他们谁也没说话，面对渐渐迫进的危险，他们面无惧色地稳稳站在那里。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙抬起头，仔细把三人上下打量了一遍，似乎在用目光向三个忠诚的部下告别，目光中饱含着疼爱和欣赏。段鹏的心里猛然颤抖起来，他心里全明白了，因为他在军长的目光中看到了诀别，他的眼泪刷刷地顺着面颊洒落在胸前，不由失声喊道：“军长，我的军长，请跟我们走，我们求您啦，求您了……”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙冷冷地命令道：“现在我命令你们马上归队，听清楚没有？我从来不说第二遍，给我马上走。”说完他绝然扬起枪口，把黑洞洞的枪口对准了段鹏。&lt;&#x2F;p&gt;
&lt;p&gt;“我们绝不走，您要愿意开枪就开吧。”段鹏第一次拒绝了军长的命令，态度非常强硬。&lt;&#x2F;p&gt;
&lt;p&gt;梁军跨上一步，脸绷得近乎狰狞说：“军长、您应该知道这小玩艺儿对我们没用，我们可以缴掉您的枪。强行架走您，我们有这个能力。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙冷笑道：“嗬，真是翅膀硬啦，敢缴我的枪……”话音没落“叭”的一声，子弹接着梁军的头皮飞过去。梁军面不改色，动也不动地说：“军长，这没用，要是这小玩艺儿都能把我们吓住，那您亲手组建的特种分队也太废物了。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙无奈地摇摇头，口气缓和了一些：“你们听好，一个军人，可以在肉搏战中被敌人砍掉脑袋，但他绝不可以被侮辱，军人可以去死，但绝不能失去尊严，你们想把我藏起来，过几年苟延残喘的日子，我认为，即使是出于好心，也是对我李云龙的侮辱，让我活得像行尸走肉。这样做，我只能认为是谁和李某有深仇大恨，绝不是什么好心。你们明白吗？大丈夫来去赤条条，活着要活出个人样，死也得像条汉子，干吗要我去学缩头乌龟？坏了我一世名声？”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏、林汉和梁军终于明白李云龙决心已定，已无挽回的可能了，三人不由心中大恸，这些心硬如铁的汉子第一次弯下从没弯曲过的膝盖，齐刷刷地跪在军长的面前，男儿膝下有黄金啊，他们要用这种中国最古老的礼仪向他们最尊敬的，对他们有着知遇之恩的将军告别，这三个坚强的汉子热泪纵横，久久地说不出一句话来。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙疲乏地闭上眼说：“好啦，快走吧，记住！要保住这支特种分队，别让海峡那边的同行看笑话，拜托啦！”&lt;&#x2F;p&gt;
&lt;p&gt;段鹏等三人擦干眼泪，立正站好，向军长行了标准的军礼，然后流着泪走出大门……&lt;&#x2F;p&gt;
&lt;p&gt;李云龙扶着楼梯扶手慢慢走上楼，从卧室的壁橱里拖出一只紫红色布面箱子，他打开箱子，这是 1955 年解放军授衔时发的将官礼服，据说当年为了这身礼服，很多社会主义阵营的国家都帮了忙，有的国家给料子，有的国家负责加工肩章和纽扣之类的小物件，李云龙模了摸领花和袖口上面金灿灿的松枝，松果图案，那双和礼服相配的小牛皮靴子是高腰松紧口样式，将官和校官的靴子略有差别，将官靴的靴头扁而尖，线条很流畅，这点微小的差别表明了 1955 年时解放军的正规化程度和森严的等级差别。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙很困难地脱下沾满血的旧军装，慢慢地穿上这套已经过时的将军礼服，心里想起当年授衔时他和丁伟等人嫌少将军衔太低而故意闹事的往事，不由得轻轻笑了。那会儿还是年轻呀。&lt;&#x2F;p&gt;
&lt;p&gt;礼服穿好了，他又从箱子衬里的小兜中取出三枚金灿灿的勋章，他仔细端详着三枚勋章，心里暖融融的。有八一红星图案的二级八一勋章是授予在十年土地革命战争中担任过团级指挥员的。有延安宝塔山图案的二级独立自由勋章是授予抗日战争中担任过八路军、新四军团级指挥员的。有天安门图案的一级解放勋章是授予解放战争中担任军级以上指挥员的。这三枚勋章从设计到铸造都极为精美，上面镀着纯金，在灯光下很耀眼，这三枚勋章上浓缩着从贫瘠的山沟里浴血拼杀而渐渐强大起来的这支军队的历程，也浓缩着李云龙个人历史和百战搏杀的记载。&lt;&#x2F;p&gt;
&lt;p&gt;他把勋章别在礼服的右胸上，戴上装饰着金色帽缏的大沿军帽，对着穿衣镜看看，到底是礼服，穿上它，人变得神采奕奕，穿衣镜里出现一个八面威风的将军，一副金戈铁马、气吞万里如虎的气概，黄色的硬质肩章上，那颗金色的将星在灯照下闪烁着……&lt;&#x2F;p&gt;
&lt;p&gt;他扶着楼梯扶手从楼上下来，慢慢坐进沙发，拿起电话拨通了马天生的办公室：“我是李云龙，现在在我家里……这有什么好奇怪，我知道你正四处搜捕我，怎么就没想到上我家来看看呢？你大概只顾着在车站码头撒网了吧？看来你的脑子不太灵活。说实话，这个军交给你我还真不大放心。好吧，你来吧，咱们该好好谈谈了，毕竟共事一场嘛。记住！只允许你进我的大门，持枪的战士们不准进来，我手里有枪，你马天生要有点儿良心，就不该让年轻的战士做无谓的牺牲。好，来吧，我等你。”&lt;&#x2F;p&gt;
&lt;p&gt;他挂上电话，他坐在正对大门的沙发上，腰板挺得笔直，两个膝盖微微分开，被折断的左臂自然垂放在左腿上，他闭上眼睛。&lt;&#x2F;p&gt;
&lt;p&gt;该说的说了，该做的也都做了，该走啦。身为将军，他不喜欢这种归宿，记得一个著名的外国将军说过：一个军人最好的归宿，是在最后一场战斗中被最后一颗子弹击中。李云龙同意这种观点，欣赏这种死法。可惜，生活没有给他这种机会。&lt;&#x2F;p&gt;
&lt;p&gt;他环视着这熟悉的客厅，在这里他和妻子共同生活了十几年，客厅里的空气中似乎还留着田雨特有的芬芳气味，这沙发上好像还留着田雨的体温，他感到一种前所未有的温馨，眼前幻化出炮火连天的淮海战场，那小小的野战医院，那穿着白色护士服的美丽少女。他忘不了妻子和他分手时说的最后一句话：云龙啊，你是龙，我是云，龙和云是分不开的。他想象着，一条浑身闪动着金色鳞片的苍龙在一片云蒸霞蔚中翩翩起舞，云中龙啊。他不由轻轻笑了。妻子也太高抬他了，不过，妻子能这么看重他，还是挺使他感到欣慰的。&lt;&#x2F;p&gt;
&lt;p&gt;唉，人要是能重新活一遍，大概就会比第一次活得仔细些，有滋味些，会多享受些欢乐，少存些遗憾。唉，这辈子最大的遗憾是没有好好读读书，活得稀里糊涂，不明不白的。他记得赵刚劝过他多次，还手书了一副条幅送他：千秋邈矣独留我，百战归来再读书。据说这是曾国藩写给其弟曾国荃的。赵刚对这位不好学习的老战友很是恨铁不成钢，而喜欢以大老粗自居的李云龙很不以为然，这条幅早就不知扔到哪里去了。&lt;&#x2F;p&gt;
&lt;p&gt;想到这里，李云龙轻轻笑了起来，每个人回首一生，谁能没有遗憾呢？当初要不是参加了红军，他李云龙守着家里的两亩薄地，还不是腚朝天地在土里刨食？也许到老死也不会走出大别山一步，那时他不知道自己是住在一个圆型的地球上，还以为大地像块揉面用的案板平平的一块，而遥远的省城便是大地的中央。真傻得可以。他第一次见到飞机是反围剿时，国民党那老掉牙的双翼飞机，在飞机的俯冲扫射中，他傻呆呆地站在那里问：“班长，这大鸟儿上咋有人呢？”&lt;&#x2F;p&gt;
&lt;p&gt;如今回首往事，他突然发现自己这一辈子净碰上文化人了，要没这些有学问的人，他还不定傻成什么样呢。他碰上的第一个文化人是他当营长时的营教导员朱玉成。李云龙和他相处了很短一段时间，朱玉成就牺牲了。李云龙清楚地记得他是翻越夹金山时滑下山涧牺牲的。那天天气很晴朗，映入眼帘的色彩也很绚丽，蓝色的天空，白色的雪山，漫山遍野的红军部队，宣传队的女兵们站在没膝深的雪里打着快板鼓动着士气，山上山下红旗翻卷，朱玉成在李云龙身边随口吟出几句古诗，让李云龙至今记忆犹新：&lt;&#x2F;p&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; line-height: 1.8; margin: 20px 0;&quot;&gt;
　　纷纷暮雪下辕门，&lt;br&gt;
　　风掣红旗冻不翻。&lt;br&gt;
　　轮台东门送君去，&lt;br&gt;
　　此时雪满天山路。&lt;br&gt;
    …………
&lt;&#x2F;div&gt;
&lt;p&gt;纷纷暮雪下辕门，风掣红旗冻不翻，轮台东门送君去，此时雪满天山路。朱玉成话音没落，脚下一滑，人就像断线的风筝一样向深涧飘落下去……唉，打下这个江山可真不容易，死了多少人哪，这个朱玉成要是能活下来，1955 年至少授个中将。他也是从大别山深处走出来的。大别山啊，当初黄麻暴动，几十万大别山子弟参加红军，如今还有多少？1955 年授衔，来自大别山的将军有 293 名。这些幸存者成了将军，可谁能忘了那倒在战场上的几十万大别山子弟？&lt;&#x2F;p&gt;
&lt;p&gt;落叶归根，该回去啦。&lt;&#x2F;p&gt;
&lt;p&gt;一别家乡四十年，故乡的一切恍如昨日，远远地他好像看见黑紫色的大别山主峰金刚台在蓝天白云的映衬下勾画出险峻的侧影，上面矗立着古堡，显出一圈雄壮而粗犷的轮廓，故乡的山野渐渐漫起蓝色的雾气，高大的松柏、杨槐、栗树把枝杈刺向苍穹，村落、寺庙、水车、关隘都被虚虚幻幻的雾岚所笼罩……&lt;&#x2F;p&gt;
&lt;p&gt;魂归故土，应该是最美丽的人生终极，高官和厚禄，甚至轰轰烈烈的事业，都不如大自然的赐与来得温馨。魂归故土，是他晚年梦寐以求的梦境。几十万大别山子弟都回去了，他当然也要回去，那是故乡。。&lt;&#x2F;p&gt;
&lt;p&gt;有多少次，他在《中国古代地名大辞典》上寻找着故乡……北岭之在湖北河南间者，曰大别山脉。为江淮间一大分水岭。即周秦之冥也。今凿山通道七十余里。平汉铁路通过之。西起湖北应山县。东至河南商城，罗田至安徽霍却，霍山诸县之间。旧于关上设关隘十三……自古南北战争，恒以此为重险。&lt;&#x2F;p&gt;
&lt;p&gt;沧海横流，血肉横飞，方显出英雄本色，当年万源保卫战，敌军在不到 30 华里的地面上，使用兵力竞达九十个团，数量十倍于红军，谁能记清当时打了多少次恶仗？每天要牺牲多少人？他却是不多的幸存者之一。而眼前，一切都沉寂了，流逝了。那惊心动魄的枪声，那撕肝裂肺的呐喊，那悲痛欲绝的咒骂和呻吟，那狼藉遍野的残肢断骨和头颅，那千疮百孔仍迎风飘扬的军旗；都沉寂了，流逝了，无影无踪了，犹如做了一场梦……&lt;&#x2F;p&gt;
&lt;p&gt;李云龙睁开眼，他听到了汽车的刹车声和沉重零乱的脚步声，他从茶几上拿起了手枪。发现大门外有几个端着冲锋枪的战士正小心翼翼地探出身子。“叭”李云龙手里枪响了，子弹从一个战士的左耳边擦过，战士们立刻闪在大门两侧。李云龙厉声喝道：“马天生，你可以进来，我说过，不要让战士们进来，小心我的枪走火。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生的声音从门外传来：“你们都退到院子外面，没有我的命令不许进来。李云龙，我进来了。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生面无惧色地走进客厅。&lt;&#x2F;p&gt;
&lt;p&gt;李云龙满意地笑道：“马天生，敢在我的枪口下走进来，你还算条汉子，坐吧。”&lt;&#x2F;p&gt;
&lt;p&gt;马天生在面对李云龙的沙发上坐下来，不动声色地回答：“承蒙夸奖，这是你李云龙第一次称赞我。可我并不感到荣幸，你该知道，一个共产党员是不怕死的。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙皱皱眉头，有些不耐烦地说：“又来了，我说马天生呀，你咋像演戏的？翻来覆去就这么几句台词？你我好歹共事一场，如今我要走了，你能不能不说那些套话？”&lt;&#x2F;p&gt;
&lt;p&gt;“这就是你我之间的分歧，因为政治观点南辕北辙，你对毛主席的革命路线到现在还采取对抗的手段，你怎么能听懂一个真正的革命者的语言呢？李云龙，你走得太远了，我劝你放下那枝枪，这才有出路。”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙冷笑道：“军人没有交出武器的习惯，除非他死了以后。说到出路，你可想错了，我从来没有打算给自己留条出路，所以你这话等于没说。我找你来不是为了和你争论这些理论，因为我这辈子就没闹明白过，你比我也强不到哪儿去，尽管你比我有文化。我只想告诉你，我李云龙这条命，不喜欢听别人摆布，谁都不行，日本鬼子和国民党不行，现在的中央文革也不行，我这条命得由我自己摆布，我有权利选择自己的死法。我李云龙这条命虽说不值钱，可也不能被别人轻轻松松就拿走，这活儿得由我自己于，你知道一个军人最体面的死法吗？上吊？服毒？都不行。那是老百姓的死法。告诉你，军人的死法应该是用子弹。你看，我把枪口对准太阳穴，当我扣动扳机时，子弹会从我另一侧太阳穴穿出，随着子弹喷出的是我的血和脑浆，那时你会看到，我李云龙的血是热的，滚烫滚烫的，冒着热气，我的脑浆是白的，像没点好卤的豆腐，糊里糊涂的，这是因为我这辈子没闹明白的事太多。这颗子弹从我太阳穴穿过后，应该打进那边墙里，那墙是灰墙，不会产生跳弹，如果你想留个纪念，就把这弹头挖出来，我送你了。如果你不稀罕，就把它留在墙里，将来不管谁得到它，和我都是个缘分。嗯，还有，这颗弹头可能有些变形，因为我的颅骨比较硬……”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙用右手举起手枪，把枪口抵住右侧太阳穴。&lt;&#x2F;p&gt;
&lt;p&gt;马天生的脸色倏然变得像一张白纸，他失声喊道：“李云龙，你不要开枪……”他冒死猛扑过去想夺枪。&lt;&#x2F;p&gt;
&lt;p&gt;“叭！”一颗子弹打在马天生脚前的地板上，离他的脚趾只有一寸远，马天生僵住了，他不顾一切地喊道：“老李，你不要冲动，你我的关系到了今天这样，也可能是我在某些方面做得有些过分，我们好好谈谈……”&lt;&#x2F;p&gt;
&lt;p&gt;李云龙轻蔑地看了他一眼，似乎懒得说话，他的食指猛地扣动了扳机……&lt;&#x2F;p&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; font-size: 1.5em; font-weight: bold; margin: 20px 0;&quot;&gt;尾声&lt;&#x2F;div&gt;
&lt;p&gt;李云龙斜倚在沙发上，双眼睁着，似乎还在沉思，勃朗宁手枪掉在地板上，空气中迷漫着浓浓的火药味儿，一缕鲜血从他左面颊上流下来，像一条红色的小溪汨汨流淌，染红了他肩章上那颗金色的将星……&lt;&#x2F;p&gt;
&lt;p&gt;马天生几乎没有犹豫，他一个箭步冲到那面墙前，迅速地挖出了那颗弹头，仔细地端详着，李云龙说得没错，那弹头的确变了形，他的颅骨还真硬……&lt;&#x2F;p&gt;
&lt;p&gt;马天生默默地把弹头放进自己的上衣兜里，然后头也不回地走出客厅。一个细心的战士发现，马政委的脸色惨白，在他转身的一刹那，他的眼中竟闪出了一丝泪光。&lt;&#x2F;p&gt;
&lt;p&gt;两天以后的一个深夜，田雨在狱中割腕自尽。看守人员为此受到严厉的训斥，他们始终没搞清楚，那块小小的保险刀片是怎样躲过严密的搜查带入狱中的。看守人员私下里议论说，这女人是做好赴死的准备来到监狱的，她根本没打算活着出去。看她手腕上的那个伤口，割得像个孩子嘴，啧啧，这女人，真下得去手……看守人员从田雨的遗物中发现一张信纸，这是狱方发给她写交待材料的。这张信纸马上被送到马天生的办公桌上，那上面很潦草地写着南宋词人陈与义的一首《临江仙》：&lt;&#x2F;p&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; line-height: 1.8; margin: 20px 0;&quot;&gt;
　　忆昔午桥桥上饮，&lt;br&gt;
　　座中多是豪英。&lt;br&gt;
　　长沟流月去无声。&lt;br&gt;
　　杏花疏影里，&lt;br&gt;
　　吹笛到天明。&lt;br&gt;
&lt;br&gt;
　　二十余年如一梦，&lt;br&gt;
　　此身虽在堪惊！&lt;br&gt;
　　闲登小阁看新晴。&lt;br&gt;
　　古今多少事，&lt;br&gt;
　　渔唱起三更。&lt;br&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;马天生默默看了很久，始终没说一句话。同日，负责看守李云龙遗体的两个战士，突然遭到几个不明身份的人袭击，使他们昏迷了整整四十八小时。事后检查，除了少了军礼服肩章上的将星和那三枚勋章，别的什么也没动。&lt;&#x2F;p&gt;
&lt;p&gt;郑波因为立场问题，去海防团当政委的任命被取消，他被发配到部队农场劳动改造。那天他正在围海造田工地上背石头，对面敌占岛上那功率强大的广播站又开始广播了。一股宏大的铺天盖地的音乐声像飓风一样掠过海峡，郑波的心脏猛然收缩起来，这是贝多芬英雄交响乐的第二乐章，那首著名的《葬礼进行曲》，肃穆、悲哀的音乐过后，往常那娇滴滴的女人声音没有出现，一个声音浑厚的男广播员缓慢的声音传来：“……驻岛全体国军将士对李云龙将军的逝世表示深切哀悼……民国三十一年冬，李将军率部与倭敌激战于野狼峪，白刃战中手刃倭寇数百余，日军闻风丧胆。民国三十三年，李将军于晋西北全歼装备精良之日军山本一木特种部队，凭血肉之躯及劣势装备与敌浴血奋战，实乃中国军人之楷模。……现在广播在抗战中曾与李云龙将军协同作战共同抗击日本侵略者的原‘国军’第二战区上校团长、现役‘国军’陆军中将楚云飞的悼念文章，楚将军引用南宋词人刘克庄《满江红》词作为开始：铁马晓嘶营壁冷，楼船夜渡风涛急，有谁怜？猿臂故将军，无功极……”郑波把背上的石头狠狠地扔进海里，禁不住泪如泉涌……&lt;&#x2F;p&gt;
&lt;p&gt;李云龙去世几个月后，中苏边境战争在珍宝岛地区爆发，整个世界的目光都投向这个位于黑龙江虎林县境内，在乌苏里江主航道中心线中国一侧，面积仅为 0.74 平方公里的小岛上，两个曾经亲密无间的社会主义国家的军队在这一地区进行了一场有限的边境战争。双方的军人在战斗中都表现出高度的爱国主义精神和不畏牺牲的决死姿态。孔捷将军指挥的重炮群与苏军炮群激战数日。是役，苏军比金边防总站战时总指挥列昂诺夫上校，总站长扬辛中校饮弹身亡。战斗结束后，孔捷将军在作战室里独自坐了很久，他想起十几年前南京军事学院丁伟将军的论文，他的重组战略大格局的构想，他的战略预见性。继而想到老战友李云龙早逝，孔捷将军不禁热泪纵横，难以自抑……&lt;&#x2F;p&gt;
&lt;p&gt;李云龙的野战军也奉命调防，作为战略预备队调往可能爆发战事的地区。而马天生到底没当上这个军的１号首长，李云龙死后，他的精神似乎也垮了，变得沉默寡言起来，后来他主动要求调走，被调往北京的一所军事学院。据说，还是干他的老本行搞政治工作，再往后，就不清楚了……&lt;&#x2F;p&gt;
&lt;p&gt;这年的 7 月，在美国佛罗里达洲东部的卡纳维拉尔角的宇航中心发射场上，一枚巨大的运载火箭喷出耀眼的火光冲天而起，以第二宇宙速度飞向远方。这艘名为“阿波罗 11 号”的载人宇宙飞船载着人类的希望穿过黑暗的茫茫太空，第一次将人类送上月球，从这一天起，人类向宇宙进军的新纪元开始了。在这个躁动的、喧嚣的，充满暴力、鲜血和争斗的地球上，各种不同肤色、不同政治信仰的人群都暂时停止了争吵和厮杀，全人类都怀着庄严肃穆的情感迎接这伟大的新纪元，这是人类的骄傲，人类的希望。&lt;&#x2F;p&gt;
&lt;p&gt;伟大的、举世无双的贝多芬，他把自己博大精深的思想和对人类的无限爱恋和希望溶进了一曲响彻天宇的颂歌。在这伟大的时刻，全世界的各个角落，都响起了贝多芬《第九交响乐》中那辉煌的第四乐章。那规模宏大、气势磅碍的大合唱《欢乐颂》，把全人类的情感都推向了极致。&lt;&#x2F;p&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; line-height: 1.8; margin: 20px 0;&quot;&gt;
　　…………&lt;br&gt;
　　拥抱起来，亿万人民。&lt;br&gt;
　　让全世界接着吻！
&lt;&#x2F;div&gt;
&lt;p&gt;此时，在这个喧闹、杂乱无章的地球上，只有少数人类的智者能够以睿智的眼光透过重重迷雾，预见到在不远的将来，一场全新的工业革命将席卷全球。人类和社会、政治和经济力量的结构将随之而引起巨变。这场在量子电子学、信息论、分子生物论、海洋工程、核子学、生态学和太空科学的综合科学理论上发展起来的新工业浪潮将要使人类从此步入辉煌的时代。不仅如此，还要深刻改变人们赖以行动与处世的信息结构。改变人类对思考问题、综合情况、预测行动后果的方法，改变识字在生活中的作用，甚至改变自己大脑的物质组成和化学性质。&lt;&#x2F;p&gt;
&lt;p&gt;这一年，与中国毗邻的日本及后人称为“亚洲四小龙”的香港、台湾、新加坡和韩国都展动起日渐丰满的羽冀，开始了后来令世人瞩目的经济起飞。……&lt;&#x2F;p&gt;
&lt;p&gt;时间又匆匆过了十年，公元 1978 年。在李云龙将军恢复名誉、平反昭雪的大会上，在大会将要结束人们即将散去时，从门外匆匆赶来三个头发已经花白的老者，他们都穿着便衣，腰板挺直，动作敏捷，与会的人们一眼就能看出，他们曾是职业军人。这三位老者刚刚走进会场，猛地看见李云龙将军的遗像。他们突然像遭到雷击般地僵住了，顷刻间三人跌跌撞撞地扑倒在遗像前，为首的老者发出一声凄厉的喊声：“老首长，我的老首长啊，我们来看你啦……”说罢泪飞如雨，三人都发出一阵撕心裂肺的号陶，久久的、不间断的痛哭声使在场的人们无不为之动容……&lt;&#x2F;p&gt;
&lt;p&gt;他们离去时留下一束鲜花，在花束的红丝带上没有任何署名，只别着一颗金星，由于年深日久，金星的镀金层已经氧化褪色，变得暗淡无光。与会的大部分人都不识此为何物。只有几个退役离休的老军人一睹此物，都不禁老泪纵横，烯嘘不已，老人们告诉年轻人，这是 1955 年解放军授衔时代表将军军衔的将星……&lt;&#x2F;p&gt;
&lt;p&gt;又过了二十年，这个城市有了很大的变化。在临海滨的一座哥特式小楼前，来了一群中年男女军人，他们按响了门铃。小楼的主人是个来大陆投资的台湾商人，他曾在军中服役过，认得军衔，他发现这些军人的军衔都不低，其中有一个少将，其余都是大校、上校。军人们很有礼貌地提出请求说，他们曾经在这座小楼里度过了童年；今天是特地从四面八方赶来故地重游，不知主人能否满足他们的请求。&lt;&#x2F;p&gt;
&lt;p&gt;商人是个好客的人，既然是此楼的前住户，当然有权利参观一下故居，这和他也是一种缘分，更何况这些人都是一些有身份的高级军官。主人热情地领着军人们参观了楼上楼下所有的房间。军人们又提出能否去后院看看。主人说当然可以，他把客人领到后院时，客厅里的电话铃响了，主人抱歉地请客人随意参观，自己匆匆去接电话。&lt;&#x2F;p&gt;
&lt;p&gt;电话是有关合资项目的事，主人谈的时间稍稍长了些，当他放下电话匆匆赶到后院时，不由被眼前情景惊呆了，这些穿着笔挺的毛料军服的军官竟齐崭崭地跪在院墙前，抚摸着墙面的点点斑痕，正哭得像一群孩子……&lt;&#x2F;p&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: right; font-size: 0.9em; margin-top: 40px;&quot;&gt;
1998 年 1 月 — 7 月第一稿&lt;br&gt;
1999 年 3 月 — 4 月第二稿&lt;br&gt;
1999 年 5 月 — 6 月第三稿
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; font-size: 1.5em; font-weight: bold; margin: 20px 0;&quot;&gt;短评&lt;&#x2F;div&gt;
&lt;p&gt;小时家里的那台旧电视，能看的台子不多，《亮剑》便成了反复咀嚼之物。父亲也看，他话不多，但看着李云龙时，我总觉得他看到了自己。&lt;&#x2F;p&gt;
&lt;p&gt;少时读完了小说，知道了李云龙的结局。他没有死在冲锋的路上，没有死在敌人的枪下，却死在了自己人的手里。用一把楚云飞赠送的手枪，结束了生命。&lt;&#x2F;p&gt;
&lt;p&gt;这实是让人扼腕叹息。&lt;&#x2F;p&gt;
&lt;p&gt;那个时代，似乎就是这样。李云龙，一个为国家和民族流过血的军人，他的风骨是为战场而生的。当战场消失，周围只剩下自己人时，这身风骨便成了他的催命符。可以说李云龙的死和赵刚的死是必然的，或言也许妥协一些，不那么刚强一些，李云龙和赵刚就不会死。可那也就不是赵刚了，不是他李云龙了！他的死，他们的死，不是一场光荣的牺牲，而是令人寒心的一场悲剧。&lt;&#x2F;p&gt;
&lt;p&gt;英雄的血，不该白流，但有时，它就是白流了。&lt;&#x2F;p&gt;
&lt;div style=&quot;font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; text-align: center; line-height: 1.8; margin: 20px 0; font-style: italic;&quot;&gt;
秦人不暇自哀，而后人哀之。后人哀之而不鉴之，亦使后人而复哀后人也。
&lt;div style=&quot;text-align: right; margin-top: 10px;&quot;&gt;————杜牧《阿房宫赋》&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;div style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 20px;&quot;&gt;
2025年9月22日夜 见B站重映亮剑有感而录
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>在 Debian 12 服务器上部署 AstrBot 与 Overflow（NapCat 双后端）</title>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/astrbot-overflow-napcat/</link>
      <guid>https://www.aspchang.com/posts/astrbot-overflow-napcat/</guid>
      <description xml:base="https://www.aspchang.com/posts/astrbot-overflow-napcat/">&lt;p&gt;本指南旨在提供一个清晰、高效的流程，在 Debian 12 服务器上部署一套 QQ 机器人架构，其中 &lt;strong&gt;NapCat&lt;&#x2F;strong&gt; 作为核心协议端，同时为 &lt;strong&gt;AstrBot&lt;&#x2F;strong&gt; 和 &lt;strong&gt;Overflow&lt;&#x2F;strong&gt; 两个独立的应用后端提供支持。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;前置准备&quot;&gt;&lt;strong&gt;前置准备&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前置准备&quot;
   aria-label=&quot;Anchor link for: 前置准备&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;一台 Debian 12 服务器（位于国内）&lt;&#x2F;li&gt;
&lt;li&gt;一个 QQ 账号&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第一步：部署_NapCat&quot;&gt;&lt;strong&gt;第一步：部署 NapCat&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第一步：部署_NapCat&quot;
   aria-label=&quot;Anchor link for: 第一步：部署_NapCat&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;napneko.github.io&#x2F;&quot;&gt;NapCat&lt;&#x2F;a&gt; 是连接 QQ 网络的协议端，它将作为事件中心，将消息和事件分发给后端的 AstrBot 和 Overflow。&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;NapNeko&#x2F;NapCatQQ&quot;
   data-github-repo=&quot;NapNeko&amp;#x2F;NapCatQQ&quot;
   aria-label=&quot;NapNeko&amp;#x2F;NapCatQQ on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;NapNeko&amp;#x2F;NapCatQQ&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建工作目录与 &lt;code&gt;compose.yml&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;mkdir -p ~&#x2F;napcat &amp;amp;&amp;amp; cd ~&#x2F;napcat
nano compose.yml
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;粘贴以下 Docker Compose 配置&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;version: &amp;#39;3.8&amp;#39;
services:
  napcat:
    image: mlikiowa&#x2F;napcat-docker:latest
    container_name: napcat
    restart: always
    network_mode: &amp;#39;host&amp;#39;
    volumes:
      - .&#x2F;napcat-data:&#x2F;app&#x2F;data
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动并扫码登录&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;前台启动获取二维码&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo docker compose up
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;扫描日志中的二维码或链接，使用手机 QQ 确认登录&lt;&#x2F;li&gt;
&lt;li&gt;复制终端中 NapCat WebUI 链接到浏览器打开，进行后续配置&lt;&#x2F;li&gt;
&lt;li&gt;点击左侧 &lt;code&gt;其它配置&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;登录配置&lt;&#x2F;code&gt; -&amp;gt; 填入快速登录 QQ 账号&lt;&#x2F;li&gt;
&lt;li&gt;登录成功后，按 Ctrl+C 停止容器&lt;&#x2F;li&gt;
&lt;li&gt;后台启动服务&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo docker compose up -d
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;请务必记下终端输出中 WebUI 的访问地址和 Token，后续配置连接时需要用到。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第二步：部署应用后端_1_(AstrBot)&quot;&gt;&lt;strong&gt;第二步：部署应用后端 1 (AstrBot)&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第二步：部署应用后端_1_(AstrBot)&quot;
   aria-label=&quot;Anchor link for: 第二步：部署应用后端_1_(AstrBot)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;astrbot.app&#x2F;&quot;&gt;AstrBot&lt;&#x2F;a&gt; 是我们的第一个应用后端，使用 Docker Compose 进行部署。&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AstrBotDevs&#x2F;AstrBot&quot;
   data-github-repo=&quot;AstrBotDevs&amp;#x2F;AstrBot&quot;
   aria-label=&quot;AstrBotDevs&amp;#x2F;AstrBot on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;AstrBotDevs&amp;#x2F;AstrBot&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建工作目录与克隆 AstrBot 仓库&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;mkdir -p ~&#x2F;astrbot &amp;amp;&amp;amp; cd ~&#x2F;astrbot
git clone https:&#x2F;&#x2F;github.com&#x2F;AstrBotDevs&#x2F;AstrBot.git .
# 克隆到当前目录
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;编辑 &lt;code&gt;compose.yml&lt;&#x2F;code&gt; 文件&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;根据是否在第一步中配置了代理，对 AstrBot 的 &lt;code&gt;compose.yml&lt;&#x2F;code&gt; 文件进行相应修改。&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;version: &amp;#39;3.8&amp;#39;
services:
  astrbot:
    image: soulter&#x2F;astrbot:latest
    container_name: astrbot
    restart: always
    # [核心修改1] 添加 network_mode: &amp;quot;host&amp;quot; 以共享主机网络
    # 这样容器就能直接访问 v2rayA 的代理端口，并且方便与 NapCat 通信
    network_mode: &amp;#39;host&amp;#39;

    environment:
      - TZ=Asia&#x2F;Shanghai
      # [核心修改2 - 可选] 如果配置了 v2rayA，请添加以下代理环境变量
      - HTTP_PROXY=socks5:&#x2F;&#x2F;127.0.0.1:20170
      - HTTPS_PROXY=socks5:&#x2F;&#x2F;127.0.0.1:20170

    volumes:
      - .&#x2F;data:&#x2F;AstrBot&#x2F;data
      - &#x2F;etc&#x2F;localtime:&#x2F;etc&#x2F;localtime:ro
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动 AstrBot&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo docker compose up -d
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;AstrBot WebUI 现已运行在 &lt;code&gt;http:&#x2F;&#x2F;&amp;lt;服务器IP&amp;gt;:6185&lt;&#x2F;code&gt; 上&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第三步：部署应用后端_2_(Overflow)&quot;&gt;&lt;strong&gt;第三步：部署应用后端 2 (Overflow)&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第三步：部署应用后端_2_(Overflow)&quot;
   aria-label=&quot;Anchor link for: 第三步：部署应用后端_2_(Overflow)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mirai.mrxiaom.top&#x2F;&quot;&gt;Overflow&lt;&#x2F;a&gt; 是我们的第二个应用后端，基于 Mirai 生态，我们使用 Systemd 来管理其服务。&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MrXiaoM&#x2F;Overflow&quot;
   data-github-repo=&quot;MrXiaoM&amp;#x2F;Overflow&quot;
   aria-label=&quot;MrXiaoM&amp;#x2F;Overflow on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;MrXiaoM&amp;#x2F;Overflow&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;准备环境&lt;&#x2F;strong&gt;
使用 SFTP 等工具上传 &lt;code&gt;overflow.zip&lt;&#x2F;code&gt; 到服务器的 &lt;code&gt;~&#x2F;overflow&lt;&#x2F;code&gt; 目录并解压&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;mkdir -p ~&#x2F;overflow &amp;amp;&amp;amp; cd ~&#x2F;overflow
sudo apt install unzip openjdk-17-jre -y
unzip overflow.zip
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建 Systemd 服务&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;执行&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo nano &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;overflow.service
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;并粘贴以下内容：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;[Unit]
Description=Overflow QQ Bot Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=&#x2F;root&#x2F;overflow
ExecStart=&#x2F;bin&#x2F;bash &#x2F;root&#x2F;overflow&#x2F;start.sh
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动服务&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo systemctl daemon-reload
sudo systemctl start overflow
sudo systemctl enable overflow
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第四步：建立连接_(NapCat_-&amp;gt;_AstrBot_&amp;amp;_Overflow)&quot;&gt;&lt;strong&gt;第四步：建立连接 (NapCat -&amp;gt; AstrBot &amp;amp; Overflow)&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第四步：建立连接_(NapCat_-&amp;gt;_AstrBot_&amp;amp;_Overflow)&quot;
   aria-label=&quot;Anchor link for: 第四步：建立连接_(NapCat_-&amp;gt;_AstrBot_&amp;amp;_Overflow)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;我们采用两种不同的 WebSocket 模式来连接两个后端：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AstrBot (反向 WS)&lt;&#x2F;strong&gt;：AstrBot 作为服务端，NapCat 作为客户端连接它&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Overflow (正向 WS)&lt;&#x2F;strong&gt;：NapCat 作为服务端，Overflow 作为客户端连接它&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;4.1_连接_AstrBot_(反向模式)&quot;&gt;&lt;strong&gt;4.1 连接 AstrBot (反向模式)&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.1_连接_AstrBot_(反向模式)&quot;
   aria-label=&quot;Anchor link for: 4.1_连接_AstrBot_(反向模式)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 AstrBot (服务端)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;访问 AstrBot WebUI (&lt;code&gt;http:&#x2F;&#x2F;&amp;lt;服务器IP&amp;gt;:6185&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;进入 &lt;strong&gt;消息平台&lt;&#x2F;strong&gt; -&amp;gt; &lt;code&gt;+ 新增适配器&lt;&#x2F;code&gt; -&amp;gt; 选择 &lt;code&gt;aiocqhttp(OneBotv11)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;配置项：&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ID(id)&lt;&#x2F;strong&gt;：&lt;code&gt;astrbot-reverse-server&lt;&#x2F;code&gt; (或自定义)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;启用(enable)&lt;&#x2F;strong&gt;: 勾选&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;反向 WebSocket 主机地址&lt;&#x2F;strong&gt;：&lt;code&gt;0.0.0.0&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;反向 WebSocket 端口&lt;&#x2F;strong&gt;：&lt;code&gt;6199&lt;&#x2F;code&gt; (确保此端口未被占用)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;点击 &lt;code&gt;保存&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;进入 &lt;code&gt;配置&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;其他配置&lt;&#x2F;code&gt;，在 &lt;code&gt;管理员 ID&lt;&#x2F;code&gt; 中填写你的 QQ 号，保存&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 NapCat (客户端)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;进入 NapCat WebUI&lt;&#x2F;li&gt;
&lt;li&gt;点击 &lt;code&gt;网络配置&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;新建&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;Websockets客户端&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;配置项：&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;勾选 &lt;code&gt;启用&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;URL&lt;&#x2F;strong&gt;: &lt;code&gt;ws:&#x2F;&#x2F;127.0.0.1:6199&#x2F;ws&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;点击 &lt;code&gt;保存&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;4.2_连接_Overflow_(正向模式)&quot;&gt;&lt;strong&gt;4.2 连接 Overflow (正向模式)&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.2_连接_Overflow_(正向模式)&quot;
   aria-label=&quot;Anchor link for: 4.2_连接_Overflow_(正向模式)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 NapCat (服务端)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;进入 NapCat WebUI&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;code&gt;网络配置&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;新建&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;Websocket服务器&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置项：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;勾选 &lt;code&gt;启用&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;主机&lt;&#x2F;strong&gt;: &lt;code&gt;127.0.0.1&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;端口&lt;&#x2F;strong&gt;: &lt;code&gt;3001&lt;&#x2F;code&gt; (确保此端口未被占用)&lt;&#x2F;li&gt;
&lt;li&gt;点击 &lt;code&gt;保存&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;输入一个足够复杂的 Token，如 &lt;code&gt;mirai_overflow108&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;em&gt;Overflow 强制要求 Token 足够复杂以保证安全，否则无法启动&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 Overflow (客户端)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;确保 Overflow 已启动过一次且成功生成了配置文件 &lt;code&gt;overflow.json&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;进入 Overflow 的配置文件 (通常在 Overflow 根目录下)，找到 &lt;code&gt;ws_host&lt;&#x2F;code&gt; 的相关设置&lt;&#x2F;li&gt;
&lt;li&gt;修改&#x2F;新增一个&lt;strong&gt;正向 WebSocket 客户端&lt;&#x2F;strong&gt;配置，指向 NapCat 监听的地址：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;&amp;quot;ws_host&amp;quot;: &amp;quot;ws:&#x2F;&#x2F;127.0.0.1:3001&amp;quot;,
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;填写之前在 NapCat 配置的 Token，配置完成后的 &lt;code&gt;overflow.json&lt;&#x2F;code&gt; 文件大致如下所示：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;{
  no_log___DO_NOT_REPORT_IF_YOU_SWITCH_THIS_ON___开启此选项时不接受漏洞反馈: false,
  ws_host: &amp;#39;ws:&#x2F;&#x2F;127.0.0.1:3001&amp;#39;,
  reversed_ws_port: -1,
  token: &amp;#39;mirai_overflow108&amp;#39;,
  no_platform: false,
  use_cq_code: false,
  retry_times: 5,
  retry_wait_mills: 5000,
  retry_rest_mills: 60000,
  heartbeat_check_seconds: 60,
  use_group_upload_event_for_file_message: false,
  resource_cache: {
    enabled: false,
    keep_duration_hours: 168,
  },
  drop_events_before_connected: true,
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;保存配置并重启 Overflow 服务 ( &lt;code&gt;sudo systemctl restart overflow&lt;&#x2F;code&gt; )&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;4.3_验证连接&quot;&gt;&lt;strong&gt;4.3 验证连接&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4.3_验证连接&quot;
   aria-label=&quot;Anchor link for: 4.3_验证连接&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;在 AstrBot WebUI 的 &lt;code&gt;控制台&lt;&#x2F;code&gt;，应出现 &lt;code&gt;aiocqhttp(OneBot v11) 适配器已连接&lt;&#x2F;code&gt; 的日志&lt;&#x2F;li&gt;
&lt;li&gt;通过 &lt;code&gt;sudo journalctl -u overflow -f&lt;&#x2F;code&gt; 查看 Overflow 日志，应能看到成功连接到 &lt;code&gt;ws:&#x2F;&#x2F;127.0.0.1:3001&lt;&#x2F;code&gt; 的日志&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;至此，您已成功搭建了 NapCat 同时为 AstrBot 和 Overflow 两个后端服务的 QQ 机器人。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;附录&quot;&gt;&lt;strong&gt;附录&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#附录&quot;
   aria-label=&quot;Anchor link for: 附录&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Mirai 权限问题处理&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;当使用 Overflow&#x2F;Mirai 时，如果终端提示权限不足，这是 Mirai 的安全机制所致。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;错误示例&lt;&#x2F;strong&gt;: &lt;code&gt;权限不足. &#x2F;bili 需要权限 top.colter.bili-dynamic-mirai-plugin:command.bili&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;解决方法&lt;&#x2F;strong&gt;: 在 Overflow 的控制台中，使用 &lt;code&gt;&#x2F;perm&lt;&#x2F;code&gt; 指令进行授权，语法为 &lt;code&gt;被授权对象&lt;&#x2F;code&gt; 在前&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 示例：允许所有用户执行任意 Console 内置指令
&#x2F;perm permit u* console:*
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;配置代理环境 (v2rayA&#x2F;可选)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;此步骤为可选操作，主要为 AstrBot 访问外部服务提供网络支持，如果您不需要访问如 Google API 等服务，可以跳过此步。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 v2rayA&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 添加 GPG 公钥与软件源
wget -qO - https:&#x2F;&#x2F;apt.v2raya.org&#x2F;key&#x2F;public-key.asc | sudo tee &#x2F;etc&#x2F;apt&#x2F;keyrings&#x2F;v2raya.asc
echo &amp;quot;deb [signed-by=&#x2F;etc&#x2F;apt&#x2F;keyrings&#x2F;v2raya.asc] https:&#x2F;&#x2F;apt.v2raya.org&#x2F; v2raya main&amp;quot; | sudo tee &#x2F;etc&#x2F;apt&#x2F;sources.list.d&#x2F;v2raya.list

# 安装
sudo apt update &amp;amp;&amp;amp; sudo apt install v2raya xray -y
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动并配置&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo systemctl start v2raya
sudo systemctl enable v2raya
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;访问 &lt;code&gt;http:&#x2F;&#x2F;&amp;lt;服务器IP&amp;gt;:2017&lt;&#x2F;code&gt;，创建管理员&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;导入您的订阅链接，选择一个节点并启动&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;strong&gt;设置 -&amp;gt; 地址与端口&lt;&#x2F;strong&gt; 中，确认 &lt;strong&gt;SOCKS5 端口&lt;&#x2F;strong&gt;为 &lt;code&gt;20170&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
    </item> <item>
      <title>从武大事件看“舆论审判”如何透支社会信任</title>
      <pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/universal-post/</link>
      <guid>https://www.aspchang.com/posts/universal-post/</guid>
      <description xml:base="https://www.aspchang.com/posts/universal-post/">&lt;p&gt;武大那件事，纷纷扬扬，总算有了一个法律上的分晓。但这分晓，恐怕也只是一个逗号，而非句号。&lt;&#x2F;p&gt;
&lt;p&gt;我向来是不惮以最坏的恶意，来推测某些“正义”的。但即便如此，看到将“扶弱”的大旗，用到如此地步，也还是不免心寒。扶弱锄强，本是极好的事，可一旦成了武器，成了可以绕过事实、践踏程序的武器，那它刺伤的，就绝不仅仅是某一个“恶人”了。&lt;&#x2F;p&gt;
&lt;p&gt;今日为一人之“义”，一篇“小作文”，便可挟舆论以定罪，将人游街示众。事实是不必谈的，程序也是可以不管的，先打倒在地，再踏上一只脚，叫他永世不得翻身再说。这种“胜利”，何其便捷，又何其快意。&lt;&#x2F;p&gt;
&lt;p&gt;然而，代价呢？&lt;&#x2F;p&gt;
&lt;p&gt;代价就是信用的耗散。好比一家银行，凭着信誉发行了钱票，人人宝之。忽有一日，有人拿了假票，甚至是拿了早已兑付过的旧票，来强行支取，闹得天翻地覆，银行竟也只好息事宁人地给了钱。如此一而再，再而三，那么这钱票，离变成废纸也就不远了。&lt;&#x2F;p&gt;
&lt;p&gt;大众的同情与信任，便是这最宝贵的钱票。倘若可以被随意支取，甚至被欺罔，那么，当来日真有弱者在暗夜里泣血哀哭时，人们怕是也要先在心里打个问号，掂量一下这哭声里的水分了。&lt;&#x2F;p&gt;
&lt;p&gt;这，才是一种更深沉的悲哀。信用的崩塌，向来是从内部开始的。当一面正义的旗帜，它的持旗人自己都不再爱惜它的颜色时，旁人又如何能长久地敬畏它呢？&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 20px;&quot;&gt;
2025年8月2日夜 闻武汉经开区法院驳回杨某性骚扰诉讼有感而作
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>为多个 Docker 化 TeamSpeak 服务器部署 teamspeak-management-tools</title>
      <pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/teamspeak-management-tools/</link>
      <guid>https://www.aspchang.com/posts/teamspeak-management-tools/</guid>
      <description xml:base="https://www.aspchang.com/posts/teamspeak-management-tools/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;在部署了多个 TeamSpeak 服务器后，用户总会有想要创建个私人频道的冲动，但是一个个手动去开实在是太低效👎。幸运的是，社区提供了 &lt;mark&gt;teamspeak-management-tools&lt;&#x2F;mark&gt; 这样的开源工具，可以自动化创建临时子频道。本文便是基于此工具讲述如何在服务器上配置相关功能，实现自动化创建子频道、自动为用户提权至频道管理员等等。&lt;&#x2F;p&gt;
&lt;p&gt;如果尚未部署多个实例，可以先阅读：&lt;a href=&quot;&#x2F;posts&#x2F;teamspeak-docker-deploy&#x2F;&quot;&gt;基于 Docker 在服务器上部署多个 TeamSpeak 服务器&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;一、环境与目标&quot;&gt;一、环境与目标&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、环境与目标&quot;
   aria-label=&quot;Anchor link for: 一、环境与目标&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;在开始之前，请确保您具备以下条件：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;环境&lt;&#x2F;strong&gt;：一台运行 Docker 和 Docker Compose 的 Linux 服务器（本文以 Ubuntu 为例）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;目标&lt;&#x2F;strong&gt;：您的服务器上已通过不同的 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; 文件部署了多个（例如三个）独立的 TeamSpeak 3 服务&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;工具&lt;&#x2F;strong&gt;：teamspeak-management-tools 的预编译二进制文件&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;KunoiSayami&#x2F;teamspeak-management-tools.rs&quot;
   data-github-repo=&quot;KunoiSayami&amp;#x2F;teamspeak-management-tools.rs&quot;
   aria-label=&quot;KunoiSayami&amp;#x2F;teamspeak-management-tools.rs on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;KunoiSayami&amp;#x2F;teamspeak-management-tools.rs&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;信息&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;每个 TeamSpeak 服务器的 ServerQuery 管理员（&lt;code&gt;serveradmin&lt;&#x2F;code&gt;）密码&lt;&#x2F;li&gt;
&lt;li&gt;每个服务器上用于触发自动创建子频道的“入口频道”ID&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;em&gt;入口频道即为你要设为开启自动创建临时频道功能的频道&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;入口频道可使用 Telnet 连接到 TeamSpeak 服务器的 ServerQuery 端口进行获取，默认端口为 &lt;code&gt;10011&#x2F;TCP&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;步骤如下：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先你需要有一个 Telnet 客户端，Xshell、PuTTY 都可以，此处使用的是 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;the.earth.li&#x2F;~sgtatham&#x2F;putty&#x2F;latest&#x2F;w64&#x2F;putty-64bit-0.83-installer.msi&quot;&gt;PuTTY&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;使用 PuTTY 连接到服务器 ServerQuery 端口。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1765188053628_PuTTY-Config.png&quot; alt=&quot;PuTTY 连接 TeamSpeak ServerQuery 的配置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如图，输入 TeamSpeak 服务器的公网 IP 以及 ServerQuery 端口，选择 Telnet，点击连接即可。连接成功后能看到如下字样：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;TS3
Welcome to the TeamSpeak 3 ServerQuery interface, type &amp;quot;help&amp;quot; for a list of commands and &amp;quot;help &amp;lt;command&amp;gt;&amp;quot; for information on a specific command.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;依次输入如下指令：&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;login serveradmin password
use 1
channellist
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--note&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;NOTE&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;em&gt;password 为对应 TeamSpeak 服务器第一次启动时同管理员 token 一并输出的密码&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;输入完成后大致如下图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1765188052088_TSServer-Query.png&quot; alt=&quot;TeamSpeak ServerQuery 频道列表查询结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;其中 &lt;code&gt;cid&lt;&#x2F;code&gt; 即为要开启自动创建临时频道功能所需的入口频道 ID。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;&quot;&gt;二、为 TeamSpeak 服务器配置 IP 白名单&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#&quot;
   aria-label=&quot;Anchor link for: &quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;管理工具会以较高的频率与 TeamSpeak 服务器的 ServerQuery 端口通信。为防止被 TeamSpeak 的防洪（Anti-Flood）机制误判为攻击，我们必须将管理工具的 IP 地址加入服务器的白名单。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;定位 &lt;code&gt;query_ip_allowlist.txt&lt;&#x2F;code&gt; 文件&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这是部署过程中的&lt;strong&gt;第一个关键选择点和易错点&lt;&#x2F;strong&gt;。您需要找到每个 TeamSpeak 容器在主机上的&lt;strong&gt;真实数据目录&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;选择 A：使用了主机目录挂载（Bind Mount） - [推荐]&lt;&#x2F;strong&gt;
如果您的 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; 中包含类似以下的 &lt;code&gt;volumes&lt;&#x2F;code&gt; 配置：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;volumes:
  - .&#x2F;ts-data:&#x2F;var&#x2F;ts3server&#x2F;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;那么您的数据目录就是主机上与 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; 同级的 &lt;code&gt;ts-data&lt;&#x2F;code&gt; 文件夹，白名单文件路径为：&lt;code&gt;.&#x2F;ts-data&#x2F;query_ip_allowlist.txt&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;选择 B：使用了匿名卷（Anonymous Volume） - [有风险]&lt;&#x2F;strong&gt;
如果您的 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; 中没有 &lt;code&gt;volumes&lt;&#x2F;code&gt; 部分，Docker 会为您创建一个匿名卷。您需要通过以下命令找到它的真实路径：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 1. 找到容器的准确名称
$ docker-compose ps
# 2. 使用容器名查找其数据卷的&amp;quot;Source&amp;quot;路径
$ docker inspect [容器名] | grep &amp;#39;&amp;quot;Source&amp;quot;:&amp;#39;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;输出的路径（如 &lt;code&gt;&#x2F;var&#x2F;lib&#x2F;docker&#x2F;volumes&#x2F;long_id_string&#x2F;_data&lt;&#x2F;code&gt;）就是您的数据目录。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--caution&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;CAUTION&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;em&gt;匿名卷存在一个巨大风险：执行 &lt;code&gt;docker-compose down&lt;&#x2F;code&gt; 会&lt;strong&gt;永久删除&lt;&#x2F;strong&gt;该数据卷及其中的所有数据。强烈建议参考附录，将所有服务器迁移到安全的“主机目录挂载”模式&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;编辑白名单&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;进入每个 TeamSpeak 服务器的真实数据目录，创建或编辑 &lt;code&gt;query_ip_allowlist.txt&lt;&#x2F;code&gt; 文件，并添加以下内容：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;text&quot;&gt;127.0.0.1
::1
172.16.0.0&#x2F;12  # 覆盖Docker默认的内部网络地址范围
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重启 TeamSpeak 服务&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;这是最容易被忽略但至关重要的一步&lt;&#x2F;strong&gt;。白名单配置必须在重启后才能生效。&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 进入每个TeamSpeak项目的目录
$ cd &#x2F;path&#x2F;to&#x2F;your&#x2F;teamspeak_project
$ docker-compose restart # 使用restart命令，安全且高效
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;-1&quot;&gt;三、安装与配置管理工具&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-1&quot;
   aria-label=&quot;Anchor link for: -1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;我们将采用一个管理工具实例，通过多配置文件模式来同时监控所有服务器。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;下载并准备工具&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 创建一个专用目录
$ sudo mkdir -p &#x2F;opt&#x2F;ts-manager
$ cd &#x2F;opt&#x2F;ts-manager

# 从GitHub Releases下载适用于Linux x86_64的二进制文件
$ sudo wget [下载链接] -O ts-manager.tar.gz
$ sudo tar -xzvf ts-manager.tar.gz
# 将可执行文件重命名为简短的名称
$ sudo mv [解压出的长文件名] ts-manager
# 赋予执行权限
$ sudo chmod +x ts-manager
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置多服务器监控&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我们将创建一个主配置文件（&lt;code&gt;config.toml&lt;&#x2F;code&gt;）和多个附加配置文件。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;主配置文件 &lt;code&gt;config.toml&lt;&#x2F;code&gt;（负责第一个服务器）&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;toml&quot;&gt;# 通过绝对路径加载其他服务器的配置，这是最稳妥的方式
additional = [&amp;quot;&#x2F;opt&#x2F;ts-manager&#x2F;config_ts2.toml&amp;quot;, &amp;quot;&#x2F;opt&#x2F;ts-manager&#x2F;config_ts3.toml&amp;quot;]

# --- 服务器1的配置 ---
[server]
server-id = 1
channel-id = [10] # 示例：服务器1的入口频道ID
privilege-group-id = 5
leveldb = &amp;quot;ts1.db&amp;quot; # 为每个服务器指定独立的数据库文件

[misc]
interval = 5

[raw-query]
server = &amp;quot;127.0.0.1&amp;quot;
port = 10012 # 示例：服务器1暴露在主机上的ServerQuery端口
user = &amp;quot;serveradmin&amp;quot;
password = &amp;quot;SERVER1_ADMIN_PASSWORD&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;附加配置文件 &lt;code&gt;config_ts2.toml&lt;&#x2F;code&gt;（负责第二个服务器）&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;toml&quot;&gt;# --- 服务器 2 的配置 ---
[server]
server-id = 1
channel-id = [20] # 示例：服务器 2 的入口频道 ID
privilege-group-id = 5
leveldb = &amp;quot;ts2.db&amp;quot;

[raw-query]
server = &amp;quot;127.0.0.1&amp;quot;
port = 10011 # 示例：服务器2暴露在主机上的ServerQuery端口
user = &amp;quot;serveradmin&amp;quot;
password = &amp;quot;SERVER2_ADMIN_PASSWORD&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;aside class=&quot;github-alert github-alert--caution&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;CAUTION&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;mark&gt;additional&lt;&#x2F;mark&gt;路径：强烈建议使用&lt;strong&gt;绝对路径&lt;&#x2F;strong&gt;，避免因程序工作目录问题导致“找不到文件”的错误。&lt;mark&gt;leveldb&lt;&#x2F;mark&gt;配置：为每个服务器配置独立的数据库文件名（如 &lt;code&gt;ts1.db&lt;&#x2F;code&gt;），避免潜在的数据库读写冲突。&lt;mark&gt;密码与端口&lt;&#x2F;mark&gt;：请反复核对每个配置文件的 &lt;code&gt;password&lt;&#x2F;code&gt; 和 &lt;code&gt;port&lt;&#x2F;code&gt; 是否与对应服务器完全匹配，这是导致连接失败最常见的原因。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;-2&quot;&gt;四、通过 systemd 实现后台运行&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-2&quot;
   aria-label=&quot;Anchor link for: -2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;将工具作为 &lt;code&gt;systemd&lt;&#x2F;code&gt; 服务运行，可以确保其稳定性和开机自启。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建服务文件&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;$ sudo nano &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;ts-manager.service
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;将以下内容粘贴进去：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;ini&quot;&gt;[Unit]
Description=TeamSpeak AutoChannel Management Tool
After=network.target docker.service
Requires=docker.service

[Service]
Type=simple
User=root
# 明确指定工作目录和可执行文件的绝对路径
WorkingDirectory=&#x2F;opt&#x2F;ts-manager
ExecStart=&#x2F;opt&#x2F;ts-manager&#x2F;ts-manager
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动并验证服务&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 重新加载systemd配置
$ sudo systemctl daemon-reload
# 启动服务
$ sudo systemctl start ts-manager.service
# 设置开机自启
$ sudo systemctl enable ts-manager.service
# 检查服务状态
$ sudo systemctl status ts-manager.service
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果服务状态显示 &lt;code&gt;active (running)&lt;&#x2F;code&gt;，恭喜您，部署成功！&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;-3&quot;&gt;五、故障排查&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-3&quot;
   aria-label=&quot;Anchor link for: -3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;如果在启动服务时遇到问题（例如状态为 &lt;code&gt;activating (auto-restart)&lt;&#x2F;code&gt; ），请遵循以下步骤：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;停止服务&lt;&#x2F;strong&gt;： &lt;code&gt;sudo systemctl stop ts-manager.service&lt;&#x2F;code&gt; ，防止其无效重启&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看详细日志&lt;&#x2F;strong&gt;： &lt;code&gt;sudo journalctl -u ts-manager.service -e --no-pager&lt;&#x2F;code&gt; ，找到具体的错误信息&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在前台手动运行&lt;&#x2F;strong&gt;： &lt;code&gt;cd &#x2F;opt&#x2F;ts-manager &amp;amp;&amp;amp; sudo .&#x2F;ts-manager&lt;&#x2F;code&gt; ，这会直接在屏幕上打印出最清晰的错误&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Error: No such file or directory&lt;&#x2F;code&gt; : 通常是 &lt;code&gt;additional&lt;&#x2F;code&gt; 路径错误，或&lt;code&gt;leveldb&lt;&#x2F;code&gt;配置问题 请使用绝对路径并为每个服务指定 DB 文件&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Error: invalid loginname or password&lt;&#x2F;code&gt; : 密码或用户名错误 请重新核对&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Error: connection failed, flood ban&lt;&#x2F;code&gt; : 对应服务器的白名单未生效 请检查白名单文件内容并&lt;strong&gt;重启&lt;&#x2F;strong&gt;该 TeamSpeak 服务&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;解决问题后&lt;&#x2F;strong&gt;，再重新启动 &lt;code&gt;systemd&lt;&#x2F;code&gt; 服务&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;-4&quot;&gt;附录：将 TeamSpeak 数据迁移到安全的主机目录挂载&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#-4&quot;
   aria-label=&quot;Anchor link for: -4&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;如果您还在使用匿名卷，强烈建议进行以下一次性迁移操作，以保障数据安全&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;以迁移一个服务器为例：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;完整备份&lt;&#x2F;strong&gt;： &lt;code&gt;sudo docker cp [容器名]:&#x2F;var&#x2F;ts3server&#x2F; &#x2F;path&#x2F;to&#x2F;temp_backup&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;停止并删除旧容器&lt;&#x2F;strong&gt;： &lt;code&gt;cd &#x2F;path&#x2F;to&#x2F;project &amp;amp;&amp;amp; sudo docker-compose down&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建本地数据目录&lt;&#x2F;strong&gt;： &lt;code&gt;mkdir .&#x2F;ts-data&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改 docker-compose.yml&lt;&#x2F;strong&gt;：在 &lt;code&gt;teamspeak&lt;&#x2F;code&gt; 服务下添加 &lt;code&gt;volumes: - .&#x2F;ts-data:&#x2F;var&#x2F;ts3server&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;恢复数据&lt;&#x2F;strong&gt;： &lt;code&gt;sudo cp -a &#x2F;path&#x2F;to&#x2F;temp_backup&#x2F;ts3server&#x2F;. .&#x2F;ts-data&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重新启动服务&lt;&#x2F;strong&gt;： &lt;code&gt;sudo docker-compose up -d&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;完成此操作后，您的所有服务器数据都将安全地存放在主机上，易于管理和备份。&lt;&#x2F;p&gt;
&lt;p&gt;相关教程：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;posts&#x2F;teamspeak-docker-deploy&#x2F;&quot;&gt;基于 Docker 在服务器上部署多个 TeamSpeak 服务器&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;posts&#x2F;tsdns&#x2F;&quot;&gt;单一 IP 多 TeamSpeak 服务：使用 TSDNS 和 Docker 实现各端口的独立域名访问&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
    </item> <item>
      <title>单一 IP 多 TeamSpeak 服务：使用 TSDNS 和 Docker 实现各端口的独立域名访问</title>
      <pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/tsdns/</link>
      <guid>https://www.aspchang.com/posts/tsdns/</guid>
      <description xml:base="https://www.aspchang.com/posts/tsdns/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;在服务器上部署多个 TeamSpeak 3 服务器后，我们需要绑定不同的域名到每个服务器时，就会发现一个问题：似乎没有什么办法来保证简洁直接的域名显示，总是有这样那样的端口后缀。而 TeamSpeak 3 自带的 TSDNS 便可解决这个问题，部署方便、配置简单，可以将完全不同的域名指向同一服务器的不同端口（&lt;del&gt;对外售卖 TeamSpeak 服务器的商家也是这么做的&lt;&#x2F;del&gt;）。&lt;&#x2F;p&gt;
&lt;p&gt;如果尚未部署多个实例，可以先阅读：&lt;a href=&quot;&#x2F;posts&#x2F;teamspeak-docker-deploy&#x2F;&quot;&gt;基于 Docker 在服务器上部署多个 TeamSpeak 服务器&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1._前置条件&quot;&gt;1. 前置条件&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1._前置条件&quot;
   aria-label=&quot;Anchor link for: 1._前置条件&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;主机环境：&lt;&#x2F;strong&gt; 拥有公网 IPv4 地址的 Linux 服务器&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;域名：&lt;&#x2F;strong&gt; 一个可由您管理的有效域名&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;软件依赖：&lt;&#x2F;strong&gt; 服务器已安装 Docker Engine&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;基础知识：&lt;&#x2F;strong&gt; 掌握基本的 Linux Shell 操作及 Docker 命令&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;2._架构规划与解析流程&quot;&gt;2. 架构规划与解析流程&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2._架构规划与解析流程&quot;
   aria-label=&quot;Anchor link for: 2._架构规划与解析流程&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;在部署之前，必须明确整个解析流程。当 TeamSpeak 客户端尝试连接一个域名时，其解析顺序如下：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;TSDNS SRV 查询：&lt;&#x2F;strong&gt; 客户端首先查询 &lt;code&gt;_tsdns._tcp.example.com&lt;&#x2F;code&gt; 的 SRV 记录&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;TSDNS 服务连接：&lt;&#x2F;strong&gt; 如果 SRV 记录存在，客户端会连接到记录指向的 TSDNS 服务器（在我们的架构中，即 &lt;code&gt;ts-dns&lt;&#x2F;code&gt; Docker 容器的 &lt;code&gt;41144&lt;&#x2F;code&gt; 端口）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;应用层解析：&lt;&#x2F;strong&gt; 客户端向 TSDNS 服务发送其尝试连接的原始域名（例如 &lt;code&gt;game1.example.com&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;配置文件匹配：&lt;&#x2F;strong&gt; TSDNS 服务在 &lt;code&gt;tsdns_settings.ini&lt;&#x2F;code&gt; 文件中查找匹配的规则，并返回对应的 &lt;code&gt;IP:端口&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;语音服务连接：&lt;&#x2F;strong&gt; 客户端使用从 TSDNS 获取的最终地址，向目标 TeamSpeak 语音服务器发起连接&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;本教程将基于以下示例参数进行部署：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;服务器公网 IP：&lt;&#x2F;strong&gt; &lt;code&gt;123.123.123.123&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;主域名：&lt;&#x2F;strong&gt; &lt;code&gt;example.com&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;目标映射：&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;game1.example.com&lt;&#x2F;code&gt; → &lt;code&gt;123.123.123.123:9986&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;所有其他 &lt;code&gt;*.example.com&lt;&#x2F;code&gt; → &lt;code&gt;123.123.123.123:9987&lt;&#x2F;code&gt;（回退&#x2F;默认）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;3._TSDNS_服务部署&quot;&gt;3. TSDNS 服务部署&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3._TSDNS_服务部署&quot;
   aria-label=&quot;Anchor link for: 3._TSDNS_服务部署&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;此步骤将创建一个独立的 Docker 容器来运行 TSDNS 服务。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;3.1_配置文件_(tsdns_settings.ini)&quot;&gt;3.1 配置文件 (&lt;code&gt;tsdns_settings.ini&lt;&#x2F;code&gt;)&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.1_配置文件_(tsdns_settings.ini)&quot;
   aria-label=&quot;Anchor link for: 3.1_配置文件_(tsdns_settings.ini)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;此文件是 TSDNS 服务的核心，定义了域名到地址的映射规则。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在主机上创建并编辑配置文件：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;mkdir -p &#x2F;opt&#x2F;tsdns_config
nano &#x2F;opt&#x2F;tsdns_config&#x2F;tsdns_settings.ini
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;填入以下映射规则：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;ini&quot;&gt;# 为特定子域名 game1.example.com 指定 IP 和非标准端口 9986
game1.example.com=123.123.123.123:9986
*.example.com=123.123.123.123:9987
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;aside class=&quot;github-alert github-alert--warning&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;WARNING&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;此文件中的 IP 地址必须为服务器的公网 IP，以确保外部客户端可以访问。键值对格式为 &lt;mark&gt;域名=IP:端口&lt;&#x2F;mark&gt;，不支持额外的空格或注释。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
&lt;h4 id=&quot;3.2_Docker_容器化部署&quot;&gt;3.2 Docker 容器化部署&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.2_Docker_容器化部署&quot;
   aria-label=&quot;Anchor link for: 3.2_Docker_容器化部署&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;使用以下命令创建并启动 TSDNS 服务容器：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;docker run -d \
  --name tsdns-server \
  --restart unless-stopped \
  -p 41144:41144&#x2F;tcp \
  -v &#x2F;opt&#x2F;tsdns_config&#x2F;tsdns_settings.ini:&#x2F;data&#x2F;tsdns_settings.ini:ro \
  -w &#x2F;data \
  teamspeak:latest \
  &#x2F;opt&#x2F;ts3server&#x2F;tsdns&#x2F;tsdnsserver
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;mark&gt;--restart unless-stopped&lt;&#x2F;mark&gt;：确保 Docker 服务重启或容器意外退出时，服务能自动恢复，保障高可用性。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;mark&gt;-p 41144:41144&#x2F;tcp&lt;&#x2F;mark&gt;：映射 TSDNS 服务的标准 TCP 端口。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;mark&gt;-v ...:ro&lt;&#x2F;mark&gt;：以只读模式（&lt;code&gt;ro&lt;&#x2F;code&gt;）挂载主机上的配置文件。这是安全最佳实践，可防止容器意外修改主机文件。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;mark&gt;-w &#x2F;data&lt;&#x2F;mark&gt;：将容器的工作目录（Working Directory）设置为 &lt;code&gt;&#x2F;data&lt;&#x2F;code&gt;。此举旨在匹配配置文件的挂载点，以满足 &lt;code&gt;tsdnsserver&lt;&#x2F;code&gt; 程序在当前工作目录查找 &lt;code&gt;tsdns_settings.ini&lt;&#x2F;code&gt; 的隐性依赖。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;mark&gt;&#x2F;opt&#x2F;ts3server&#x2F;tsdns&#x2F;tsdnsserver&lt;&#x2F;mark&gt;：使用绝对路径执行程序，确保不受容器 &lt;code&gt;PATH&lt;&#x2F;code&gt; 环境变量的影响，是保证命令执行成功率的稳健做法。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;3.3_服务状态验证&quot;&gt;3.3 服务状态验证&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.3_服务状态验证&quot;
   aria-label=&quot;Anchor link for: 3.3_服务状态验证&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;部署后，使用 &lt;code&gt;docker ps&lt;&#x2F;code&gt; 命令检查容器状态。&lt;code&gt;STATUS&lt;&#x2F;code&gt; 列应显示为 &lt;code&gt;Up ...&lt;&#x2F;code&gt;。如果状态为 &lt;code&gt;Restarting&lt;&#x2F;code&gt;，应立即使用 &lt;code&gt;docker logs tsdns-server&lt;&#x2F;code&gt; 检查日志以诊断问题。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4._公共_DNS_配置&quot;&gt;4. 公共 DNS 配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4._公共_DNS_配置&quot;
   aria-label=&quot;Anchor link for: 4._公共_DNS_配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;最后一步是配置公共 DNS 记录，以引导客户端发现您的 TSDNS 服务。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A 记录 (地址记录)&lt;&#x2F;strong&gt;
此记录用于将目标域名解析至服务器 IP&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;主机:&lt;&#x2F;strong&gt; &lt;code&gt;@&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;类型:&lt;&#x2F;strong&gt; &lt;code&gt;A&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;值:&lt;&#x2F;strong&gt; &lt;code&gt;123.123.123.123&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SRV 记录 (服务定位记录)&lt;&#x2F;strong&gt;
此记录遵循 RFC 2782 标准，用于 TSDNS 服务的自动发现&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;服务 (Service):&lt;&#x2F;strong&gt; &lt;code&gt;_tsdns&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;协议 (Protocol):&lt;&#x2F;strong&gt; &lt;code&gt;_tcp&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;优先级 (Priority):&lt;&#x2F;strong&gt; &lt;code&gt;0&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;权重 (Weight):&lt;&#x2F;strong&gt; &lt;code&gt;5&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;端口 (Port):&lt;&#x2F;strong&gt; &lt;code&gt;41144&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;目标 (Target):&lt;&#x2F;strong&gt; &lt;code&gt;example.com&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;5._总结&quot;&gt;5. 总结&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#5._总结&quot;
   aria-label=&quot;Anchor link for: 5._总结&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;通过上述部署，已成功构建一个动态的 TSDNS 解析服务，以供将不同域名指向同一服务器上的不同 TeamSpeak 服务器。&lt;&#x2F;p&gt;
&lt;p&gt;完成 DNS 配置后，请等待 DNS 记录在全球范围内完成传播（通常需要几分钟到数小时不等），即可开始使用您自定义的域名进行连接。&lt;&#x2F;p&gt;
&lt;p&gt;如果还需要自动创建临时频道，可以继续阅读：&lt;a href=&quot;&#x2F;posts&#x2F;teamspeak-management-tools&#x2F;&quot;&gt;为多个 Docker 化 TeamSpeak 服务器部署 teamspeak-management-tools&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>基于 Docker 在服务器上部署多个 TeamSpeak 服务器</title>
      <pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/teamspeak-docker-deploy/</link>
      <guid>https://www.aspchang.com/posts/teamspeak-docker-deploy/</guid>
      <description xml:base="https://www.aspchang.com/posts/teamspeak-docker-deploy/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;TeamSpeak 作为一个极其轻量的语音服务方案，其音质好、配置要求几乎等于没有等等的优点，让我三年来一直选择 TeamSpeak 作为个人游戏时的语音服务选择。但是，单在服务器上跑一个 TeamSpeak 实在是太浪费剩余的性能了。本文给出如何在一台服务器上多开多个 TeamSpeak（&lt;del&gt;其实对外售卖的商家就是这么做的：超兽武装这一块，一个服务器卖一年 9.9 都是暴利&lt;&#x2F;del&gt;）。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;第一步：服务器环境准备（Debian_12）&quot;&gt;第一步：服务器环境准备（Debian 12）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第一步：服务器环境准备（Debian_12）&quot;
   aria-label=&quot;Anchor link for: 第一步：服务器环境准备（Debian_12）&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;我们需要拥有一台拥有公网 IP 的云服务器，购买阿里云华为云腾讯云均可，并且安装 Debian 或者 Ubuntu 系统等支持 Docker 的服务器系统，本文使用 Debian 12 进行演示。&lt;&#x2F;p&gt;
&lt;p&gt;首先，我们需要在服务器上安装 Docker 和 Docker Compose，我们将使用国内镜像源来加速安装过程。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1._更新系统并安装依赖&quot;&gt;1. 更新系统并安装依赖&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1._更新系统并安装依赖&quot;
   aria-label=&quot;Anchor link for: 1._更新系统并安装依赖&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;2._添加阿里云的_Docker_GPG_密钥和软件仓库&quot;&gt;2. 添加阿里云的 Docker GPG 密钥和软件仓库&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2._添加阿里云的_Docker_GPG_密钥和软件仓库&quot;
   aria-label=&quot;Anchor link for: 2._添加阿里云的_Docker_GPG_密钥和软件仓库&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;添加 GPG 密钥&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo install -m 0755 -d &#x2F;etc&#x2F;apt&#x2F;keyrings
curl -fsSL https:&#x2F;&#x2F;mirrors.aliyun.com&#x2F;docker-ce&#x2F;linux&#x2F;debian&#x2F;gpg | sudo gpg --dearmor -o &#x2F;etc&#x2F;apt&#x2F;keyrings&#x2F;docker.gpg
sudo chmod a+r &#x2F;etc&#x2F;apt&#x2F;keyrings&#x2F;docker.gpg
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;添加软件仓库&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;echo \
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=&#x2F;etc&#x2F;apt&#x2F;keyrings&#x2F;docker.gpg] https:&#x2F;&#x2F;mirrors.aliyun.com&#x2F;docker-ce&#x2F;linux&#x2F;debian \
$(lsb_release -cs) stable&amp;quot; | \
sudo tee &#x2F;etc&#x2F;apt&#x2F;sources.list.d&#x2F;docker.list &amp;gt; &#x2F;dev&#x2F;null
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;3._安装_Docker_引擎和_Docker_Compose&quot;&gt;3. 安装 Docker 引擎和 Docker Compose&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3._安装_Docker_引擎和_Docker_Compose&quot;
   aria-label=&quot;Anchor link for: 3._安装_Docker_引擎和_Docker_Compose&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;4._开放相关端口&quot;&gt;4. 开放相关端口&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4._开放相关端口&quot;
   aria-label=&quot;Anchor link for: 4._开放相关端口&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;前往云服务器安全组策略开放相关端口，如下：&lt;&#x2F;p&gt;
&lt;p&gt;9987&#x2F;UDP 语音通话（Voice）&lt;&#x2F;p&gt;
&lt;p&gt;10011&#x2F;TCP 服务器查询（ServerQuery）&lt;&#x2F;p&gt;
&lt;p&gt;30033&#x2F;TCP 文件传输（File Transfer）&lt;&#x2F;p&gt;
&lt;p&gt;以及将来在对每个端口绑定独立域名时需要的 TSDNS 服务端口 41144&#x2F;TCP。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;第二步：部署你的第一个_TS_服务器&quot;&gt;第二步：部署你的第一个 TS 服务器&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第二步：部署你的第一个_TS_服务器&quot;
   aria-label=&quot;Anchor link for: 第二步：部署你的第一个_TS_服务器&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;现在，让我们来部署第一个 TS 实例。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1._创建项目目录&quot;&gt;1. 创建项目目录&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1._创建项目目录&quot;
   aria-label=&quot;Anchor link for: 1._创建项目目录&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;为你的第一个服务器创建一个专属文件夹，并进入该目录。&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;mkdir ts_server_1
cd ts_server_1
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;2._创建_docker-compose.yml_文件&quot;&gt;2. 创建 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; 文件&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2._创建_docker-compose.yml_文件&quot;
   aria-label=&quot;Anchor link for: 2._创建_docker-compose.yml_文件&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;nano docker-compose.yml
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;复制粘贴如下内容到 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; 中：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;version: &amp;#39;3.1&amp;#39;
services:
  teamspeak:
    image: teamspeak
    restart: always
    ports:
      - 9987:9987&#x2F;udp
      - 10011:10011
      - 30032:30032
    environment:
      TS3SERVER_DB_PLUGIN: ts3db_mariadb
      TS3SERVER_DB_SQLCREATEPATH: create_mariadb
      TS3SERVER_DB_HOST: db
      TS3SERVER_DB_USER: root
      TS3SERVER_DB_PASSWORD: example
      TS3SERVER_DB_NAME: teamspeak
      TS3SERVER_DB_WAITUNTILREADY: 30
      TS3SERVER_LICENSE: accept
      TS3SERVER_FILETRANSFER_PORT: 30032
      TS3SERVER_FILETRANSFER_IP: 0.0.0.0
    volumes:
      - .&#x2F;ts3_files:&#x2F;var&#x2F;ts3server&#x2F;
    depends_on:
      - db
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: teamspeak
    volumes:
      - .&#x2F;mariadb_data:&#x2F;var&#x2F;lib&#x2F;mysql
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;其中 &lt;code&gt;ports&lt;&#x2F;code&gt; 部分是容器的端口映射规则，即将容器内 9987 端口（冒号后）映射到宿主机的 9987 端口（冒号前），我们稍后多开时将会对这部分进行修改。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl+O&lt;&#x2F;strong&gt; 回车保存，&lt;strong&gt;Ctrl+X&lt;&#x2F;strong&gt; 退出。&lt;&#x2F;p&gt;
&lt;p&gt;输入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo docker compose up
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;复制终端输出的全部内容保存到本地，将来会用到。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl+C&lt;&#x2F;strong&gt; 退出。&lt;&#x2F;p&gt;
&lt;p&gt;输入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sudo docker compose up -d
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使其在后台运行。&lt;&#x2F;p&gt;
&lt;p&gt;现在你可以打开你的 TeamSpeak 客户端输入你的服务器公网 IP 地址尝试对容器进行连接。&lt;&#x2F;p&gt;
&lt;p&gt;现在我们就基于 Docker 部署好了第一个 TeamSpeak 服务器。接下来我们部署第二个，其仅有端口和连接方式的改变。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;第三步：部署你的第二个_TS_服务器&quot;&gt;第三步：部署你的第二个 TS 服务器&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第三步：部署你的第二个_TS_服务器&quot;
   aria-label=&quot;Anchor link for: 第三步：部署你的第二个_TS_服务器&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;同部署第一个服务器一样。&lt;&#x2F;p&gt;
&lt;p&gt;使用 &lt;code&gt;nano&lt;&#x2F;code&gt; 指令编写 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;，但是做一些端口的改变，如下：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;version: &amp;#39;3.1&amp;#39;
services:
  teamspeak:
    image: teamspeak
    restart: always
    ports:
      - 9988:9987&#x2F;udp
      - 10012:10011
      - 30033:30033
    environment:
      TS3SERVER_DB_PLUGIN: ts3db_mariadb
      TS3SERVER_DB_SQLCREATEPATH: create_mariadb
      TS3SERVER_DB_HOST: db
      TS3SERVER_DB_USER: root
      TS3SERVER_DB_PASSWORD: example
      TS3SERVER_DB_NAME: teamspeak
      TS3SERVER_DB_WAITUNTILREADY: 30
      TS3SERVER_LICENSE: accept
      TS3SERVER_FILETRANSFER_PORT: 30033
      TS3SERVER_FILETRANSFER_IP: 0.0.0.0
    volumes:
      - .&#x2F;ts3_files:&#x2F;var&#x2F;ts3server&#x2F;
    depends_on:
      - db
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: teamspeak
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;对 &lt;code&gt;ports&lt;&#x2F;code&gt; 部分的端口进行了修改，将第二个 TeamSpeak 服务器容器内的 9987 端口映射到了宿主机的 9988 端口，并映射 10011 端口到宿主机 10012。&lt;&#x2F;p&gt;
&lt;p&gt;以及修改 &lt;code&gt;TS3SERVER_FILETRANSFER_PORT&lt;&#x2F;code&gt; 为 30033，区别于第一个服务器避免冲突。&lt;&#x2F;p&gt;
&lt;p&gt;同样的保存 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;，然后在前台启动容器复制关键信息，然后再后台运行容器。&lt;&#x2F;p&gt;
&lt;p&gt;此时我们将容器内的 9987 端口映射到了宿主机的 9988 端口上，所以如果我们要连接这个容器内的 TeamSpeak，需要使用服务器公网 IP + 端口的地址来进行连接，比如：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;123.123.123.123:9988&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这样我们就基于 Docker 在一台 Debian 服务器上多开了 TeamSpeak 服务器。&lt;&#x2F;p&gt;
&lt;p&gt;如果你需要将不同端口的服务器分别映射到不同的域名上，可以继续阅读：&lt;a href=&quot;&#x2F;posts&#x2F;tsdns&#x2F;&quot;&gt;单一 IP 多 TeamSpeak 服务：使用 TSDNS 和 Docker 实现各端口的独立域名访问&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;如果还需要自动创建临时频道，可以继续阅读：&lt;a href=&quot;&#x2F;posts&#x2F;teamspeak-management-tools&#x2F;&quot;&gt;为多个 Docker 化 TeamSpeak 服务器部署 teamspeak-management-tools&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;个人公益_TeamSpeak_服务器分享&quot;&gt;个人公益 TeamSpeak 服务器分享&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#个人公益_TeamSpeak_服务器分享&quot;
   aria-label=&quot;Anchor link for: 个人公益_TeamSpeak_服务器分享&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;地址 1：&lt;&#x2F;strong&gt; &lt;code&gt;ts1.kcpo.us&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;地址 2：&lt;&#x2F;strong&gt; &lt;code&gt;ts2.kcpo.us&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;👏 完全免费，欢迎来玩！&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>被降维的魔法——哈利波特电影的毁灭性改编</title>
      <pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/harrypotter/</link>
      <guid>https://www.aspchang.com/posts/harrypotter/</guid>
      <description xml:base="https://www.aspchang.com/posts/harrypotter/">&lt;h2 id=&quot;引子：那个回不去的魔法世界&quot;&gt;引子：那个回不去的魔法世界&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#引子：那个回不去的魔法世界&quot;
   aria-label=&quot;Anchor link for: 引子：那个回不去的魔法世界&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;十四年前我问同学借了一本绿封绿页的书叫哈利波特与火焰杯，自那以后我考好了我妈妈就给我买一本哈利波特直到我收集全，哈利波特在我心里是很特殊的存在，代表了我童年小有幸福的一段时光和伴随着长大不再的那个魔法世界。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;一、人物的去骨：被献祭的灵魂们&quot;&gt;一、人物的去骨：被献祭的灵魂们&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一、人物的去骨：被献祭的灵魂们&quot;
   aria-label=&quot;Anchor link for: 一、人物的去骨：被献祭的灵魂们&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;电影改编最大的原罪，首当其冲便是对人物角色的“去骨”式扁平化。&lt;&#x2F;p&gt;
&lt;p&gt;罗恩·韦斯莱当之无愧是三人组里最惨痛的牺牲品。电影中的他，几乎完全沦为了小品里插科打诨的“小丑”，一个功能性的喜剧角色。然而书中的罗恩，他的勇气与忠诚是三人组的基石——在第一部，是他以牺牲自我的决心赢下了至关重要的巫师棋；在第三部，是他在断腿的情况下，依然能勇敢地挡在哈利身前，对峙“杀人犯”小天狼星。这些闪光点，连同他作为普通家庭孩子的自卑与敏感、偶尔展现的过人洞察力，都被电影无情地剥离，让这个角色变得苍白而单薄。&lt;&#x2F;p&gt;
&lt;p&gt;赫敏·格兰杰则走向了另一个极端——她被塑造成了无所不能的“赫圣”。原著第一部中斯内普对她那句“an insufferable know-it-all”（一个令人讨厌的万事通）的评价，精准地概括了她性格的底色。这并非一句单纯的贬损，而是她人性复杂度的体现。书里的赫敏，会因为紧张而在魔鬼网中惊慌失措；会固执地为 S.P.E.W.（家养小精灵权益促进会）奔走而惹人烦；会冷酷地将丽塔·斯基特（一个阿尼马格斯）囚禁在瓶中并以此要挟，也会在 D.A.签名羊皮纸上悄然下咒惩罚告密者。这些充满棱角的细节，共同构成了一个有血有肉、正在成长的天才少女。电影却切掉了这一切，让她的博学变成一种不容置疑的权威，最终将她变成了一座蒙着辉光的神像。（颇为讽刺的是，戏外艾玛·沃森本人也因其立场与 J.K.罗琳公开相悖，让这种反差更显复杂（笑））。&lt;&#x2F;p&gt;
&lt;p&gt;更不必说光芒四射的金妮，在书中何等独立、风趣、能量十足，电影里却沦为偶尔露脸、眼神闪躲的背景板女友；还有邓布利多，从书中那个眼神闪烁、平静中蕴含无尽智慧与力量的形象，在电影《火焰杯》中竟会粗暴地摇晃着哈利的肩膀咆哮。这些改编，无一不是对角色灵魂的巨大折损。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;二、世界的降维：被稀释的深刻主题&quot;&gt;二、世界的降维：被稀释的深刻主题&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二、世界的降维：被稀释的深刻主题&quot;
   aria-label=&quot;Anchor link for: 二、世界的降维：被稀释的深刻主题&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;电影的第二个摧毁之处，在于对整个魔法世界深度的“降维”打击。&lt;&#x2F;p&gt;
&lt;p&gt;如果你看过原著，那么肯定就明白，《哈利·波特》从来不只是一个男孩挥舞着魔杖打败光头的故事。书中处处埋藏着对现实世界的精妙隐喻。无论是“泥巴种”这一称呼所代表的血统歧视，还是马尔福家族对韦斯莱一家的贫穷鄙夷所揭示的阶级固化；无论是《预言家日报》在魔法部长福吉授意下，对哈利和邓布利多进行长达一年的舆论暴力，还是乌姆里奇将政治腐败与集权制度带入校园。甚至魔法部大厅那两座前后交替的雕像——从象征虚伪和平的《魔法兄弟》，到伏地魔掌权后那座刻着“MAGIC IS MIGHT”:将麻瓜踩在脚下的恐怖石碑——都无声地诉说着这个世界的复杂与挣扎。&lt;&#x2F;p&gt;
&lt;p&gt;而这一切探讨中最致命的省略，便是对冈特家族那段扭曲历史的浅尝辄止。这段关于伏地魔外祖父一家的历史，是理解“恶”之起源的关键。它告诉读者，在极端贫困、近亲通婚和对纯血的病态执念下，仇恨与绝望是如何被代代孕育，最终诞生出汤姆·里德尔这样一个不懂爱的怪物。只有理解了这一点，我们才能明白，为什么伏地魔会在最终那场关于爱与死亡的决斗中，其失败是逻辑上的必然。电影对此的忽视，让最终的正邪对决，失去了一半的哲学与情感重量。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;尾声：真正的魔法，在书页之间&quot;&gt;尾声：真正的魔法，在书页之间&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#尾声：真正的魔法，在书页之间&quot;
   aria-label=&quot;Anchor link for: 尾声：真正的魔法，在书页之间&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;十四年前的那本绿皮书，为我开启了一个无比宏大、真实又迷人的世界。电影用华丽的视觉效果为我们造了一场梦，但梦醒之后，我们终将发现，那份真正能触动灵魂、陪伴我们成长的魔法，始终只存在于 J.K.罗琳的文字里。&lt;&#x2F;p&gt;
&lt;p&gt;如果你想认识真正的哈利·波特，认识那个庞大、深刻、充满了人性光辉与挣扎的魔法世界，我恳请你阅读原著。&lt;&#x2F;p&gt;
&lt;p&gt;真的，要看原著。&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 20px;&quot;&gt;
2025年6月19日晨 偶见视频有感而书
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>CS:S BHop 服务器部署</title>
      <pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/bhopserver/</link>
      <guid>https://www.aspchang.com/posts/bhopserver/</guid>
      <description xml:base="https://www.aspchang.com/posts/bhopserver/">&lt;h2 id=&quot;摘要&quot;&gt;摘要&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#摘要&quot;
   aria-label=&quot;Anchor link for: 摘要&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;本文旨在为 Counter-Strike: Source (CS:S) Bunny Hop (BHop) 专用服务器的搭建提供一套完整、标准化的操作流程。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;第一步：环境准备与_SteamCMD_初始化&quot;&gt;第一步：环境准备与 SteamCMD 初始化&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第一步：环境准备与_SteamCMD_初始化&quot;
   aria-label=&quot;Anchor link for: 第一步：环境准备与_SteamCMD_初始化&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;SteamCMD 是 Valve 提供的用于部署和维护专用服务器的命令行工具，是此流程的先决条件。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;目录创建&lt;&#x2F;strong&gt;：建立一个清晰的目录结构，建议在非系统盘创建主目录，例如 &lt;code&gt;D:\SRCDS&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SteamCMD 获取&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;在主目录下创建 &lt;code&gt;steamcmd&lt;&#x2F;code&gt; 子目录 (&lt;code&gt;~\steamcmd&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;从 Valve 官方服务器 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;steamcdn-a.akamaihd.net&#x2F;client&#x2F;installer&#x2F;steamcmd.zip&quot;&gt;下载 SteamCMD&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;将 &lt;code&gt;steamcmd.exe&lt;&#x2F;code&gt; 解压缩至上述 &lt;code&gt;steamcmd&lt;&#x2F;code&gt; 目录中&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;初始化&lt;&#x2F;strong&gt;：执行 &lt;code&gt;steamcmd.exe&lt;&#x2F;code&gt;：程序将自动完成更新与初始化，操作完成后，将进入 &lt;code&gt;Steam&amp;gt;&lt;&#x2F;code&gt; 命令行交互界面。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第二步：CS:S_专用服务器文件下载&quot;&gt;第二步：CS:S 专用服务器文件下载&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第二步：CS:S_专用服务器文件下载&quot;
   aria-label=&quot;Anchor link for: 第二步：CS:S_专用服务器文件下载&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;必须严格遵循指令顺序，以确保文件被部署到正确的指定位置。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;启动 &lt;code&gt;steamcmd.exe&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;在 &lt;code&gt;Steam&amp;gt;&lt;&#x2F;code&gt; 提示符后，依次执行以下指令：&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;&#x2F;&#x2F; 设定服务器文件的安装目录，此路径是相对于 steamcmd.exe 的相对路径
force_install_dir ..&#x2F;css_server&#x2F;

&#x2F;&#x2F; 使用匿名账户登录 Steam 公共服务器
login anonymous

&#x2F;&#x2F; 下载并校验 CS:S 专用服务器文件 (App ID: 232330)
app_update 232330 validate

&#x2F;&#x2F; 任务完成后，退出 SteamCMD
quit
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;执行完毕后，CS:S 服务器文件将被完整地部署在 &lt;code&gt;~\css_server\&lt;&#x2F;code&gt; 目录下。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;第三步：基础框架安装_(SourceMod_&amp;amp;_MetaMod:Source)&quot;&gt;第三步：基础框架安装 (SourceMod &amp;amp; MetaMod:Source)&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第三步：基础框架安装_(SourceMod_&amp;amp;_MetaMod:Source)&quot;
   aria-label=&quot;Anchor link for: 第三步：基础框架安装_(SourceMod_&amp;amp;_MetaMod:Source)&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;SourceMod 和 MetaMod:Source 是所有高级插件运行环境的基础依赖。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;资源获取&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MetaMod:Source&lt;&#x2F;strong&gt;: 从&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sourcemm.net&#x2F;downloads.php&quot;&gt;官方网站&lt;&#x2F;a&gt;下载适用于 Windows 的最新稳定版 (Stable)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;SourceMod&lt;&#x2F;strong&gt;: 从&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sourcemod.net&#x2F;downloads.php&quot;&gt;官方网站&lt;&#x2F;a&gt;下载适用于 Windows 的最新稳定版 (Stable)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;文件部署&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;分别解压已下载的两个压缩包&lt;&#x2F;li&gt;
&lt;li&gt;将解压后得到的 &lt;code&gt;addons&lt;&#x2F;code&gt; 和 &lt;code&gt;cfg&lt;&#x2F;code&gt; 两个文件夹，复制并合并到服务器的 &lt;code&gt;cstrike&lt;&#x2F;code&gt; 核心目录中&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;目标路径&lt;&#x2F;strong&gt;：&lt;code&gt;~\css_server\cstrike\&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第四步：核心插件部署：Shavit&amp;#39;s_Timer&quot;&gt;第四步：核心插件部署：Shavit&#x27;s Timer&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第四步：核心插件部署：Shavit&amp;#x27;s_Timer&quot;
   aria-label=&quot;Anchor link for: 第四步：核心插件部署：Shavit&amp;#x27;s_Timer&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Shavit&#x27;s Timer 是广泛采用的 BHop&#x2F;Surf 计时器插件，它提供了计时、排行榜、多风格支持及自动连跳等核心功能，推荐从其官方 GitHub 仓库获取最新版本。&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;shavitush&#x2F;bhoptimer&quot;
   data-github-repo=&quot;shavitush&amp;#x2F;bhoptimer&quot;
   aria-label=&quot;shavitush&amp;#x2F;bhoptimer on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;shavitush&amp;#x2F;bhoptimer&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;访问官方仓库&lt;&#x2F;strong&gt;：&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;shavitush&#x2F;bhoptimer&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;shavitush&#x2F;bhoptimer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;定位发行版本&lt;&#x2F;strong&gt;：在仓库页面右侧导航栏中，点击 &lt;strong&gt;&quot;Releases&quot;&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;下载&lt;&#x2F;strong&gt;：选择最新的发行版本，在下方的 &quot;Assets&quot; 区域中，下载针对 CS:S 的预编译包，文件名通常为 &lt;code&gt;bhoptimer-v3.x.x.zip&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;文件部署&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;解压已下载的 &lt;code&gt;bhoptimer-v3.x.x.zip&lt;&#x2F;code&gt; 文件&lt;&#x2F;li&gt;
&lt;li&gt;将其中的 &lt;code&gt;addons&lt;&#x2F;code&gt;, &lt;code&gt;cfg&lt;&#x2F;code&gt;, &lt;code&gt;maps&lt;&#x2F;code&gt; 等所有文件夹，复制并合并到服务器的 &lt;code&gt;cstrike&lt;&#x2F;code&gt; 核心目录中&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;目标路径&lt;&#x2F;strong&gt;：&lt;code&gt;~\css_server\cstrike\&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第五步：服务器配置&quot;&gt;第五步：服务器配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第五步：服务器配置&quot;
   aria-label=&quot;Anchor link for: 第五步：服务器配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h4 id=&quot;5.1_启动脚本配置&quot;&gt;5.1 启动脚本配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#5.1_启动脚本配置&quot;
   aria-label=&quot;Anchor link for: 5.1_启动脚本配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;在服务器根目录 (&lt;code&gt;~\css_server\&lt;&#x2F;code&gt;) 创建一个批处理文件 &lt;code&gt;start_server.bat&lt;&#x2F;code&gt;，内容如下：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;@echo off
cls
:start
echo Starting server...
srcds.exe -game cstrike +sv_lan 0 -tickrate 100 +maxplayers 16 +map bhop_lego2 -port 27015
echo.
echo Server process terminated. Restarting in 10 seconds.
timeout &#x2F;t 10 &#x2F;nobreak
goto start
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-tickrate 100&lt;&#x2F;code&gt;: 对 BHop 模式至关重要，可提供更平滑的物理模拟&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;+sv_lan 0&lt;&#x2F;code&gt;: 设定为公网服务器&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;+map bhop_lego2&lt;&#x2F;code&gt;: 定义初始加载地图&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;5.2_服务器参数配置&quot;&gt;5.2 服务器参数配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#5.2_服务器参数配置&quot;
   aria-label=&quot;Anchor link for: 5.2_服务器参数配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;在 &lt;code&gt;cstrike&#x2F;cfg&#x2F;&lt;&#x2F;code&gt; 目录下，创建或编辑 &lt;code&gt;server.cfg&lt;&#x2F;code&gt; 文件，此文件定义了服务器的主要运行参数&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;&#x2F;&#x2F; server.cfg - Main Server Configuration

&#x2F;&#x2F; --- General Information ---
hostname              &amp;quot;CSS BHop Server - Technical Deployment&amp;quot;
rcon_password         &amp;quot;YourComplexRCONPasswordHere&amp;quot; &#x2F;&#x2F; 必须设置为高强度密码

&#x2F;&#x2F; --- Core Gameplay Settings ---
sv_cheats             0       &#x2F;&#x2F; 插件正常工作的前提
sv_airaccelerate      150     &#x2F;&#x2F; BHop 核心参数，定义空中机动性
sv_enablebunnyhopping 1     &#x2F;&#x2F; 启用原生连跳支持
sv_autobunnyhopping   1     &#x2F;&#x2F; 启用原生自动连跳支持

&#x2F;&#x2F; --- Server Rules ---
mp_friendlyfire       0       &#x2F;&#x2F; 禁用友军伤害
mp_limitteams         0       &#x2F;&#x2F; 移除队伍人数限制
mp_autoteambalance    0       &#x2F;&#x2F; 禁用自动队伍平衡
mp_roundtime          0       &#x2F;&#x2F; 移除回合时间限制
mp_freezetime         0       &#x2F;&#x2F; 移除准备时间
sv_alltalk            1       &#x2F;&#x2F; 启用全局语音

&#x2F;&#x2F; --- Network &amp;amp; Resource Settings ---
sv_allowupload        1       &#x2F;&#x2F; 允许客户端上传自定义内容 (如喷漆)
sv_allowdownload      1       &#x2F;&#x2F; 允许客户端下载自定义内容 (如地图)
&#x2F;&#x2F; sv_downloadurl    &amp;quot;http:&#x2F;&#x2F;your.fastdl.host&#x2F;cstrike&#x2F;&amp;quot; &#x2F;&#x2F; (可选) 配置FastDL以加速资源下载

&#x2F;&#x2F; --- Ban List Execution ---
exec banned_user.cfg
exec banned_ip.cfg
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;第六步：地图资源部署&quot;&gt;第六步：地图资源部署&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第六步：地图资源部署&quot;
   aria-label=&quot;Anchor link for: 第六步：地图资源部署&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;获取地图&lt;&#x2F;strong&gt;：从 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gamebanana.com&#x2F;mods&#x2F;cats&#x2F;5568&quot;&gt;GameBanana&lt;&#x2F;a&gt; 等资源库获取 &lt;code&gt;.bsp&lt;&#x2F;code&gt; 格式的 BHop 地图文件&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;部署地图&lt;&#x2F;strong&gt;：将 &lt;code&gt;.bsp&lt;&#x2F;code&gt; 文件放置于 &lt;code&gt;cstrike&#x2F;maps&#x2F;&lt;&#x2F;code&gt; 目录&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;配置地图循环&lt;&#x2F;strong&gt;：编辑 &lt;code&gt;cstrike&#x2F;mapcycle.txt&lt;&#x2F;code&gt; 和 &lt;code&gt;cstrike&#x2F;maplist.txt&lt;&#x2F;code&gt;，每行添加一个地图名称（不含 &lt;code&gt;.bsp&lt;&#x2F;code&gt; 扩展名）&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第七步：网络配置与公网访问&quot;&gt;第七步：网络配置与公网访问&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第七步：网络配置与公网访问&quot;
   aria-label=&quot;Anchor link for: 第七步：网络配置与公网访问&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;为使服务器能从外部网络访问，必须在网络网关（路由器）上配置端口转发&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;登录路由器管理后台&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;定位端口转发 (Port Forwarding) 功能&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;创建转发规则&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;外部端口&lt;&#x2F;strong&gt;: &lt;code&gt;27015&lt;&#x2F;code&gt;, &lt;strong&gt;内部端口&lt;&#x2F;strong&gt;: &lt;code&gt;27015&lt;&#x2F;code&gt;, &lt;strong&gt;协议&lt;&#x2F;strong&gt;: &lt;code&gt;TCP&#x2F;UDP&lt;&#x2F;code&gt;, &lt;strong&gt;内部 IP&lt;&#x2F;strong&gt;: 服务器所在主机的局域网 IP 地址&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;外部端口&lt;&#x2F;strong&gt;: &lt;code&gt;27005&lt;&#x2F;code&gt;, &lt;strong&gt;内部端口&lt;&#x2F;strong&gt;: &lt;code&gt;27005&lt;&#x2F;code&gt;, &lt;strong&gt;协议&lt;&#x2F;strong&gt;: &lt;code&gt;UDP&lt;&#x2F;code&gt;, &lt;strong&gt;内部 IP&lt;&#x2F;strong&gt;: 服务器所在主机的局域网 IP 地址&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;防火墙策略&lt;&#x2F;strong&gt;：确保服务器主机的操作系统防火墙或任何安全软件已为 &lt;code&gt;srcds.exe&lt;&#x2F;code&gt; 创建入站和出站规则，允许上述端口的通信&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;第八步：启动与验证&quot;&gt;第八步：启动与验证&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第八步：启动与验证&quot;
   aria-label=&quot;Anchor link for: 第八步：启动与验证&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;执行&lt;&#x2F;strong&gt; &lt;code&gt;start_server.bat&lt;&#x2F;code&gt; 脚本启动服务器进程&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;本地验证&lt;&#x2F;strong&gt;：在 CS:S 客户端控制台中输入 &lt;code&gt;connect 127.0.0.1:27015&lt;&#x2F;code&gt; 进行连接测试&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;公网验证&lt;&#x2F;strong&gt;：其他用户可通过服务器的公网 IP 地址进行连接&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;至此，CS:S BHop 专用服务器已完成全部部署，处于可运行状态。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>为何 Rust 不在 编译器性能 上投入更多？</title>
      <pubDate>Wed, 11 Jun 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/rust-compiler/</link>
      <guid>https://www.aspchang.com/posts/rust-compiler/</guid>
      <description xml:base="https://www.aspchang.com/posts/rust-compiler/">&lt;p&gt;本文译自 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kobzol.github.io&#x2F;rust&#x2F;rustc&#x2F;2025&#x2F;06&#x2F;09&#x2F;why-doesnt-rust-care-more-about-compiler-performance.html&quot;&gt;Why doesn&#x27;t Rust care more about compiler performance?&lt;&#x2F;a&gt;，作者 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kobzol.github.io&#x2F;&quot;&gt;Kobzol&lt;&#x2F;a&gt;，译者 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;GEMILUXVII&quot;&gt;@GEMILUXVII&lt;&#x2F;a&gt;，原文发表于 2025 年 6 月 9 日。&lt;&#x2F;p&gt;
&lt;hr&#x2F;&gt;
&lt;p&gt;也许关于 Rust 最常被重复的抱怨就是其缓慢的反馈循环和漫长的编译时间。我经常听到这样的说法；在 Rust 播客、博客文章 (&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;loglog.games&#x2F;blog&#x2F;leaving-rust-gamedev&quot;&gt;blog&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;rtfeldman&#x2F;77fb430ee57b42f5f2ca973a3992532f&quot;&gt;posts&lt;&#x2F;a&gt;)、调查 (&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2025&#x2F;02&#x2F;13&#x2F;2024-State-Of-Rust-Survey-results&#x2F;#challenges&quot;&gt;surveys&lt;&#x2F;a&gt;)、会议演讲或线下讨论中。作为一名 Rust 用户，我自己也经常抱怨这一点！&lt;&#x2F;p&gt;
&lt;p&gt;最近，除了通常的编译时间抱怨之外，我也开始注意到沮丧的 Rust 开发者表达了以下观点：“为什么 Rust 项目对这个紧迫且已知的问题不够重视？为什么他们不采取一些措施呢？” 作为 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rust-lang.org&#x2F;governance&#x2F;teams&#x2F;compiler#team-wg-compiler-performance&quot;&gt;Rust 编译器性能工作组&lt;&#x2F;a&gt; 的一员，我非常重视这些问题，而且我当然对这个问题有一些看法。在这篇博客文章中，我想提供一些可能作为对这些（以及其他类似）问题的答案的想法。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;aside class=&quot;github-alert github-alert--important&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;IMPORTANT&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;免责声明：本文中表达的所有观点&lt;strong&gt;仅代表我个人&lt;&#x2F;strong&gt;，&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;

并不一定代表 Rust 项目（为 Rust 工具链做出贡献的各种贡献者和维护者）的更广泛观点&lt;&#x2F;p&gt;
&lt;h3 id=&quot;我们真的关心吗？&quot;&gt;我们真的关心吗？&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#我们真的关心吗？&quot;
   aria-label=&quot;Anchor link for: 我们真的关心吗？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;首先，请允许我向您保证——是的，我们（指的是 Rust 项目）&lt;em&gt;绝对关心&lt;&#x2F;em&gt;我们心爱的编译器的性能，并且我们投入了大量的精力来改进它。我们每周都会 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;this-week-in-rust.org&#x2F;blog&#x2F;2025&#x2F;05&#x2F;28&#x2F;this-week-in-rust-601&#x2F;#rust-compiler-performance-triage&quot;&gt;分类&lt;&#x2F;a&gt; 性能改进和回退。我们在每次 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pull&#x2F;141545#issuecomment-2908028887&quot;&gt;合并 PR&lt;&#x2F;a&gt; 后都会运行全面的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rustc-perf&quot;&gt;基准测试套件&lt;&#x2F;a&gt;。我们热情地欢迎任何性能改进（除非它们有复杂的权衡，稍后会详细介绍），并尝试快速恢复（或修复）引入性能回退的 PR。非常聪明的人不断致力于寻找瓶颈并 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nnethercote.github.io&#x2F;2025&#x2F;03&#x2F;19&#x2F;how-to-speed-up-the-rust-compiler-in-march-2025.html&quot;&gt;加速编译器&lt;&#x2F;a&gt;。并且一些旨在默认情况下更快编译的重大改进目前正在 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pull&#x2F;140525&quot;&gt;进行中&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;所有这些努力都显示出了成果；在过去的几年里，Rust 的构建性能有了很大的提高！当我们谈论长期趋势时，我们通常会展示 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;perf.rust-lang.org&#x2F;dashboard.html&quot;&gt;这个仪表板&lt;&#x2F;a&gt;，但我发现它有点枯燥，因为它平均了几个基准测试的结果，而且这些基准测试都很短，所以它们很快就开始遇到收益递减的情况。相反，我做了一个小实验来展示我最喜欢的测试对象 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;it4innovations&#x2F;hyperqueue&quot;&gt;hyperqueue&lt;&#x2F;a&gt; 的构建性能是如何演变的。我选取了它的第一次提交（2021 年 3 月 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;），并用几个不同的 Rust 编译器版本进行了编译，版本之间大约间隔 1 年 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。我是在一台配置相对一般的笔记本电脑上进行的，该笔记本电脑配备 8 个 AMD 核心，运行 Linux。以下是结果：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;code&gt;rustc&lt;&#x2F;code&gt; 版本&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;完整构建 [s]&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;增量重建 [s]&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;加速比 (完整构建)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;1.61.0&lt;&#x2F;code&gt; (2022 年 5 月)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;26.1s&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;~0.39&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;1.70.0&lt;&#x2F;code&gt; (2023 年 6 月)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;20.2s&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;~0.37&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.29x&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;1.78.0&lt;&#x2F;code&gt; (2024 年 5 月)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;17.0s&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;~0.30&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.53x&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;1.87.0&lt;&#x2F;code&gt; (2025 年 5 月)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;14.7s&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;~0.26&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.77x&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;在这个基准测试中，编译器比三年前快了近一倍。当然，这只是一个单一的数据点，在不同的情况下，加速效果可能会更大或更小，而且在其他平台上（x64 Linux 除外），加速效果通常会更小，因为我们花费了最多的精力来优化该特定目标。但事实仍然是，编译器的性能正在持续提高。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;但它仍然不够快&quot;&gt;但它仍然不够&lt;em&gt;快&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#但它仍然不够快&quot;
   aria-label=&quot;Anchor link for: 但它仍然不够快&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;现在，所有这些都很好，但这并不能改变这样一个事实：对于许多 Rust 开发者来说，编译性能仍然是一个很大的瓶颈，如果反馈循环能够快一个数量级（或更多），他们的生产力将会大大提高。公平地说，这取决于你问谁，例如，一些 C++ 开发者根本不介意 Rust 的编译时间，因为他们已经习惯了相同（或更糟）的构建时间，而 Python 程序员可能不会对 Rust 的反馈循环速度印象深刻。但毫不夸张地说，对于许多用户来说，今天的 Rust 编译速度仍然&lt;em&gt;不够快&lt;&#x2F;em&gt;，这是一个问题。&lt;&#x2F;p&gt;
&lt;p&gt;在我们更详细地检查这个问题之前，我认为有趣的是思考这个问题是否从根本上是可解决的，以及我们最终想要达到的最终目标是什么。凭借其复杂的类型系统、借用检查、单态化、过程宏和构建脚本、大型翻译单元、机器代码生成以及“从源代码重建整个世界”的编译模型，Rust 是否有可能实现近乎即时的（重新）构建速度？当它在 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.pingcap.com&#x2F;blog&#x2F;rust-compilation-model-calamity&#x2F;&quot;&gt;几乎每一个机会&lt;&#x2F;a&gt; 都倾向于运行时（而不是编译）性能的历史记录时？&lt;&#x2F;p&gt;
&lt;p&gt;我认为这取决于用例。如果我们谈论的是从头开始构建具有数百个依赖项的项目，或者进行超级彻底的 LTO 优化的发布版本构建，我认为我们永远不会达到构建真正&lt;em&gt;即时&lt;&#x2F;em&gt;的程度。另一方面，我个人相信（尽管其他人可能不同意！）在进行小的源代码更改后，拥有一个能够在增量（并且至少是适度优化的）模式下几乎立即重建任何大小的 Rust 项目的 Rust 编译器并非根本不可能，在这种模式下，重建真正是 &lt;code&gt;O(执行的更改数量)&lt;&#x2F;code&gt; 而不是 &lt;code&gt;O(代码库大小)&lt;&#x2F;code&gt;。我们可能需要做出一些权衡，尤其是在最终的运行时性能方面，但我认为我们可以实现这一目标。事实上，我们甚至可以看到一些已经可以实现类似效果的例子（目前在某些有限的场景下） &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;rust&#x2F;comments&#x2F;1j8z3yb&#x2F;media_dioxus_subsecond_rust_hotpatch_engine&#x2F;&quot;&gt;今天&lt;&#x2F;a&gt;！&lt;&#x2F;p&gt;
&lt;p&gt;而且，我们并非没有关于如何（至少更接近）实现这一目标的想法。有几种“北极星”方法可以以各种方式加速编译过程，例如 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2023&#x2F;11&#x2F;09&#x2F;parallel-rustc&#x2F;&quot;&gt;并行前端&lt;&#x2F;a&gt;、替代 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rustc_codegen_cranelift&quot;&gt;代码生成后端&lt;&#x2F;a&gt;、默认使用 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2024&#x2F;05&#x2F;17&#x2F;enabling-rust-lld-on-linux&#x2F;&quot;&gt;更快的链接器&lt;&#x2F;a&gt;、延迟代码生成 (&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;issues&#x2F;38913&quot;&gt;仅 MIR 的 rlib&lt;&#x2F;a&gt;、&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;compiler-team&#x2F;issues&#x2F;829&quot;&gt;-Zhint-mostly-unused&lt;&#x2F;a&gt;)、 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;compiler-team&#x2F;issues&#x2F;790&quot;&gt;避免无用的工作区重建&lt;&#x2F;a&gt;、更智能的增量编译（包括 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;davidlattimore&#x2F;wild&quot;&gt;增量链接&lt;&#x2F;a&gt; 甚至二进制热补丁）等等。&lt;&#x2F;p&gt;
&lt;p&gt;其中一些方法尚未为广泛使用做好准备，但另一些已经准备就绪，您今天就可以 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Kobzol&#x2F;cargo-wizard&quot;&gt;选择使用&lt;&#x2F;a&gt; 它们。它们通常（但并非总是）有帮助。我相信，如果我们拥有一根魔杖，并且今天就能实现所有这些更改，那么对于很大一部分（肯定比现在大得多）Rust 项目来说，我们可以获得非常快速的增量重建。&lt;&#x2F;p&gt;
&lt;p&gt;这不仅仅是更广泛的 Rust 社区会受益于此。提高构建性能也会使 Rust 工具链贡献者本身的工作效率更高。当对编译器进行更改时，它可以减少构建编译器本身所需的时间，加快我们的 CI 工作流程，减少我们等待测试和编译器性能基准测试的时间……每个人都会受益！那么是什么阻碍我们更快地取得进展呢？&lt;del&gt;为什么我们不采取一些措施呢？&lt;&#x2F;del&gt; &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;那么为什么我们做得不够多呢？&quot;&gt;那么为什么我们做得不够多呢？&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#那么为什么我们做得不够多呢？&quot;
   aria-label=&quot;Anchor link for: 那么为什么我们做得不够多呢？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;这是一个棘手的问题，没有简单的答案。我将尝试基于我个人在 Rust 项目中的工作经验，提供各种我认为我们进展不够快的原因（顺序大致随意）。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;技术原因&quot;&gt;技术原因&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#技术原因&quot;
   aria-label=&quot;Anchor link for: 技术原因&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;首先，让我们从技术原因开始，这在某种程度上是最直接的。简而言之，对 Rust 编译器的性能进行非微小的改进是很困难的！这是一个庞大的代码库 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，正如所有大型（编译器）代码库一样，它有很多技术&lt;del&gt;债务&lt;&#x2F;del&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jyn.dev&#x2F;technical-debt-is-different-from-technical-risk&quot;&gt;风险&lt;&#x2F;a&gt;，尽管我们提供了 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rustc-dev-guide.rust-lang.org&quot;&gt;贡献指南&lt;&#x2F;a&gt;，但仍然需要时间才能理解发生了什么。事实上，可能没有一个人完全理解整个编译器代码库（也许除了 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pulls?q=is%3Apr+author%3Acompiler-errors+is%3Amerged&quot;&gt;compiler-errors&lt;&#x2F;a&gt; :laughing:）。&lt;&#x2F;p&gt;
&lt;p&gt;虽然即使不深入理解编译器的工作原理，也可以通过分析和微优化其各个部分来改进性能，但这种方法只能让你走这么远，而且大部分唾手可得的果实已经被摘走了 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。为了在各种基准测试和用例中达到“局部性能最小值”，很多东西都经过了优化和过度拟合，因此即使对某些用例进行了改进，它通常也会导致其他方面的性能下降，这可能会导致该局部改进不被接受。&lt;&#x2F;p&gt;
&lt;p&gt;在决定是否采纳某些性能优化时，我们还必须考虑各种权衡。例如，我们知道一些可以使编译器在最流行的目标 x64 Linux 上更快一点的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kobzol.github.io&#x2F;rust&#x2F;rustc&#x2F;2023&#x2F;10&#x2F;21&#x2F;make-rust-compiler-5percent-faster.html&quot;&gt;技巧&lt;&#x2F;a&gt;。我们可以使用对“更新”指令集架构（例如 AVX256）的支持来编译 &lt;code&gt;rustc&lt;&#x2F;code&gt;，这似乎提供了一些 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;perf.rust-lang.org&#x2F;compare.html?start=2efb0cd4b2240c878c36112a5ec207837c15928a&amp;amp;end=18256ff35e7885ae108986756552f14a16d240d0&amp;amp;stat=instructions:u&quot;&gt;提升&lt;&#x2F;a&gt;。然而，这意味着编译器将无法在仍在 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2022&#x2F;08&#x2F;01&#x2F;Increasing-glibc-kernel-requirements&#x2F;&quot;&gt;官方支持&lt;&#x2F;a&gt; 的旧 x64 CPU 上运行！或者我们可以使用不同的内存分配器（例如 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;purpleprotocol&#x2F;mimalloc_rust&quot;&gt;mimalloc&lt;&#x2F;a&gt;），这似乎也提供了一些适度的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;perf.rust-lang.org&#x2F;compare.html?start=6c8347b9588a302afebb81a1ae6daa64ec37abd0&amp;amp;end=2ae4c6dae2c8206758e06df89d1da08c5eb52f11&amp;amp;stat=instructions:u&quot;&gt;性能提升&lt;&#x2F;a&gt;，但代价是 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;perf.rust-lang.org&#x2F;compare.html?start=6c8347b9588a302afebb81a1ae6daa64ec37abd0&amp;amp;end=2ae4c6dae2c8206758e06df89d1da08c5eb52f11&amp;amp;stat=max-rss&quot;&gt;内存使用量增加&lt;&#x2F;a&gt;，这可能会导致 &lt;code&gt;rustc&lt;&#x2F;code&gt; 在 RAM 较小的设备上发生 OOM。也许你会想，为什么我们不能为同一个目标发布多个具有不同优化的编译器版本，然后让人们（或 &lt;code&gt;rustup&lt;&#x2F;code&gt;）选择使用哪个版本？好吧，仅仅为 Linux 构建最优化变体的编译器现在已经消耗了大量的 CI 资源，更不用说以多种变体分发工具链可能会使我们通过网络发送给用户的数据量膨胀，而这已经非常庞大了。到处都存在权衡。&lt;&#x2F;p&gt;
&lt;p&gt;我认为要实现真正显著的构建性能提升，主要有两种方法。第一种方法，我发现非常有前途，是改进某些编译工作流程。如果我们能够极大地提高目前限制了大部分 Rust 开发者生产力的特定工作流程的性能（或减少所需的工作量），我们不一定需要使整个编译器都更快。这方面的一个例子是 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;compiler-team&#x2F;issues&#x2F;790&quot;&gt;重新链接，而不是重新构建&lt;&#x2F;a&gt; 的提议，它有可能减少在大型 Cargo 工作区中修改 crate 时必须执行的编译量。像这样的方法本身并不一定使编译器更快，而是使编译过程更智能，而这正是 &lt;code&gt;rustc&lt;&#x2F;code&gt; 可以大幅改进的领域。许多这些潜在的工作流程改进也不仅仅与编译器本身严格相关，而是发生在 &lt;code&gt;rustc&lt;&#x2F;code&gt; 和所使用的构建系统（最常见的是 Cargo）的交汇处。&lt;&#x2F;p&gt;
&lt;p&gt;我希望在短期到中期内，这些想法中的一部分能够使最常见的 Rust 编译工作流程更快得多，而无需对编译器的实现进行大规模更改。然而，即使是这种有针对性的优化也不容易实现。通过概念验证实现令人印象深刻的性能提升是“简单”的部分。但随后而来的是漫长而艰巨的后续工作——确保你的更改支持 Rust 编译过程的所有边缘情况和怪癖，适用于所有目标，不会导致重要的用例和基准测试性能下降，不是维护的噩梦，保持向后兼容性等等。&lt;&#x2F;p&gt;
&lt;p&gt;正如你可能已经猜到的，第二种方法是对编译器的实现进行大规模的更改和&#x2F;或重构。然而，由于一些原因，这当然具有挑战性。首先，你需要通过一个 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rfcs&#x2F;blob&#x2F;master&#x2F;text&#x2F;2904-compiler-major-change-process.md&quot;&gt;重大变更提案&lt;&#x2F;a&gt; 与编译器团队的其他成员进行&quot;氛围检查&quot; &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，以确保其他编译器维护者同意你进行如此重大的变更。然后，你显然需要实现这些变更，这可能需要大量的精力。例如，如果你更改了编译器&quot;底层&quot;的某个部分，那么你将需要检查数百个地方并进行修复，并且还可能需要修复许多测试用例，这可能非常耗时 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。你还需要找到有空闲时间的审阅者来批准你的更改，这可能跨越许多 PR，耗时数周、数月甚至数年。&lt;&#x2F;p&gt;
&lt;p&gt;执行大型的跨领域更改也很棘手，因为它必然会与在此期间对编译器进行的其他许多更改发生冲突。你可以尝试在主编译器树之外执行修改，但这几乎注定要失败，因为编译器变化太快了 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。或者，你可以尝试将所有更改放在一个巨大的 PR 中，这可能会导致无休止的 rebase（并且可能使寻找审阅者更加困难）。或者，你需要逐步进行迁移，这可能需要长时间维护同一事物的两个独立实现，这可能会令人疲惫。&lt;&#x2F;p&gt;
&lt;p&gt;一个大型内部更改的例子（尽管它并非&lt;em&gt;直接&lt;&#x2F;em&gt;与性能相关）是编译器 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;trait-system-refactor-initiative&quot;&gt;trait 解析器&lt;&#x2F;a&gt; 的重新实现。即使它是由非常聪明且技术极其娴熟的人员开发的，这个过程也需要&lt;em&gt;数年&lt;&#x2F;em&gt;才能完成。这就是如果我们想要对编译器内部进行一些大规模重构的规模，它应该为那些问我们什么时候才能使用 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=IroPQ150F6c&quot;&gt;面向数据设计&lt;&#x2F;a&gt; 重写整个编译器以使其速度快上无数倍的人们设定一个预期。&lt;&#x2F;p&gt;
&lt;p&gt;说到 DoD，还需要考虑编译器代码库的可维护性。想象一下，我们再次挥动魔法棒，一夜之间使用 DoD、SIMD 向量化、手写汇编等重写了一切。它（可能）会快得多，太棒了！然而，我们不仅关心眼前的性能，还关心我们进行长期改进的能力。如果我们过度拟合性能，使用了难以演进、理解、调试或维护的代码，从长远来看，这对我们不利。编译器接受来自数百名志愿者的贡献，我们希望代码库对他们来说（至少在某种程度上）是容易理解的。因此，代码库的长期可维护性也是我们需要考虑的事情。&lt;&#x2F;p&gt;
&lt;p&gt;虽然上面提出的挑战非常真实，但它们当然并非 &lt;code&gt;rustc&lt;&#x2F;code&gt; 所&lt;em&gt;独有&lt;&#x2F;em&gt;的。对大型（编译器）代码库进行重大更改很困难的事实可能并不令人惊讶。我相信 GCC&#x2F;LLVM&#x2F;Clang 的维护者也有很多关于如何改进或加速的想法，但这需要大量的努力和时间才能完成。但编译器性能并非我们唯一关注的事情，还有其他原因。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;优先级&quot;&gt;优先级&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#优先级&quot;
   aria-label=&quot;Anchor link for: 优先级&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;尽管许多 Rust 用户似乎希望编译器性能成为 Rust 项目的首要优先事项，但我们不应忘记我们还必须牢记其他优先级。&lt;&#x2F;p&gt;
&lt;p&gt;Rust 编译器（至少在我看来）非常稳定和可靠，我可以指望每六周发布一个新版本。这绝非易事！我们不应将其视为理所当然。这并非仅仅从一个可以工作的状态开始，然后什么都不做就能实现的。仅仅为了确保一切正常运行，我们的基础设施和 CI 工作正常，真正糟糕的错误得到及时修复，收到的问题得到分类，向后兼容性得到维护，PR 得到审查，安全问题得到快速解决，我们紧跟 LLVM 等外部依赖项的变化等等，都需要大量的工作。我们还必须确保所有这些都能在我们所有 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;nightly&#x2F;rustc&#x2F;platform-support.html&quot;&gt;支持的目标&lt;&#x2F;a&gt; 上运行！目前，这是 8 个一级目标（必须构建成功且所有测试都通过）和 91 个（！）二级目标（必须至少构建成功）。很大程度上，这项工作是由那些非常关心 Rust 及其工具链(:heart:)并希望它像以前一样良好地运行的志愿者完成的。Rust 上简直有大量的工作要做 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;所有这些工作当然会占用原本可以用来例如加速编译器的时间。如果你认为这项工作并不那么重要，那么问问自己，如果你的编译器速度快了一倍，但开始随机错误编译你的代码，你是否会喜欢？:)&lt;&#x2F;p&gt;
&lt;p&gt;另一件事是，语言和编译器都在不断地获得新特性。新的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;compiler-team&#x2F;issues&#x2F;748&quot;&gt;编译器标志&lt;&#x2F;a&gt; 以支持像 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-for-linux.com&#x2F;&quot;&gt;Rust for Linux&lt;&#x2F;a&gt; 这样的项目、 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pull&#x2F;132833&quot;&gt;语法改进&lt;&#x2F;a&gt;、 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pull&#x2F;132706&quot;&gt;复杂的语言特性&lt;&#x2F;a&gt; 以及许多其他东西。总的来说，这门语言似乎远未“完成”，很多事情都在进行中；几乎有 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rfcs&#x2F;pulls?q=is%3Aopen+is%3Apr+-label%3Anot-rfc+&quot;&gt;200 个开放的 RFC 拉取请求&lt;&#x2F;a&gt;，还有许多其他的 RFC 被接受了，但尚未实现或稳定下来。在任何给定时间，我们在主要的 Rust 仓库中都有大约 700 个 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pulls&quot;&gt;打开的 PR&lt;&#x2F;a&gt;，超过 1 万个 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;issues&quot;&gt;打开的 issue&lt;&#x2F;a&gt;，简直有太多事情在发生了。&lt;&#x2F;p&gt;
&lt;p&gt;而且 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2025&#x2F;02&#x2F;13&#x2F;2024-State-Of-Rust-Survey-results&#x2F;what-do-you-think-about-rust-evolution.png&quot;&gt;似乎&lt;&#x2F;a&gt; Rust 用户希望 Rust 像今天一样快速发展，甚至更快，这意味着更多的变化！你上次“只是希望这个小的特性 X 最终稳定下来”，以便让你的代码更漂亮是什么时候？想要一门语言的新特性是完全可以的，但我们不应忘记（除其他事项外，如设计讨论）这需要在编译器中进行大量的实验、重构、bug 修复、测试和实现工作，这又会占用优化性能的时间。更不用说添加新特性通常会使编译器性能略微下降，因为它往往会做更多的工作，而不是相反。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;贡献者&quot;&gt;贡献者&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#贡献者&quot;
   aria-label=&quot;Anchor link for: 贡献者&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;最后，花费在优化编译器性能上的努力量最终取决于为此做出贡献和维护它的人。他们通常是志愿者，并且有着不同的兴趣。一些（编译器）贡献者根本对性能优化不感兴趣，这完全没问题！请记住， &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.m-ou.se&#x2F;rust-is-not-a-company&#x2F;&quot;&gt;Rust 不是一家公司&lt;&#x2F;a&gt;（这是 Mara Bos 的一篇很棒的博客文章，我建议你去读一下！）。我们不会告诉人们他们应该做什么，也不会给他们分配任务或 issue。如果没有人对加速编译器感兴趣，那么它很可能不会完成，就这么简单。&lt;&#x2F;p&gt;
&lt;p&gt;也就是说，我们可以通过某些方式来&lt;em&gt;赋能&lt;&#x2F;em&gt;人们从事编译器性能工作。Rust 项目现在有了 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2024&#x2F;08&#x2F;12&#x2F;Project-goals&#x2F;&quot;&gt;项目目标&lt;&#x2F;a&gt; 计划，该计划指定了一系列我们认为重要的目标和项目，我们明确欢迎在这些领域做出贡献（并承诺提供审查和支持）。我打算在不久的将来将编译器性能作为旗舰目标之一，因为我认为它确实应该成为其中之一。这或许可以激励更多的人参与进来。&lt;&#x2F;p&gt;
&lt;p&gt;即使这听起来有点老生常谈，更快地取得进展也（至少部分地）取决于资金。有时我会听到人们抱怨某些旨在提高编译性能的项目需要太长时间才能准备就绪。这听起来好像他们期望有一个由薪水丰厚的工程师组成的全职团队在从事这些项目。好吧，我们不应该忘记 Rust 项目仍然主要依靠志愿者，许多人都在业余时间为其做出贡献。Rust 的许多改进（包括一些重要的编译器性能项目）实际上是由一个不知疲倦地让 Rust 变得更好的大学学生推动的，他们甚至可能没有因此获得任何报酬，而进展停滞的原因可能是（例如）他们必须完成大学考试或做一些实际的带薪工作，以便能够支付房租和食物。&lt;&#x2F;p&gt;
&lt;p&gt;在最近的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rustweek.org&#x2F;&quot;&gt;RustWeek&lt;&#x2F;a&gt; 会议和相关的全体会议活动中，我看到越来越多的公司对投资改进 Rust 编译器的性能表现出兴趣，这很棒！改进 &lt;code&gt;rustc&lt;&#x2F;code&gt; 的性能需要长期集中的努力，为从事这项工作的贡献者提供稳定的资金绝对是我们加快进展的方法之一。然而，重要的是，做出改进不仅仅是做实现工作；还需要有人来审查它，然后在将来维护它。在理想的世界中，公司会资助编译器维护的长期持续工作，而不是支付员工实施一个解决他们痛点的优化然后消失。有时，帮助 Rust 向前发展的最佳方式不是去实现它，而是积累知识，成为某个编译器领域的专家，并帮助审查其他人的代码，以便你可以让其他人能够完成实际工作:) 但这当然需要长期的投资（包括时间和金钱）。&lt;&#x2F;p&gt;
&lt;p&gt;根据我的经验，Rust 编译器贡献者对从事编译器性能工作的兴趣与这个话题在网上引发的讨论量并不相符（而且，这也没关系！）。如果我再次使用魔法棒，并且可以说服更多的贡献者关心这个问题，我会这样做吗？可能会的。从长远来看，这对 Rust 来说是好事吗？我不知道！到目前为止，语言和编译器的发展似乎进展顺利，我又有什么资格来决定优先级呢？我相信项目中的人们会共同做出对 Rust 现在和未来最好的决定。&lt;&#x2F;p&gt;
&lt;p&gt;我觉得有趣的一点是，也许更多的人实际上会从事性能工作，如果他们不必同时处理那么多其他事情的话。举个例子：当我 2021 年开始为 Rust 做出贡献时，我的主要兴趣是编译器性能。所以我开始做一些优化工作。然后我注意到 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rustc-perf&quot;&gt;编译器基准测试套件&lt;&#x2F;a&gt; 需要一些维护，所以我开始着手处理它。然后我注意到我们没有使用尽可能多的优化来编译编译器本身，所以我开始添加对 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kobzol.github.io&#x2F;rust&#x2F;rustc&#x2F;2022&#x2F;10&#x2F;27&#x2F;speeding-rustc-without-changing-its-code.html&quot;&gt;LTO&#x2F;PGO&#x2F;BOLT&lt;&#x2F;a&gt; 的支持，这进一步导致了我们 CI 基础设施的改进。然后我注意到我们的 CI 工作流程需要很长时间，所以我开始 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kobzol.github.io&#x2F;rust&#x2F;rustc&#x2F;2023&#x2F;07&#x2F;30&#x2F;optimizing-rust-ci-2023.html&quot;&gt;优化它们&lt;&#x2F;a&gt;。然后我开始运行 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rust-lang.org&#x2F;governance&#x2F;teams&#x2F;launching-pad#team-community-survey&quot;&gt;Rust 年度调查&lt;&#x2F;a&gt;，然后是我们的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2025&#x2F;05&#x2F;08&#x2F;gsoc-2025-selected-projects&#x2F;&quot;&gt;GSoC 项目&lt;&#x2F;a&gt;，然后改进我们的 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;bors&quot;&gt;bot&lt;&#x2F;a&gt;，然后…… 许多这些贡献（至少我希望）以某种间接的方式影响了编译器的性能，要么是通过解除或支持其他贡献者，要么是通过改进我们的基础设施（就这个词的各种含义而言）。然而，直到现在，在几年分心之后，我终于试图回到直接的编译器性能工作。&lt;&#x2F;p&gt;
&lt;p&gt;换句话说，我们在维护 Rust 方面获得的帮助越多（无论在哪个具体领域！），我们集体拥有更多时间来改进编译器性能的机会就越大:)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;结论&quot;&gt;结论&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#结论&quot;
   aria-label=&quot;Anchor link for: 结论&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;有趣的是，在我写完这篇文章后，我意识到我几乎可以用任何其他人们对 Rust 的期望（“为什么 Rust 不做 X”）来替换“编译器性能”这个术语，而许多相同的推理仍然适用。在这方面，编译器性能并没有那么特殊，它只是我们关心并尽力改进的（众多）非常重要的事情之一。&lt;&#x2F;p&gt;
&lt;p&gt;就未来的编译器性能工作而言，我对在全体会议上讨论的几个倡议以及 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pull&#x2F;140525&quot;&gt;使 LLD 成为 Linux 上的默认链接器&lt;&#x2F;a&gt; 持乐观态度，后者有望在未来几个月内最终落地。我还计划 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;surveys&#x2F;pull&#x2F;337&quot;&gt;很快&lt;&#x2F;a&gt; 进行一次编译器性能调查，以便我们可以了解哪些工作流程导致 Rust 用户的瓶颈，我还想构建更好的基础设施来分析编译器在编译过程中实际在做什么。&lt;&#x2F;p&gt;
&lt;p&gt;我希望这篇博客文章能让您对为什么在构建性能方面取得进展如此不易有所了解。如果您想加入我们并为此做出贡献，我们 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rustc-dev-guide.rust-lang.org&#x2F;&quot;&gt;非常欢迎您的到来&lt;&#x2F;a&gt;！请在 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;rust&#x2F;comments&#x2F;1l77jso&#x2F;why_doesnt_rust_care_more_about_compiler&quot;&gt;Reddit&lt;&#x2F;a&gt; 上告诉我您的想法。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;我使用了一个较旧的提交，这样即使使用较旧版本的 &lt;code&gt;rustc&lt;&#x2F;code&gt; 也能编译&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;幸运的是，我最近的 &lt;a href=&quot;https:&#x2F;&#x2F;kobzol.github.io&#x2F;rust&#x2F;rustc&#x2F;2025&#x2F;05&#x2F;16&#x2F;evolution-of-rustc-errors.html&quot;&gt;编译器错误实验&lt;&#x2F;a&gt; 中下载的所有稳定编译器版本我都还在 😅&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;抱歉，忍不住&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;4&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;4&lt;&#x2F;sup&gt;
&lt;p&gt;至少对于某些&quot;大型&quot;的定义而言。编译器包含大约 60 万行 Rust 代码，标准库的大小也差不多&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;5&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;5&lt;&#x2F;sup&gt;
&lt;p&gt;但并非所有。看看最近这个 PR 的 &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pull&#x2F;142095&quot;&gt;亮点&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;6&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;6&lt;&#x2F;sup&gt;
&lt;p&gt;我最近看到有人称之为 &lt;em&gt;vibeck&lt;&#x2F;em&gt;（以编译器中使用的 typeck 和 borrowck 的缩写命名），我觉得非常可爱&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;7&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;7&lt;&#x2F;sup&gt;
&lt;p&gt;如果你认为&quot;为什么 AI 不能做到这一点？&quot;，它可能可以在这方面帮助很多，但尤其是在编译器诊断方面的差异（这占据了我们测试套件很大一部分检查内容）通常归结为我们仍然（幸运地）留给人类的判断&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;8&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;8&lt;&#x2F;sup&gt;
&lt;p&gt;平均而言，我们每天合并大约 25-30 个 PR &lt;a href=&quot;https:&#x2F;&#x2F;rust-lang.github.io&#x2F;rustc-pr-tracking&#x2F;&quot;&gt;每个工作日&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;9&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;9&lt;&#x2F;sup&gt;
&lt;p&gt;我喜欢说，如果你给我一百名全职工程师，我立刻就能在 Rust 工具链中找到所有人都需要做的工作&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>Windows 上的 Rust：拥抱 GNU 工具链——MSVC 之外的选择</title>
      <pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/rustchains/</link>
      <guid>https://www.aspchang.com/posts/rustchains/</guid>
      <description xml:base="https://www.aspchang.com/posts/rustchains/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;当你在 Windows 上进行 Rust 开发时，&lt;code&gt;rustup&lt;&#x2F;code&gt; 默认会为你配置 Microsoft Visual C++（MSVC）工具链。这通常是一个很好的选择，因为它与 Windows 生态系统紧密集成，并且与使用 Visual Studio 构建的 C&#x2F;C++ 库具有良好的 ABI 兼容性。&lt;&#x2F;p&gt;
&lt;p&gt;但是，如果你有以下情况，可能需要或更倾向于使用 GNU 工具链（通常通过 MinGW-w64 实现）：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;你不想安装庞大的 Visual Studio C++ Build Tools；&lt;&#x2F;li&gt;
&lt;li&gt;你已经熟悉或正在使用 MinGW&#x2F;MSYS2 环境进行其他开发工作；&lt;&#x2F;li&gt;
&lt;li&gt;你的项目有特定依赖或需要 GCC 特有的功能；&lt;&#x2F;li&gt;
&lt;li&gt;你希望编译的二进制文件依赖于系统自带的 &lt;code&gt;msvcrt.dll&lt;&#x2F;code&gt;（GNU 工具链的常见行为）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;好消息是，Rust 的工具链管理器 &lt;code&gt;rustup&lt;&#x2F;code&gt; 非常灵活，让你能够轻松安装和切换到 GNU 工具链。这篇博文将指导你完成整个过程。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;为什么默认是_MSVC？&quot;&gt;&lt;strong&gt;为什么默认是 MSVC？&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#为什么默认是_MSVC？&quot;
   aria-label=&quot;Anchor link for: 为什么默认是_MSVC？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;在我们深入 GNU 世界之前，简单了解一下 MSVC 为何是 Windows 上的默认选择：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;原生集成&lt;&#x2F;strong&gt;：MSVC 是 Windows 平台原生的 C&#x2F;C++ 编译器和链接器。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ABI 兼容性&lt;&#x2F;strong&gt;：使用 MSVC 工具链编译的 Rust 代码可以更容易地与使用 Visual Studio 编译的 C&#x2F;C++ 库链接。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;调试体验&lt;&#x2F;strong&gt;：与 Visual Studio Debugger 的集成通常更无缝。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;步骤_1：安装_Rust（如果尚未安装）&quot;&gt;&lt;strong&gt;步骤 1：安装 Rust（如果尚未安装）&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#步骤_1：安装_Rust（如果尚未安装）&quot;
   aria-label=&quot;Anchor link for: 步骤_1：安装_Rust（如果尚未安装）&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;如果你是 Rust 新手，首先需要安装 &lt;code&gt;rustup&lt;&#x2F;code&gt;。访问 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rustup.rs&#x2F;&quot;&gt;https:&#x2F;&#x2F;rustup.rs&#x2F;&lt;&#x2F;a&gt; 并按照说明进行操作。在安装过程中，如果检测到已安装 Visual Studio C++ Build Tools，&lt;code&gt;rustup&lt;&#x2F;code&gt; 可能会默认选择 MSVC 工具链。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;步骤_2：检查当前已安装的_Rust_工具链&quot;&gt;&lt;strong&gt;步骤 2：检查当前已安装的 Rust 工具链&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#步骤_2：检查当前已安装的_Rust_工具链&quot;
   aria-label=&quot;Anchor link for: 步骤_2：检查当前已安装的_Rust_工具链&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;打开你的命令行工具（CMD、PowerShell、Git Bash 等），运行以下命令来查看当前已安装和默认的工具链：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;rustup toolchain list
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;你可能会看到类似这样的输出：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;stable-x86_64-pc-windows-msvc (default)
nightly-x86_64-pc-windows-msvc
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里的 &lt;code&gt;(default)&lt;&#x2F;code&gt; 指明了当前 Cargo 命令会使用的工具链。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;步骤_3：安装_MinGW-w64_GCC（GNU_工具链的_C&#x2F;C++_编译器基础）&quot;&gt;&lt;strong&gt;步骤 3：安装 MinGW-w64 GCC（GNU 工具链的 C&#x2F;C++ 编译器基础）&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#步骤_3：安装_MinGW-w64_GCC（GNU_工具链的_C&amp;#x2F;C++_编译器基础）&quot;
   aria-label=&quot;Anchor link for: 步骤_3：安装_MinGW-w64_GCC（GNU_工具链的_C&amp;#x2F;C++_编译器基础）&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;rustup&lt;&#x2F;code&gt; 负责管理 Rust 自身的工具链部分，但它不包含完整的 C&#x2F;C++ 编译环境。要使用带有原生 C&#x2F;C++ 依赖的 Rust GNU 项目，你需要一个可用的 MinGW-w64 GCC 编译器。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;推荐方式：通过 MSYS2 安装 MinGW-w64&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;MSYS2 提供了一个强大的 Unix-like 环境和包管理器（&lt;code&gt;pacman&lt;&#x2F;code&gt;），是获取和管理 MinGW-w64 工具链的优秀方式。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;下载并安装 MSYS2&lt;&#x2F;strong&gt;：访问 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.msys2.org&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.msys2.org&#x2F;&lt;&#x2F;a&gt; 下载安装程序并完成安装。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;打开 MSYS2 MinGW 64-bit 终端&lt;&#x2F;strong&gt;：从开始菜单找到并运行“MSYS2 MinGW 64-bit”（或“MSYS2 MinGW x64”）。&lt;strong&gt;重要的是使用 MinGW 变种的终端，而不是基础的 MSYS 终端，以确保环境变量正确设置。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更新包数据库和核心包&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pacman -Syu
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果更新程序提示关闭终端，请重新打开 MSYS2 MinGW 64-bit 终端，再次运行：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pacman -Syu
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 MinGW-w64 GCC 工具链&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;# 对于 64-bit Rust（最常见）
pacman -S mingw-w64-x86_64-gcc

# 如果你需要 32-bit Rust 的 GNU 工具链
# pacman -S mingw-w64-i686-gcc
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;将 MinGW-w64 的 &lt;code&gt;bin&lt;&#x2F;code&gt; 目录添加到系统 &lt;code&gt;PATH&lt;&#x2F;code&gt;（重要）&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;rustup&lt;&#x2F;code&gt; 和 Cargo 需要能够找到 &lt;code&gt;gcc.exe&lt;&#x2F;code&gt;。你需要将 MinGW-w64 的 &lt;code&gt;bin&lt;&#x2F;code&gt; 目录添加到 Windows 系统的 &lt;code&gt;PATH&lt;&#x2F;code&gt; 环境变量中。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;如果 MSYS2 安装在 &lt;code&gt;C:\msys64&lt;&#x2F;code&gt;，那么 64 位工具链的路径通常是 &lt;code&gt;C:\msys64\mingw64\bin&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;对于 32 位工具链，路径通常是 &lt;code&gt;C:\msys64\mingw32\bin&lt;&#x2F;code&gt;
编辑系统环境变量，将此路径添加到 &lt;code&gt;Path&lt;&#x2F;code&gt; 变量中。更改后需要重新打开命令行，必要时重启计算机。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;strong&gt;其他方式安装 MinGW-w64&lt;&#x2F;strong&gt;：
你也可以从其他来源下载独立的 MinGW-w64 安装包（例如从 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;winlibs.com&#x2F;&quot;&gt;winlibs.com&lt;&#x2F;a&gt; 获取预编译包），并确保将其 &lt;code&gt;bin&lt;&#x2F;code&gt; 目录添加到系统 &lt;code&gt;PATH&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;步骤_4：使用_rustup_安装_Rust_的_GNU_工具链&quot;&gt;&lt;strong&gt;步骤 4：使用 &lt;code&gt;rustup&lt;&#x2F;code&gt; 安装 Rust 的 GNU 工具链&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#步骤_4：使用_rustup_安装_Rust_的_GNU_工具链&quot;
   aria-label=&quot;Anchor link for: 步骤_4：使用_rustup_安装_Rust_的_GNU_工具链&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;现在你已经有了一个可用的 GCC 编译器，可以让 &lt;code&gt;rustup&lt;&#x2F;code&gt; 安装对应的 Rust GNU 工具链：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于 64 位 Windows 上的 GNU 工具链（&lt;code&gt;x86_64-pc-windows-gnu&lt;&#x2F;code&gt; target）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;rustup toolchain install stable-x86_64-pc-windows-gnu
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;（你可以将 &lt;code&gt;stable&lt;&#x2F;code&gt; 替换为 &lt;code&gt;beta&lt;&#x2F;code&gt;、&lt;code&gt;nightly&lt;&#x2F;code&gt; 或特定版本号，例如 &lt;code&gt;1.70.0-x86_64-pc-windows-gnu&lt;&#x2F;code&gt;。）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;对于 32 位 Windows 上的 GNU 工具链（&lt;code&gt;i686-pc-windows-gnu&lt;&#x2F;code&gt; target）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;rustup toolchain install stable-i686-pc-windows-gnu
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;安装完成后，再次运行 &lt;code&gt;rustup toolchain list&lt;&#x2F;code&gt;，你应该能看到新安装的 GNU 工具链。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;步骤_5：管理和使用_GNU_工具链&quot;&gt;&lt;strong&gt;步骤 5：管理和使用 GNU 工具链&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#步骤_5：管理和使用_GNU_工具链&quot;
   aria-label=&quot;Anchor link for: 步骤_5：管理和使用_GNU_工具链&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;rustup&lt;&#x2F;code&gt; 提供了多种方式来管理和激活你安装的工具链：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设为默认工具链&lt;&#x2F;strong&gt;：
如果你希望所有 Rust 项目默认都使用 GNU 工具链：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;rustup default stable-x86_64-pc-windows-gnu
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;为特定项目指定工具链（推荐）&lt;&#x2F;strong&gt;：
这通常是更好的做法，因为它允许不同项目使用不同的工具链。在你的项目根目录下运行：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;rustup override set stable-x86_64-pc-windows-gnu
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;该命令会把目录覆盖设置记录到 &lt;code&gt;rustup&lt;&#x2F;code&gt; 的配置中，不会自动创建 &lt;code&gt;rust-toolchain.toml&lt;&#x2F;code&gt;。如果需要把工具链设置提交到版本库，应手动创建该文件。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;为单个 Cargo 命令临时指定工具链&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;cargo +stable-x86_64-pc-windows-gnu build
cargo +stable-x86_64-pc-windows-gnu run
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;MSVC_vs._GNU：做出选择&quot;&gt;&lt;strong&gt;MSVC vs. GNU：做出选择&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#MSVC_vs._GNU：做出选择&quot;
   aria-label=&quot;Anchor link for: MSVC_vs._GNU：做出选择&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;特性&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;MSVC (&lt;code&gt;*-pc-windows-msvc&lt;&#x2F;code&gt;)&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;GNU (&lt;code&gt;*-pc-windows-gnu&lt;&#x2F;code&gt;)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;依赖&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Visual Studio C++ Build Tools (较大)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;MinGW-w64 (相对较小)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;C&#x2F;C++ 互操作&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;与 VS 编译的库兼容性好&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;与 GCC 编译的库兼容性好，与 MSVC 库链接可能复杂&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;运行时&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;通常链接到 UCRT (Universal C Runtime)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;通常链接到 &lt;code&gt;msvcrt.dll&lt;&#x2F;code&gt; (较旧，系统自带) 或 UCRT (取决于 MinGW 配置)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;调试&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Visual Studio Debugger 集成良好&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;GDB，调试体验可能因 IDE 而异&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;易用性&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Windows 默认，对许多用户来说开箱即用&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;需要额外安装和配置 MinGW&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;重要提示：ABI 兼容性&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这是一个关键点：使用 MSVC 编译的库（&lt;code&gt;.lib&lt;&#x2F;code&gt;、&lt;code&gt;.dll&lt;&#x2F;code&gt;）和使用 GCC（MinGW）编译的库通常在 &lt;strong&gt;ABI（Application Binary Interface）上是不兼容的&lt;&#x2F;strong&gt;。这意味着你不能轻易地将 MSVC 编译的 Rust 代码链接到 GCC 编译的 C&#x2F;C++ 库，反之亦然，除非这些库以纯 C ABI 导出，并且小心处理了运行时库的依赖。如果你需要与特定的 C&#x2F;C++ 库交互，请确保 Rust 工具链与该库的编译方式匹配。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Happy_Rusting!&quot;&gt;Happy Rusting!&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#Happy_Rusting!&quot;
   aria-label=&quot;Anchor link for: Happy_Rusting!&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
</description>
    </item> <item>
      <title>恶之米，人性之蛊</title>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/rice/</link>
      <guid>https://www.aspchang.com/posts/rice/</guid>
      <description xml:base="https://www.aspchang.com/posts/rice/">&lt;div class=&quot;fancy-quote&quot;&gt;
&lt;em&gt;
城市是一块巨大的被装饰过的墓地。…。城市天生是为死者而营造诞生的，那么多的人在吵杂而拥挤的街道上出现，就像一滴水珠出现然后就被太阳晒干了，他们就像一滴水珠那样悄悄消失了。那么多的人，分别死于凶杀、疾病、暴噪和悲伤的情绪以及日本士兵的刺刀和枪弹。城市对于他们是一口无边无际的巨大的棺椁，它打开了棺盖，冒着工业的黑色烟雾，散发着女人脂粉的香气和下体隐秘的气息，堆满了金银财宝和锦衣玉食，它长出一只无形然而充满脕力的手，将那些沿街徘徊的人拉进它冰凉的深不可测的怀抱。
&lt;&#x2F;em&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;&lt;em&gt;————苏童《米》&lt;&#x2F;em&gt;&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr&#x2F;&gt;
&lt;p&gt;最近终于读完了苏童的第一部长篇小说《米》。 合上书页的那一刻，心中五味杂陈，但最强烈的感受并非感动或悲悯，而是一种深切的痛苦与不适。这本书里的黑暗、苦痛与人性扭曲，其冲击力之强，令人难以平静。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;并非“旧社会把人变成鬼”&quot;&gt;并非“旧社会把人变成鬼”&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#并非“旧社会把人变成鬼”&quot;
   aria-label=&quot;Anchor link for: 并非“旧社会把人变成鬼”&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;起初，我以为这会是一个传统的故事：一个来自乡下的年轻人，在城市的米店里畏畏缩缩、老老实实地干活，挣扎求生。然而，主角五龙的形象很快就颠覆了我的预想。他并非被环境所迫的善良之辈，更像是一颗天生的“坏种”。从他踏入城市的那一刻起，似乎就对城里人带着一种天生的阶级仇恨。他跪在米店老板面前求一份活计的场景让人唏嘘，但这与其后来的所作所为形成的巨大反差，更让人不寒而栗。&lt;&#x2F;p&gt;
&lt;p&gt;这让我想到了余华的《活着》，同样是描写苦难，但《活着》给人的感觉是悲悯，是对生命韧性的感叹。而《米》则完全不同，它带来的只有痛苦和一种近乎身临其境的“作恶感”。我很难从五龙的堕落中看出“旧社会把人变成鬼”的清晰历程，反而觉得，是社会本就污浊，而五龙内心的恶，比这社会有过之而无不及。他从一个逃荒者，到帮派分子，再到后来当了汉奸，每一步都源于他内心的自私、狭隘、睚眦必报和残暴。 他所做的一切，似乎只是为了满足自己高人一等的欲望，而非简单的复仇。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;一家上下的病态与癫狂&quot;&gt;一家上下的病态与癫狂&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一家上下的病态与癫狂&quot;
   aria-label=&quot;Anchor link for: 一家上下的病态与癫狂&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;五龙对大米的痴恋，已经超越了物质需求，成为一种病态的、甚至带有性意味的恋物癖。 而这种病态，像瘟疫一样蔓延了整个家庭。书中的世界里几乎没有一个正常人，大人坏，小孩也坏。五龙和绮云生下的孩子，没有一个好东西，儿子米生甚至亲手活埋了自己的妹妹小碗。这种天生的、深入骨髓的坏，令人心生寒意。&lt;&#x2F;p&gt;
&lt;p&gt;整个家族都笼罩在一种变态的氛围里，每个人的行为都超乎常理。如果说米店的六爷是传统地主恶霸的形象，那么五龙则是一个更为独特的、来自社会底层却恶到骨子里的角色。这种纯粹的、似乎毫无缘由的恶，在其他文艺作品中确实罕见。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;为了痛苦而痛苦的写作？&quot;&gt;为了痛苦而痛苦的写作？&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#为了痛苦而痛苦的写作？&quot;
   aria-label=&quot;Anchor link for: 为了痛苦而痛苦的写作？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;读到后半段，故事的冲击力虽不如前半段那般猛烈，但家族内部的恶意倾轧依旧让人心惊。乃芳一尸两命的结局固然凄惨，但在踏入大鸿米店这个漩涡之后，这样的悲剧似乎又成了必然。最讽刺的是，算计了一生的五龙，最后却死得最为窝囊，像一条蛆一样，死在了他痴恋一生的米堆上，这或许就是他应得的报应。&lt;&#x2F;p&gt;
&lt;p&gt;平心而论，我认为苏童这本书多少有些“为了恶而恶”的倾向。前半部分能让人清晰地感受到那种几乎要溢出纸面的恨意与恶意，而后半部分则更多是家族内的纠葛。苏童自己也承认，书中的一些描写有博眼球的成分。作为他的第一部长篇小说，或许在故事的编织上略显稚嫩，过于追求抓住读者的眼球。&lt;&#x2F;p&gt;
&lt;p&gt;尽管如此，我依然会给这本书打三星（满分五星）。苏童的文笔是老练且充满魅力的，那种精准而冷酷的文字，确实能给读者带来极强的感官冲击。然而，故事本身所传递的纯粹的恶与痛苦，让我很难给予更高的评价。它是一次深入人性幽暗地带的、令人不适的旅程，看完后或许会像我一样，需要一些时间来平复心情。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;注：苏童凭借其作品《黄雀记》荣获第九届茅盾文学奖，而非《米》&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 20px;&quot;&gt;
2025年4月19日夜 与友豪杰谈及此书有感而记
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>宁芝Mini84 V6pro固件备忘：功能与组合键详解</title>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/niz-firmware/</link>
      <guid>https://www.aspchang.com/posts/niz-firmware/</guid>
      <description xml:base="https://www.aspchang.com/posts/niz-firmware/">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言&quot;
   aria-label=&quot;Anchor link for: 前言&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;静电容键盘的固件（Firmware）是其内部电路控制的核心软件，负责处理按键输入、触发逻辑、自定义功能以及与计算机的通信 相比机械键盘，静电容键盘的固件通常更封闭 本文仅作为宁芝 Mini84 V6pro 固件说明以备忘&lt;&#x2F;p&gt;
&lt;h2 id=&quot;AW&amp;amp;PT_Firmware&quot;&gt;AW&amp;amp;PT Firmware&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#AW&amp;amp;PT_Firmware&quot;
   aria-label=&quot;Anchor link for: AW&amp;amp;PT_Firmware&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;固件参数和区别&quot;&gt;固件参数和区别&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#固件参数和区别&quot;
   aria-label=&quot;Anchor link for: 固件参数和区别&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;PT 固件：Snap-Tap 功能+混合低延迟 2.0 模式
AW 固件：Snap-Tap 功能+混合低延迟 2.0 模式，使用了与 Xtrfy K2 类似的固件架构&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;注意：只有 RT 固件可以读取键盘、修改按键、修改动态触点功能、切换回报率、使用键盘宏等功能&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;Fn_组合键说明&quot;&gt;Fn 组合键说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#Fn_组合键说明&quot;
   aria-label=&quot;Anchor link for: Fn_组合键说明&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Fn+Esc ，锁定&#x2F;解锁整个键盘 (68Pro 键盘为 Fn+左 Ctrl)&lt;&#x2F;li&gt;
&lt;li&gt;Fn+Win 长按 3 秒，锁定&#x2F;解锁 WIN 键 (X87Pro 键盘为 Esc 右下方小圆点)&lt;&#x2F;li&gt;
&lt;li&gt;Fn+Tab 长按 3 秒，开启 Snap tap 功能，指示灯闪烁 1 次；关闭 Snap tap 功能，指示灯闪烁 2 次 （默认开启该功能）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;H&amp;amp;K_Firmware&quot;&gt;H&amp;amp;K Firmware&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#H&amp;amp;K_Firmware&quot;
   aria-label=&quot;Anchor link for: H&amp;amp;K_Firmware&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;固件区别&quot;&gt;固件区别&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#固件区别&quot;
   aria-label=&quot;Anchor link for: 固件区别&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;H 固件：固定六键无冲
K 固件：可调全键无冲&lt;&#x2F;p&gt;
&lt;h3 id=&quot;参数讲解&quot;&gt;参数讲解&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#参数讲解&quot;
   aria-label=&quot;Anchor link for: 参数讲解&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;《无畏契约》、《反恐精英 2》适合“K 固件”
《反恐精英 2》、《穿越火线》适合“H 固件”
《绝地求生》、《三角洲行动》适合“H 固件”&lt;&#x2F;p&gt;
&lt;h3 id=&quot;组合键&quot;&gt;组合键&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#组合键&quot;
   aria-label=&quot;Anchor link for: 组合键&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Fn+Windows 键，长按 1 秒，禁用&#x2F;解锁 Windows 键&lt;&#x2F;li&gt;
&lt;li&gt;Fn+K 键，键盘切换六键无冲模式（仅 K 固件有效）&lt;&#x2F;li&gt;
&lt;li&gt;Fn+N 键，键盘切换全键无冲模式（仅 K 固件有效）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;【注意事项】
请将键盘优先插入主板&#x2F;笔记本上的 USB Gen1 接口（5G）&lt;&#x2F;p&gt;
&lt;h2 id=&quot;PT&amp;amp;NK_Firmware&quot;&gt;PT&amp;amp;NK Firmware&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#PT&amp;amp;NK_Firmware&quot;
   aria-label=&quot;Anchor link for: PT&amp;amp;NK_Firmware&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;固件参数和区别-1&quot;&gt;固件参数和区别&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#固件参数和区别-1&quot;
   aria-label=&quot;Anchor link for: 固件参数和区别-1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;PT 固件：0ms 滤波延迟+按下 1.5mm 触发按键+混合低延迟 2.0 模式
NK 固件：0ms 滤波延迟+松开 1.0mm 释放按键+混合低延迟 2.0 模式&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;固件区别：仅为键程区别，其他参数完全一致&lt;&#x2F;li&gt;
&lt;li&gt;注意：只有 RT 固件可以读取键盘、修改按键、修改动态触点功能、切换回报率、使用键盘宏等功能&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;1K&amp;amp;4K_Firmware&quot;&gt;1K&amp;amp;4K Firmware&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1K&amp;amp;4K_Firmware&quot;
   aria-label=&quot;Anchor link for: 1K&amp;amp;4K_Firmware&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;固件参数&quot;&gt;固件参数&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#固件参数&quot;
   aria-label=&quot;Anchor link for: 固件参数&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;4K 固件：欧式&#x2F;美式配列+六&#x2F;全键无冲+4K 回报率+按下&#x2F;抬起 2.0mm 触发&#x2F;释放按键&lt;&#x2F;li&gt;
&lt;li&gt;1K 固件：欧式&#x2F;美式配列+六&#x2F;全键无冲+1K 回报率+按下&#x2F;抬起 2.0mm 触发&#x2F;释放按键&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;固件说明&quot;&gt;固件说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#固件说明&quot;
   aria-label=&quot;Anchor link for: 固件说明&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&quot;欧式配列&quot; 只是比 &quot;美式配列&quot; 多一个 &#x27;\ 键&lt;&#x2F;li&gt;
&lt;li&gt;注意：新固件部分按键已做调整，请看下具体配列差异说明书&lt;&#x2F;li&gt;
&lt;li&gt;注意：FPS 优先使用欧式配列，其他游戏优先使用美式配列，切换配列后建议重启电脑&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;Fn_组合键说明-1&quot;&gt;Fn 组合键说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#Fn_组合键说明-1&quot;
   aria-label=&quot;Anchor link for: Fn_组合键说明-1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Fn+Esc ，锁定&#x2F;解锁整个键盘&lt;&#x2F;li&gt;
&lt;li&gt;Fn+Win 长按 1 秒，锁定&#x2F;解锁 WIN 键&lt;&#x2F;li&gt;
&lt;li&gt;Fn+右 Ctrl 长按 1 秒，锁定&#x2F;解锁 右 Ctrl 键&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;键盘配列切换&quot;&gt;键盘配列切换&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#键盘配列切换&quot;
   aria-label=&quot;Anchor link for: 键盘配列切换&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Fn+F9 长按 1 秒，指示灯闪烁键盘切换欧式配列，默认欧式配列&lt;&#x2F;li&gt;
&lt;li&gt;Fn+F10 长按 1 秒，指示灯闪烁键盘切换美式配列，并禁用 &#x27;\ 键&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;键盘无冲切换&quot;&gt;键盘无冲切换&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#键盘无冲切换&quot;
   aria-label=&quot;Anchor link for: 键盘无冲切换&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Fn+F11 长按 1 秒，指示灯闪烁一次键盘切换六键无冲&lt;&#x2F;li&gt;
&lt;li&gt;Fn+F12 长按 1 秒，指示灯闪烁一次键盘切换全键无冲&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;8K&amp;amp;HA_Firmware&quot;&gt;8K&amp;amp;HA Firmware&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#8K&amp;amp;HA_Firmware&quot;
   aria-label=&quot;Anchor link for: 8K&amp;amp;HA_Firmware&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;固件参数-1&quot;&gt;固件参数&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#固件参数-1&quot;
   aria-label=&quot;Anchor link for: 固件参数-1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;8K 固件（万金油固件）：静态扫描+欧式配列+8000Hz 回报率+26 键无冲+混合低延迟 2.0&lt;&#x2F;li&gt;
&lt;li&gt;HA 固件：静态扫描+欧式配列+8000Hz 回报率+26 键无冲+AW 固件架构+混合低延迟 2.0&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;【Fn 组合键说明】&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Fn+Esc 键（68PRO 为左 Ctrl），锁定&#x2F;解锁整个键盘&lt;&#x2F;li&gt;
&lt;li&gt;Fn+Windows 键，长按 1 秒，锁定&#x2F;解锁 Windows 键&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;RT_Firmware&quot;&gt;RT Firmware&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#RT_Firmware&quot;
   aria-label=&quot;Anchor link for: RT_Firmware&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;RT_固件_Fn_组合键说明&quot;&gt;RT 固件 Fn 组合键说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#RT_固件_Fn_组合键说明&quot;
   aria-label=&quot;Anchor link for: RT_固件_Fn_组合键说明&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Fn+Esc ，锁定&#x2F;解锁整个键盘&lt;&#x2F;li&gt;
&lt;li&gt;Fn+Win 长按 3 秒，锁定&#x2F;解锁 WIN 键&lt;&#x2F;li&gt;
&lt;li&gt;Fn+F1-F3，静音&amp;amp;音量调节&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;回报率切换说明&quot;&gt;回报率切换说明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#回报率切换说明&quot;
   aria-label=&quot;Anchor link for: 回报率切换说明&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;长按 3 秒 Fn+R ，切换回报率
指示灯闪烁 1 次（1000hz），指示灯闪烁 2 次（2000hz），
指示灯闪烁 3 次（4000hz），指示灯闪烁 4 次（8000hz）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;aside class=&quot;github-alert github-alert--tip&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;github-alert__title&quot;&gt;TIP&lt;&#x2F;div&gt;
  &lt;div class=&quot;github-alert__content&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;mini84EC(S)_RT_V2.0.40.bin&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt; 仅有 RT 功能&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;mini84EC(S)_RT_V2.0.42.bin&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt; 则同时具有 RT 功能和 Snap-Tap 功能&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;aside&gt;
</description>
    </item> <item>
      <title>Astro 博客搭建指南</title>
      <pubDate>Sat, 08 Feb 2025 00:00:00 +0000</pubDate>
      <dc:creator>GEMILUXVII</dc:creator>
      <link>https://www.aspchang.com/posts/astro-blog-guide/</link>
      <guid>https://www.aspchang.com/posts/astro-blog-guide/</guid>
      <description xml:base="https://www.aspchang.com/posts/astro-blog-guide/">&lt;h2 id=&quot;前言：为什么选择_Astro？&quot;&gt;前言：为什么选择 Astro？&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#前言：为什么选择_Astro？&quot;
   aria-label=&quot;Anchor link for: 前言：为什么选择_Astro？&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Astro 作为新一代的静态站点生成器，凭借其独特的「组件优先」理念和「零 JS 默认输出」特性，成为搭建内容型网站的理想选择。相较于传统方案，Astro 具有以下优势：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;极致的加载性能（默认生成纯静态 HTML）&lt;&#x2F;li&gt;
&lt;li&gt;灵活的组件体系（支持 React&#x2F;Vue&#x2F;Svelte 组件）&lt;&#x2F;li&gt;
&lt;li&gt;内容驱动的开发模式&lt;&#x2F;li&gt;
&lt;li&gt;完善的 Markdown 支持&lt;&#x2F;li&gt;
&lt;li&gt;轻量级架构（项目依赖仅约 100KB）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;一._准备工作&quot;&gt;一. 准备工作&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一._准备工作&quot;
   aria-label=&quot;Anchor link for: 一._准备工作&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1.1_环境准备&quot;&gt;1.1 环境准备&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1.1_环境准备&quot;
   aria-label=&quot;Anchor link for: 1.1_环境准备&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;npm 9+ 或 pnpm 7+&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Node.js（具体最低版本以所选主题的 &lt;code&gt;package.json&lt;&#x2F;code&gt; 为准，建议使用仍受支持的 LTS 版本）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;下载入口：&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;zh-cn&#x2F;download&quot;&gt;Node.js 官方下载页&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;推荐使用 VS Code 编辑器&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;node -v
# 检查版本
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;1.2_clone_主题到本地&quot;&gt;1.2 clone 主题到本地&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1.2_clone_主题到本地&quot;
   aria-label=&quot;Anchor link for: 1.2_clone_主题到本地&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;区别于 Hexo，Astro 主题通常就是完整的项目模板，并不能只修改一个配置项便完成换主题。因此，事先选定主题十分重要。以下列出几个我比较喜欢的主题，供读者参考：&lt;&#x2F;p&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;saicaca&#x2F;fuwari&quot;
   data-github-repo=&quot;saicaca&amp;#x2F;fuwari&quot;
   aria-label=&quot;saicaca&amp;#x2F;fuwari on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;saicaca&amp;#x2F;fuwari&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;koibumi-design&#x2F;astro-blog&quot;
   data-github-repo=&quot;koibumi-design&amp;#x2F;astro-blog&quot;
   aria-label=&quot;koibumi-design&amp;#x2F;astro-blog on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;koibumi-design&amp;#x2F;astro-blog&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;

&lt;a class=&quot;github-card&quot;
   href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Jazee6&#x2F;astro-blur&quot;
   data-github-repo=&quot;Jazee6&amp;#x2F;astro-blur&quot;
   aria-label=&quot;Jazee6&amp;#x2F;astro-blur on GitHub&quot;
   target=&quot;_blank&quot;
   rel=&quot;noopener noreferrer&quot;&gt;
  &lt;img class=&quot;github-card__avatar&quot;
       src=&quot;https:&#x2F;&#x2F;www.aspchang.com&#x2F;github-svgrepo-com.svg&quot;
       alt=&quot;&quot;
       aria-hidden=&quot;true&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;span class=&quot;github-card__body&quot;&gt;
    &lt;span class=&quot;github-card__heading&quot;&gt;
      &lt;strong class=&quot;github-card__name&quot;&gt;Jazee6&amp;#x2F;astro-blur&lt;&#x2F;strong&gt;
      &lt;span class=&quot;github-card__external&quot; aria-hidden=&quot;true&quot;&gt;↗&lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__description&quot;&gt;View this repository on GitHub&lt;&#x2F;span&gt;
    &lt;span class=&quot;github-card__meta&quot; aria-label=&quot;Repository statistics&quot;&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Stars&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M8 1.3 10 5.4l4.5.7-3.2 3.2.7 4.5L8 11.7l-4 2.1.7-4.5-3.2-3.2L6 5.4 8 1.3Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-stars&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat&quot; title=&quot;Forks&quot;&gt;
        &lt;svg viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M5 2.2a1.7 1.7 0 1 1-1.2-.5v2.9A3.4 3.4 0 0 0 7.2 8h1.6a1.8 1.8 0 0 1 1.7 1.7v.8a1.7 1.7 0 1 1-1.2 0v-.8a.5.5 0 0 0-.5-.5H7.2a4.6 4.6 0 0 1-2.2-.6v1.9a1.7 1.7 0 1 1-1.2 0V5.4A1.7 1.7 0 0 1 5 2.2Z&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
        &lt;span data-github-forks&gt;—&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
      &lt;span class=&quot;github-card__stat github-card__language&quot; hidden&gt;
        &lt;span class=&quot;github-card__language-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;
        &lt;span data-github-language&gt;&lt;&#x2F;span&gt;
      &lt;&#x2F;span&gt;
    &lt;&#x2F;span&gt;
  &lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;将主题克隆到本地：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone git@github.com:saicaca&#x2F;fuwari.git #以fuwari为例
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;1.3_安装依赖&quot;&gt;1.3 安装依赖&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1.3_安装依赖&quot;
   aria-label=&quot;Anchor link for: 1.3_安装依赖&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pnpm install
pnpm add sharp
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;此时网页就可以在本地跑起来了，启动本地服务器：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;npm run dev
# 访问 http:&#x2F;&#x2F;localhost:4321
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在浏览器输入 &lt;em&gt;http:&#x2F;&#x2F;localhost:4321&lt;&#x2F;em&gt; 访问网页&lt;&#x2F;p&gt;
&lt;h2 id=&quot;二._主题配置&quot;&gt;二. 主题配置&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二._主题配置&quot;
   aria-label=&quot;Anchor link for: 二._主题配置&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;2.1_文件结构说明（以_fuwari_主题为例）&quot;&gt;2.1 文件结构说明（以 fuwari 主题为例）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2.1_文件结构说明（以_fuwari_主题为例）&quot;
   aria-label=&quot;Anchor link for: 2.1_文件结构说明（以_fuwari_主题为例）&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;src&#x2F;
  content&#x2F;
    config.ts      # 博客配置
    blog&#x2F;          # 文章目录（示例文章）
  layouts&#x2F;
    PostLayout.astro  # 文章布局
 &#x2F;

&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;2.2_修改配置文件&quot;&gt;2.2 修改配置文件&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2.2_修改配置文件&quot;
   aria-label=&quot;Anchor link for: 2.2_修改配置文件&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;编辑配置文件 src&#x2F;config.ts 以自定义博客，在博客本地服务器运行时可以是可以修改文件的，修改效果将会实时刷新在本地网页上&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;import type {
  LicenseConfig,
  NavBarConfig,
  ProfileConfig,
  SiteConfig,
} from &amp;#39;.&#x2F;types&#x2F;config&amp;#39;
import { LinkPreset } from &amp;#39;.&#x2F;types&#x2F;config&amp;#39;

export const siteConfig: SiteConfig = {
  title: &amp;#39;Fuwari&amp;#39;, &#x2F;&#x2F; 网站标题
  subtitle: &amp;#39;Demo Site&amp;#39;, &#x2F;&#x2F; 网站描述
  lang: &amp;#39;en&amp;#39;, &#x2F;&#x2F; 语言选择&amp;#39;en&amp;#39;, &amp;#39;zh_CN&amp;#39;, &amp;#39;zh_TW&amp;#39;, &amp;#39;ja&amp;#39;, &amp;#39;ko&amp;#39;, &amp;#39;es&amp;#39;, &amp;#39;th&amp;#39;
  themeColor: {
    hue: 250, &#x2F;&#x2F; 主题颜色的默认色调，从0到360。例如，红色：0，青色：200，青色：250，粉红色：345
    fixed: false, &#x2F;&#x2F; 是否为访问者隐藏主题颜色选择器
  },
  banner: {
    enable: false, &#x2F;&#x2F;是否开启横幅
    src: &amp;#39;assets&#x2F;images&#x2F;demo-banner.png&amp;#39;, &#x2F;&#x2F; 横幅路径:相对于&#x2F;src的路径，如果相对于&#x2F;public路径则应以&amp;#39;&#x2F;&amp;#39;开头
    position: &amp;#39;center&amp;#39;, &#x2F;&#x2F; 横幅图展示的位置，支持的值:&amp;#39;top&amp;#39;, &amp;#39;center&amp;#39;, &amp;#39;bottom&amp;#39;,&amp;#39;center&amp;#39;是默认选项
    credit: {
      enable: false, &#x2F;&#x2F; 是否在在横幅图像上显示横幅署名文本
      text: &amp;#39;&amp;#39;, &#x2F;&#x2F; 在横幅图像上显示的署名文本
      url: &amp;#39;&amp;#39;, &#x2F;&#x2F; (可选项) 原作品或作者的链接页面
    },
  },
  toc: {
    enable: true, &#x2F;&#x2F; 是否在博客右侧显示目录
    depth: 2, &#x2F;&#x2F; 设置目录中显示的标题最大深度（可选范围：1至3级）
  },
  favicon: [
    &#x2F;&#x2F; 如果使用默认网站图标此项请留空
    &#x2F;&#x2F; {
    &#x2F;&#x2F;   src: &amp;#39;&#x2F;favicon&#x2F;icon.png&amp;#39;,    &#x2F;&#x2F; 网站图标的路径，相对于&#x2F;public目录
    &#x2F;&#x2F;   theme: &amp;#39;light&amp;#39;,              &#x2F;&#x2F; (可选项) “亮”或“暗”，仅当图标目录下存在不同亮暗图标时方可设置
    &#x2F;&#x2F;   sizes: &amp;#39;32x32&amp;#39;,              &#x2F;&#x2F; (可选项) 图标大小, 仅当图标目录下存在不同大小图标时方可设置
    &#x2F;&#x2F; }
  ],
}

export const navBarConfig: NavBarConfig = {
  links: [
    LinkPreset.Home,
    LinkPreset.Archive,
    LinkPreset.About,
    {
      name: &amp;#39;GitHub&amp;#39;,
      url: &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;saicaca&#x2F;fuwari&amp;#39;, &#x2F;&#x2F; 内部链接不应包含基本路径，因为是自动添加的
      external: true, &#x2F;&#x2F; 显示外部链接图标，并可在新标签页中打开
    },
  ],
}

export const profileConfig: ProfileConfig = {
  avatar: &amp;#39;assets&#x2F;images&#x2F;demo-avatar.png&amp;#39;, &#x2F;&#x2F; 头像路径:相对于&#x2F;src的路径，如果相对于&#x2F;public路径则应以&amp;#39;&#x2F;&amp;#39;开头
  name: &amp;#39;Lorem Ipsum&amp;#39;, &#x2F;&#x2F; 名字
  bio: &amp;#39;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&amp;#39;, &#x2F;&#x2F; 简介
  links: [
    {
      name: &amp;#39;Twitter&amp;#39;,
      icon: &amp;#39;fa6-brands:twitter&amp;#39;, &#x2F;&#x2F; 访问https:&#x2F;&#x2F;icones.js.org&#x2F;以获取图标代码
      &#x2F;&#x2F; 如果尚未包含相应的图标集，则需要安装该图标集
      &#x2F;&#x2F; 指令为：pnpm add @iconify-json&#x2F;&amp;lt;图标集名称&amp;gt;
      url: &amp;#39;https:&#x2F;&#x2F;twitter.com&amp;#39;, &#x2F;&#x2F; 图标的自定义链接
    },
    {
      name: &amp;#39;Steam&amp;#39;,
      icon: &amp;#39;fa6-brands:steam&amp;#39;,
      url: &amp;#39;https:&#x2F;&#x2F;store.steampowered.com&amp;#39;,
    },
    {
      name: &amp;#39;GitHub&amp;#39;,
      icon: &amp;#39;fa6-brands:github&amp;#39;,
      url: &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;saicaca&#x2F;fuwari&amp;#39;,
    },
  ],
}

export const licenseConfig: LicenseConfig = {
  enable: true,
  name: &amp;#39;CC BY-NC-SA 4.0&amp;#39;,
  url: &amp;#39;https:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-nc-sa&#x2F;4.0&#x2F;&amp;#39;, &#x2F;&#x2F; 创作共用许可协议
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;三._托管网页到云端&quot;&gt;三. 托管网页到云端&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三._托管网页到云端&quot;
   aria-label=&quot;Anchor link for: 三._托管网页到云端&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;3.1_选择网站托管平台&quot;&gt;3.1 选择网站托管平台&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.1_选择网站托管平台&quot;
   aria-label=&quot;Anchor link for: 3.1_选择网站托管平台&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;构建并部署 Astro 站点需要选择一个可靠的静态网页托管平台，例如 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;cn&#x2F;s3&#x2F;&quot;&gt;AWS S3 静态网站托管&lt;&#x2F;a&gt;、&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vercel.com&#x2F;&quot;&gt;Vercel&lt;&#x2F;a&gt; 和 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pages.cloudflare.com&#x2F;&quot;&gt;Cloudflare Pages&lt;&#x2F;a&gt; 等。&lt;&#x2F;p&gt;
&lt;p&gt;本文使用 Vercel 作为示例，其余平台的部署教程可在 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.astro.build&#x2F;zh-cn&#x2F;guides&#x2F;deploy&#x2F;&quot;&gt;Astro 官方文档&lt;&#x2F;a&gt;中找到。&lt;&#x2F;p&gt;
&lt;p&gt;Astro 项目默认生成静态站点。按照 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.astro.build&#x2F;zh-cn&#x2F;guides&#x2F;deploy&#x2F;vercel&#x2F;&quot;&gt;Astro 的 Vercel 部署文档&lt;&#x2F;a&gt;，静态站部署到 Vercel 不需要额外安装适配器，导入仓库后由 Vercel 自动识别即可。&lt;&#x2F;p&gt;
&lt;p&gt;只有项目确实使用按需渲染、服务端渲染或中间件时，才需要安装 Vercel 适配器：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pnpm astro add vercel
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;3.2_上传项目文件到_GitHub&quot;&gt;3.2 上传项目文件到 GitHub&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.2_上传项目文件到_GitHub&quot;
   aria-label=&quot;Anchor link for: 3.2_上传项目文件到_GitHub&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;如果你有 git 工具&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;git init
git add README.md
git commit -m &amp;quot;first commit&amp;quot;
git branch -M main
git remote add origin 你的仓库地址
git push -u origin main
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;或者直接使用 VS Code 或 GitHub Desktop 提交。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;3.3_部署到_Vercel_进行托管&quot;&gt;3.3 部署到 Vercel 进行托管&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3.3_部署到_Vercel_进行托管&quot;
   aria-label=&quot;Anchor link for: 3.3_部署到_Vercel_进行托管&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;注册一个&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vercel.com&#x2F;&quot;&gt;&lt;em&gt;Vercel&lt;&#x2F;em&gt; &lt;&#x2F;a&gt;账号&lt;&#x2F;li&gt;
&lt;li&gt;选择右侧 Add New，创建一个新的 Project&lt;&#x2F;li&gt;
&lt;li&gt;登录自己的 GitHub 账号，导入博客仓库&lt;&#x2F;li&gt;
&lt;li&gt;设置好项目名称（项目名称会是 Vercel 分发给你的子域名的一部分，例如 https:&#x2F;&#x2F;项目名称.vercel.app&#x2F;）&lt;&#x2F;li&gt;
&lt;li&gt;Deploy 然后耐心等待&lt;&#x2F;li&gt;
&lt;li&gt;网页托管完成之后立马就可以登陆了&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;后续只要将修改推送到 GitHub 仓库，Vercel 就会自动构建并更新博客页面。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;四._绑定域名（可选项）&quot;&gt;四. 绑定域名（可选项）&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四._绑定域名（可选项）&quot;
   aria-label=&quot;Anchor link for: 四._绑定域名（可选项）&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;可能你觉得 &lt;em&gt;https:&#x2F;&#x2F;项目名称.vercel.app&#x2F;&lt;&#x2F;em&gt; 太难看了或是国内访问 Vercel 并不稳定，那么可以自己购入域名进行自定义&lt;&#x2F;p&gt;
&lt;p&gt;Vercel 支持添加自定义域名进行重定向&lt;&#x2F;p&gt;
&lt;p&gt;域名购买：&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;buy.cloud.tencent.com&#x2F;domain&quot;&gt;&lt;em&gt;腾讯云域名&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;​&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wanwang.aliyun.com&#x2F;domain&#x2F;tld#.com&quot;&gt;&lt;em&gt;阿里云万网&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;选择 Vercel 中博客项目打开 Settings&lt;&#x2F;li&gt;
&lt;li&gt;选择 Domain 并进行 Add&lt;&#x2F;li&gt;
&lt;li&gt;输入你填写的域名，默认设置即可&lt;&#x2F;li&gt;
&lt;li&gt;前往域名购买商域名控制台为域名添加解析：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;对应 Vercel 提示 Type 填入对应的值，回来刷新 Vercel 的 Domain 设置，显示 Valid Configuration 即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;注：购买域名之后需要一定的 DNS 解析时间，Vercel 中显示未能配置成功时可耐心等待&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;五._生态推荐&quot;&gt;五. 生态推荐&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#五._生态推荐&quot;
   aria-label=&quot;Anchor link for: 五._生态推荐&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;官方工具&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;Starlight（文档模板）&lt;&#x2F;li&gt;
&lt;li&gt;Astro DB（数据库集成）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;社区插件&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;astro-seo：SEO 优化&lt;&#x2F;li&gt;
&lt;li&gt;astro-robots-txt：机器人协议&lt;&#x2F;li&gt;
&lt;li&gt;astro-compress：资源压缩&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;学习资源&lt;&#x2F;strong&gt;：
&lt;ul&gt;
&lt;li&gt;官方文档：https:&#x2F;&#x2F;docs.astro.build&lt;&#x2F;li&gt;
&lt;li&gt;示例仓库：https:&#x2F;&#x2F;github.com&#x2F;withastro&#x2F;astro&#x2F;examples&lt;&#x2F;li&gt;
&lt;li&gt;社区模板：https:&#x2F;&#x2F;astro.build&#x2F;themes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;通过本指南，您已经掌握了从零搭建 Astro 博客的核心技能。接下来可以：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;尝试接入 CMS 内容管理系统&lt;&#x2F;li&gt;
&lt;li&gt;开发自定义组件库&lt;&#x2F;li&gt;
&lt;li&gt;探索 Astro Islands 的深度应用&lt;&#x2F;li&gt;
&lt;li&gt;参与开源社区贡献&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</description>
    </item> <item>
      <title>死室</title>
      <pubDate>Fri, 01 Jan 1999 00:00:00 +0000</pubDate>
      <dc:creator>斯蒂芬金</dc:creator>
      <link>https://www.aspchang.com/posts/in-the-deathroom/</link>
      <guid>https://www.aspchang.com/posts/in-the-deathroom/</guid>
      <description xml:base="https://www.aspchang.com/posts/in-the-deathroom/">&lt;p&gt;这是一间死室。门一打开，弗莱彻就知道它是什么了。地上铺着灰色的工业砖，墙壁是脏兮兮的白色石头，零散地分布着深色的片状污迹，也许是血迹——这个房间里肯定发生过流血的事情。头顶的灯被罩在铁丝笼里。房间中央放着一张木头长桌，桌子后面坐着三个人。桌子前面放着一把空椅子，正等着弗莱彻去坐。椅子旁边有一辆小推车，推车上的物体被一块布盖着，就像雕塑家会在工作间歇把半成品遮住一样。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻被半引半拽地拉向那把为他准备的椅子。他被守卫抓着，身体有些踉踉跄跄，也放纵自己踉跄着。如果他看上去比实际更为茫然、震惊和没头没脑，那很好。他认为自己能够离开情报部这间地下室的概率有三十分之一二，也许这都算是乐观的。无论概率多小，他都不愿因为自己看上去哪怕有五分清醒而让它进一步变小，他鼓胀的眼睛、圆肿的鼻子以及破了的下唇可能在这方面有所帮助。还有嘴巴周围凝固了血痂，像一簇深红色的山羊胡子。有一件事弗莱彻非常确定：如果他真的离开了，其他人——那名守卫以及桌子后面并排坐着的三个人——都得死。他是一名报社记者，还从未杀死过比大黄蜂大的任何东西，但是如果必须杀人才能逃出这个房间，他会的。他想到了妹妹正在回去的路上。他想到妹妹在一条有着西班牙语名字的河里游泳。他想到了中午时分，水面上波光粼粼，刺得人睁不开眼。他们来到了桌子前面的椅子边，守卫一把把他推坐到椅子上，弗莱彻差点栽过去。&lt;&#x2F;p&gt;
&lt;p&gt;“小心点，不该这样，不能有意外。”桌子后面的一个男人说道。这是埃斯科瓦尔，他对守卫说的是西班牙语。埃斯科瓦尔左边坐着另一个男的，右边坐着一个约莫六十岁的女人。女人和另一个男的都很瘦，埃斯科瓦尔很胖，油腻腻的像一支廉价蜡烛，看起来像电影里的墨西哥人。你盼着他会说：“警飞？警飞？我们不需要什么臭警飞 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; ！” 但他是首席情报部长。有时他会在市电视台播报天气预报的英文部分，每次都会收到粉丝来信。穿着西服时，他看上去并不油腻，只是有点矮胖。弗莱彻对此非常清楚，他写过三四篇关于埃斯科瓦尔的报道。他很有趣，据传，他还热衷于拷问。一个中美洲的希姆莱 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; ，弗莱彻想，同时惊奇地发现，一个人的幽默感——即使不怎么高明——竟能演变成如此这般的恐惧。&lt;&#x2F;p&gt;
&lt;p&gt;“手铐呢？”守卫也用西班牙语问道，同时举起一副塑料手铐。弗莱彻尽力保持脸上的茫然不解。如果他们铐住了他，那就完了。他可以忘了那大约三十分之一的概率，或者说三百分之一。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔短暂地看了一眼他右侧的女人。她的脸色很暗，黑色的头发已经斑白，从额头往后上方梳，仿佛被强风吹着。她的发式让弗莱彻想起了电影《科学怪人的新娘》中的爱尔莎·兰切斯特。他近乎惊慌失措地紧抓着这个相似不放，就像他紧抓着那个关于波光粼粼的河面，或是妹妹和她的朋友边笑边朝水边走去的想法不放一样。他想要的是画面，不是想法。现在，画面成了奢侈品，想法在这种地方毫无益处，在这种地方，你所有的只能是错误的想法。&lt;&#x2F;p&gt;
&lt;p&gt;那个女人朝埃斯科瓦尔轻轻地点点头。弗莱彻在大楼周围见过她，她总是穿一条难看的裙子，就像她此刻穿的这条一样。她总是跟埃斯科瓦尔在一块儿，弗莱彻还以为她是他的秘书，私人秘书，甚至可能是他的传记作者——天知道像埃斯科瓦尔这种自我意识如此强大的人是否需要这种附属品。现在弗莱彻在想自己是否一直就搞错了，是否她是他的上司。&lt;&#x2F;p&gt;
&lt;p&gt;无论如何，这点头似乎让埃斯科瓦尔满意了，等他重新看着弗莱彻的时候，脸上挂着笑容。他开口了，说的是英语。“别傻了，把手铐收起来，弗莱彻先生只是来这里帮我们解决几个问题的。他很快就会返回他的祖国了，”埃斯科瓦尔深深地叹了口气，看得出他非常后悔说了这句话，“但与此同时，他是一位贵宾。”&lt;&#x2F;p&gt;
&lt;p&gt;我们不需要什么臭手铐，弗莱彻想。&lt;&#x2F;p&gt;
&lt;p&gt;那个脸色黝黑、看上去像科学怪人的新娘的女人朝埃斯科瓦尔凑过身子，用手遮着嘴在他耳边说了什么，埃斯科瓦尔微笑着点点头。&lt;&#x2F;p&gt;
&lt;p&gt;“当然了，拉蒙，如果我们的客人想做什么傻事或是做出什么侵犯性的举动，你就开枪。”他放声大笑起来——在电视上身材矮胖的主播的笑声——然后用西班牙语重复了一遍说过的话，好让拉蒙跟弗莱彻一样明白。拉蒙认真地点点头，把手铐放回腰间，然后退到了弗莱彻视线的边缘。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔把注意力转回弗莱彻身上。他从那件装饰着鹦鹉和植物叶子的瓜亚贝拉衬衫的一个口袋里拿出一个红白两色的小包：万宝路，为每一个第三世界的民族所偏好的香烟。“抽烟吗，弗莱彻先生？”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻朝埃斯科瓦尔放在桌子边缘的烟盒伸出手，然后又缩了回来。他三年前就戒烟了，如果他真的离开这里的话，也许会重拾这个嗜好——很可能还会喝高度酒——但是眼前他并没有抽烟的欲望或需要。他只是想让他们看到他颤抖的手指，仅此而已。&lt;&#x2F;p&gt;
&lt;p&gt;“也许晚点吧。眼下抽烟也许……”&lt;&#x2F;p&gt;
&lt;p&gt;也许什么？埃斯科瓦尔并不在意，他只是宽容地点点头，把那个红白两色的烟盒留在了原处——桌子的边缘。弗莱彻突然有了一个令人痛苦的预感，他看到自己在四十三号大街上的一个报亭边停下，要买一包万宝路，一个自由的人在纽约街头买快活毒药。他告诉自己，如果离开了这里，他要这么做。他会这么做，就像有些人癌症治愈或是眼睛重见光明之后去罗马或耶路撒冷朝圣一样。&lt;&#x2F;p&gt;
&lt;p&gt;“对你施暴的人，”埃斯科瓦尔用一只不是特别干净的手指了指弗莱彻的脸，“已经受到了纪律处分，但是不太严重，你会注意到，我本人也不再道歉了。那些人都是爱国者，就像我们一样。就像你一样，弗莱彻先生，对吧？”&lt;&#x2F;p&gt;
&lt;p&gt;“我想是吧。”他必须表现出奉承和害怕，表现成一个为了离开这里什么都愿意说的人。而埃斯科瓦尔的工作就是安抚，让这个坐在椅子里的人相信他肿胀的眼睛、裂开的嘴唇和松动的牙齿算不得什么；这些不过是一场误会，很快就会澄清，而等到误会澄清，他就可以离开了。即使是在这间死室里，他们还在忙着互相欺骗。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔转向守卫拉蒙，用西班牙语快速地说着什么。弗莱彻的西班牙语还不足以让他听懂所有内容，但是在这座肮脏的首都待了将近五年之后，不可能学不会相当数量的词汇。西班牙语并不是世界上最难的语言，这一点，埃斯科瓦尔和他的科学怪人的新娘朋友无疑很清楚。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔问弗莱彻的物品是否已经打包停当，他是否已经从华美酒店退房：是的。埃斯科瓦尔想知道情报部外面是否有一辆汽车正在等候，等讯问结束后就送弗莱彻先生去机场。是的，就停在五月五日大街的街角。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔扭回头，说道：“你明白我问了他什么吗？”从埃斯科瓦尔的口中，“明白”被说成了“明卖”，弗莱彻又想起了埃斯科瓦尔上电视的情形。低记压？什么低记压？我们不需要什么臭低记压。&lt;&#x2F;p&gt;
&lt;p&gt;“我问你有没有退房——尽管这么久之后，它对你来说可能更像是一间公寓了吧——还问我们的谈话结束后是否有车送你去机场。”只是他之前说的并不是“谈话”这个词。&lt;&#x2F;p&gt;
&lt;p&gt;“是……吗？”弗莱彻听上去好像无法相信自己的好运，或者说他希望自己听上去如此。&lt;&#x2F;p&gt;
&lt;p&gt;“你会搭乘第一架达美航空的班机返回迈阿密。”科学怪人的新娘说，她说话时没有一丝西班牙口音，“班机一降落在美国土地上，你的护照就会物归原主。你不会受到伤害，也不会滞留在这里，弗莱彻先生——只要你配合我们的询问——但是你将会被驱逐出境，这点我们先说清楚。‘被赶出去’，像你们美国人说的，被撵了出去。”&lt;&#x2F;p&gt;
&lt;p&gt;她比埃斯科瓦尔圆滑得多。弗莱彻之前还以为她是埃斯科瓦尔的助手，想着都挺好玩。而你还自诩为记者呢，他想。当然，如果他只是个记者，《纽约时报》的驻中美洲记者，他就不会在情报部的地下室里了，墙壁上的污迹看起来很像血。大概十六个月之前他就不再做记者了，差不多在他第一次见到努奈兹的时候。&lt;&#x2F;p&gt;
&lt;p&gt;“我明白。”弗莱彻说。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔拿了一支烟，用一个镀金打火机点着，打火机的一侧嵌着一颗假的红宝石。他说：“你准备好配合我们的询问了吗，弗莱彻先生？”&lt;&#x2F;p&gt;
&lt;p&gt;“我有选择吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“你永远都有选择，”埃斯科瓦尔说，“但是我觉得你在我们国家已经不受欢迎了，对吗？你们是这么说的吗，‘不受欢迎’？”&lt;&#x2F;p&gt;
&lt;p&gt;“差不多。”弗莱彻说。他想：你必须防备自己相信他们的渴望。人天生渴望相信，也可能天生渴望说实话——特别是当你在自己最喜欢的餐馆外面被人抓住，然后迅速被一帮散发着炸豆泥味道的男人揍了一顿之后——但是满足他们的需求并不会帮到你。这才是你需要紧抓不放的想法，在这样的房间里这是唯一有用的想法，他们无论说什么都毫无意义。重要的是那辆小推车上的东西，那块布下面的东西。重要的是那个还未开口说话的男人。当然，还有墙壁上的污迹。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔探身向前，一脸严肃。&lt;&#x2F;p&gt;
&lt;p&gt;“你否认在过去的十四个月里，曾经把某些信息告知一个名叫托马斯·埃雷拉的人，后者又把它透露给某个名叫佩德罗·努奈兹的共产党叛乱分子吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“不，”弗莱彻说，“我不否认。”为了充分保持自己的伪装——可以用“谈话”和“讯问”之间的区别来概述的伪装——此时他应该为自己辩护，尝试去解释，就好像人类历史上曾有人在一个这样的房间里赢得过一场政治辩论一样。但是他不愿这么做。“不过时间要比这个更久一些。我想总共差不多有一年半吧。”&lt;&#x2F;p&gt;
&lt;p&gt;“抽支烟，弗莱彻先生。”埃斯科瓦尔打开一个抽屉，拿出一个薄文件夹。&lt;&#x2F;p&gt;
&lt;p&gt;“暂时不用。谢谢。”&lt;&#x2F;p&gt;
&lt;p&gt;“好吧。”当然，从埃斯科瓦尔嘴里出来的是“吼吧”。当他在电视上播报天气的时候，控制室里的男孩们有时会把一张穿着比基尼的女人的照片叠印在气象图上。等他看到这个，埃斯科瓦尔就会哈哈大笑，挥舞双手，拍着胸口。大家喜欢这个，这很滑稽，就像听到“吼吧”一样，就像听到“臭警飞”一样。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔打开文件夹，他那支烟笔直地插在嘴巴正中间，烟雾正好升腾到眼睛里。你会看到，这里街角上抽烟的老人就是这个模样，那些依然戴草帽、穿着凉鞋和宽松白裤子的老人。现在埃斯科瓦尔面带微笑，嘴唇闭着，这样他的万宝路香烟才不会从嘴里掉到桌子上，但他依然在笑。他从薄文件夹里拿出一张带光泽的黑白照片，让它顺着桌子朝弗莱彻溜过来。“这是你朋友托马斯。不大好看，对吧？”&lt;&#x2F;p&gt;
&lt;p&gt;这是一张高对比度的正面照片，它让弗莱彻想起了四五十年代那个名气不大的新闻摄影师的作品，那个自称“维吉”的家伙。这是一张死人的照片，眼睛睁着，闪光灯的灯光映在里面，给了它们些许生机。没有血，只有一处疤痕，但没有血，但你还是一眼就能看出这个人死了。他的头发被梳过，还能看到梳子留下的齿痕，以及他眼睛里微小的光斑，但那是反射的灯光。你立刻就知道这个人死了。&lt;&#x2F;p&gt;
&lt;p&gt;那个疤痕在左太阳穴上，呈彗星状，看上去像是火药灼伤，但是没有弹孔，也没有血，头骨也没有变形。即使是点二二这样的小口径手枪，在能留下火药灼伤的距离上射击，也会把头骨挤压变形。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔把照片拿回去，放到文件夹里，合上文件夹，耸了耸肩，好像在说，看到了吗？看到发生什么了吗？他耸肩的时候，烟灰从烟上落到了桌面上，他用一只胖手把烟灰扒拉到灰色的地砖上。&lt;&#x2F;p&gt;
&lt;p&gt;“我们真的不愿麻烦你，”埃斯科瓦尔说，“我们为什么要麻烦你呢？这是个小国，我们是小国里的小人物，《纽约时报》是个大国的大报。当然，我们有自尊，但是我们也有……”埃斯科瓦尔用一根手指敲着太阳穴，“你明白吗？”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻点点头。他眼前不停地浮现托马斯的影像，尽管照片已经放回文件夹里了，他还是能看到托马斯，以及梳子在他头发上留下的齿痕。他吃过托马斯的妻子烹饪的食物，坐在地板上跟托马斯最小的孩子——一个大约五岁的小女孩——一起看过动画片《猫和老鼠》，里面本就不多的对话还是西班牙语的。&lt;&#x2F;p&gt;
&lt;p&gt;“我们不想打扰你，”埃斯科瓦尔说着，腾起的烟雾在他脸上分散开来，从耳边缭绕而上，“但是我们已经观察你很久了。你没有看到我们——也许是因为你太大了，而我们太渺小了——但是我们在观察。我们知道你知道托马斯知道的信息，我们就去找了他，努力让他说出自己知道的信息，这样我们就不用打扰你了，但他就是不说。最后，我们让这位海因茨来尝试让他开口。海因茨，给弗莱彻先生看看你是如何尝试让托马斯开口的，当时托马斯就坐在弗莱彻先生现在的位置上。”&lt;&#x2F;p&gt;
&lt;p&gt;“可以。”海因茨说，他说的英语是带鼻音的纽约腔。他头上光秃秃的，只是耳朵周围有一小撮头发，戴一副小眼镜。埃斯科瓦尔看上去像是电影里的墨西哥人，那个女人看上去像《科学怪人的新娘》中的爱尔莎·兰切斯特，海因茨则像是一则电视广告中的男演员，跟你解释为什么伊克赛锭是治疗头痛的最佳药物。他绕过桌子，走到小推车旁，用兼有顽皮和阴险意味的表情看了看弗莱彻，然后掀开盖在上面的布。&lt;&#x2F;p&gt;
&lt;p&gt;布下面有台机器，机器上有几个刻度盘和几盏灯，现在都是暗的。弗莱彻起初以为这是一台测谎仪——这有一定的道理——但是在那个简陋的控制面板前面，有一个带橡胶柄的物体，用一根粗壮的黑色电线与机器的一侧相连。它看上去像一支铁笔或是某种钢笔，不过没有钢笔尖。那东西只是慢慢变细，变成了一个钝金属头。&lt;&#x2F;p&gt;
&lt;p&gt;机器下面是个架子，架子上有一块标记着“德科”的汽车电池。电池的电极上覆着橡皮碗，电线从橡皮碗里伸出来，连接到机器后部。不，不是测谎仪。不过可能对这些人来说是的。&lt;&#x2F;p&gt;
&lt;p&gt;就像一个喜欢解释自己职业的人一样，海因茨活泼地说道：“这很简单，真的，就是把神经学家用来对单极神经症患者实施电击的装置改进了一下，使这台机器能施加一个强大得多的震颤。我发现，疼痛倒是其次，大部分人甚至都不记得疼痛，让他们渴望开口的是对这个过程的厌恶。这几乎可以称为返祖现象。将来有一天我希望能写篇论文。”&lt;&#x2F;p&gt;
&lt;p&gt;海因茨握着绝缘的橡胶柄拿起铁笔，把它举到眼前。&lt;&#x2F;p&gt;
&lt;p&gt;“这个可以接触到四肢……躯干……生殖器，当然……但它也能插入——请原谅我粗陋的用词——阳光照不到的地方。一个大便被电击过的人永远也忘不了，弗莱彻先生。”&lt;&#x2F;p&gt;
&lt;p&gt;“你这样对待托马斯了吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“没有。”海因茨说，然后小心翼翼地把铁笔放回电击发生器前面，“他的手上被施加了一半功率的电击，这是为了让他见识一下自己要面临的是什么，但他依然拒绝讨论秃鹰……”&lt;&#x2F;p&gt;
&lt;p&gt;“算了吧。”科学怪人的新娘说道。&lt;&#x2F;p&gt;
&lt;p&gt;“请原谅。当他依然拒绝说出我们希望知道的信息，我就把魔杖放到了他的太阳穴上，再次小心谨慎地实施了电击。经过了仔细斟酌，我向你保证，一半的功率，丝毫不多。他一阵抽搐，然后就死了。我相信可能是癫痫发作。他有癫痫病史吗，你知道吗，弗莱彻先生？”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻摇摇头。&lt;&#x2F;p&gt;
&lt;p&gt;“尽管如此，我相信事情就是这样。尸检显示他的心脏没有问题。”海因茨把手指修长的双手叠放在身前，看着埃斯科瓦尔。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔夹下嘴角的香烟，看了看，然后把它扔到了灰色的地板上，踩了一脚。然后，他看着弗莱彻，脸上露出微笑。“当然，非常遗憾。现在我问你几个问题，弗莱彻先生。其中很多——我坦白告诉你——都是托马斯·埃雷拉拒绝回答的。我希望你不要拒绝，弗莱彻先生。我喜欢你，你有尊严地坐在那里，不哭泣，不乞求，也不尿裤子。我喜欢你，我知道你只做自己相信的事，这是爱国精神。所以我跟你说吧，我的朋友，你最好痛快并如实地回答我的问题。你不会想让海因茨动用他的机器的。”&lt;&#x2F;p&gt;
&lt;p&gt;“我说了我会帮你的。”弗莱彻说，死亡比头顶罩在精巧的铁丝笼里的灯离得都近。不幸的是，疼痛离得还要更近。而秃鹰努奈兹有多近呢？比这三个人猜得更近，但是也没有近到可以帮他的地步。如果埃斯科瓦尔和科学怪人的新娘再等上两天，也许甚至是再等二十四个小时……但是他们没有等，于是他就来到了这间死室里。现在他将看到自己是什么成色。&lt;&#x2F;p&gt;
&lt;p&gt;“你是说过，最好说话算数，”那个女人非常清晰地说道，“我们可不是瞎胡闹的，外国佬。”&lt;&#x2F;p&gt;
&lt;p&gt;“我知道你们不是瞎胡闹。”弗莱彻用叹息而颤抖的声音说。&lt;&#x2F;p&gt;
&lt;p&gt;“我想，你现在想抽烟了吧。”埃斯科瓦尔说，当弗莱彻摇了摇头，他自己拿了一支，点着，然后似乎陷入了沉思。最后，他抬起头。那支烟像上一支一样插在他的脸部中央。“努奈兹很快会来吗？”他问道，“就像哪部电影里的佐罗？”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻点点头。&lt;&#x2F;p&gt;
&lt;p&gt;“多快？”&lt;&#x2F;p&gt;
&lt;p&gt;“我不知道。”弗莱彻非常在意站在那台可恨的机器旁边的海因茨，他手指修长的双手叠放在身前，看上去随时准备着，提示一来，就开始谈论镇痛药。他也同样在意站在他右侧视野边缘的拉蒙。他看不到他，但猜到拉蒙的一只手就放在手枪柄上。下一个问题来了。&lt;&#x2F;p&gt;
&lt;p&gt;“他来了之后，会进攻堪迪多山区里的守备部队，圣特雷泽的守备部队，还是直接进城呢？”&lt;&#x2F;p&gt;
&lt;p&gt;“圣特雷泽的守备部队。”弗莱彻说。&lt;&#x2F;p&gt;
&lt;p&gt;他会进城，托马斯这么说过，当时他的妻子和女儿肩并肩坐在地板上，边从一个边沿有蓝条纹的白碗中拿爆米花吃边看动画片。弗莱彻什么都记得。他会直捣心脏，不会瞎胡闹。他会攻击心脏，就像杀死吸血鬼一样。&lt;&#x2F;p&gt;
&lt;p&gt;“他不想要电视台？”埃斯科瓦尔问道，“或是政府广播电台？”&lt;&#x2F;p&gt;
&lt;p&gt;先拿下市民山上的广播电台，动画片播着的时候托马斯说道。那时播的是《大野狼与哔哔鸟》，哔哔鸟总是身后拖着一股烟尘，后面跟着大野狼使用的任何一种哔哔鸟高端捕捉装置，然后哔——哔一声，跑远了。&lt;&#x2F;p&gt;
&lt;p&gt;“不，”弗莱彻说道，“我被告知，秃鹰说‘让他们嚷嚷吧’。”&lt;&#x2F;p&gt;
&lt;p&gt;“他有火箭弹吗？空对地导弹？便携式防空导弹？”&lt;&#x2F;p&gt;
&lt;p&gt;“有。”这是真话。&lt;&#x2F;p&gt;
&lt;p&gt;“多吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“不多。”这个不是真话。努奈兹手上有超过六十发。这个国家的破烂空军满打满算也就十几架直升机——都是些飞不了多久的劣质俄罗斯直升机。&lt;&#x2F;p&gt;
&lt;p&gt;科学怪人的新娘敲了敲埃斯科瓦尔的肩膀，埃斯科瓦尔朝她侧过身子。她对他耳语了几句，这次没用手遮着。她不需要用手遮住嘴，因为她的嘴唇几乎没动。弗莱彻觉得这项技能跟监狱有关，他从未去过监狱，但他看过电影。当埃斯科瓦尔耳语回去的时候，他抬起一只胖手遮住自己的嘴。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻边看着他们边等，他知道这个女人在跟埃斯科瓦尔说他在撒谎，很快海因茨的论文——《浅谈对不愿配合的讯问对象的大便进行电击及其结果》——就会有更多的资料了。弗莱彻发现这份恐惧在他心里创造了两个新人，至少两个，他们都是弗莱彻的替身，对这事的发展前景都有各自毫无价值却又相当强势的看法。一个悲观中带着希望，另一个则只有悲观。悲观中带着希望的那个是“也许他们会的”先生，也就是也许他们真的会放我走，也许真有一辆车停在五月五日大街上，就在拐角处，也许他们真的要把我从这个国家踢出去，也许我明天上午真的会降落在迈阿密，恐惧但还活着，整件事看起来就像一场噩梦。&lt;&#x2F;p&gt;
&lt;p&gt;另一个，只有悲观的那个，叫“即使这样”先生。弗莱彻也许能够通过发动突然袭击让他们大吃一惊——他挨过揍，而他们傲慢自大，所以是的，他也许能够出其不意。&lt;&#x2F;p&gt;
&lt;p&gt;但是，即使这样，拉蒙也会开枪杀了我。&lt;&#x2F;p&gt;
&lt;p&gt;如果他袭击拉蒙呢？设法拿到他的枪？不太可能但也不是完全不可能。那个家伙很胖，至少比埃斯科瓦尔重三十磅，呼吸的时候呼哧呼哧的。&lt;&#x2F;p&gt;
&lt;p&gt;即使这样，埃斯科瓦尔和海因茨也会在我开枪之前把我制服。&lt;&#x2F;p&gt;
&lt;p&gt;也许，那个女人也会；她说话时嘴唇都不动；她可能还会柔道、空手道或者跆拳道。如果能把他们全都打死，并设法逃出了这个房间呢？&lt;&#x2F;p&gt;
&lt;p&gt;即使这样，还有遍地的守卫——他们听到枪声后会冲过来。&lt;&#x2F;p&gt;
&lt;p&gt;当然，像这样的房间往往都装了隔音设备，原因显而易见，但是，即使他走上楼梯，出了门，到了大街上，事情才刚刚开始。而且“即使这样”先生会如影随形地跟着他，无论他跑到哪里。&lt;&#x2F;p&gt;
&lt;p&gt;问题是，无论是“也许他们会的”先生还是“即使这样”先生都无法帮他。他们只是让人分心的事物，是他越发狂躁的头脑试图欺骗自己的谎言。像他这样的人，不是靠说实话就能离开这样的房间的。他倒不如试着创造出第三个替身，“也许我能”先生，然后放手一搏。他不会有任何损失。他只需确保他们不知道他明白这一点就行了。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔与科学怪人的新娘分开了，他把烟放回嘴里，对弗莱彻露出了悲伤的微笑，说：“朋友，你在说谎。”&lt;&#x2F;p&gt;
&lt;p&gt;“不，”他说，“我为什么要说谎？你不认为我想离开这里吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“我们不知道你为什么撒谎，”那个脸部细长的女人说，“我们不知道你起初为什么会选择协助努奈兹。有些人说美国人天真烂漫，我毫不怀疑其中有这个因素，但绝不会仅仅如此。没关系。我相信你准备好演示了吧，海因茨？”&lt;&#x2F;p&gt;
&lt;p&gt;海因茨面带微笑，转向他的机器，打开一个开关。随之传来一阵嗡嗡声，那种旧式收音机启动时的声响，接着三盏绿灯亮了起来。&lt;&#x2F;p&gt;
&lt;p&gt;“不。”弗莱彻说道，同时想要站起身，他觉得他可以显得惊慌失措，为什么不呢？他确实惊慌失措了，或者说差点惊慌失措了。当然，想到海因茨用那个为侏儒族准备的不锈钢人造阴茎碰他，他就感觉害怕。但是在内心深处，还有另一个他，非常冷静而又深谋远虑，知道他至少要接受一次电击。他并没有什么清晰明了的计划，但是他必须至少接受一次电击。“也许我能”先生坚持事情是这样的。&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔朝拉蒙点点头。&lt;&#x2F;p&gt;
&lt;p&gt;“你们不能这么做，我是美国公民，我为《纽约时报》供稿，他们知道我身在何处。”&lt;&#x2F;p&gt;
&lt;p&gt;一只有力的手按在了他的左肩上，把他按回椅子里。与此同时，一把手枪的枪管深深地插入了他的右耳。疼痛如此突如其来，弗莱彻的眼前出现了明亮的斑点，疯狂地跳跃着。他尖叫起来，但声音听上去发闷。当然，因为一只耳朵塞住了——一只耳朵被塞住了。&lt;&#x2F;p&gt;
&lt;p&gt;“伸出一只手，弗莱彻先生。”埃斯科瓦尔说，他叼着烟的嘴边又露出了笑容。&lt;&#x2F;p&gt;
&lt;p&gt;“右手。”海因茨说。他像握铅笔一样握着那支铁笔的黑色橡胶柄，他的机器在嗡嗡作响。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻右手紧紧地抓住椅子扶手。他已经不确定自己是否在表演了——表演与惊慌之间的界限不见了。&lt;&#x2F;p&gt;
&lt;p&gt;“伸出来。”那个女人说道。她的双手撑在桌面上，上身探到双手上方。她的两个眼珠上各有一个光点，把她的黑眼睛变成了钉子头。“伸出来，否则后果自负。”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻逐渐松开握着椅子扶手的手指，但是没等他抬起手，海因茨就冲上去，把那支钝铁笔的笔尖戳到了弗莱彻的左手手背上。也许他的目标本就是它——而且它更靠近海因茨站立的地方。&lt;&#x2F;p&gt;
&lt;p&gt;随之传来一声噼啪声，非常纤细，就像一根小细枝，弗莱彻的左手紧紧地攥成了拳头，指甲都扎进了手掌。一种跳动的不适从手腕迅速传到前臂，传到猛地落下的胳膊肘，最后传到他的肩膀上，到颈部的左侧，最后到达了牙床。他甚至能在左侧的牙齿或牙齿填充物上感觉到那种冲击力。他哼了一声，咬住舌头，身体迅速倒向椅子一侧。插在他耳朵里的那把枪被拿走了，拉蒙抓住了他。否则，弗莱彻就摔在灰色的地砖上了。&lt;&#x2F;p&gt;
&lt;p&gt;那根铁笔也收起来了。在它接触过的地方，左手无名指的第二、三指关节之间，有个灼热的小点。尽管他的手臂依然刺痛，肌肉还在抽搐，但这才是唯一真正的疼痛。被如此电击，确实很可怕。哪怕是开枪打死自己的母亲，弗莱彻也不要再被那个不锈钢人造小阴茎碰一下。海因茨称之为返祖现象。将来有一天，他希望能写篇论文。&lt;&#x2F;p&gt;
&lt;p&gt;海因茨突然把脸凑了过来，嘴唇向后咧着，露出了牙齿，眼睛放光，脸上挂着白痴般的笑容。“你怎么形容它？”他叫道，“趁着这经历还很新鲜，你怎么形容它？”&lt;&#x2F;p&gt;
&lt;p&gt;“就像要死了一样。”弗莱彻说道，那声音听上去并不像自己的。&lt;&#x2F;p&gt;
&lt;p&gt;海因茨看起来万分激动。“没错！你们看，他尿裤子了！不多，只有一点，但是没错……那么弗莱彻先生……”&lt;&#x2F;p&gt;
&lt;p&gt;“闪开，”科学怪人的新娘说道，“别傻头傻脑的。我们先把正事做好。”&lt;&#x2F;p&gt;
&lt;p&gt;“而这才是四分之一的电力。”海因茨用带着畏怯的机密口吻说道，然后站到一边，重新把双手叠放在身前。&lt;&#x2F;p&gt;
&lt;p&gt;“弗莱彻先生，你口是心非。”埃斯科瓦尔用责备的口吻说道。他从嘴里拿下烟屁股，看了看，然后扔到地上。&lt;&#x2F;p&gt;
&lt;p&gt;烟，弗莱彻想。烟，是的。电击严重地损害了他的手臂——肌肉依然在抽搐，还能看到手掌里有血——但似乎让他的头脑恢复了一些，有精神了一些。当然，休克疗法的效果本该如此。&lt;&#x2F;p&gt;
&lt;p&gt;“不……我想帮助……”&lt;&#x2F;p&gt;
&lt;p&gt;但埃斯科瓦尔摇摇头说：“我们知道努奈兹会进城。我们还知道他在来的路上会拿下广播电台，如果可以的话……而且他大概也能做到。”&lt;&#x2F;p&gt;
&lt;p&gt;“暂时的，”科学怪人的新娘说道，“只是暂时的。”&lt;&#x2F;p&gt;
&lt;p&gt;埃斯科瓦尔点点头说：“只是暂时的。也就几天吧，也许就几个钟头。这个无关紧要。重要的是，我们给了你一段绳子，看你会不会做个绳套……结果你真的做了。”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻重新在椅子上坐好，拉蒙后退了一两步。弗莱彻看着左手手背，上面有个小斑点，就像照片上托马斯脸侧的那个一样。杀了弗莱彻的朋友的海因茨站在他的机器旁边，双手叠放在身前，脸上带着笑，也许在思考他要写的论文，文字、图表和标注着“图 1”“图 2”的小照片，一直到“图 994”。&lt;&#x2F;p&gt;
&lt;p&gt;“弗莱彻先生？”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻看着埃斯科瓦尔，伸直左手手指。那只手臂的肌肉还在抽搐，但是抽搐正在消退。他想，等时候到了，他就能用这只手臂了。如果拉蒙开枪打了他，那又怎样？让海因茨试试他的机器能不能让人起死回生吧。&lt;&#x2F;p&gt;
&lt;p&gt;“你在听我们说话吗，弗莱彻先生？”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻点点头。&lt;&#x2F;p&gt;
&lt;p&gt;“你为什么想保护这个努奈兹？”埃斯科瓦尔问道，“你为什么宁愿受苦也要保护这个人？他吸食可卡因。如果他赢得了革命的胜利，就会自称为终身总统，并把可卡因卖到你的国家。他周日会去参加弥撒，一周的其他时间都在干他那些吸食可卡因的妓女。最后谁赢了呢？也许是共产党人，也许是联合果品公司，反正不是人民。”埃斯科瓦尔低声说道。他目光温和。“帮帮我们，弗莱彻先生，凭你自己的意愿，不要让我们逼你帮我们，不要让我们拉紧绳子。”他抬头从那浓密的一字眉下看着弗莱彻，他用可卡犬似的温和目光看着他，“你仍然可以坐上那架飞往迈阿密的飞机，回去的途中你会想喝一杯，对吧？”&lt;&#x2F;p&gt;
&lt;p&gt;“对，”弗莱彻说，“我会帮助你们。”&lt;&#x2F;p&gt;
&lt;p&gt;“啊，好的。”埃斯科瓦尔露出了笑容，然后看着那个女人。&lt;&#x2F;p&gt;
&lt;p&gt;“他有火箭弹吗？”她问道。&lt;&#x2F;p&gt;
&lt;p&gt;“有。”&lt;&#x2F;p&gt;
&lt;p&gt;“多吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“至少六十枚。”&lt;&#x2F;p&gt;
&lt;p&gt;“俄国货？”&lt;&#x2F;p&gt;
&lt;p&gt;“有些是。其他的用板条箱装着，上面有以色列标记，但是导弹弹体上的文字看上去像日语。”&lt;&#x2F;p&gt;
&lt;p&gt;她点点头，看上去还算满意。埃斯科瓦尔满脸堆笑。&lt;&#x2F;p&gt;
&lt;p&gt;“它们现在何处？”&lt;&#x2F;p&gt;
&lt;p&gt;“到处都是，你没办法发动突然袭击然后把它们一锅端了。奥尔蒂斯可能还有十几枚。”弗莱彻知道这不是真的。&lt;&#x2F;p&gt;
&lt;p&gt;“那努奈兹呢？”她问道，“秃鹰在奥尔蒂斯吗？”&lt;&#x2F;p&gt;
&lt;p&gt;她知道的更多。“他在丛林里。我最后一次得到的消息是，他在贝伦省。”这是谎话。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻上次见到努奈兹时，还是在首都郊区的克里斯托巴尔，他大概还在那里。但是如果埃斯科瓦尔和那个女人知道这一点，也就不需要这场讯问了。再说，他们为什么就笃定努奈兹会把自己的行踪透露给弗莱彻呢？在这样一个国家里，埃斯科瓦尔、海因茨和科学怪人的新娘只是你众多敌人中的三个，你为什么要把自己的地址告诉一个美国报社记者呢？一定是疯了！一个美国报社记者为什么会牵涉其中呢？但是他们已经不再考虑这个了，至少是现在。&lt;&#x2F;p&gt;
&lt;p&gt;“他在城里跟谁联系？”女人问道，“不是他玩的女人，是他联系的人。”&lt;&#x2F;p&gt;
&lt;p&gt;如果他打算采取行动的话，那么，此时此刻，他必须得开始行动了。情况是，现在已经不再安全了，他们有可能听出他在说谎。&lt;&#x2F;p&gt;
&lt;p&gt;“有个男的……”他说道，然后顿了顿，“现在我能抽支烟吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“弗莱彻先生！当然可以！”一时间，埃斯科瓦尔成了忧心的晚宴主持人。弗莱彻不觉得他在演戏。埃斯科瓦尔拿起那盒红白两色的烟——那种任何一个自由的男人或女人都可以在任何一个弗莱彻记忆中四十三号大街上的那种报亭买到的香烟——然后抖出一支。弗莱彻接过来，他知道，也许在它燃到过滤嘴之前他就没命了，不在这个星球上了。他什么都感觉不到，只有左臂肌肉逐渐消退的抽搐以及左侧牙齿填充物中一股怪异的烘焙味。&lt;&#x2F;p&gt;
&lt;p&gt;他把烟放在两唇间。埃斯科瓦尔上身又往前凑了凑，然后咔嗒一声拨开镀金打火机的盖子。他滑动滚轮，打火机喷出一束火焰。弗莱彻注意到海因茨的机器像一台旧收音机一样嗡嗡作响——那种机身后面带晶体管的收音机。他意识到那个被他丝毫没有幽默感地认作科学怪人新娘的女人正看着他，就像动画片里大野狼看着哔哔鸟一样。他感受着自己心脏的跳动，感受着圆形的香烟叼在嘴里的熟悉的感觉——“一个装着奇异的快乐的管子”，某个剧作家曾经这么称呼它，感受着心脏的跳动在难以置信地变缓。上个月，他曾被要求在国际俱乐部做一场午餐后演讲，那里都是些外国新闻界怪才，那时他的心脏都比现在跳得快。&lt;&#x2F;p&gt;
&lt;p&gt;身在此处，那又怎样？连盲人都能找到出路——连他的妹妹都可以，在河边。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻朝火焰弯下腰去。万宝路香烟的一头着了，发出红光。弗莱彻深吸一口，立刻开始咳嗽。三年没有抽烟之后，不咳嗽就更难了。他靠回椅背，咳嗽中又添上了一阵刺耳而令人窒息的低吼。他全身发抖，手肘外伸，脑袋歪向左侧，双脚不停地敲击地面。最精彩的是，他想起了儿时一项古老的天赋，翻起了白眼。这期间，他始终没有丢掉那支烟。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻从未见过癫痫发作，尽管他隐约记得帕蒂·杜克在电影《海伦·凯勒》中曾经演过一次。他无法知道自己是否跟癫痫患者的表现一样，但他希望托马斯·埃雷拉的意外死亡能让他们忽略掉他表演中所有的瑕疵。&lt;&#x2F;p&gt;
&lt;p&gt;“该死，不会又来一次吧！”海因茨用接近尖叫的声音喊道。要是在电影里，这一幕会很好笑。&lt;&#x2F;p&gt;
&lt;p&gt;“快抓住他，拉蒙！”埃斯科瓦尔用西班牙语喊道，同时想要站起身来，但起身的时候那肉嘟嘟的大腿重重地撞在桌子上，结果他又砰的一声坐下了。那个女人没有动弹，弗莱彻想：她起疑心了。我觉得她可能还不知道这一点，但她确实比埃斯科瓦尔聪明，聪明得多，而她起疑心了。&lt;&#x2F;p&gt;
&lt;p&gt;这是真的吗？他眼睛上翻，只能模糊地看到她的轮廓，不足以准确知道事态如何……但是他就是知道。不过这又有什么关系？表演已经开始了，他们会跟着演下去的，而且会很快地演下去。&lt;&#x2F;p&gt;
&lt;p&gt;“拉蒙！”埃斯科瓦尔喊道，“别让他摔到地上了，你这白痴！别让他把舌头吞……”&lt;&#x2F;p&gt;
&lt;p&gt;拉蒙弯下腰，抓住弗莱彻颤抖的肩膀，也许是想把弗莱彻的头扶正，也许是想确保弗莱彻的舌头安全无虞，没有被吞下去（谁都没办法把自己的舌头吞下去，除非被切掉了，拉蒙显然没有看过《急诊室的故事》）。不管他想干什么，都没有关系。当他的脸到了弗莱彻够得到的地方时，弗莱彻把那根燃烧的万宝路香烟戳进了拉蒙的眼睛。&lt;&#x2F;p&gt;
&lt;p&gt;拉蒙一声尖叫，身体猛地后退。他的右手朝脸上抬去，那根仍在燃烧的香烟歪歪扭扭地从他眼窝里垂下来，但他的左手还放在弗莱彻的肩膀上，此刻正紧紧地钳着。拉蒙后退的时候，把弗莱彻的椅子拽倒了。弗莱彻从椅子里滑出来，翻过身，站了起来。&lt;&#x2F;p&gt;
&lt;p&gt;海因茨在尖叫着什么，也许是在说话，但在弗莱彻看来，他就像一个十来岁的小女孩见到了偶像——也许是汉森兄弟中的一个。埃斯科瓦尔没发出一点声响，这不太妙。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻没有回头看桌子，他不用看都知道埃斯科瓦尔正朝他扑来。相反，他迅速伸出双手，抓住拉蒙左轮手枪的枪柄，将枪从枪套里拔了出来。弗莱彻觉得拉蒙甚至都不知道枪不见了。他正一边尖声说着西班牙语，一边用手抓脸。他伸手想去拨开那支烟，但是那支烟没有掉下来，而是折断了，燃烧的那头依然插在他的眼睛里。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻转过身。埃斯科瓦尔就在那儿，已经绕过那张长桌的远端，伸出两只胖手朝他拍过来。埃斯科瓦尔看起来不再像一个偶尔上电视播报天气、谈论高压系统的家伙了。&lt;&#x2F;p&gt;
&lt;p&gt;“抓住这个狗娘养的美国佬！”那个女人愤怒地喊道。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻把那张翻倒的椅子踢到埃斯科瓦尔身前，他随之绊到了椅子上。他倒下去的时候，弗莱彻把枪伸出来，依然用两只手握着，对着埃斯科瓦尔的头顶开了一枪。埃斯科瓦尔的头发跳了一下，团状的血从他的鼻孔、嘴以及下巴下方子弹穿出来的地方流出来。埃斯科瓦尔面朝下摔在了自己满是鲜血的脸上，双脚撞上了灰色的地砖。一股大便味从他垂死的身体上冒出来。&lt;&#x2F;p&gt;
&lt;p&gt;那个女人不在椅子上坐着了，但她丝毫没有靠近弗莱彻的打算。她朝门口跑去，穿着那件难看的黑裙子，动作像只鹿一样敏捷。拉蒙还在咆哮，此刻他处在弗莱彻和那个女人之间。他伸着手朝弗莱彻扑来，想抓住他的脖子，把他掐死。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻朝他开了两枪，一枪打在胸口上，一枪打在脸上。脸上的那枪打掉了拉蒙的鼻子和右脸的一大部分，但这个穿着棕色制服的大块头依然咆哮着扑过来，那支烟依然插在他的眼睛里，他那香肠似的大手指——其中一根上戴着一枚银戒指——一张一合的。&lt;&#x2F;p&gt;
&lt;p&gt;拉蒙被埃斯科瓦尔绊倒在地，就像埃斯科瓦尔被椅子绊倒一样。弗莱彻想到了一幅著名的画，画的是一排鱼，每条鱼都张着嘴去吃紧邻着的比它小一点的鱼。那幅画叫《食物链》。&lt;&#x2F;p&gt;
&lt;p&gt;拉蒙趴在地上，虽然中了两枪，但还是伸出一只手，紧紧钳住了弗莱彻的脚踝。弗莱彻一个趔趄，挣脱开了，结果开枪打中了天花板，灰尘落了下来，现在房间里一股浓重的硝烟味。弗莱彻朝门口看去。那个女人还在那里，一只手猛拉门把手，另一只手笨拙地摆弄着那把回转锁，但就是开不了门。如果能打开，她早就打开了——现在应该已经跑过走廊，边喊着“杀人啦”边跑上台阶。&lt;&#x2F;p&gt;
&lt;p&gt;“喂，”弗莱彻说，现在他觉得自己只是一个周四晚上去保龄球俱乐部打了一局完美比赛的普通人，“喂，你这个婊子，看我。”&lt;&#x2F;p&gt;
&lt;p&gt;她转过身，两手手掌紧贴着门，仿佛撑着门以防它倒下。她的眼睛里还是有钉子头似的光点。她开始对他说他不能伤害她，起初用西班牙语说，犹豫了一下，又用英语说了一遍：“你不能让我受到任何伤害，弗莱彻先生，只有我能确保你能从这里安全离开，我向你庄严宣誓，但是你一定不能伤害我。”&lt;&#x2F;p&gt;
&lt;p&gt;在他们身后，海因茨正像一个恋爱中（又或者恐惧中）的孩子那样哭泣。此刻，弗莱彻离那个女人很近——女人背靠着死室的门，双手紧贴着门的金属表面——他能闻到某种又苦又甜的香水味。她的眼睛瞪得有杏仁那么大，头发从头顶向后梳。我们可不是瞎胡闹的，她这么对他说过，弗莱彻想，我也不是瞎胡闹的。&lt;&#x2F;p&gt;
&lt;p&gt;那个女人从他的眼睛里看到了自己将死的征兆，语速变得更快了，屁股、后背和手掌也和金属门贴得更紧了，仿佛只要足够用力，自己就可以从门里穿出去。她说她有证件，写着他名字的证件，她说她愿意把这些证件交给他。她还有钱，很多钱，还有金子；有个瑞士银行账号，他可以用她家里的电脑登录。弗莱彻突然意识到，可能只有一个办法能从根本上辨别恶棍和爱国者：当死亡像潮水一样淹没他们时，爱国者会发表演讲；而恶棍，会告诉你他们的瑞士银行账号，并帮你登录。&lt;&#x2F;p&gt;
&lt;p&gt;“闭嘴。”弗莱彻说。除非这个房间真的进行了良好的隔音处理，否则很可能有十几个士兵已经在赶来的路上了。他没办法跟他们对峙，但这个女人绝对跑不掉。&lt;&#x2F;p&gt;
&lt;p&gt;她闭上了嘴，依然背靠门站着，手掌贴在门上，眼睛里依然闪着钉子头似的光。她多大了？弗莱彻想，六十五岁？她在这个房间或者类似的房间里杀了多少人？她下令杀过多少人？&lt;&#x2F;p&gt;
&lt;p&gt;“给我听着，”弗莱彻说，“你在听吗？”&lt;&#x2F;p&gt;
&lt;p&gt;毫无疑问的是，她在等着听赶来的救援声。去梦里听吧，弗莱彻想。&lt;&#x2F;p&gt;
&lt;p&gt;“那个天气预报员说秃鹰吸食可卡因，说他是共产党的跟屁虫，联合果品公司的男妓，谁知道还有什么。也许他确实是这其中的一些，也许一个都不是。我不知道，也不在乎。我知道我在乎的是，他并不负责指挥一九九四年夏天沿着卡亚河巡逻的那队士兵。努奈兹当时在纽约，在纽约大学。所以，那群发现了正离开卡亚镇的修女的那帮人中没有他。那些人把三个修女的脑袋挂在棍子上，插在岸边。中间的那个是我妹妹。”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻朝她开了两枪，然后拉蒙的手枪就没了子弹。不过两枪就够了。那个女人顺着门滑下去，那双带亮的眼睛死死地盯着弗莱彻。该死的那个人是你，那双眼睛仿佛在说，我不明白，该死的那个人是你。她的手抓住了喉咙，一次，两次，然后不动了。&lt;&#x2F;p&gt;
&lt;p&gt;她的眼睛在他身上停留了片刻——那双像有着一肚子故事要说的老水手般明亮的眼睛——然后她的头垂了下去。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻转过身，举着拉蒙的手枪朝海因茨走去，走路的时候发现自己右脚上的鞋不见了。他看了看拉蒙，后者依然面朝下躺在逐渐扩大的血泊里，手里还抓着弗莱彻的平底便鞋，就像一只临死还紧抓着鸡不放的黄鼠狼。弗莱彻停下脚步，穿上鞋。&lt;&#x2F;p&gt;
&lt;p&gt;海因茨转身，仿佛要逃跑，于是弗莱彻把枪对准他。枪里已经没子弹了，但是海因茨好像还不知道。他也许是想起了在这个死室里根本无路可逃，所以不再移动，只是盯着迎面而来的手枪以及手枪后面的人。他哭了起来。“后退一步。”弗莱彻说道，海因茨哭着后退了一步。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻在海因茨的机器前停下。海因茨用的是哪个词来着？返祖现象，对吧？&lt;&#x2F;p&gt;
&lt;p&gt;小推车上的这台机器对海因茨这样的人来说似乎有些过于简单了——三个刻度盘，一个标着“开”和“关”的开关（现在处在“关”的位置），外加一个变阻器。变阻器已经被调过，上面的白线大致指着十一点的方向。刻度盘上的指针都平躺在零度位置上。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻拿起那支铁笔，朝海因茨递过去。海因茨带着哭腔，摇摇头，然后又后退了一步。他脸上的肌肉收紧，五官拧在一起，像悲伤至极时发出的讥笑，然后又松弛下来。他满头大汗，泪流满面。这后退的第二步让他几乎走到了一盏被铁丝笼罩着的灯的正下方，影子落在脚边。&lt;&#x2F;p&gt;
&lt;p&gt;“接着，不然我杀了你，”弗莱彻说，“你要是再后退一步，我也杀了你。”他不该为这个耽误工夫，这不管怎样都觉得不妥，但是弗莱彻没法控制自己。他眼前不停地浮现托马斯的那张照片，那双睁着的眼睛，那个像火药灼伤的烧焦的痕迹。&lt;&#x2F;p&gt;
&lt;p&gt;海因茨抽泣着接过那个钢笔形状的钝物，小心翼翼地只拿着上面的橡胶绝缘套筒。&lt;&#x2F;p&gt;
&lt;p&gt;“把它放到嘴里，”弗莱彻说，“像含棒棒糖一样含住它。”&lt;&#x2F;p&gt;
&lt;p&gt;“不！”海因茨哭哭啼啼地喊道，他摇着头，水滴从脸上飞出去。他的脸依然不断地扭曲：收紧、松弛，收紧、松弛。他的一个鼻孔处有个绿色的鼻涕泡，它随着海因茨急促的呼吸扩大又收缩，就是不破。弗莱彻从未目睹过这样的场面。“不，你不能逼我！”&lt;&#x2F;p&gt;
&lt;p&gt;但是海因茨知道弗莱彻可以这么做。科学怪人的新娘也许不会相信，埃斯科瓦尔可能都没有时间相信，但海因茨知道他已经没有了拒绝的权利。他现在处在了托马斯·埃雷拉的位置，弗莱彻的位置。一方面，这就是复仇，但另一方面，又不是。认知是一种想法，想法在这里没有用处。在这里，眼见为实。&lt;&#x2F;p&gt;
&lt;p&gt;“把它放到嘴里，不然我就一枪打爆你的头。”弗莱彻说着把那把空枪对准海因茨的脸。海因茨发出一声恐怖的哀号，躲开了。这时，弗莱彻听到自己的声音低了下去，口吻透着信任和真挚。这在某种程度上让他想起了埃斯科瓦尔的声音。我们将会迎来一个低压系统，他想。我们将会迎来臭阵雨。“如果你快点照做，我就不会电击你。不过我得让你知道它是什么感觉。”&lt;&#x2F;p&gt;
&lt;p&gt;海因茨盯着弗莱彻。他的眼睛是蓝色的，镶着红边，眼眶里泪汪汪的。当然，他不相信弗莱彻，弗莱彻的话毫无道理，但是很显然海因茨还是想相信，因为，不论是否说得通，弗莱彻都在提出活命的可能。他只需再被推一步。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻露出微笑，说：“为了你的研究。”&lt;&#x2F;p&gt;
&lt;p&gt;海因茨被说服了——尽管没有被完全说服，但足以相信弗莱彻可能是“也许他会的”先生了。他把那根不锈钢棍子插到嘴里。他鼓起的眼睛盯着弗莱彻，在那双眼睛下面和那根突出的铁笔——它看上去不像一个棒棒糖，倒像一个老式的体温计——上面，那个绿色的鼻涕泡膨胀、收缩，膨胀、收缩。弗莱彻仍然用枪指着海因茨，把控制面板上的开关从“关”拨到“开”的位置，然后用力转动电阻器。旋钮上的白线从上午十一点的方向转到了下午五点钟的方向。&lt;&#x2F;p&gt;
&lt;p&gt;海因茨或许还有时间把那根铁笔吐出来，电流却让他咬紧了那根不锈钢棍子。这次的噼啪声更加响亮，像一根小树枝，而不是更末端的小细枝。海因茨的嘴唇咬得更紧了，他鼻孔里的那个绿色的黏液气泡爆开了，他的一只眼睛也爆开了。他全身仿佛都在衣服里振动。他双手在手腕处打成弯，修长的手指张开着，脸从白色变成了浅灰色，继而变成了暗紫色。他的鼻孔开始冒烟，另一只眼球弹到了脸颊上。那双移位的眼睛上方现在是两个原始状态下的眼窝，正用惊讶的神情盯着弗莱彻。海因茨一侧的脸颊不是被撕裂了就是被融掉了，一缕烟和一股浓烈的肉烧焦时的煳味从那个洞里冒出来，弗莱彻观察到了小小的火焰，橙色的和蓝色的——海因茨的嘴着火了，他的舌头像地毯一样在燃烧。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻的手指依然放在变阻器上，他把旋钮转回左侧，然后把开关拨到“关”的位置。那些之前一路摆到刻度盘上“+50”处的指针，立刻回到了“0”。电流离开他的那一刻，海因茨瘫倒在灰色的地砖上，倒下的过程中拖着嘴里的那道烟。那支铁笔掉了出来，弗莱彻看到上面粘着海因茨嘴唇的碎片。弗莱彻打了个嗝，喉咙里一股咸味往上涌，他闭紧了喉咙防止它冒出来。他没时间为自己对海因茨的所作所为呕吐，他可以晚点再考虑呕吐。但他还是多逗留了片刻，弯腰去看海因茨冒烟的嘴和移位的眼睛。“你会怎么形容？”他对着尸体问道，“趁现在经历新鲜出炉？怎么，无话可说？”&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻转过身，迅速穿过房间，绕过拉蒙。拉蒙还活着，正在呻吟，听上去像一个正在做噩梦的男人。&lt;&#x2F;p&gt;
&lt;p&gt;他记得那门是锁着的，拉蒙锁上的，钥匙应该挂在拉蒙腰带上的钥匙环上。弗莱彻回到守卫身边，跪下，从他的腰带上扯下钥匙环。拉蒙这时又摸索着抓住了弗莱彻的脚踝。弗莱彻手里还握着枪，他用枪柄连续地砸着拉蒙的头顶。有那么一会儿，抓着他的脚踝的手握得更紧了，然后手松开了。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻刚要起身，接着想到，子弹，他一定还有子弹，手枪里没子弹了。他接着想到自己不需要什么臭子弹，拉蒙的枪已经为他物尽所用了。在这个房间外面带枪，只会招来苍蝇似的士兵。&lt;&#x2F;p&gt;
&lt;p&gt;尽管如此，弗莱彻还是沿拉蒙的皮带摸了一圈，打开那个小皮革扣，最后找到了一个快速装弹器，用它给手枪装满子弹。他不知道自己能否狠下心对那些像托马斯一样要养家糊口的普通士兵开枪，但他可以射杀军官，而且至少可以给自己留一发子弹。他很可能没法离开这栋大楼——就像连续两次打出十二全中的完美比赛一样——但是他再也不会被带回这个房间，坐在海因茨机器旁边的椅子上了。&lt;&#x2F;p&gt;
&lt;p&gt;他用脚把地上科学怪人的新娘推开。她的眼睛呆滞地盯着天花板。弗莱彻渐渐明白过来，他活下来了，而其他人没有，他们正逐渐变凉。在他们的皮肤上，大量的细菌已经开始死亡。在情报部的地下室里，不该有这些不好的想法，一个已经——也许是暂时的，但更可能是永远——不存在的人的脑袋里不该有这些不好的想法。然而，他依然禁不住这么想。&lt;&#x2F;p&gt;
&lt;p&gt;第三把钥匙打开了门。弗莱彻把脑袋伸进走廊——煤渣砖砌的墙，下面的一半是绿色的，上面一半是脏兮兮的乳白色，就像旧式学校的走廊墙壁，地上铺着褪色的红色油地毡。走廊里一个人都没有，左侧大约三十英尺的地方，一只棕色的小狗正靠着墙睡觉，它的腿在抽搐。弗莱彻不知道那只狗是梦到了在追逐什么还是被什么追逐，但他觉得如果在这里能听到非常响亮的枪声——或者海因茨的尖叫——的话，它就不会睡着了。如果我能回去，他想，我会写隔音是独裁统治的伟大胜利，我会告诉全世界。当然我可能回不去，右边的那些楼梯可能就是我离四十三号大街最近的地方，但是……&lt;&#x2F;p&gt;
&lt;p&gt;但是还有“也许我能”先生。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻走进走廊，在身后拉上那间死室的门。那只棕色的小狗抬起头，看着弗莱彻，鼓着嘴唇低声呜了一声，那声音几乎听不到，然后它又低下了头，看起来又睡着了。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻双膝跪地，两手（一只手还握着拉蒙的手枪）放在地上，弯下腰，亲吻了油地毡。这时，他想到了他妹妹——在河边丢了性命的八年前，她是多么满心盼望去上大学啊。去大学的那天，她穿着一件格子衬衫，衬衫上的红色跟这褪了色的油地毡的红色并不相同，但很接近。就像他们说的那样，足够让政府采用了。&lt;&#x2F;p&gt;
&lt;p&gt;弗莱彻站起身，沿着走廊迈步朝楼梯走去，一楼的门厅，大街，城市，4 号高速公路，巡逻队，路障，边境，检查站，水。中国人说，千里之行，始于足下。&lt;&#x2F;p&gt;
&lt;p&gt;看看我能走多远吧，弗莱彻走到台阶前时想道，也许会有惊喜呢。但仅仅是活着，就已经够让他惊喜了。弗莱彻微微一笑，把拉蒙的手枪端在身前，开始沿楼梯往上走。&lt;&#x2F;p&gt;
&lt;p&gt;一个月后，一个男人走到卡洛·阿尔库奇位于四十三号大街上的报刊亭边。卡洛几乎确定这个男人会拿一把枪对着他的脸，然后抢劫他，所以一时间有点手足无措。现在才八点，天还没黑，周围人很多，但是这些能阻止一个疯子吗？而且那个人看上去非常像疯子——他那么瘦，白衬衫和灰裤子仿佛浮在他身上一样，眼睛垂在又圆又大的眼窝下方，像是刚从集中营或者（出于什么巨大的失误）疯人院里放出来。当他把手伸进裤子口袋的时候，卡洛·阿尔库奇心想，现在他要拔枪了。&lt;&#x2F;p&gt;
&lt;p&gt;但是，他拿出来的不是一把枪，而是一个破旧的巴克斯顿钱包，然后从里面拿出一张十美元的纸币。之后，那个穿白衬衫和灰裤子的男人用无比清醒的口吻说要一盒万宝路香烟。卡洛拿过一盒，在烟盒上放了一包火柴，推过报刊亭的柜台。那个男人打开烟盒的时候，卡洛则在找零。&lt;&#x2F;p&gt;
&lt;p&gt;“不用了。”看到零钱以后，那男人说道。他抽出一支烟放进嘴里。&lt;&#x2F;p&gt;
&lt;p&gt;“不用了？不用了是什么意思？”&lt;&#x2F;p&gt;
&lt;p&gt;“我的意思是不用找零了。”男人说道，他把那盒烟递向卡洛，“你抽烟吗？愿意的话，抽一支吧。”&lt;&#x2F;p&gt;
&lt;p&gt;卡洛难以置信地看着那个白衬衫灰裤子男人。“我不抽烟。这是个坏习惯。”&lt;&#x2F;p&gt;
&lt;p&gt;“非常坏。”男人表示同意，接着点燃香烟，抽了一口，显然非常享受。他站在那里，一边抽烟一边看着马路对面的人。路对面有几个女孩，男人会看穿夏装的女孩，这是人的天性。卡洛也不觉得这个顾客是个疯子了，尽管他把一张十美元钞票找回的零钱留在了报刊亭狭窄的柜台上。&lt;&#x2F;p&gt;
&lt;p&gt;那个瘦削的男人把那支烟一直抽到过滤嘴边处。他转身面向卡洛，身体略有些摇晃，仿佛他不习惯抽烟，被那支烟弄得头昏眼花了。&lt;&#x2F;p&gt;
&lt;p&gt;“一个美好的夜晚。”男人说道。&lt;&#x2F;p&gt;
&lt;p&gt;卡洛点点头。确实如此，是一个美好的夜晚。“我们能活着，真幸运。”卡洛说。&lt;&#x2F;p&gt;
&lt;p&gt;男人点点头说：“所有人。每时每刻。”&lt;&#x2F;p&gt;
&lt;p&gt;他朝路边走去，那里有个垃圾箱。他把那盒只抽了一支的香烟丢进了垃圾箱。“所有人，”他说，“每时每刻。”他走开了。卡洛看着他走远，心想，也许他就是个疯子。也许不是。疯狂是一种很难界定的状态。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;div style=&quot;font-size: 0.9em; color: #777;&quot;&gt;
  &lt;h4 style=&quot;font-weight: bold;&quot;&gt;作者按&lt;&#x2F;h4&gt;
  &lt;p style=&quot;font-style: italic; line-height: 1.8;&quot;&gt;
    这是一个带有卡夫卡风格的故事，一个南美版的地狱的故事。在这类故事中，被讯问的人最后通常都会和盘托出，然后被杀掉（或是丧失理智）。我想写一个结局美满一些的故事，无论多么不真实。这个就是。
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;电影《碧血金沙》中的经典台词，“警飞”应为“警徽”。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;德国纳粹战犯。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>九寨之星</title>
      <pubDate>Thu, 01 Oct 1987 00:00:00 +0000</pubDate>
      <dc:creator>海子</dc:creator>
      <link>https://www.aspchang.com/posts/star-of-jiuzhai/</link>
      <guid>https://www.aspchang.com/posts/star-of-jiuzhai/</guid>
      <description xml:base="https://www.aspchang.com/posts/star-of-jiuzhai/">&lt;hr&#x2F;&gt;
&lt;div style=&quot;text-align: center; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif;&quot;&gt;
  &lt;h2 style=&quot;font-weight: bold; margin-bottom: 1.5em;&quot;&gt;九寨之星&lt;&#x2F;h2&gt;
  &lt;div style=&quot;font-size: 1.2em; line-height: 2.5;&quot;&gt;
    &lt;p style=&quot;text-align: center;&quot;&gt;很久很久的一盏灯&lt;br&#x2F;&gt;很久很久以前女神点亮的一盏灯&lt;br&#x2F;&gt;落满岁月尘土的一盏灯&lt;&#x2F;p&gt;
    &lt;p style=&quot;text-align: center;&quot;&gt;当她面对湖水&lt;br&#x2F;&gt;女神的镜子中&lt;br&#x2F;&gt;变成了两盏&lt;&#x2F;p&gt;
    &lt;p style=&quot;text-align: center;&quot;&gt;那就是你的一双眼睛&lt;br&#x2F;&gt;柔似湖水　亮如光明&lt;&#x2F;p&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 2em; margin-bottom: 0;&quot;&gt;海子&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 0.2em;&quot;&gt;1987.10&lt;&#x2F;p&gt;
&lt;hr&gt;
&lt;div style=&quot;font-size: 0.89em; color: #777; line-height: 1.8; font-style: italic;&quot;&gt;
&lt;p&gt;1989年3月26日，在过完25岁生日后的第三天，海子在河北省秦皇岛市的山海关附近，以卧轨的方式结束了自己年轻的生命。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>奇怪的被告</title>
      <pubDate>Mon, 01 May 1978 00:00:00 +0000</pubDate>
      <dc:creator>松本清张</dc:creator>
      <link>https://www.aspchang.com/posts/the-cooperative-defendant/</link>
      <guid>https://www.aspchang.com/posts/the-cooperative-defendant/</guid>
      <description xml:base="https://www.aspchang.com/posts/the-cooperative-defendant/">&lt;h2 id=&quot;1&quot;&gt;1&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#1&quot;
   aria-label=&quot;Anchor link for: 1&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;案件看似十分单纯。秋天的某个夜晚，六十二岁的放贷人在家中被二十八岁的男子殴打致死。犯人逃跑时抢走了老人的手提保险箱。逃跑途中，犯人损毁保险箱，从二十二张借据中抽出五张，然后把保险箱扔在灌溉用的蓄水池中逃走。&lt;&#x2F;p&gt;
&lt;p&gt;东京西郊正在修建宅基地，那一带一半的土地还是农田。&lt;&#x2F;p&gt;
&lt;p&gt;年轻的律师原岛直巳被所属律师会委任为被告的援助律师时，他对案件完全提不起兴趣，几乎想拒绝。他手上有三个案子（均是私人委托），非常忙碌，原本可以以此为理由拒绝。但律师会的事务长却对他说，这个案子实际上被律师会的其他律师接过，但对方染上了急病，不得已退出辩护。距离公审时间不多，法院也很为难，拜托他尽可能接下。随后又小声加了一句，案子很简单，随便应付一下就成。&lt;&#x2F;p&gt;
&lt;p&gt;援助律师，当然指的是国家分配给无法委托私人律师的被告人的律师（《宪法》第三十七条第三项）。《刑事诉讼法》规定，被告因经济因素或其他原因无法委托律师时，法院必须根据其申请，配备援助律师（刑诉法第三十六条）。辩护费由国家承担。&lt;&#x2F;p&gt;
&lt;p&gt;正因如此，援助律师的辩护费少得可怜，行程忙碌的律师不愿意接。律师会通常会按照顺序将法院的指派任务分配给旗下律师。当然，接不接是个人的自由。但考虑到被告人权益的人道主义公益性和《宪法》的规定，也不能完全拒绝。所以，案子自然而然就转到一些年轻律师或者不那么忙碌的律师手上。&lt;&#x2F;p&gt;
&lt;p&gt;律师与被告人对援助律师制度都是怨声载道。原因在于辩护费太低。援助律师想赚钱就必须以数量取胜，如此一来，难免顾及不了辩护的质量。被告方则认为援助律师不够热情，只会为了完成任务做表面辩护。&lt;&#x2F;p&gt;
&lt;p&gt;如此恶评之下，或许是为了“挽回形象”，最近援助律师的工作态度有所转变。&lt;&#x2F;p&gt;
&lt;p&gt;在律师看来，如果案件本身有趣，即使没有报酬或者需要自掏腰包，也会主动请缨。换句话说，这是良性的虚荣心在作祟。但如果案件本身平庸，那么潜意识总是避免不了考虑“以量取胜”。由于手上接了好几个援助案件，律师不得已在开庭前匆忙阅读诉讼记录；在法庭上第一次见过被告人，便强迫自己慷慨激昂地为之辩护。此类歪风虽然暂时得到了遏制，但只要辩护费一日不涨，便一日无法根除。&lt;&#x2F;p&gt;
&lt;p&gt;这次的案件也是如此，被告人植木寅夫因涉嫌杀害放贷人山岸甚兵卫被起诉。律师会事务长之所以对原岛直巳说“案子很简单，随便应付一下就成”，也是基于这种沉疴旧习。&lt;&#x2F;p&gt;
&lt;p&gt;原岛首先阅读了案件起诉的相关资料和搜查记录，从中获得了以下信息。&lt;&#x2F;p&gt;
&lt;p&gt;被害人山岸甚兵卫原本拥有大量土地，后将其出售给土地公司，用一部分钱在另一地区建了一栋二层别墅，用剩下的钱做起了小额金融业务。距今已有十多年。甚兵卫没有子嗣，妻子也于三年前去世，过着独居生活。&lt;&#x2F;p&gt;
&lt;p&gt;别墅的二楼租给了一对夫妇，夫妻二人都是小学教师。爱财如命的甚兵卫之所以以低廉的价格将房子租给这对夫妻，是因为看中那位小学教师柔道二段的本领。换句话说，是出于人身安全的考虑。&lt;&#x2F;p&gt;
&lt;p&gt;独居老人这么做并不奇怪。但山岸甚兵卫作为资深的放贷人一向对借贷人残酷无情。借贷人大多是新开发区的小商铺。新开发区虽然位于民营铁路沿线，但人口不算多，因此，店铺的生意并不算好。所以，自然而然会出现一些明知是高利贷，还要向山岸甚兵卫借钱的人。有些人债台高筑，最终破产。其中甚至有人拿退休金开店，最后却被甚兵卫以担保为由夺走店铺连带地皮。同一铁路沿线的其他地区，也生活着许多被甚兵卫压榨的人。&lt;&#x2F;p&gt;
&lt;p&gt;甚兵卫知道除了小偷，还有许多人对他恨之入骨。出于警戒的目的，才“雇用”了二楼那位擅长柔道的小学老师作为“保镖”。&lt;&#x2F;p&gt;
&lt;p&gt;然而，那对小学教师夫妇却接到了老家母亲病危的消息，于十月十五日回乡省亲。凶案发生在十八日。&lt;&#x2F;p&gt;
&lt;p&gt;十九日早上，甚兵卫的尸体被邻居发现。当时，入口的门敞开着（其他的防雨门全部呈关闭状态），那人因为有事找甚兵卫，就从入口进到里侧的土间，发现甚兵卫脸朝下躺在隔壁八叠 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 大的房间，叫他也没有反应，便通知了当地警署。&lt;&#x2F;p&gt;
&lt;p&gt;尸体的解剖结果显示，死因是后脑遭受剧烈殴打导致的脑震荡和颅内出血。后脑巴掌大的一块头盖骨整个塌陷了下去（骨骼扁平化状态）。致命伤仅是头部遭受的攻击。因甚兵卫呈向前卧倒、匍匐前行的姿态，他很可能被人从后面突然袭击，倒地后又用双手和膝盖向前爬行了一会儿，最后才断气。&lt;&#x2F;p&gt;
&lt;p&gt;根据胃部食物的消化状态，可推测死亡时间在晚饭后三小时左右。自己做饭的甚兵卫通常在六点左右吃晚饭。因此，行凶时间应该在九点到十点。这与解剖医师推测的死亡时间几乎一致。&lt;&#x2F;p&gt;
&lt;p&gt;接下来是屋内状况。房间内部几乎没有被破坏的迹象，但隔壁六叠大的房间里，甚兵卫放置手提保险箱的壁橱被打开，金属制的黑色手提保险箱不翼而飞。保险箱里放着甚兵卫从借贷人手里拿来的借据和其他文件。&lt;&#x2F;p&gt;
&lt;p&gt;褥子铺在地上，棉被掀开了一半，枕头和褥单上残留着褶皱，但却并不凌乱。这说明甚兵卫曾经睡下，却中途起身去了八叠大的房间。甚兵卫习惯晚上九点就寝（二楼小学教师夫妇的证词）。&lt;&#x2F;p&gt;
&lt;p&gt;从入口的门从里侧被打开可看出，甚兵卫是在睡梦中被人叫醒的。门原本被人用橡木制的门闩斜斜地顶住，后来门闩被取走，斜靠在旁边。能从里侧开门的除了甚兵卫别无他人，所以他一定亲自开了门。&lt;&#x2F;p&gt;
&lt;p&gt;也就是说，某人上门拜访，甚兵卫就把那人领进了家门。一个如此小心翼翼的人，居然会在睡下后特意起身，在晚上九点多将人请进家门。由此可见，甚兵卫一定认识那人，并且相当熟悉。&lt;&#x2F;p&gt;
&lt;p&gt;山岸甚兵卫没有什么桃色绯闻。年龄虽不算太老，但不知是因为性格，还是因为吝啬的关系，年轻时就对女人没什么兴趣。因此，晚上九点左右的来访者恐怕是男性。&lt;&#x2F;p&gt;
&lt;p&gt;邻居说九点左右没听到有人敲门，或是喊甚兵卫开门的声音。甚兵卫睡在里侧房间，并且刚刚入睡，想在房门外把他叫醒，必须发出相当大的声音。邻居之所以没听到，是因为叫醒他的很可能是电话铃声。甚兵卫睡在六叠大的房间里，房间角落的茶几上正好放着一台电话。&lt;&#x2F;p&gt;
&lt;p&gt;凶手先给甚兵卫打电话，跟他说过一会儿要上门拜访。所以，甚兵卫才会把外门的门闩撤掉，等他上门。由此可见，两人的关系非同一般。&lt;&#x2F;p&gt;
&lt;p&gt;手提保险箱的丢失间接锁定了凶手身份。保险箱里有甚兵卫回收的高利贷借据、支付利息后的更换凭证和期票。凶手不仅知道保险箱里放着什么东西，还知道保险箱的位置。换句话说，凶手的目的是夺走保险箱内的借据、期票等票据。警方搜查时，在佛龛下发现了十五万日元的现金。然而现场痕迹表明，凶手并没有寻找过这些现金。&lt;&#x2F;p&gt;
&lt;p&gt;到了这一步，凶手的身份呼之欲出。果然，警察在案发两天后，就迅速逮捕了植木寅夫。那是因为负责走访的调查员曾听中村家的男主人说过，当天晚上九点左右，他在厕所解手时，透过窗户看见一个男人急匆匆地往甚兵卫家走去，那个男人的身影很像车站附近中华荞麦面店的老板。&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫在民营铁路沿线的 R 车站开中华荞麦面店。他三年前在这里开店，却在第一年的时候购入少量相邻的土地，进行了店铺改造。改造的原因并非因为生意兴隆，而是因为同行在附近开了店，出于一种竞争心态。植木原本期待整洁宽敞的店面能吸引更多客人，结果却事与愿违，客人反而比以前还少。人们似乎更愿意光顾原先狭小的店铺。为了购买土地和扩张店面，他向山岸甚兵卫借了高利贷。&lt;&#x2F;p&gt;
&lt;p&gt;被商业判断失误和高额利息逼入绝境的植木寅夫日渐消瘦。尽管如此，只要再坚持一段时间，附近的住宅便会增加，车站的人流也会多起来。不管怎么说，店铺都位于车站的黄金地段。他一边安慰自己一边咬牙坚持。然而，高额利息带来的压力却超出了预期，让他没有余力期待未来。他从十八岁到二十五岁一直在东京都内的旧书店工作，却涉足了自己并不擅长的领域。&lt;&#x2F;p&gt;
&lt;p&gt;与山岸甚兵卫结下孽缘的植木寅夫两年来都活在痛苦之中。甚兵卫的催收十分严苛，不容半点拖欠。他记不清自己重写了多少次借据。时至今日，利息已滚成本金的四倍，欠债金额变成了七百五十万日元。山岸甚兵卫认为植木寅夫已经没有偿还能力，便提出要回收植木名下全部土地和店铺，用以抵销债务。两人因为这事起了冲突。人们都说，植木憎恨甚兵卫，迟早会打死那个老头儿。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h2 id=&quot;2&quot;&gt;2&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#2&quot;
   aria-label=&quot;Anchor link for: 2&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;许多人都和植木寅夫一样憎恨着山岸甚兵卫。单从这点看，许多人都有犯罪动机。但这些人成为嫌疑对象之前，还需要满足以下条件。&lt;&#x2F;p&gt;
&lt;p&gt;当晚九点至十点没有不在场证明、与被害者认识、知道租住在二楼的小学老师回乡省亲、对被害者家中布局了如指掌，考虑到被害者后脑部受到的攻击，还必须具备一定体力。&lt;&#x2F;p&gt;
&lt;p&gt;现场没有发现能够锁定凶手的指纹。除了甚兵卫的指纹外，还存在大量其他指纹，但都不够清晰。唯一清晰的指纹属于租住在二楼的小学教师夫妇，但他们夫妻远在九州乡下，具备充分的不在场证明。许多人因为借贷事务拜访过甚兵卫，不清晰的指纹应该属于这些人。所有的指纹都很陈旧。&lt;&#x2F;p&gt;
&lt;p&gt;凶手没有留下凶器或其他物品，也没有可疑的鞋印。土间的地板是混凝土的，所以很难留下鞋印。凶器有可能是支撑外门的门闩，但门闩太细，与整块头盖骨塌陷下去的伤口不相吻合。门闩上也只发现了甚兵卫的指纹。&lt;&#x2F;p&gt;
&lt;p&gt;甚兵卫的伤口没有出血。头上几乎没有头发，是个光头。所以凶器上应该没有沾染血迹或者毛发。&lt;&#x2F;p&gt;
&lt;p&gt;后院的屋檐下堆放着用作柴火的松木。这一带没有引进天然气，家家户户都用液化气。甚兵卫则出于务农时的习惯，喜欢用柴火烧灶。木柴大体呈三角形，单边直径四厘米左右。如果用这种木柴连续击打头部，很可能造成扁平塌陷的伤口。&lt;&#x2F;p&gt;
&lt;p&gt;那堆柴火共有三十多根，调查员检测了上层的十几根，但由于木头肌理十分粗糙，很难采集到指纹。并且，木头上也没有发现血迹或者毛发。&lt;&#x2F;p&gt;
&lt;p&gt;原岛姑且将尸体状况和现场情况收入脑中，转而看起了已被逮捕的植木寅夫的供述概要。&lt;&#x2F;p&gt;
&lt;p&gt;“自从两年前，我向山岸甚兵卫借了高利贷之后，就一直饱受他的折磨。最近，他提出要拍卖我抵押的土地和房子。这些地和房子是我用自己存下的第一笔钱买来开中华荞麦面店的。中途，我向甚兵卫借钱扩张了门面，生意却没有想象中那么好，再加上甚兵卫时时刻刻的逼迫，让我变得自暴自弃起来。再这样下去，我只有带着妻儿自杀这条路可走了。但在死之前，我打算杀了可恶的甚兵卫。为了帮助那些和我一样忍受痛苦的人，这也算是替天行道。&lt;&#x2F;p&gt;
&lt;p&gt;“十月十八日晚上七点开始，我和朋友中田、前田、西川在离车站两百米左右的‘万牌庄’打麻将。那个时候店里没什么生意，所以我通常会把店交给妻子，从傍晚开始打麻将。和朋友打了两圈半庄 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 后，我发现经常来‘万牌庄’的柴田正站在一旁看我们玩儿，脸上一副跃跃欲试的表情，就对他说：‘我有点事要回家一趟，你替我一会儿吧。’柴田高兴地答应了。我离开‘万牌庄’时大约九点。&lt;&#x2F;p&gt;
&lt;p&gt;“我没有回家，而是去了车站前的公共电话亭，给甚兵卫打电话。过了一会儿，电话里传来他的声音，我就说：‘关于抵押的事，刚好手头攒了两百万日元，现在就给你拿过去，希望可以暂缓拍卖。另外，我还想谈谈今后的事，想跟你见一面。’甚兵卫开始说：‘我刚睡下，有什么事明天再说。’后来，他可能也想早点见到钞票吧，就改口说：‘那快点过来，我等你。’&lt;&#x2F;p&gt;
&lt;p&gt;“从车站到甚兵卫家要走一公里左右。那条路非常偏僻，离开居民区后，中途是水田和旱田，还有两个灌溉用的蓄水池，我一个人也没有碰到。甚兵卫的房子在一处居民区里，那里有十二三户住家，但因为远离马路，所以我也没想到会被人从厕所的窗户看见。那个叫中村的，平时会来店里吃荞麦面。&lt;&#x2F;p&gt;
&lt;p&gt;“跟电话里说的一样，甚兵卫把外门打开，正在等我。我知道住在二楼的小学教师夫妇早在三四天前就回了九州。那位老师也经常来店里吃中华荞麦面，我听他提起过这事。&lt;&#x2F;p&gt;
&lt;p&gt;“我先绕到甚兵卫家的后门，从屋檐下堆积成山的柴火里抽了一根称手的，然后抬头看了眼二楼。二楼的防雨门紧闭，透过门缝看不见灯光。看来，那对教师夫妻的确回九州去了。&lt;&#x2F;p&gt;
&lt;p&gt;“我回到正门，从打开的外门走到土间，说了声‘晚上好’，甚兵卫就从里面出来了。那时，我把握着柴火的右手藏在了腰后。甚兵卫正在等我，所以一开始就打开了八叠大房间的电灯。&lt;&#x2F;p&gt;
&lt;p&gt;“甚兵卫坐在房间里盯着我的脸，说道：‘你可真让我好等。’但也许是以为我身上带着钱，他的心情并不坏，又微笑着催我快进来。我没有进去，站在土间拖延时间：‘打扰您休息了，刚好筹了两百万日元拿过来。放在家里怕贼惦记。’甚兵卫说：‘先进来吧。’从房间角落拿出了两个坐垫。我的右手还攥着柴火，心里暗暗叫苦，但还是把柴火藏在身后进去了。坐下时，迅速把它放在了背后。我担心柴火被发现，想赶紧切入正题。‘我带钱了，给我写张收据吧。’边说边从口袋拿出事先用报纸包好的钞票形状的包裹。甚兵卫说：‘既然如此，我去拿写收据的纸。’然后起身，往隔壁六叠大的房间走去。我想现在就是最好的时机，便站起身，抓着柴火朝他光秃秃的后脑勺狠狠地打了一下。甚兵卫发出一声凄厉的惨叫，向前倒下。我又用柴火给他后脑勺来了三下，他就趴在地上一动不动了。我想把现场布置成强盗入室抢劫的样子，便把两个坐垫放回了墙角原先的位置。&lt;&#x2F;p&gt;
&lt;p&gt;“然后，我去六叠大的房间找手提保险箱。那东西放在壁橱里，壁橱的拉门已被打开。我一想到折磨自己的借据放在里面，就恨不得立刻把它撕碎扔掉。我尝试打开保险箱，却不知道密码，于是决定带着它逃跑。我跑出门外，绕回后院，把柴火放回那堆木柴上。由于天色太暗，我也不知道具体放在哪个位置。这一连串行动花了大约三十分钟。&lt;&#x2F;p&gt;
&lt;p&gt;“我抱着保险箱钻进路边的草丛里，想把它打开，但解不开密码锁，于是从附近找了块大石头，对着密码锁砸了下去。锁坏了，保险箱的盖子也开了。我开始找里面的借据。借着淡淡的月光，我看见了‘植木寅夫’几个字，便把它拿了出来。我想顺便帮帮其他人，就又随手抓了五六张借据放进口袋。然后盖上坏掉的保险箱，把它扔进了右边的蓄水池。离那儿一百米左右的地方有一家保险公司，我走到保险公司的后广场，掏出火柴，把口袋里的借据付之一炬，又用鞋子把灰烬踢开。&lt;&#x2F;p&gt;
&lt;p&gt;“后来，沾满泥水的保险箱被人发现。从警察那里听说我的借据也在那堆湿透的借据里时，我很惊讶。警察说，甚兵卫的账簿里有一笔钱借给了一个叫猪木重夫的人，但保险箱里却没有他的借据。所以，或许是我在昏暗的月光下，把‘猪木重夫’误认成了‘植木寅夫’了。那时我太亢奋，这种可能性也不是没有。&lt;&#x2F;p&gt;
&lt;p&gt;“处理完一切后，我回到‘万牌庄’。四个朋友还在打麻将，我看了大概十分钟，最后中田一个人赢了。这把后，柴田就不玩了。我上台打了一桩。谁也不知道我杀了人，就连我自己也觉得自己冷静得可怕。大概是因为甚兵卫太该死了，杀了他我也没有产生多少负罪感。&lt;&#x2F;p&gt;
&lt;p&gt;“那晚睡得很好。借据已经烧了，甚兵卫也没有子嗣。想到债务就此一笔勾销，我反而高兴了起来，心情十分舒畅。&lt;&#x2F;p&gt;
&lt;p&gt;“第二天，大家都知道放高利贷的山岸甚兵卫被杀了，附近议论纷纷，但却没有一个人同情他，私下都在骂甚兵卫‘活该’‘遭报应’。我听后放心了不少。&lt;&#x2F;p&gt;
&lt;p&gt;“两天后的白天，我在店里看电视，来了两个警察，说想了解点情况，让我去搜查本部一趟。我平静地答应了，私下却做好了心理准备，这次恐怕瞒不住了。杀害山岸甚兵卫或许不是什么光彩的事，但一想到他的所作所为，我就决定只要警察询问，便一五一十地坦白。但在被警察发现之前，我还是动过尽可能掩饰自己罪行的念头。”&lt;&#x2F;p&gt;
&lt;p&gt;单看案件经过，真的非常简单。这样无聊的案子，无论是私人委托还是政府指派，恐怕都无法激起律师的兴趣。原岛想，最多争取一下酌情减刑吧。&lt;&#x2F;p&gt;
&lt;p&gt;原岛继续看被告的供述书，却发现被告在被检察官询问期间，推翻了之前的供述，包括对警察和最初对检察官的部分供述。他主张，自己与山岸甚兵卫被杀案毫无关系，之所以认罪，完全是由于警方的威逼利诱和精神性拷问。这让原岛颇感意外。&lt;&#x2F;p&gt;
&lt;p&gt;不过，这也是常有的事。特别是犯下杀人重罪的被告，为了求得一线生机，经常会耍这样的手段。&lt;&#x2F;p&gt;
&lt;p&gt;原岛读完被告的自供，第一印象便认为植木寅夫绝不冤枉。这份自供没有强迫的感觉，甚至让人觉得犯罪嫌疑人在主动坦白。另外，警方写的实地勘验报告也与自供完全一致，很难相信，这是在警方强迫下进行的自供。&lt;&#x2F;p&gt;
&lt;p&gt;但是，植木寅夫在面对检察官时，又说了如下证词。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h2 id=&quot;3&quot;&gt;3&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#3&quot;
   aria-label=&quot;Anchor link for: 3&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;“十月十八日晚上七点开始，我一直在‘万牌庄’和中田、前田、西川打麻将。打完两圈半庄后约莫九点钟，柴田替了我一会儿。这和之前说的一样。我用车站附近的公共电话给山岸甚兵卫打电话，跟他说接下来找他谈抵押物的处理问题，他答应会起床等我。所以我就离开电话亭往他家走。这些都是真的。但是，接下来发生的事和我之前在警局说的不一样。&lt;&#x2F;p&gt;
&lt;p&gt;“我从来没在电话里对甚兵卫说筹到了两百万日元，要给他送去。我根本不可能筹到两百万日元。警察却一直缠着我，说：‘你要是不说钱的事，是不可能让睡下的甚兵卫起床等你的。他一定会说，有事儿明天再谈。一定是你骗他会带两百万日元过去，才让他心甘情愿开门等你。然后，你就把伪装成两百万日元模样的东西塞到口袋里，去见山岸了吧。’原来如此，依照甚兵卫无利不起早的性格，没钱的话是万万不会等我的。我意识到这是旁人的正常想法，便顺着警官的话答道：‘对，您说得没错。’&lt;&#x2F;p&gt;
&lt;p&gt;“我在电话里对甚兵卫说的是：‘抵押物的处理先缓一缓吧。土地和店铺被回收的话，我们一家老小就没法生活了。请你体谅这一点。另外，我想到了一个解决办法。现在可以过去找你商量吗？’甚兵卫回我：‘拍卖抵押物并非我的本意，看你实在还不上钱了，没办法才这么说的。你要是有什么好法子就说说看。我把外门打开，你过来吧。’&lt;&#x2F;p&gt;
&lt;p&gt;“接着，我就走到了甚兵卫家附近。但我其实并没有想到什么良策，只是因为太担心土地和店铺被收走，打算尽可能地拖延时间。但一想到倘若见到甚兵卫却说不出个所以然，反而会让他更加生气，就不敢进他家门了。我在那附近徘徊了三十来分钟，最后还是决定打道回府。&lt;&#x2F;p&gt;
&lt;p&gt;“现在回去，麻将必然还没散场。以我现在的心情，也实在没有看别人打牌的兴致。所以就走到保险公司的后广场，在附近一边溜达一边思考。那是条乡间小道，又是在晚上，所以没碰到什么人。&lt;&#x2F;p&gt;
&lt;p&gt;“前后花了一个小时左右，我回到了‘万牌庄’。因为四个人打的是半庄，所以才打了一半。柴田不玩后，我就加入了。毕竟我没有杀人，所以其他四个人说我神情淡定也是正常的。妻子之所以说我那天晚上睡得好，也是因为我没做什么亏心事。身体累了自然睡得沉。&lt;&#x2F;p&gt;
&lt;p&gt;“我说的全是真话。下面我会解释为什么在警局时说了假话。&lt;&#x2F;p&gt;
&lt;p&gt;“我最初对警察说不是我干的。但警察却一个接一个地进入审讯室，对我说：‘快招吧。你怎么狡辩都没用，已经找到证据了。我们在两个蓄水池中的一个里，发现了被你偷走的手提保险箱。密码锁被砸坏了，箱子里有二十二张湿透的借据。你那张七百五十万日元的借条也在里面。然而，我们和甚兵卫的记账簿比对后发现，少了五张借据。其中应该有一个叫‘猪木重夫’的。之所以你的借据留在箱子里，而猪木的却被拿走，是因为那时天色太暗，你把‘猪木重夫’误认成了‘植木寅夫’。毕竟两者的写法十分相像。’&lt;&#x2F;p&gt;
&lt;p&gt;“警察又问：‘你认识那附近一个叫中村是也的人吗？’我答：‘那人是店里的常客，经常来吃中华荞麦面。’‘那么，对方也知道你的长相？’‘应该很清楚。’听我这么答，警察立刻露出一种胜利者的表情，耐心地劝我：‘中村是也在那晚九点五分左右，从厕所的窗户看见你急匆匆地往山岸甚兵卫家走。你大概没注意到吧。中村清楚地目击到你的样子，并且做了证。你死心吧，别再狡辩了。我们有手提保险箱这个物证，又有无懈可击的证词。警方也单独调查了你的杀人动机，觉得情有可原，值得同情。像个男人一样坦白吧。那样的话，我们会向检察官求情，让你免于起诉。你也能早点从这儿出去，和老婆孩子团聚，踏踏实实做生意。’&lt;&#x2F;p&gt;
&lt;p&gt;“我想，既然有人看见我往甚兵卫家走去，那么无论我怎样辩解警察也不会相信。况且，对方也承诺只要按他们的意思招供就能免于起诉，那就照办吧。于是说：‘是我干的。’&lt;&#x2F;p&gt;
&lt;p&gt;“警察们喜上眉梢，又是给我递烟，又是请我吃炸虾盖饭。之后，我按照警察的意思供述了犯罪经过。甚兵卫家的手绘图，也是在警察的引导下画的。&lt;&#x2F;p&gt;
&lt;p&gt;“首先是凶器，我不知道该写什么好。警察说：‘你看，不是有种东西用作煮饭的燃料嘛。’我说：‘我用煤打了甚兵卫。’警察说：‘笨蛋，那玩意儿能打死人吗？是长的，从山上砍下来的，大概那么长。’边说边用双手比画长度。啊，我意识到他说的是松树砍成的柴火，就说：‘是柴火吗？’‘对，你用柴火给山岸光秃秃的脑袋来了一下。’他又问，‘你把柴火放哪儿了？’&lt;&#x2F;p&gt;
&lt;p&gt;“我不太清楚柴火的位置，说：‘厨房的角落。’警察恼了，说：‘不是那个位置。是能淋到雨的地方。雨水滴答、滴答落下来的地方。’他说‘滴答、滴答’的时候带着音调，像是在唱歌。我说：‘后院的屋檐下。’警察笑着说：‘答得好。’&lt;&#x2F;p&gt;
&lt;p&gt;“然而，审讯记录和供述书却不会写这些。上面写的是：‘我事先知道甚兵卫家后院的屋檐下堆着松木柴火，就先去了后院，挑了根称手的柴火握在右手。绕回正门，发现门开着，说了声晚上好就进去了。’这么一写，给人的感觉完全不一样，但意思又差不离，所以我才会在自白书的最后写：‘已听取上述速记内容，与事实相符，特签字按印。’&lt;&#x2F;p&gt;
&lt;p&gt;“作为凶器处理的‘称手的柴火’也是如此，警察把我带到甚兵卫家后院的屋檐下，给我看堆积如山的柴火。问：‘你用的是哪根？’我实际上没有杀人，正为难的时候，他从顺数第二层的位置抽出一根说：‘是不是这根啊，你好好想想。’从大小来看，警察似乎早就盯上这根柴火了。我说：‘应该是吧。’于是它就变成了‘凶器’。可那上面却没有血迹和毛发，当我提出这一点时，警察说：‘幸亏被害人伤口没有出血，又是个秃瓢。要是有外出血，就得从别处找相同血型的血，涂在这根柴火上了。’那副洋洋自得的模样，简直当我不存在。我说：‘上面也没有我的指纹。’警察说：‘柴火的纹理粗糙，本来就不容易沾上指纹。’然后拿包袱皮一裹，那根柴火就变成了‘物证’。&lt;&#x2F;p&gt;
&lt;p&gt;“接着，警察问：‘你和山岸坐在哪个位置，在哪儿打他的？’我被逼得没办法，说：‘我把柴火藏在右手里，对走到外间的甚兵卫说带了两百万日元过来，甚兵卫背对着我，让我进来。我脱了鞋，追上甚兵卫，抄起柴火，冷不防给他后脑勺来了一下。’&lt;&#x2F;p&gt;
&lt;p&gt;警察说：‘这不可能。招待客人时，甚兵卫一定会拿出坐垫让你坐下。你说要给他两百万日元，他一定会去隔壁房间拿收据，你就是趁这个时候从背后攻击了他。明明来了客人，他不可能不拿出坐垫。然而现场却没发现坐垫，一定是你行凶后不想让别人看出这是访客所为，才把坐垫放回了原先的墙角。’我觉得烦透了，就说：‘您说得对。’警察说：‘你不能说我说得对，你得把刚才的经过按顺序说一遍。’我就磕磕巴巴地复述了一遍。接下来，警察问：‘你打了多少下？’我说：‘一下。’‘怎么可能一下，一下能把人打死吗？到底多少下？’我说：‘不太记得了，大概六七下吧。’警察的脸沉了下去，‘六七下太多了，打这么多下血一定会喷出来。应该是三下左右，因为你记不清了，就算三下吧。打了三下啊。’语气就像在教小孩儿说话。然后又一个人念念有词：‘用柴火打三下的话，应该会出现尸检报告上的伤口。’&lt;&#x2F;p&gt;
&lt;p&gt;“最后是手提保险箱。我按照警察的吩咐，说了我是怎么从六叠半房间的壁橱里把它拿走，又是怎么在路上用石头把它砸坏，从里面拿出借据。把‘猪木重夫’误认为‘植木寅夫’也是警察教我说的。&lt;&#x2F;p&gt;
&lt;p&gt;“我一开始说，把保险箱扔在了左边靠近车站方向的蓄水池，警察说：‘不对，你再好好想想。’因为那地方只有两个蓄水池，我便更正道：‘那就是右边的池子。’&lt;&#x2F;p&gt;
&lt;p&gt;“那个保险箱上如果有真凶的指纹，就能还我清白。可惜，调查员说箱子被发现时沾满了泥水，无法收集指纹。然而，根据那份在警察诱导下写出的自白书，让箱子沾满泥水也是我计划的一部分。&lt;&#x2F;p&gt;
&lt;p&gt;“那些据说是在保险公司广场草丛发现的灰烬，我也是不可能知道的。可能是警察烧了别的相似的纸，造出来的‘证据’吧。纸张已化成灰烬，也无法从上面看出印刷文字或手写文字。&lt;&#x2F;p&gt;
&lt;p&gt;“总之，我被警察的话蒙骗了，他们说：‘只要认罪立马放你回家，也会向检察官求情，让你免于起诉。我们十分同情你的遭遇，想尽可能地帮你。’我一心想早日回家，所以才会中了警察的圈套。&lt;&#x2F;p&gt;
&lt;p&gt;“正因如此，我很早就离开了警方的拘留所，被关到看守所。警察用可怕的表情对我说：‘在检察官面前，你也要重复一遍对我们说过的话。如果有一点差错，别说免于起诉了，我们一定会把你再弄进警察局，好好招呼你。’又威胁我，‘你要是敢在法庭上翻供，我们一定会使出吃奶的力气让你判死刑，在这一点上，我们可是很执着的。’&lt;&#x2F;p&gt;
&lt;p&gt;“我害怕被打击报复，所以才在检察官调查的初期，复述了一遍在警局做的假口供。现在，我知道让我早点回家、向检察官求情都是警察的谎言，所以才下定决心说出真相。”&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h2 id=&quot;4&quot;&gt;4&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#4&quot;
   aria-label=&quot;Anchor link for: 4&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;原岛读了植木寅夫的新证词，觉得被警察逼供的过程多少有夸张的成分，但却未必不是真的。他读完第一份自白书时，觉得极其自然，丝毫没有不合理的地方，但读完第二份自供，却也觉得颇为合情合理。当时，警局内部确实还残留着类似的不良风评。真相如何尚不明确，但律师的心却逐渐偏向了新证词。&lt;&#x2F;p&gt;
&lt;p&gt;《宪法》（第三十八条）规定，经强迫、拷问、威胁获得的证词，或在不当的长期滞留、拘禁后获得的证词，无法作为证据。通过欺诈性审讯（比如共犯明明没有招供，却欺骗嫌疑人已经招供）、利益诱导获得的证词缺乏任意性，不能作为认定犯罪事实的唯一证据。&lt;&#x2F;p&gt;
&lt;p&gt;然而多数情况下，被告主张自身无罪的理由，就是在警局做出的非任意性自供。因此，与自供相互证伪的补充证据就成了犯罪认定的重要因素。补充证据包括物证和第三者证词。按照性质，可划分为直接证据、间接证据。间接证据又叫情况证据。&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫的案子里，他向山岸甚兵卫借了高利贷后无法还贷，用来抵押的土地和房产也即将被回收，这些都是不可争辩的事实。这些间接证据证明了他具备杀人动机。从犯罪时间上来看，植木寅夫没有不在场证明，他九点左右离开“万牌庄”，回来时不到十点。这一点，打麻将的中田、前田、西川、柴田，还有“万牌庄”的老板、工作人员都可以证明。这也是情况证据，或者说间接证据。&lt;&#x2F;p&gt;
&lt;p&gt;植木离开“万牌庄”后不久，中村是也通过自家厕所的窗户看见了他的身影。但是，中村并没有看见植木走进山岸甚兵卫家将其杀害，只是说看见植木往甚兵卫家的方向走去。这份证词也是间接证据，并非直接证据。&lt;&#x2F;p&gt;
&lt;p&gt;说到物证，就是柴火和蓄水池里捞出的手提保险箱。调查员在现场勘验时发现甚兵卫的手提保险箱不翼而飞，于是抽干附近蓄水池的水，找到了保险箱。但柴火和手提保险箱上都没有检测出植木的指纹。前文也提过柴火上无法提取指纹的原因，警方的调查记录如下：&lt;&#x2F;p&gt;
&lt;p&gt;问：你用什么东西击打山岸甚兵卫的后脑？&lt;&#x2F;p&gt;
&lt;p&gt;答：松木劈成的柴火。就是放进“灶”里烧的木柴。&lt;&#x2F;p&gt;
&lt;p&gt;问：长度是多少？&lt;&#x2F;p&gt;
&lt;p&gt;答：三十厘米左右。&lt;&#x2F;p&gt;
&lt;p&gt;问：从哪儿拿的柴火？&lt;&#x2F;p&gt;
&lt;p&gt;答：山岸家后门的屋檐下堆着木柴。我早就计划着要用这些木柴杀死山岸。&lt;&#x2F;p&gt;
&lt;p&gt;问：所以，你老早就知道那地方堆着柴火？&lt;&#x2F;p&gt;
&lt;p&gt;答：是的。&lt;&#x2F;p&gt;
&lt;p&gt;问：行凶后，你怎么处理柴火的？&lt;&#x2F;p&gt;
&lt;p&gt;答：放回原来的位置了。&lt;&#x2F;p&gt;
&lt;p&gt;问：那么，如果回到后院堆放柴火的地方，你还认得出是哪一根吗？&lt;&#x2F;p&gt;
&lt;p&gt;答：如果有人把它烧了，或者移动到了别的地方，我应该看得出来。&lt;&#x2F;p&gt;
&lt;p&gt;问：第二天接到报警时，警方立刻保护了现场。所以应该还在原来的地方。&lt;&#x2F;p&gt;
&lt;p&gt;答：那么，去了现场应该能认出来。&lt;&#x2F;p&gt;
&lt;p&gt;完全看不出植木在二次供述中提到的联想游戏式的诱导审讯。&lt;&#x2F;p&gt;
&lt;p&gt;警方带嫌犯现场指认时的记录如下：&lt;&#x2F;p&gt;
&lt;p&gt;“嫌犯走到山岸甚兵卫后院东侧，看见屋檐下堆放的三十五根松木柴火，立刻指着顺数第二层的一根木柴说：‘就是它，就是用它打的。’&lt;&#x2F;p&gt;
&lt;p&gt;“调查员用戴手套的手取出嫌犯指认的木柴，将其放到同样戴着手套的嫌犯右手上。嫌犯将其握在手里两三次，又尝试挥舞了五六下。&lt;&#x2F;p&gt;
&lt;p&gt;“‘就是这根柴火，错不了。长官，这是我用过的东西，凭手感我就知道。’&lt;&#x2F;p&gt;
&lt;p&gt;“嫌犯说完，又向调查员展示柴火侧面松树皮上的节疤。说：‘我记得这块节疤的形状，我把柴火拿在手里时见过。’&lt;&#x2F;p&gt;
&lt;p&gt;“又提议道：‘长官，这根柴火上应该沾着我的指纹，请好好查查。那时，我用力握着它好长时间，右手的指纹一定留在了上面。’&lt;&#x2F;p&gt;
&lt;p&gt;“嫌犯的态度极其配合。”&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫在调查时表现出非常配合的样子。看上去甚至像在讨好警方。&lt;&#x2F;p&gt;
&lt;p&gt;原岛抽时间去了趟警察署，见了搜查科的系长，第一次看到了初期调查记录等资料。自从警方得到了中村是也的证词之后，调查重心基本集中在植木寅夫一个人身上。植木被逮捕后很快认罪，所以警方也乐得轻松，立马把嫌犯移交给了检察院。&lt;&#x2F;p&gt;
&lt;p&gt;“律师先生，听说被告翻供了，真不知道他是怎么想的。”&lt;&#x2F;p&gt;
&lt;p&gt;系长知道原岛是植木的援助律师，所以刻意注意了言辞，但言语间却掩饰不住对植木的愤怒。&lt;&#x2F;p&gt;
&lt;p&gt;“警方绝对没有逼供。当然，也绝没有说过只要认罪就早点放你回家，只要认罪就向检察官求情免于起诉，或者翻供的话就会使出吃奶的力气送你上断头台那样的蠢话。植木一被逮捕，立刻滔滔不绝地坦白了杀人经过。他一边麻利地画山岸家的简图，一边跟我们说自己是怎么进到山岸家同他搭话的，又是怎么把他杀死的。那根用来杀人的柴火，就跟现场调查记录写的一样，也是他本人指认的。他确认了手感，握在手里挥舞了五六下，说错不了，就是它。还跟我们说记得节疤的形状，要我们查查指纹。有些事儿我们根本没问，他也献殷勤似的说了。如果不是真凶，怎么可能说出和现场情况如此一致的证词？”&lt;&#x2F;p&gt;
&lt;p&gt;系长用了“献殷勤”这个词。有些嫌犯为了获得良好待遇，或者早日被送到看守所，会有计划地迎合参与审讯的警察。之后再翻供，反咬一口，说自己之所以认罪，完全是由于警察的逼供。植木寅夫也是如此吗？&lt;&#x2F;p&gt;
&lt;p&gt;或者，假设植木态度迎合——表面上看确实如此——会不会跟他二次供述中说的一样，是因为相信了警方“早日放你回家”“让你免于起诉”等利益诱导性言辞，为了给警察留下好印象，才极力表现出一副“献殷勤”的样子呢？&lt;&#x2F;p&gt;
&lt;p&gt;公审日期已迫在眉睫，原岛在处理其他诉讼的间隙抽空去了趟看守所，探视植木寅夫。&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫个子很高，身材瘦弱，长着一张女人一样柔和白皙的脸。眉毛和眼角微微下垂，嘴唇单薄，额头狭窄。他前来迎接援助律师，对为自己提供免费劳动（“当被告人因经济问题无负担能力时”《刑事诉讼法》第一百八十一条第一项、第五百条）的原岛表达了感谢和尊敬。&lt;&#x2F;p&gt;
&lt;p&gt;原岛觉得，这样一个长相温柔的男人实在不像穷凶极恶的杀人犯，却又隐隐感到那张女人一样的脸下藏着某种残忍与狡猾。原岛见过的被告虽然有数百人，可还没厉害到单凭长相就能判断对方诚实与否。&lt;&#x2F;p&gt;
&lt;p&gt;“我既然接了你的案子，你就必须以客观的态度告诉我一切。否则，我无法正确地为你辩护。”&lt;&#x2F;p&gt;
&lt;p&gt;会见室里，原岛叮嘱道。&lt;&#x2F;p&gt;
&lt;p&gt;“你的第二次供述，说在警察面前的自供都是假的，没错吧？”&lt;&#x2F;p&gt;
&lt;p&gt;“没错。那是在警察诱骗下做的自供。”&lt;&#x2F;p&gt;
&lt;p&gt;笔直站着的植木寅夫用铿锵有力的声音答道。&lt;&#x2F;p&gt;
&lt;p&gt;“警方诱导审讯的经过和你二次供述里说的一样？”&lt;&#x2F;p&gt;
&lt;p&gt;“对，一模一样。”&lt;&#x2F;p&gt;
&lt;p&gt;“警察说，你很配合地说了所有犯罪经过。那根作为证物的柴火，也是你主动向调查员展示的。”&lt;&#x2F;p&gt;
&lt;p&gt;“不对。跟我二次供述说的一样，那都是审讯时警察教我说的。”&lt;&#x2F;p&gt;
&lt;p&gt;“你在法庭上也能这么说吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“当然。”&lt;&#x2F;p&gt;
&lt;p&gt;“那么，我们就按照这个方向思考一下辩护策略。”&lt;&#x2F;p&gt;
&lt;p&gt;“律师先生。”植木寅夫郑重其事地说道。&lt;&#x2F;p&gt;
&lt;p&gt;“我有被警方逼供的证据。”&lt;&#x2F;p&gt;
&lt;p&gt;“证据？”&lt;&#x2F;p&gt;
&lt;p&gt;“对。”&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h2 id=&quot;5&quot;&gt;5&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#5&quot;
   aria-label=&quot;Anchor link for: 5&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;植木寅夫的脸上堆满了微笑。&lt;&#x2F;p&gt;
&lt;p&gt;“这是我昨天晚上睡觉时想到的，所以还没有告诉检察官。一定是神知道您要做我的律师，所以才让我想起来。”&lt;&#x2F;p&gt;
&lt;p&gt;“什么证据，说来听听。”&lt;&#x2F;p&gt;
&lt;p&gt;“在说我用柴火打死甚兵卫的时候，我听说甚兵卫死在八叠大的房间里，身子朝着隔壁房间，匍匐倒地。于是就自己想象了犯罪经过，说甚兵卫看见我后，闲聊了两三句，让我快进来，我趁他背对我时敲扁了他的脑袋。警察却喋喋不休地说，这不可能，你应该坐了山岸拿出的坐垫吧。行凶后，为了混淆视线，你把坐垫放回原处，把现场布置成强盗入室抢劫的模样。我觉得厌烦，就顺着他说了。但是山岸甚兵卫这个人，绝不会给向他借钱的人拿坐垫。我自己就体验过好几次，其他人应该也是这样。您可以问问其他人。”&lt;&#x2F;p&gt;
&lt;p&gt;“那么，房间角落堆着的坐垫，是给哪些客人准备的呢？”&lt;&#x2F;p&gt;
&lt;p&gt;“那就是个摆设。一旦拿出坐垫，客人就会没完没了地聊下去，所以甚兵卫绝不会给借钱的人拿坐垫。他会尽可能控制时间，好把自己的条件强加于人。聊得时间长了，难免会同情对方。所以，那些坐垫，大概是为与金钱无关的客人准备的吧。甚兵卫的这个习惯，警察是不知道的。”&lt;&#x2F;p&gt;
&lt;p&gt;“然后呢，还有吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“手提保险箱，我不知道从哪儿发现的。警察说是水里，所以我就想到了蓄水池，一开始说是左侧的蓄水池。警察说，蠢货，反了。我才改口说是右边的蓄水池。这些情况我也在给检察官的二次供述中说明了。手提保险箱里还留着我的借据，这难道不是证明我清白最有利的证据吗？警察却说，因为‘猪木重夫’和‘植木寅夫’过于相似，是我在昏暗的光线下把两者弄错了。一个为了拿回借据不惜杀人的人，会连名字都不确认一下吗？警察说因为光线昏暗，可剩下的五张借据却被焚烧在了后广场。说明我当时带着火柴。明明带着火柴却没有擦亮火柴确认一下借据的名字，这正常吗？况且，保险箱上也没有我的指纹。”&lt;&#x2F;p&gt;
&lt;p&gt;“还有吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“还有一个重要情况。律师先生，用来行凶的那根木柴，它的大小是否跟甚兵卫后脑部的伤口一致？”&lt;&#x2F;p&gt;
&lt;p&gt;“说下去。”&lt;&#x2F;p&gt;
&lt;p&gt;“我读了验尸报告的复印件，后脑巴掌大的骨骼呈扁平状。换句话说，后脑巴掌大的一块骨骼整个塌陷了下去。我在警方诱导下挑出的木柴大体呈三角形，单边直径四厘米左右。我不认为用它击打三次甚兵卫的后脑勺，会出现巴掌大的骨骼塌陷。用直径四厘米的木头击打三次的话，那种大小的伤口应该是凹凸不平的。所以，我想凶器会不会是更大的东西，并且只打了一下。我的见解可能外行，能否劳烦您调查一下呢？”&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫用温顺的语调说道。&lt;&#x2F;p&gt;
&lt;p&gt;原岛在回程的出租车上反复思考植木的话。想着想着，他察觉到其中包含着十分重大的意义，不由得亢奋起来。&lt;&#x2F;p&gt;
&lt;p&gt;他回到事务所，重新读了一遍诉讼记录。意识到自己看问题的眼光已经和从前不一样了。他从前并不相信只要视点改变，印象也会随之改变。现在却不得不信。&lt;&#x2F;p&gt;
&lt;p&gt;警察确实一开始就把嫌疑锁定在了植木寅夫身上，几乎没有对其他人展开调查。植木被逮捕后马上招供，警方或许因此松懈，并没有下功夫夯实证据。警察们得意忘形，结果在初期调查时偷工减料，留下了破绽。&lt;&#x2F;p&gt;
&lt;p&gt;原岛东奔西跑，询问了十几个向山岸甚兵卫借过钱的人。没有一个看过甚兵卫拿出坐垫，招呼人坐下的。那对租住在二楼的小学教师夫妇说，甚兵卫只会招呼那些与他没有利益纠葛的访客坐在坐垫上。对待这样的客人，甚兵卫会极有耐心地和他们聊天，一副宾主尽欢的景象。因此，原岛也想方设法联系到这些人。一切都跟植木说的一样。&lt;&#x2F;p&gt;
&lt;p&gt;如此一来，或许跟植木主张的一样，警察依据常识，认为甚兵卫会拿出坐垫招待前来借钱还钱的客人。同时又认为，凶手为了将现场伪造成入室抢劫的模样，将坐垫放回了原处。他们将两种猜测结合起来判断，强迫嫌犯按照这个逻辑做了自供。&lt;&#x2F;p&gt;
&lt;p&gt;原岛拿着解剖医师给出的尸检报告，咨询了相熟的法医学者。法医学者说，根据尸检报告上的记载，能造成手掌大小扁平化创口的凶器，直径至少在八厘米上下，并且应该只攻击了一下。警察为什么没注意到这点呢？真让人不可思议。法医学者对此百思不得其解。&lt;&#x2F;p&gt;
&lt;p&gt;不过，比起我们的鉴定，警察更相信自己的第六感和作为警察的经验性直觉。他们甚至公开表态，说科学鉴定只能作为参考。这位长期被一线刑警轻视的学者不由得苦笑起来。&lt;&#x2F;p&gt;
&lt;p&gt;想来，参与搜查的刑警第一眼便看到了甚兵卫后院的柴火，又没有找到其他合适的“凶器”，所以就先入为主，随随便便挑了一根直径四厘米的柴火。凶器指认是在植木寅夫认罪后不久进行的，所以调查员可能觉得胜券在握了吧。警方曾经调查过一个重要案件，凶手在现场遗留下了众多物品，警察被喜悦冲昏了头脑，致使初期调查做得十分粗糙，结果反而将调查送进了死胡同。世上最漏洞百出、最具偏见性的，莫过于警察自以为是的经验性直觉。&lt;&#x2F;p&gt;
&lt;p&gt;“警察基于（这样的）某种偏见，无视足以洗清嫌疑的事实，使用不当手段向嫌犯逼供的事例多不胜数。经验丰富的法官必定知晓一二。此外，阐述犯罪关系的文章中，也经常引用此类事实。例如，豪斯纳曾经说过，部分警察因为嫌犯过于慌乱而无视证明其无罪的证据。罗辛也说过，警方手上的许多自供都不足为信，这一点已成定论。”（司法研修所与“事实认定”相关的教材）&lt;&#x2F;p&gt;
&lt;p&gt;原岛产生了强烈的辩护意愿。遇到这样的案子，也许是老天看在他出任援助律师的分儿上给予的奖赏。在法庭上，他要求法医学者作为“二次鉴定”的证人出庭。并向法庭申请，要求与山岸甚兵卫有过交际的人作为新证人出庭。&lt;&#x2F;p&gt;
&lt;p&gt;原岛在法庭上质询四名审讯过植木的警察。四人都说植木的自供是其本人意志的体现，审讯期间无任何强迫行为。&lt;&#x2F;p&gt;
&lt;p&gt;——你对嫌犯说过“警察知道是你杀了山岸，再怎么狡辩也没用。老老实实认罪的话，就让你早点回家，同时向检察官求情，让你免于起诉。”这样的话吗？&lt;&#x2F;p&gt;
&lt;p&gt;证人 A——没说过。&lt;&#x2F;p&gt;
&lt;p&gt;——是否为了使嫌犯认罪，允许他在审讯室自由地抽烟。认罪后，又请他吃了三次炸虾盖饭？&lt;&#x2F;p&gt;
&lt;p&gt;证人 B——在审讯室给嫌犯递一两根烟是正常的，但还没到允许自由吸烟的地步。炸虾盖饭也只给过一次。&lt;&#x2F;p&gt;
&lt;p&gt;——你明示或者暗示过嫌犯，让他承认是自己将对谈时的坐垫放回墙角的吗？&lt;&#x2F;p&gt;
&lt;p&gt;证人 C——那是嫌犯基于其本人意志，主动承认的。&lt;&#x2F;p&gt;
&lt;p&gt;——是否向嫌犯暗示过凶器是木柴，并将其带至被害人后院屋檐下，让其从中挑选出凶器（一号证据），诱导其承认使用该凶器三次击打被害人后脑部？&lt;&#x2F;p&gt;
&lt;p&gt;证人 D——绝对没有，全是嫌犯主动承认的。木柴也是嫌犯自己指认的。他对我们说：“就是这根。”为了试手感，还把木柴拿在手里挥动了几下。他非常积极地向我们展示凶器，并说：“就是这个错不了。”&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫在同四名证人对质时，表现得异常愤怒。&lt;&#x2F;p&gt;
&lt;p&gt;“你们那时确实说了那样的话。身为警察居然大言不惭地说谎，你们不觉得羞愧吗？为了立功，就可以陷害无罪之人，就可以肆无忌惮地说假话吗？你们的良心，不会觉得不安吗？”&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫咄咄逼人，参与审讯的四名警察难于招架，唯有一个劲儿地否认。&lt;&#x2F;p&gt;
&lt;p&gt;公审开始后三个月，法庭下达了判决结果。法官以证据不足为由判定植木寅夫无罪。判决要点如下：&lt;&#x2F;p&gt;
&lt;p&gt;① 本庭对放置于庭内的松木进行实测后，发现其最大直径约为四厘米。根据证人 G（解剖医师）书写的鉴定报告及其证词，被害者头部骨骼呈扁平状伤口，造成该伤口的凶器至少与手掌一般大小，即直径必然在八厘米乃至九厘米左右（鉴定人 S 为某大学教授，与其意见相同）。因此，本庭认为该证物松木非本案凶器。&lt;&#x2F;p&gt;
&lt;p&gt;② 证物松木及被告自供中提及的从山岸甚兵卫处偷窃后遗弃至蓄水池的手提保险箱中，均未发现被告指纹。&lt;&#x2F;p&gt;
&lt;p&gt;③ 根据被告自供，手提保险箱里存有二十九张借据，被告从中取出五张，携至距离蓄水池约两百米的 N 人寿保险公司专用广场后的草丛，用火柴烧毁。然而，司法警员从位于道路南侧的蓄水池中发现的手提保险箱里，残存着以被告“植木寅夫”的名义写下的借据。对照被害人山岸甚兵卫持有的账簿后，可推测拿走的五张借据里，其中一张属于“猪木重夫”。针对该事实，检察官及参与搜查的司法警员认为，由于当晚光线昏暗，“植木寅夫”又与“猪木重夫”字体酷似，导致被告将两者混淆。&lt;&#x2F;p&gt;
&lt;p&gt;该推论虽有合理之处，但另一方面，如辩护人所说，假设被告为本案真凶，夺回其本人的借据应为犯罪目的之一，因而会更加谨慎地检查借据。本庭认为该主张亦具备说服力。&lt;&#x2F;p&gt;
&lt;p&gt;④ 本庭查阅被告针对司法警员的各项供述记录、辩解记录后，未发现参与审讯的司法警员存在逼供、长期拘留等强制性行为，但却留有通过诱骗，对被告进行利益诱导式询问的印象。被告于 × 月 × 日、× 月 × 日对检察官所做的第一、第二、第三次供述记录及在本庭上对法官的陈述中均强调了这一点。但另一方面，现有证据亦不足以形成本案非被告所为之心证。尤其被告在案件发生当晚，曾离开“万牌庄”一个小时，该事实决定其行动证明缺乏客观性。疑点在于中村是也作证，曾通过自家厕所目睹被告前往被害者家中。即，被告最初对司法警员所做自供之真实性，亦存在不得不被认可之处。&lt;&#x2F;p&gt;
&lt;p&gt;⑤ 然而，综合以上考虑。本庭认为，放置于庭内、足以证明被告为案件真凶的松木已被证实与案件无关，且除被告自供外，无其他任何足以证明其罪行的证据，其自供中零星存在的疑点亦无法被解释。从结论而言，被告为本案真凶这一推论缺乏合理依据。即，因本诉讼事实犯罪证据不足，本庭依据《刑事诉讼法》第三百三十六条规定，宣判被告无罪......&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h2 id=&quot;6&quot;&gt;6&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#6&quot;
   aria-label=&quot;Anchor link for: 6&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;自那之后，约莫过了一年。&lt;&#x2F;p&gt;
&lt;p&gt;只要晚上有空，原岛就会阅读与法律相关的书籍。某天晚上，他漫不经心地读着英国法官詹姆斯·欣德的《无罪判决事例研究》，其中一篇文章却撞入了他的眼帘。&lt;&#x2F;p&gt;
&lt;p&gt;读到开头三分之一时，他忍不住坐直了身子，看完一半后，他感到心跳加速、喘不上气来。&lt;&#x2F;p&gt;
&lt;p&gt;“192× 年秋，英国曼彻斯特一家枪支生产公司的员工彼得·卡梅登被捕。他被控杀害安玛西亚夫人，并放火烧毁了她的住宅。当时，卡梅登为金钱所苦，计划杀害富有的遗孀安玛西亚夫人，夺取其钱财。&lt;&#x2F;p&gt;
&lt;p&gt;“卡梅登于当晚七点左右来到安玛西亚夫人家。携带长约五十厘米的钢材，数次猛击夫人面部。他还解下自己的皮带，勒住夫人脖颈。最后，从房间里抢走了一百五十英镑现金和一箱宝石。&lt;&#x2F;p&gt;
&lt;p&gt;“并且，他为了掩盖犯罪痕迹，打算放火烧毁安玛西亚夫人的住宅。九点左右，他再次返回夫人家，点燃煤油灯，将煤油灯放在室内的衣橱上。为了使灯倾斜，他在煤油灯的底座垫了半本书。为了确保倒下的煤油灯点燃室内易燃物，从而引发火灾，他还将纸箱和衣物堆放在衣橱下。一个小时后，夫人住宅后的铁轨上驶过一辆运货列车，震动之下，衣橱上本就不稳的煤油灯掉落了下来。卡梅登预先知道夫人家地基不稳，每当火车经过，整个房子都会摇晃起来。三小时后，房子被烧得一干二净。消防车虽已奔赴现场，但依旧未能阻止火灾蔓延。&lt;&#x2F;p&gt;
&lt;p&gt;“不久后，彼得·卡梅登被捕，对自身罪行供认不讳。但即使被告已经认罪（后来卡梅登有翻供行为），法庭依然以证据不足为由，判定其无罪。&lt;&#x2F;p&gt;
&lt;p&gt;“争议点在于，犯下上述抢劫、杀人、放火罪行的真凶，究竟是不是被告彼得·卡梅登。该案件中，并未发现能将被告卡梅登与犯罪事实关联起来的指纹或其他客观证据。此外，间接证据也不具备指认卡梅登的充分性。综合多名友人及其他证人的证词，可证实案发后到被捕前，卡梅登的态度和言辞没有任何异常之处。不仅如此，案发后第二天，他还曾到伦敦游玩。虽然被告从伦敦返回后，立刻接受了警方的调查。可一旦承认返回曼彻斯特是其主观意愿，那么此项行为无疑对被告有利。&lt;&#x2F;p&gt;
&lt;p&gt;“卡梅登向警方认罪，随后又推翻了证词。他主张，自己的供述是警方逼迫下的产物，缺乏任意性。然而，法庭调查的所有证物并不能证实这项主张。因此，法庭认定他的初次供述具备证据效力。&lt;&#x2F;p&gt;
&lt;p&gt;“另外，法庭将被告的供述与其他证据一一对照过后，发现的重大疑点至少有以下几处。关于用钢材殴打安玛西亚夫人的时机，卡梅登的初次供述是这么说的：‘夫人给大门开了个小缝，慢慢探出身子。她的脸完全暴露的那一瞬间，我猛地用钢材打了下去。’第二天却又改口，称：‘我得到夫人的允许进入屋内，面对面坐在椅子上聊了会儿天，聊天时，趁她不注意打了她。’&lt;&#x2F;p&gt;
&lt;p&gt;“在杀人案件中，这一点极其重要。凶手究竟是在门口突然殴打被害人，还是进入房间后，在聊天的过程中殴打被害人？凶手很可能记不清犯罪细节，但上述犯罪过程不可能存在如此大的出入。此外，卡梅登也没有必要在这一点上故意撒谎。假设被告的自供为真，那么，又该如何解释这两次供述的出入呢？&lt;&#x2F;p&gt;
&lt;p&gt;“关于殴打安玛西亚夫人面部的次数，卡梅登在初次审讯中说：‘打了一次’。第二天变成‘两次’，一周后又说：‘我打得很用力，夫人的头耷拉下来之后，又连续打了四五下。’然而根据法医的尸检报告，死者面部的骨折极有可能是一次性击打造成的。&lt;&#x2F;p&gt;
&lt;p&gt;“关于殴打次数，被告卡梅登的供述与事实不符，因而存在重大疑点。很难认为这种出入是由记忆不准确造成的。另外，假设卡梅登是真凶，他也没有必要故意报高殴打次数，这么做显然对自己不利。这一点也使法庭对自供的真实性产生了疑问。&lt;&#x2F;p&gt;
&lt;p&gt;“关于凶器，卡梅登被捕后不久，警察曾问他：‘是否见过这根钢材？’卡梅登答：‘这根钢材上应该有我的指纹。好像是这根，你们在哪儿发现它的？我拿着它去夫人家时，那附近还有好多一模一样的钢材，我记不清了，好像见过。’随后用右手将钢材夹在腋下，测量了一下长度，对警察肯定地说：‘就是它，错不了。’&lt;&#x2F;p&gt;
&lt;p&gt;“卡梅登指认的钢材直径为三点五厘米，然而，验尸官查看死者面部伤口后，发现伤口的直径比之宽三倍。法庭对放置于庭内的钢材进行了实测，得出的结论与验尸官一致。由此可见，卡梅登指认的钢材并非本案凶器。那么，卡梅登为什么要这么做呢？因为他虽然是凶手，却不记清行凶时使用的凶器，所以认错了？但是，如果真正的凶器比他指认的钢材粗三倍，那么卡梅登为什么要特意将钢材夹在腋下，并用近乎断言的口吻向警方指认呢？这太不自然了。他的供述中甚至提到了指纹。从口供的整体印象来看，卡梅登要么是记不清了，要么就是明知这根钢材与案件无关，却为了迎合警方的调查，故意做了伪证。&lt;&#x2F;p&gt;
&lt;p&gt;“假如是后者，就不得不问一问凶手为什么要针对凶器，做这种迎合性供词了。&lt;&#x2F;p&gt;
&lt;p&gt;“关于放火方式，卡梅登的供述与前文所说一致。但警方现场勘查后，并没有在衣橱下发现掉落的煤油灯。现场勘查时，即使该区域并非起火点，但与之相邻的衣橱下假如真的存在煤油灯，搜查人员绝不可能发现不了。由此可见，所谓的煤油灯，从一开始就不存在。这一点又使卡梅登口供的真实性大打折扣。&lt;&#x2F;p&gt;
&lt;p&gt;“综上所述，虽然案件疑点重重，法官依然以证据不足为由，判定被告无罪。”&lt;&#x2F;p&gt;
&lt;p&gt;读完整篇文章的原岛，感觉自己像突然被书上的字打了一巴掌。&lt;&#x2F;p&gt;
&lt;p&gt;这是巧合吗？可是，未免太过相似了。&lt;&#x2F;p&gt;
&lt;p&gt;不，原岛的直觉认为，植木寅夫一定读过这本书。&lt;&#x2F;p&gt;
&lt;p&gt;植木从前在二手书店做店员，从十八岁一直工作到二十五岁。后来结婚，开了一家与书店无关的中华料理店。&lt;&#x2F;p&gt;
&lt;p&gt;原岛从抽屉里拿出植木诉讼记录的复印件，确认了那家二手书店的名字。他给精通二手书的朋友打电话，对方告诉他，那家书店的主营书籍就是法律书。&lt;&#x2F;p&gt;
&lt;p&gt;那样一家二手书店，一定有詹姆斯·欣德的《无罪判决事例研究》。这本书翻译于战前，书店店员植木寅夫的确有可能读过。&lt;&#x2F;p&gt;
&lt;p&gt;逃脱警方的调查绝非易事。越想隐藏犯罪痕迹，越容易在不经意处露出马脚。迄今为止，无数杀人犯都曾巧妙地用诡计掩盖犯罪，然而，等待他们的往往是死刑，或者漫长的牢狱生涯。即使逃跑，也必须忍受逃亡之路上的不安与艰辛，那种滋味还不如坐牢。&lt;&#x2F;p&gt;
&lt;p&gt;所以最理想的结果，就是堂堂正正被警方逮捕，然后无罪释放。植木寅夫决心杀掉折磨自己的山岸甚兵卫时，心里动的大概就是这个念头。那时，他的脑海中极有可能浮现出曾在二手书店工作时读过的一本书。&lt;&#x2F;p&gt;
&lt;p&gt;曼彻斯特的彼得·卡梅登事件里，卡梅登指认了错误的凶器后，警方便盲目相信，将这根钢材作为物证呈堂。植木的案件里，钢材变成了烧火用的木柴。被捕后，卡梅登向警方指认钢材，并将钢材夹在腋下比画长度，说：“就是这个，错不了。上面应该有我的指纹。”这跟植木向警方指认木柴，为了试手感把木柴拿在手中挥舞了五六下，最后说：“就是它，错不了。这上面难道没有我的指纹吗？我记得应该有。”简直一模一样。植木模仿这位英国嫌犯，故意说出对自身不利的口供，然后反咬一口，让别人以为所有的口供都是警方逼供、利益诱导下的产物。&lt;&#x2F;p&gt;
&lt;p&gt;他原本就没在木柴和现场留下指纹，手提保险箱上也没有。或许打从一开始，他就是戴着手套作案的。&lt;&#x2F;p&gt;
&lt;p&gt;参与审讯的警察说，他从头到尾都很配合，甚至“殷勤”。正是这种态度欺骗了警察，使他们变得疏忽大意，以至于没有仔细地夯实证据。卡梅登供述殴打被害人次数时，从“一次”变成“两次”，最后改口称“四五次”，与植木从“五六次”改口称“三次”如出一辙。两个人实际上都只打了一下。&lt;&#x2F;p&gt;
&lt;p&gt;坐垫的问题也是如此。事实上，应该是植木主动对警察说：“甚兵卫拿出坐垫请我坐，我在杀人后又把它们放回了墙角。”他预先知道甚兵卫不会给借钱的客人拿坐垫，所以利用了这一点。在手提保险箱里留下自己的借据也是一招好棋，因为真正的凶手通常不会这么做。山岸甚兵卫是孤寡老人，既没有兄弟姐妹，也没有外甥侄女。只要他一死，所有的债务自然烟消云散。&lt;&#x2F;p&gt;
&lt;p&gt;假如，警方知道了这个真相又会做何感想？法庭上双方对峙时，面对植木“逼供”“利益诱导”等高姿态的口头攻击，警察为什么显得毫无招架之力？或许是由于对方太过厚颜无耻，警察在极度震惊之下，只能茫然地掉进陷阱之中。法庭上，植木那副大义凛然的样子，确实让原岛相信他的初次供述是被逼迫的。&lt;&#x2F;p&gt;
&lt;p&gt;原岛的内心无法平静，他站了起来，在书房里来回踱步。为了使自己冷静，他从书架上抽出一本薄薄的书，心不在焉地翻看起来。&lt;&#x2F;p&gt;
&lt;p&gt;“......判断被告是否被逼供时，不能仅以被告的口供是否存在前后矛盾，或者在法庭上时，被告对证人警察的态度是否‘坦然勇敢’为评判标准。而应该综合考虑被告的性格、认罪的动机等具体因素，与现有证据一一对照，判断被告证词的真实性。然而，一审中，审判长并未综合研究现有证据，努力辨析被告证词的真实性，而是被被告扭曲的性格、卑劣且满是谎言的人格所欺骗。本庭认为，该自供的任意性不应被否认。”（名古屋高级法院金泽分院 昭和二十九年三月十八日 高级法院刑事特报）&lt;&#x2F;p&gt;
&lt;p&gt;——植木寅夫如今音讯全无。审判结束后，他将车站附近的地皮以高价卖给了某土地公司，之后便销声匿迹。他没有上门道谢，只给原岛打过一通电话。&lt;&#x2F;p&gt;
&lt;p&gt;“托您的福我得救了。您真是一位优秀的律师。这样一位优秀的律师居然白给我打官司，真叫人过意不去。”&lt;&#x2F;p&gt;
&lt;p&gt;植木寅夫如果死于交通事故，或许能应了“天理昭彰”“惩恶扬善”的老话。&lt;&#x2F;p&gt;
&lt;p&gt;然而，现实似乎不会这样发展。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;榻榻米的量词，多以此计算房间大小。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;日本麻将的打法。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
    </item> <item>
      <title>找寻</title>
      <pubDate>Sun, 01 Feb 1970 00:00:00 +0000</pubDate>
      <dc:creator>顾城</dc:creator>
      <link>https://www.aspchang.com/posts/zhao-xun/</link>
      <guid>https://www.aspchang.com/posts/zhao-xun/</guid>
      <description xml:base="https://www.aspchang.com/posts/zhao-xun/">&lt;hr&#x2F;&gt;
&lt;div style=&quot;text-align: center; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif;&quot;&gt;
  &lt;h2 style=&quot;font-weight: bold; margin-bottom: 1.5em;&quot;&gt;找寻&lt;&#x2F;h2&gt;
  &lt;div style=&quot;font-size: 1.2em; line-height: 2.5;&quot;&gt;
    &lt;p style=&quot;text-align: center;&quot;&gt;在阔野上，在霜气中，&lt;br&#x2F;&gt;我找寻春天，找寻新叶，找寻花丛。&lt;&#x2F;p&gt;
    &lt;p style=&quot;text-align: center;&quot;&gt;当冷雾散尽，天色大亮，&lt;br&#x2F;&gt;我只找到，一滩败草，一袖寒风……&lt;&#x2F;p&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 2em; margin-bottom: 0;&quot;&gt;顾城&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: right; font-family: &#x27;楷体&#x27;, KaiTi, &#x27;楷体_GB2312&#x27;, STKaiti, serif; font-size: 1.0em; color: #666; margin-top: 0.2em;&quot;&gt;1970 年 2 月，十三岁&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>某阿呆的一生</title>
      <pubDate>Thu, 01 Oct 1925 00:00:00 +0000</pubDate>
      <dc:creator>芥川龙之介</dc:creator>
      <link>https://www.aspchang.com/posts/a-fools-life/</link>
      <guid>https://www.aspchang.com/posts/a-fools-life/</guid>
      <description xml:base="https://www.aspchang.com/posts/a-fools-life/">&lt;br&#x2F;&gt;
&lt;div style=&quot;text-align: center; margin-bottom: 2rem;&quot;&gt;
  &lt;img src=&quot;https:&#x2F;&#x2F;img.aspchang.com&#x2F;file&#x2F;1769615472761_Akutagawa_Ryunosuke.jpg&quot; alt=&quot;芥川龙之介&quot; style=&quot;max-width: 300px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); display: block; margin: 0 auto;&quot; &#x2F;&gt;
  &lt;p style=&quot;font-style: italic; color: #666; margin-top: 0.5rem;&quot;&gt;芥川龙之介 (1892-1927)&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;em&gt;久米正雄：&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;是否发表这份手稿自不待言，至于发表的时间和出版社，我也希望由你全权决定。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;原稿中出现的人物，我想你大都认识。然而，尽管如此，我仍然希望发表时不要加注任何说明。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;如今，我正生活在一种最不幸的幸福之中。然而，出乎意料地，我却不感到后悔。唯独身为一个糟糕的丈夫、糟糕的儿子和糟糕的父亲，却让我为他们感到难过。在此，我向你道别。在这份手稿中，我完全没有企图为自己辨解。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;最终，将手稿托付给你，是因为世上大概没有谁比你更了解我。（在撕开我这所谓城市人的外皮以后）请尽管取笑手稿中那个愚蠢的我吧。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;em&gt;芥川龙之介&lt;&#x2F;em&gt;&lt;br&gt;
&lt;em&gt;昭和二年六月二十日&lt;&#x2F;em&gt;
&lt;&#x2F;div&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;一_时代&quot;&gt;一 时代&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一_时代&quot;
   aria-label=&quot;Anchor link for: 一_时代&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;这里是书店的二楼。二十岁的他，正爬上书架旁的西式梯子寻找新书。莫泊桑、波特莱尔、史特林堡、艾布森、萧伯纳、托尔斯泰 ……&lt;&#x2F;p&gt;
&lt;p&gt;夜幕低垂，他仍然努力阅读书脊上的文字。与其说这里放的是书，倒不如说它们就是末世的象征。尼采、魏尔伦、龚固尔兄弟、杜斯妥也夫斯基、霍普特曼、福楼拜 ……&lt;&#x2F;p&gt;
&lt;p&gt;他一边与阴暗搏斗，一边念着这些名字。但不知不觉间，书本已经隐没在忧伤的黑暗中。他终于撑不住，正想从梯子爬下来时，头顶一颗灯泡突然「砰」的一声亮起。他站在梯上，俯视正在书本间穿梭的店员与顾客。他们都显得异常渺小。不仅如此，甚至显得多么寒酸。&lt;&#x2F;p&gt;
&lt;p&gt;「人生还不如一行波特莱尔。」&lt;&#x2F;p&gt;
&lt;p&gt;他稍为停在梯上，环视着这些人们。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二_母亲&quot;&gt;二 母亲&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二_母亲&quot;
   aria-label=&quot;Anchor link for: 二_母亲&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;精神病人都穿起相同的深灰色衣服，令宽阔的房间更见沉郁。她们当中一人面向风琴，专心弹奏诗歌。另一人站在房间的正中央在跳舞。但与其说是跳舞，倒不如说是蹦蹦跳。&lt;&#x2F;p&gt;
&lt;p&gt;他跟一位面色红润的医生一同观看这景象。十年前，他的母亲也跟这里的人没两样，而他确实从她们身上嗅到母亲的气息。&lt;&#x2F;p&gt;
&lt;p&gt;「我们走吧！」&lt;&#x2F;p&gt;
&lt;p&gt;医生率先站起来，沿着走廊走进某房间内。房间一角放有一个巨大玻璃瓶，瓶内装满酒精和浸泡着几颗脑袋。他在其中一个脑袋上发现点点微微发白的东西，看来就像蛋白滴在上面一样。当他站着跟医生说话时，脑里再次想起自己的母亲。&lt;&#x2F;p&gt;
&lt;p&gt;「拥有这个脑袋的男人是 X X 电力公司的一名技工。他总把自己想象成一台巨大而黑亮的发电机。」&lt;&#x2F;p&gt;
&lt;p&gt;为了逃避医生的目光，他将视线移向玻璃窗外。窗外虽然只有一道混杂着陶瓷碎片的砖墙，却露出薄薄地衣所形成的点点白斑。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三_家&quot;&gt;三 家&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三_家&quot;
   aria-label=&quot;Anchor link for: 三_家&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他在市郊某个位于二楼的房间中居住。因为地基不稳，二楼出奇地往一方倾斜。&lt;&#x2F;p&gt;
&lt;p&gt;他的姨母经常在二楼和他吵架，他的养父母也曾尝试数度调停。虽然是这样，他比谁人都更爱姨母。姨母一生没嫁，在他二十岁时已经是个年近六十的老人。&lt;&#x2F;p&gt;
&lt;p&gt;他多次在市郊某二楼里想，彼此相爱是否等同彼此折磨？他感受到二楼可怕的斜度。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四_东京&quot;&gt;四 东京&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四_东京&quot;
   aria-label=&quot;Anchor link for: 四_东京&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;隅田川一片混浊。他从行驶中的小轮船窗口眺望向岛的樱花。盛开的樱花在他眼里就如破布般忧郁。然而在这些樱花中 —— 自江户时代就有的向岛樱花中，他曾经看见自己。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;五_我&quot;&gt;五 我&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#五_我&quot;
   aria-label=&quot;Anchor link for: 五_我&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他和前辈面对面坐在咖啡室里一起不停抽烟。他没有说话，只是专心倾听前辈所说的话。&lt;&#x2F;p&gt;
&lt;p&gt;「今天我坐了半天汽车。」&lt;&#x2F;p&gt;
&lt;p&gt;「有事吗？」&lt;&#x2F;p&gt;
&lt;p&gt;前辈用手轻托着腮，漫不经心地回答：&lt;&#x2F;p&gt;
&lt;p&gt;「没什么，只是想坐坐而已。」&lt;&#x2F;p&gt;
&lt;p&gt;这句话把他解放到未知的世界 —— 一个接近诸神的「我」的世界。他感到一份痛，但同时也感到一份欢悦。&lt;&#x2F;p&gt;
&lt;p&gt;这间咖啡室非常狭小，然而，潘神画像下的红色花盆里却生长了一棵橡树，无力地垂下厚厚的叶片。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;六_疾病&quot;&gt;六 疾病&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#六_疾病&quot;
   aria-label=&quot;Anchor link for: 六_疾病&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他在不断吹拂的海风中，揭开一本厚厚的英文字典，查阅指尖下的生字。&lt;&#x2F;p&gt;
&lt;p&gt;Talaria 长有翅膀的鞋，又或凉鞋。&lt;&#x2F;p&gt;
&lt;p&gt;Tale 故事。&lt;&#x2F;p&gt;
&lt;p&gt;Talipot 生长在东印度的椰树。树高五十至一百呎，叶片可做伞子，扇及帽子。每七十年开花一次。……&lt;&#x2F;p&gt;
&lt;p&gt;他在脑海里清晰显现出椰树花朵的形态。这时候，他喉头感觉到一阵从没有过的痕痒。他忍不住把痰吐在字典上。心想这是痰吗？ —— 但那却不是痰。他想起生命的短暂，也想起椰树的花 —— 那朵在遥远对岸耸立的椰树的花。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;七_画&quot;&gt;七 画&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#七_画&quot;
   aria-label=&quot;Anchor link for: 七_画&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;非常突然，确实，非常突然。当他站在书店前看梵高画册时，他突然了解「画」到底是怎么一回事。那本梵高的画册无疑只是一本相集，却让他清楚感受到相集里浮现出来的大自然。&lt;&#x2F;p&gt;
&lt;p&gt;他对这些「画」的热情开拓了他的视野。不知从何时开始，他总是注视着婀娜的树枝和微微鼓起的女性面颊。&lt;&#x2F;p&gt;
&lt;p&gt;某个下雨的秋天黄昏，他在郊外的铁桥下走过。&lt;&#x2F;p&gt;
&lt;p&gt;铁桥前方的土堤下，停泊了一辆马车。当他在桥下走过时，感觉某人也曾经走在这条路上。那人是谁？对他而言，这问题已经无须多问。二十三岁的他的心目中，某个耳朵被割下的荷兰人正叼着长长烟斗，一动不动地用锐利的目光凝视这幅忧郁的风景画。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;八_火花&quot;&gt;八 火花&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#八_火花&quot;
   aria-label=&quot;Anchor link for: 八_火花&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他满身雨水的走在柏油路上。雨下得相当大。在洒满全身的水珠当中，他嗅到雨衣散发出来的气味。&lt;&#x2F;p&gt;
&lt;p&gt;眼前的架空电线闪起紫色的火花，他感到一份莫名的感动。在上衣口袋里放着准备在同人志上发表的文章原稿。他在雨中前行，再次抬头回望身后的架空电线。&lt;&#x2F;p&gt;
&lt;p&gt;架空电线依然闪耀出火花。他回顾自己的人生，并没有特别渴求的东西。唯独这点紫色的火花，―― 唯独这点在空中猛烈燃烧的火花，他却即使付上生命也想捉紧它。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;九_尸体&quot;&gt;九 尸体&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#九_尸体&quot;
   aria-label=&quot;Anchor link for: 九_尸体&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;所有尸体的拇指上都挂有穿上铁丝的名牌。名牌上写上姓名年龄等资料。他的友人弯下腰，灵巧地用手术刀割开尸体的脸皮，皮肤下布满漂亮的黄色脂肪。&lt;&#x2F;p&gt;
&lt;p&gt;他凝望这具尸体。对他而言，这是完成那篇短篇小说 ―― 那篇以平安时期为背景的短篇小说所必须干的事。尽管这样，那股气味几近腐烂杏子的尸体却确实令人嗅了不快。他的友人皱紧眉头，慢慢拉动手术刀。&lt;&#x2F;p&gt;
&lt;p&gt;「最近尸体不太足够。」他的友人这样说。&lt;&#x2F;p&gt;
&lt;p&gt;然而不知何时他已经准备好他的回应 ―― 「尸体不够的话，我会不怀恶意地把人杀掉。」然而这回应当然只是藏在他心中而已。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十_老师&quot;&gt;十 老师&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十_老师&quot;
   aria-label=&quot;Anchor link for: 十_老师&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他正在大树下阅读老师的书。在秋日阳光下，槲树上没有一片叶子在摇晃。远方某处天空上，一杆悬垂着玻璃秤盘的秤子刚好保持着平衡。 ―― 他一边阅读老师的书，一边感受着这片景象 ……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十一_黎明&quot;&gt;十一 黎明&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十一_黎明&quot;
   aria-label=&quot;Anchor link for: 十一_黎明&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;天空渐渐明亮起来。他不知何时已经身处某街角上环视着宽广的市集。市集上的人群和车辆全都染成玫瑰的颜色。&lt;&#x2F;p&gt;
&lt;p&gt;他点起一根香烟，静静在市集内行走。这时一头黑色的小狗突然向他吠起来。然而他却不感害怕，不仅如此，他还很喜欢这头小狗。&lt;&#x2F;p&gt;
&lt;p&gt;市集的正中央长了一棵法桐树，枝叶向着四方生长。他站在树根前，让自己的视线越过树枝仰望天空。这时天空上正好有一颗明星在他的头上闪耀。&lt;&#x2F;p&gt;
&lt;p&gt;这时他二十五岁，也是遇上老师后的第三个月。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十二_军港&quot;&gt;十二 军港&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十二_军港&quot;
   aria-label=&quot;Anchor link for: 十二_军港&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;潜水艇内部一片阴暗。在阻隔四周的机器之间，他弯腰望向细小的潜望镜。映在潜望镜上的是光亮的军港风光。&lt;&#x2F;p&gt;
&lt;p&gt;「那边的『金刚』你也看到了吗？」一位海军军官跟他说。他在四方形的镜片上看到细小的军舰。不知怎的，他突然想起荷兰香芹，想起在三十钱一份的牛扒上微微散发香气的荷兰香芹。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十三_老师之死&quot;&gt;十三 老师之死&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十三_老师之死&quot;
   aria-label=&quot;Anchor link for: 十三_老师之死&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他在雨后的风中走在新建的火车月台上。天色依然昏暗，三四名铁路工人正在月台对面上下挥动镐子，同声高唱。&lt;&#x2F;p&gt;
&lt;p&gt;雨后的风，吹散工人的歌声和他的情感。他没有点起香烟，就这样地感受着几近欢悦的痛。「老师病危」的电报依然在他外衣的口袋里 ……&lt;&#x2F;p&gt;
&lt;p&gt;早上六时从松山山后出发前往那方的上行列车正冒起轻烟，向着这里蜿蜒驶来。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十四_结婚&quot;&gt;十四 结婚&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十四_结婚&quot;
   aria-label=&quot;Anchor link for: 十四_结婚&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;「你这样乱花钱真叫人头痛。」他在婚后的第二天这样抱怨妻子。然而与其说是抱怨，倒不如说是他姨母要他说的。妻子跟他道歉自不用说，就是对姨母，妻子也都赔过不是。就在为他而买的黄水仙盆前 ……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十五_他们&quot;&gt;十五 他们&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十五_他们&quot;
   aria-label=&quot;Anchor link for: 十五_他们&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他们在巨大芭蕉树的叶影下过着憩静安逸的生活。— — 因为他们的家就在从东京出发乘火车也得花上一个小时的海边小镇里。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十六_枕头&quot;&gt;十六 枕头&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十六_枕头&quot;
   aria-label=&quot;Anchor link for: 十六_枕头&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他一边枕在散发出玫瑰叶香的怀疑主义上，一边阅读安那托尔·佛朗士的书。然而他却察觉不到在何时枕头内已经藏着半人马神。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十七_蝴蝶&quot;&gt;十七 蝴蝶&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十七_蝴蝶&quot;
   aria-label=&quot;Anchor link for: 十七_蝴蝶&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;一只蝴蝶在充斥着海草气味的风中闪闪发亮地飞舞。他感觉自己嘴唇就只在仅仅一瞬间触碰到蝴蝶的翅膀。但翅膀在擦过他唇上时留下的鳞粉，却在多年以后依然闪闪发亮。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十八_月亮&quot;&gt;十八 月亮&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十八_月亮&quot;
   aria-label=&quot;Anchor link for: 十八_月亮&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他偶然在旅馆的阶梯上遇上她。虽然是在这样的大白天，她的脸却犹如沐浴在月光之下。他目送她离去（他们二人互不认识），感受至今未曾尝过的寂寞 ……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;十九_人工翅膀&quot;&gt;十九 人工翅膀&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#十九_人工翅膀&quot;
   aria-label=&quot;Anchor link for: 十九_人工翅膀&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他从安那托尔·佛朗士转到十八世纪的哲学家。尽管如此，他没有靠向卢梭。或许这是因为他的其中一面 ―― 容易感情用事的一面跟卢梭很接近的缘故。他靠向的是跟他自身另一面 ―― 跟他冷静理智的另一面更接近的「憨第德」的哲学家。&lt;&#x2F;p&gt;
&lt;p&gt;来到二十九岁，他对人生已经不再有任何寄望。但伏尔泰却给了他这双人工翅膀。&lt;&#x2F;p&gt;
&lt;p&gt;他展开这双人工翅膀，优悠地飞往天上。与此同时，沐浴在理智光芒下的各种喜与悲也在他的眼前坠落。他一边向卑微的小镇掷下讥讽与微笑，一边在万里无阻的天空上飞向太阳。他似乎早已忘记那个因为被阳光烧毁了人工翅膀，最终掉进海里死去的古希腊人。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十_枷锁&quot;&gt;二十 枷锁&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十_枷锁&quot;
   aria-label=&quot;Anchor link for: 二十_枷锁&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;因为进入某报社工作，他们夫妇二人开始跟他的养父母同住。他从一份写在黄纸上的合约里获得依靠。然而当他过后再看这份合约时，却发现报社无需承担任何责任，承担责任的人就只有他自己一个。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十一_疯狂的女孩&quot;&gt;二十一 疯狂的女孩&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十一_疯狂的女孩&quot;
   aria-label=&quot;Anchor link for: 二十一_疯狂的女孩&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;两辆人力车正在阴天的偏僻乡间小路上行走。从迎面而来的海风可以得知这条路正通往海边。他坐在后面的那辆人力车上，奇怪自己为何对这次幽会明明不感兴趣，却不知被什么东西牵引到这里来。那东西绝非爱情。但假若不是爱情，那到底是什么？为了逃避这问题，他只好这样想：「总而言之，我俩的地位是平等的。」&lt;&#x2F;p&gt;
&lt;p&gt;坐在前面那辆人力车上的人是个疯狂的女孩。不仅如此，她的妹妹也因为妒忌心重而自杀身亡。&lt;&#x2F;p&gt;
&lt;p&gt;「事到如今，这也没办法了。」&lt;&#x2F;p&gt;
&lt;p&gt;他对这个疯狂的女孩 ―― 对这个充满强烈动物本能的女孩产生了厌恶感觉。&lt;&#x2F;p&gt;
&lt;p&gt;两辆人力车这时驶经飘散海腥气味的墓地前。黏着蚝壳的矮篱笆后是几座黑色的石塔。他眺望石塔后方微微发亮的大海，突然对女孩的丈夫 ―― 对那位未能把女孩的心抓住的丈夫感到鄙视 ……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十二_某画家&quot;&gt;二十二 某画家&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十二_某画家&quot;
   aria-label=&quot;Anchor link for: 二十二_某画家&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;虽然只是杂志上的插画，这幅公鸡水墨画却展现出鲜明的个性，于是他向友人打听这位画家是谁。&lt;&#x2F;p&gt;
&lt;p&gt;只过了一个星期，这位画家就来探访他。这是他人生中一件非常重要的事。他在这位画家身上找到众人都没有发现的诗意。不仅如此，他还发现了自身那个就连自己都不了解的灵魂。&lt;&#x2F;p&gt;
&lt;p&gt;在一个微寒的秋日黄昏，他在一株玉米前突然想起这位画家。高高的玉米凌乱地披满叶片，在隆起的泥土上露出一根根跟神经线一样的幼根。这景象无疑就是容易受伤的他的一幅自画像。但发现此事时却只是令他更感忧郁而已。&lt;&#x2F;p&gt;
&lt;p&gt;「已经太迟了。然而要是发生什么事的时候 …… 」&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十三_她&quot;&gt;二十三 她&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十三_她&quot;
   aria-label=&quot;Anchor link for: 二十三_她&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;广场的天空渐渐昏暗起来，发着低烧的他走在广场上，几栋高楼大厦窗内的电灯把清澈的天空微微照成银色。&lt;&#x2F;p&gt;
&lt;p&gt;他决定停在路旁等她。约五分钟以后，她疲倦地走到他身旁。她微笑望向他的脸说：「好累啊。」他们并肩而行，走在微亮的广场上。这是他们的第一次。只要能够跟她一起，他感觉即使付出一切他都在所不惜。&lt;&#x2F;p&gt;
&lt;p&gt;他们乘上汽车，她静静地凝视他说：「你后悔吗？」他毫不含糊地回答：「我不后悔。」她按着他的手说：「我也不后悔。」这时她的脸就像沐浴在月光下一样。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十四_分娩&quot;&gt;二十四 分娩&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十四_分娩&quot;
   aria-label=&quot;Anchor link for: 二十四_分娩&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他站在屏风一旁，低头望着穿起白色手术服的产婆为婴儿洗澡。每当肥皂水弄进婴儿眼里时，婴儿都可怜地皱起眉头。不仅如此，婴儿还会不停尖声哭叫。他在婴儿身上嗅到跟幼鼠相近的气味，这时他不禁感慨地想：「这家伙为何要来到在这世上？来到这个充满苦难的娑婆世界。而且为何还要承受命运安排，拥有如我一样的父亲？」&lt;&#x2F;p&gt;
&lt;p&gt;然而这男孩却是他妻子所生的第一胎。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十五_斯特林堡&quot;&gt;二十五 斯特林堡&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十五_斯特林堡&quot;
   aria-label=&quot;Anchor link for: 二十五_斯特林堡&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他站在房间门前，看着几个穿着不太光鲜的中国人，在盛开石榴花的月光底下打麻将。看完以后回到房间，在矮矮的油灯下开始阅读「狂人辨词」。然而还没有读完两页，他就发出一声苦笑。——— 斯特林堡在寄给伯爵夫人这位情妇的书信中，写上了跟他相似的谎言。……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十六_古代&quot;&gt;二十六 古代&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十六_古代&quot;
   aria-label=&quot;Anchor link for: 二十六_古代&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;颜色剥落的众佛、天神、马和莲花几乎完全震慑住他。当他抬头上望它们时，一切事情都随之而忘掉，就连挣脱疯狂女孩束缚的幸运都已经忘记。……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十七_斯巴达式训练&quot;&gt;二十七 斯巴达式训练&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十七_斯巴达式训练&quot;
   aria-label=&quot;Anchor link for: 二十七_斯巴达式训练&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他和他的友人正走在某条小巷内。一辆升起了车篷的人力车从远方笔直地朝向他们迎面而来。出乎意料的是，车上的人正是昨晚的她。在如此的大白天里，她的脸容看起来依然如在月光之下。在他的朋友面前，他们当然没打什么招呼。&lt;&#x2F;p&gt;
&lt;p&gt;「真是个美人！」他的友人这样说。&lt;&#x2F;p&gt;
&lt;p&gt;他眺望街道尽头的那座春天的山，毫不含糊地回答：「对，真是个美人！」&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十八_杀人&quot;&gt;二十八 杀人&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十八_杀人&quot;
   aria-label=&quot;Anchor link for: 二十八_杀人&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;乡间的小路在日光下散发出牛粪的臭气。他抹着汗水走上缓缓斜坡。道路两旁散发出成熟小麦的浓郁香气。&lt;&#x2F;p&gt;
&lt;p&gt;「杀了他，杀了他 …」&lt;&#x2F;p&gt;
&lt;p&gt;不知从何时开始，他口中不断重复这句话。他要杀死谁？ ——— 他心里清楚明白。他想起的是那个极其下贱、理平头的男人。&lt;&#x2F;p&gt;
&lt;p&gt;在染黄的麦田对面，不知从何时开始，有一座罗马天主教堂露出它圆形的屋顶。 ……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二十九_形态&quot;&gt;二十九 形态&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二十九_形态&quot;
   aria-label=&quot;Anchor link for: 二十九_形态&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;那是一个铁酒壶。不知何时，他从酒壶的细纹里学懂了「形态」的美。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十_雨&quot;&gt;三十 雨&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十_雨&quot;
   aria-label=&quot;Anchor link for: 三十_雨&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他和她躺在阔大的床上聊天。卧室窗外正下着雨，雨水把文殊兰的花朵都快要打毁。虽然她的容貌跟昔日一样依然犹如淋浴在月光之下。然而对他而言，跟她对话却已并非完全不觉乏味。他俯伏在床上默默点起卷烟，想到和她一起都已经七年了。&lt;&#x2F;p&gt;
&lt;p&gt;「我还爱她吗？」&lt;&#x2F;p&gt;
&lt;p&gt;他问自己，然而答案却连凝望自己的他都感意外。&lt;&#x2F;p&gt;
&lt;p&gt;「即使到现在，我还爱着她。」&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十一_大地震&quot;&gt;三十一 大地震&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十一_大地震&quot;
   aria-label=&quot;Anchor link for: 三十一_大地震&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;这气味跟熟透的杏子气味很相近。他走在燃烧过后的废墟中隐若嗅到这阵气味。炎阳下的腐尸气味出奇的没有令他反感。然而，当他站在池塘边看到在那里叠起的尸体时，却发觉「鼻酸」这个词语在本能上绝无夸大，尤其是在看见触动他心灵的那具十二三岁小童的尸体的时候。他望着尸体，感到一份跟羡慕很相近的感觉。他想起「蒙主宠召、英年早逝」这说话。他的姊姊和同父异母的弟弟的家园都被烧毁。而他的姐夫却因虚假证供罪而被判罪缓刑。…&lt;&#x2F;p&gt;
&lt;p&gt;「所有人都死去就好了。」&lt;&#x2F;p&gt;
&lt;p&gt;他佇立燃烧后的废墟中，不禁感慨地想。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十二_打架&quot;&gt;三十二 打架&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十二_打架&quot;
   aria-label=&quot;Anchor link for: 三十二_打架&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他跟他同父异母的弟弟扭打成一团。他的弟弟确实因他而承受了不少压力。而他也同时确实因他的弟弟而失去了自由。他的亲人经常跟他的弟弟说：「要多跟他学习。」然而这说话却跟捆缚他的手脚无异。他们扭打一团滚到檐廊上。至今他还记得，当时檐廊外庭园中的一株百日红的花朵，在雨天下绽放得鲜红夺目。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十三_英雄&quot;&gt;三十三 英雄&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十三_英雄&quot;
   aria-label=&quot;Anchor link for: 三十三_英雄&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他曾经从伏尔泰家中的窗户仰望高山。悬挂冰川的山上就连一只秃鹰的身影都看不见，然而一位身形矮小的俄罗斯人却执意沿着山路往上走。&lt;&#x2F;p&gt;
&lt;p&gt;当伏尔泰的家也在夜幕下变得昏暗以后，他一边想起那位沿着山路往上走的俄罗斯人的身影，一边在明亮灯光下写着这首宣传诗。&lt;&#x2F;p&gt;
&lt;p&gt;「比谁人都更遵从十诫的你&lt;&#x2F;p&gt;
&lt;p&gt;比谁人都更背离十诫。&lt;&#x2F;p&gt;
&lt;p&gt;比谁人都更深爱众人的你&lt;&#x2F;p&gt;
&lt;p&gt;比谁人都更鄙视众人。&lt;&#x2F;p&gt;
&lt;p&gt;比谁人都拥有更灼热理想的你&lt;&#x2F;p&gt;
&lt;p&gt;比谁人都更了解现实。&lt;&#x2F;p&gt;
&lt;p&gt;你是我们东洋所生&lt;&#x2F;p&gt;
&lt;p&gt;散发出草花香气的电动火车头。」&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十四_色彩&quot;&gt;三十四 色彩&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十四_色彩&quot;
   aria-label=&quot;Anchor link for: 三十四_色彩&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;三十岁的他不知何时爱上了某块空地。虽然那块空地上只长有青苔和散布着一些瓦砖碎片，但在他的眼中，却跟塞尚的风景画并无分别。&lt;&#x2F;p&gt;
&lt;p&gt;他忽然回忆起七八年前的那份热情，同时也发觉在七八年以前，他还未懂得什么是色彩。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十五_小丑木偶&quot;&gt;三十五 小丑木偶&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十五_小丑木偶&quot;
   aria-label=&quot;Anchor link for: 三十五_小丑木偶&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他曾经想过至死不悔的激情生活，然而他一直所过的却是在意养父母跟姨母想法的生活。这在他的生活中造成了光明与黑暗。他看着站在洋服店内的小丑木偶，考量自己跟那小丑木偶有多相近。然而他那潜意识中的自己 ——— 也就是他的第二个自己，却早已经把这份感觉加进他的短篇小说内。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十六_倦怠&quot;&gt;三十六 倦怠&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十六_倦怠&quot;
   aria-label=&quot;Anchor link for: 三十六_倦怠&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他与一位大学生漫步在长满芒草的原野中。&lt;&#x2F;p&gt;
&lt;p&gt;「你们年轻人，应该还对生活拥抱着热情吧？」&lt;&#x2F;p&gt;
&lt;p&gt;「嗯 …… 但你不也是这样吗？」&lt;&#x2F;p&gt;
&lt;p&gt;「我早就没有那种热情了。现在只剩下对创作的热情。」&lt;&#x2F;p&gt;
&lt;p&gt;这是他的真心话。他的确不知从何时开始，对生活已经失去热情。&lt;&#x2F;p&gt;
&lt;p&gt;「创作的热情，不也是生活的热情吗？」&lt;&#x2F;p&gt;
&lt;p&gt;他没有回应。原野上的芒草红穗上，不知何时清晰地映现出一座火山。他望着那火山，心中泛起一种几近羡慕的情感。只是，他也说不上为什么会有这种感觉。……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十七_过客&quot;&gt;三十七 过客&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十七_过客&quot;
   aria-label=&quot;Anchor link for: 三十七_过客&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他遇见了在才华上与他匹敌的女子。他唯有透过创作如〈过客〉这样的抒情诗，才能勉强躲过情感上的危机。那份哀伤的心情，仿佛是抖落凝结于树干上、闪闪发亮的雪。&lt;&#x2F;p&gt;
&lt;p&gt;随风飘舞的草笠，&lt;&#x2F;p&gt;
&lt;p&gt;怎么不掉落在路上？&lt;&#x2F;p&gt;
&lt;p&gt;我的名字，又怎值得留恋？&lt;&#x2F;p&gt;
&lt;p&gt;你的名字，才是让人难以忘怀。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十八_复仇&quot;&gt;三十八 复仇&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十八_复仇&quot;
   aria-label=&quot;Anchor link for: 三十八_复仇&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;在被树芽环绕的某间饭店露台上，他一边画画，一边和一名孩子玩耍。那孩子是他七年前已经断绝联系的疯狂女孩的儿子。&lt;&#x2F;p&gt;
&lt;p&gt;疯狂女孩点燃一支烟，看着他们玩耍。他心情沉重，仍然继续画着火车和飞机。幸好，那孩子不是他的。然而，每当听到孩子叫他「叔叔」，他内心都感到无比痛苦。&lt;&#x2F;p&gt;
&lt;p&gt;孩子不知何时走开了，疯狂女孩一边吸烟，一边像在讨好他似的问道：「孩子是不是很像你？」&lt;&#x2F;p&gt;
&lt;p&gt;「不像。首先 …」&lt;&#x2F;p&gt;
&lt;p&gt;「或许这是胎教吧。」&lt;&#x2F;p&gt;
&lt;p&gt;他低头不语，但心底却涌出将她绞死的残忍冲动。......&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三十九_镜&quot;&gt;三十九 镜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三十九_镜&quot;
   aria-label=&quot;Anchor link for: 三十九_镜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他在某间咖啡店的角落与朋友交谈。朋友一边吃着烤苹果，一边谈论着这段时间天气有多寒冷。他忽然在这样的对话中感到一些矛盾。&lt;&#x2F;p&gt;
&lt;p&gt;「你还是单身吧？」&lt;&#x2F;p&gt;
&lt;p&gt;「不，我下个月就结婚。」&lt;&#x2F;p&gt;
&lt;p&gt;他不禁沉默。咖啡店墙上的镜子，映照出无数个自己。冷冷的，仿佛正在威胁着他 。……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十_问答&quot;&gt;四十 问答&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十_问答&quot;
   aria-label=&quot;Anchor link for: 四十_问答&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;你为何要批评现代的社会制度？&lt;&#x2F;p&gt;
&lt;p&gt;因为我见到资本主义所萌生的罪恶。&lt;&#x2F;p&gt;
&lt;p&gt;罪恶？我还以为你不分善恶。既然知道善恶之别，你自己的一生又是怎么回事？&lt;&#x2F;p&gt;
&lt;p&gt;—— 他与天使对话。理所当然，是那位头戴丝质高礼帽、全然不知羞耻的天使。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十一_病&quot;&gt;四十一 病&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十一_病&quot;
   aria-label=&quot;Anchor link for: 四十一_病&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他开始患上失眠，体力也日渐衰退。几位医师诊断下来，说法各异：胃酸过多、胃下垂、干性胸膜炎、神经衰弱、慢性结膜炎和脑部过劳 …… 样样都有。&lt;&#x2F;p&gt;
&lt;p&gt;然而，他心里明白病因何在。是源于对自己的羞耻，和对人的畏惧。对那些他一向鄙视的人，产生的畏惧。&lt;&#x2F;p&gt;
&lt;p&gt;某个阴雪天的下午，他坐在咖啡馆的一隅，吸着烟斗，静静聆听留声机传来的乐声。旋律深深触动他。音乐终止后，他起身查看唱片的标签，上头写着：&lt;&#x2F;p&gt;
&lt;p&gt;Magic Flute -- Mozart&lt;&#x2F;p&gt;
&lt;p&gt;他突然明白 —— 违反十戒的莫扎特，尽管未必如自己这般痛苦，却也的确曾饱历煎熬。他低下头来，默默走回座位。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十二_众神的笑声&quot;&gt;四十二 众神的笑声&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十二_众神的笑声&quot;
   aria-label=&quot;Anchor link for: 四十二_众神的笑声&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;三十五岁的他，走在春日阳光照耀下的松林中，脑中浮现出两三年前曾写下的一句话：「众神的可悲，在于无法像我们一样，选择自杀。」&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十三_夜&quot;&gt;四十三 夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十三_夜&quot;
   aria-label=&quot;Anchor link for: 四十三_夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;夜色再次逼近。波涛汹涌的海面，在昏暗的光线下，不断激起浪花。他在这样的天空下，与妻子举行第二次婚礼。对他们而言，虽是喜悦，却也伴随着痛苦。三个孩子和他们一起望向远方的闪电。妻子怀里抱着其中一个孩子，似乎正在强忍泪水。&lt;&#x2F;p&gt;
&lt;p&gt;「看到那边有艘船吗？」&lt;&#x2F;p&gt;
&lt;p&gt;「嗯。」&lt;&#x2F;p&gt;
&lt;p&gt;「但它的桅杆已经断成两截。」&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十四_死亡&quot;&gt;四十四 死亡&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十四_死亡&quot;
   aria-label=&quot;Anchor link for: 四十四_死亡&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他庆幸房里只有自己一人，便将腰带绑在窗框上，准备上吊。当他把脖子套进腰带时，死亡的恐惧却突然袭来。这恐惧并非来自临死的痛苦。他再尝试一次，这次他拿着怀表，打算计算上吊要撑多久才结束。他感到些微窒息，意识逐渐变得模糊。他知道只要撑过这阶段，就能真正死去。他查看怀表上的指针，显示时间持续了一分二十多秒。窗外一片漆黑，黑暗中，突然传来嘶哑的鸡啼声。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十五_Divan&quot;&gt;四十五 Divan&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十五_Divan&quot;
   aria-label=&quot;Anchor link for: 四十五_Divan&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他再次试图透过 Divan，将那股「东方歌德」的力量灌注入心内。他望着那位超脱世俗善恶的歌德，心中涌起近乎绝望的羡慕。在他眼中，诗人歌德比诗人克里斯多更伟大。这位诗人的内心，除了雅典卫城与各各他之外，竟还盛开着阿拉伯的玫瑰。他想，若自己也能拥有一点跟随这位诗人步伐的力量，那该有多好。 当那股读完 Divan 后的强烈情感逐渐平息后，他心中不禁涌起一份厌恶，厌恶自己就像太监般庸碌无能。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十六_撒谎&quot;&gt;四十六 撒谎&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十六_撒谎&quot;
   aria-label=&quot;Anchor link for: 四十六_撒谎&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他姊姊的丈夫自杀了，这件突如其来的事让他承受了极大的打击。如今，他连姊姊一家的生活也得照顾。在他看来，他的未来就像夕阳般昏暗。他对自身精神的崩溃，感到近乎冷笑的无奈（他十分清楚自己所有的缺点和弱点）。尽管如些，他依然继续阅读各种书籍。只是，连卢梭的《忏悔录》在他看来也充满了英雄式的虚假谎言。尤其是当读到《新生》时 ，他更觉得自己从未遇过像书中主角一样狡猾的伪善者。然而，只有弗朗索瓦・维庸的诗才能真正打动他。在维庸的几首诗中，他看见了这位「俊美男子」的气概。&lt;&#x2F;p&gt;
&lt;p&gt;维庸等待绞刑的身影，甚至会出现在他的梦里。他曾无数次幻想自己像维庸一样，坠入人生的底谷，然而，他的处境与体力，却无法让他像维庸一样挣扎求存。他的生命力日渐衰弱，就像斯威夫特所看到的，那棵从树梢开始枯萎的老树 ……&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十七_玩火&quot;&gt;四十七 玩火&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十七_玩火&quot;
   aria-label=&quot;Anchor link for: 四十七_玩火&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;她的脸上闪耀着光芒，宛如晨光照射在薄冰上。他对她有些好感，但却谈不上恋爱。他甚至连她的身体也从来没触碰过。&lt;&#x2F;p&gt;
&lt;p&gt;「听说你渴望死亡，是真的吗？」&lt;&#x2F;p&gt;
&lt;p&gt;「嗯 …… 与其说是渴望死亡，不如说是厌倦再活下去。」&lt;&#x2F;p&gt;
&lt;p&gt;在这段对话以后，他们约定要一同结束生命。&lt;&#x2F;p&gt;
&lt;p&gt;「这是柏拉图式的自杀呢。」&lt;&#x2F;p&gt;
&lt;p&gt;「应该说，是双重的柏拉图式自杀。」&lt;&#x2F;p&gt;
&lt;p&gt;他难以理解自己竟能如此淡然面对。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十八_死亡&quot;&gt;四十八 死亡&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十八_死亡&quot;
   aria-label=&quot;Anchor link for: 四十八_死亡&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他没有和她一起寻死。但对他而言，没有触碰过她的身体，反倒让他感到一份满足。她偶尔会和他说话，仿佛什么事都没曾发生。甚至还把自己收藏的氰化钾交给他，说道：「只要有这个，我们彼此都会坚强起来。」&lt;&#x2F;p&gt;
&lt;p&gt;这句话的确让他更坚强。他常常独自坐在藤椅上看着山毛榉的新叶，反复思考死亡所能带来的平静。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四十九_天鹅标本&quot;&gt;四十九 天鹅标本&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四十九_天鹅标本&quot;
   aria-label=&quot;Anchor link for: 四十九_天鹅标本&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他竭尽余下的气力，想试着写一部自传。然而，他却发现这事对他来说并不容易，这是因为他仍残留着自尊、对万事的怀疑和对利益的计算。他蔑视自己，但他同时也会想：「其实每个人，只要剥开外皮，都是差不多吧。」&lt;&#x2F;p&gt;
&lt;p&gt;「诗与真实」这个书名，让他觉得几乎可以套用在所有自传上。不仅如此，他也深知文学作品不一定能打动人心。他的作品所能触动的，只不过是那些与他相似，过着相类近生活的人罢了。这想法时常在他心中徘徊。因此，他决定简短地写下自己的《诗与真实》。&lt;&#x2F;p&gt;
&lt;p&gt;他在完成《某傻子的一生》后，偶然在一家古董店里发现了一只天鹅标本。那只天鹅昂着脖子站立着，羽毛泛黄，被虫蛀蚀。他想起自己的一生，不禁浮现出苦笑与泪水。他明白，摆在自己面前的，要不是发疯便是自杀这两条路。他独自走在黄昏的街道上，悄然下定决心，等待命运慢慢地把他的生命摧毁。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;五十_俘虏&quot;&gt;五十 俘虏&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#五十_俘虏&quot;
   aria-label=&quot;Anchor link for: 五十_俘虏&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他有个朋友发疯了。他一向跟这个朋友很要好。因为他比任何人都更能体会，这位朋友轻松外表下的孤独内心。这位朋友发疯以后，他探望了朋友两三次。朋友压低声音对他说：&lt;&#x2F;p&gt;
&lt;p&gt;「你和我都是被恶鬼缠身的人。那恶鬼名叫『末世的恶鬼』。」&lt;&#x2F;p&gt;
&lt;p&gt;听说几天后，这朋友在前往温泉旅馆的路上，竟然拿起玫瑰花来吃。他想起自己曾送给这位朋友一尊半身陶雕像，是朋友最爱的《钦差大臣》作者的半身雕像。他也想到果戈里是发疯而死的，不禁感觉到有一种神秘力量正在掌控着他们这些人。&lt;&#x2F;p&gt;
&lt;p&gt;当身心俱疲时，他偶然读到拉迪盖临终时所说的话：「神的士兵要来抓我了。」他再次听到众神的笑声。&lt;&#x2F;p&gt;
&lt;p&gt;他努力想与自己的迷信与伤感搏斗，但身体早已无法再承受战斗。「末世的恶鬼」的确在折磨他。他羡慕中世纪那些能依靠信仰而得到力量的人。但他却无法相信神，无法相信神的爱，那位即使连考克多也相信的神。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;五十一_败北&quot;&gt;五十一 败北&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#五十一_败北&quot;
   aria-label=&quot;Anchor link for: 五十一_败北&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;他握笔的手开始颤抖，甚至不由自主地流下口水。除了注射 0.8 剂量的佛罗拿时短暂醒过一次外，他从未真正清醒过来。那短短的清醒，也仅仅持续了大半小时。&lt;&#x2F;p&gt;
&lt;p&gt;他只能勉强过着夕阳余晖的昏暗生活，犹如用着一把刃口毁损的细剑当作拐杖行走。&lt;&#x2F;p&gt;
&lt;p&gt;（昭和二年六月，遗稿）&lt;&#x2F;p&gt;
&lt;h4&gt;后记&lt;&#x2F;h4&gt;
在《某阿呆的一生》第四十九节中，有这么一段文字：
&lt;blockquote&gt;
&lt;p&gt;&quot;他明白，摆在自己面前的，要不是发疯便是自杀这两条路。他独自走在黄昏的街道上，悄然下定决心，等待命运慢慢地把他的生命摧毁。&quot;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;1927 年 7 月 24 日，身心俱疲的芥川龙之介，最终选择了后者，仰药身亡。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>人间椅子</title>
      <pubDate>Thu, 01 Oct 1925 00:00:00 +0000</pubDate>
      <dc:creator>江户川乱步</dc:creator>
      <link>https://www.aspchang.com/posts/the-human-chair/</link>
      <guid>https://www.aspchang.com/posts/the-human-chair/</guid>
      <description xml:base="https://www.aspchang.com/posts/the-human-chair/">&lt;p&gt;每天早上，当佳子目送丈夫回官厅以后，时间都总过了十时。这时，佳子终于可以干自己喜欢的事。她依例走进洋式公馆里，关自己在一间与丈夫共用的书房内。她正着手写一篇长篇小说，准备今年夏天在 K 杂志的增订版上刊载。&lt;&#x2F;p&gt;
&lt;p&gt;作为漂亮的名媛作家，她的名气最近已经盖过担任外务省书记的丈夫，每天收到不少仰慕者来信。&lt;&#x2F;p&gt;
&lt;p&gt;今天早上，她跟往常一样，坐在书房的书桌前开始工作。首先，粗略地阅读了一些陌生读者的来信。&lt;&#x2F;p&gt;
&lt;p&gt;信件都是千篇一律的无聊话。然而，由于她拥有女性的温柔性格，无论是什么信，只要是寄给她的，她都会阅读一遍。&lt;&#x2F;p&gt;
&lt;p&gt;她从简单入手，读完两封信及一张明信片。然后，剩下来要读的就有厚厚的一叠原稿纸。虽然这并不是经常收到，但突然收到一叠原稿纸也不是从没发生的事情。一般而言，这些都只是冗长的无聊文章。尽管如此，她还是先看了标题，剪开信封，再抽出原稿纸来阅读。&lt;&#x2F;p&gt;
&lt;p&gt;原稿纸早已装订成册，但奇怪地却没有写上标题与署名，劈头就是写着「夫人：」。佳子心想︰「不就只是一封信。」她本来只想随意读一读，然而读了两三行后，却突然涌起莫名的恐惧。好奇心驱使下，她加快了阅读的速度。&lt;&#x2F;p&gt;
&lt;p&gt;夫人︰&lt;&#x2F;p&gt;
&lt;p&gt;作为夫人不认识的男人，冒昧寄上这封信确实有点不懂礼数。然而，还望夫人海量包容，宽恕在下。&lt;&#x2F;p&gt;
&lt;p&gt;这样说想必令夫人吃惊。尽管这样，我还是决定向夫人承认自己做过的，叫人难以置信的罪行。&lt;&#x2F;p&gt;
&lt;p&gt;这数个月，我完全躲藏，过着恶魔般的生活。我可以肯定，茫茫人海中没人知道我做了什么事。假如我的估算没错，或许我真的永远都不会回到人间。&lt;&#x2F;p&gt;
&lt;p&gt;最近我的心态起了一些微妙变化。感觉必须为自己这不幸人生所做过的罪行认错。这样说，夫人或许感到一头雾水，所以恳求夫人读完整封信。只要读完，夫人就会明白我为何有这心态的转变，而我又为何要特地向夫人承认这罪行。&lt;&#x2F;p&gt;
&lt;p&gt;应该从哪里说起？很荒谬地说，我已经离开人世太久了。当我用书信来表达自己时，总觉有点难为情，不知怎写才好。然而多想也没用，让我把事情从头说起吧。&lt;&#x2F;p&gt;
&lt;p&gt;我天生奇丑。请夫人紧记这点，因为假若我没说清楚，而夫人却答应我的不情之请，愿意跟我见面，单是让夫人在没有心理准备下目睹我这张长年活在不正常生活下，弄得不堪入目的丑陋面容就足以令我难以忍受。&lt;&#x2F;p&gt;
&lt;p&gt;不知是什么报应，我这人虽然面貌奇丑，心中却燃烧着无人知道的热情。虽然我这名工匠拥有怪物的面容而且贫穷非常，却不自量力地做着各种甜蜜奢华的「梦」。&lt;&#x2F;p&gt;
&lt;p&gt;假如我出生在富裕家庭，或许能大洒金钱，沉迷于各类玩意，忘却面貌奇丑所带来的痛苦。又或假若上天赐我更高的艺术天分，或许我能借助诗词忘却世间的种种无聊。然而我却没有受到上天眷顾，只能继承父亲的工作，成为一名家具工匠，日复一日地过着悲哀的人生。&lt;&#x2F;p&gt;
&lt;p&gt;我的专长是制作各式的椅子。即使顾客要求多高，只要是我做的，他们都必定感到称心满意。因此，商行对我也关照有加，只交托我做高级上等货。做这些上等货时，顾客有时要求我在椅背或扶手的地方雕刻复杂图案，又或因应客户奇特的喜好做出软硬不一的坐垫或尺码不同的部位。作为制造者，我付出的心思可不是门外汉可以想像到的，然而我却感受不到那份愈费心力愈觉高兴的喜悦。这样听起来好像很目中无人，但我却知道这根本不能跟艺术家完成杰作后的喜悦相提并论。&lt;&#x2F;p&gt;
&lt;p&gt;每当完成一张椅子，我都必先亲身试坐感受它的触感。然而，我亦只有在这时候才能在枯燥乏味的工匠生涯中感受到不可言传的满足。我会想像有多高贵，又或多漂亮的人坐在上面。既然订购如此华丽的椅子，大宅内必定拥有能与之匹配的奢华房间。墙壁上挂着某某名画家的油画，天花垂下一盏堂皇华丽、犹如宝石的装饰吊灯，地板上铺上名贵地毯。在椅子前方餐桌上，摆放飘散甜美花香、灿烂夺目的西洋花卉。当我沉醉在幻想的同时，感觉自己就是房间主人，虽然只是短短瞬间，却感受到无法言喻的喜悦。&lt;&#x2F;p&gt;
&lt;p&gt;不着边际的幻想无止境扩张。我这个贫穷丑陋工匠在幻想世界中化成贵气公子坐在自己制造的华丽椅子上。身旁是梦寐以求的漂亮恋人，一边甜美微笑，一边听我说话。不仅这样，我在幻想中还能牵着她手轻声细语，情话绵绵。&lt;&#x2F;p&gt;
&lt;p&gt;不过，跟以往一样，这轻飘飘的紫色梦境却总被附近食肆老板娘的喧哗谈话声和病童歇斯底里的哭喊声所打断。这时候，丑陋的现实再次在我面前显露它灰色的躯壳。回到现实的我不再是梦中的贵气公子，而只是剩下可怜的丑陋躯壳。之前向我微笑的美女都跑到哪里？这时就连附近弄得满身尘垢，看顾小童的少女都不屑望我一眼。就只有我所做的椅子犹如被梦境遗弃，仍然孤伶伶地留在这里。不过就算是这张椅子，最终还是要运到另一个世界去。&lt;&#x2F;p&gt;
&lt;p&gt;就这样地，每当我完成每一张椅子后都会被无法言传的郁闷所袭。那份无法形容、叫人讨厌的感觉随着日子一天一天积累，逐渐令我无法承受。&lt;&#x2F;p&gt;
&lt;p&gt;「与其继续过蛆虫一样的生活，倒不如死了算。」我认真考虑这件事情。当我在工场内敲凿子和钉子，又或搓弄着刺鼻的颜料时，我都反复思量这件事情。「且慢！要是死的勇气也有，难道就没有更好的方法吗？例如说 …… 」我的思路渐渐向着恐怖的方向前进。&lt;&#x2F;p&gt;
&lt;p&gt;刚好那时候，我被交托制造从未做过的宽敞皮革扶手椅。那椅子准备摆放在同是 Y 市的某间外国人经营的西洋旅馆。他们本来打算从本国运来，却因雇用我的商行大力游说，说日本也有技艺不下舶来货的工匠，于是我终于拿下了订单。我于是费寝忘餐，专心一致地做起那套椅子来。&lt;&#x2F;p&gt;
&lt;p&gt;当看着椅子的制成品时，我感到前所未有的满足感。那是就连自己也看得着迷的成果。跟往常一样，我把四件一组中的其中一张椅子搬进采光良好的木地板房间，悠闲地坐在上面。坐着的感觉是何其舒适。软硬适中的松软饱满坐垫、刻意不染色维持原来灰色质料的皮革触感、保持适当斜度轻轻承托背部的丰盈椅背，两侧高高隆起勾画出优雅曲线的扶手，这一切都奇妙地融成一体，真真正正呈现出「舒适」这二字。&lt;&#x2F;p&gt;
&lt;p&gt;我让身体深深陷入椅子中，双手陶醉地爱抚丰满的扶手。这时我的坏习惯又来了，无止境的幻想犹如五彩虹桥般一道接一道涌现眼前散发出耀目色彩。难道是幻觉？由于心中所想都清晰浮现眼前，我感觉非常害怕，怕自己已经疯了。&lt;&#x2F;p&gt;
&lt;p&gt;这时我的脑海中浮现了一个精彩想法。所谓「魔鬼的诱惑」大概就是这回事吧。这想法犹如梦一样荒诞绝伦，而且令人呕心。但这令人呕心的想法却对我施展出说不出的魅力。&lt;&#x2F;p&gt;
&lt;p&gt;开始的时候，我只是不舍得跟我精心制作的漂亮椅子分离而已。原先只是单纯希望，无论椅子运到哪里，如果可以的话，我都可以跟随着它。然而当心中的幻想在迷惘间展翅飞翔时，我的思绪却在不知不觉间连系上脑内发酵多时的恐怖念头。看来我真的疯了，竟然想实现这个荒诞绝伦的想法。&lt;&#x2F;p&gt;
&lt;p&gt;我赶紧把四张椅子当中制作得最为精美的扶手椅拆毁，然后再次把椅子重新组装起来，实践我那天马行空的计划。&lt;&#x2F;p&gt;
&lt;p&gt;那张扶手椅极其宽敞，从座位部分到快要着地的地方都用皮革包裹。靠背和扶手都非常宽厚。椅子内部形成一个大空洞，大得即使有人藏身其中，从外观上也绝对看不出来。虽然内部安装了坚固的木造托板和大量弹簧，但只要做些适度改装，就能让人把大腿放置在座位里边，头颈和身躯放置在靠背之中。只要让身子顺着椅子的形状坐下，就可以轻易地隐藏其中。&lt;&#x2F;p&gt;
&lt;p&gt;因为这门手艺是我的专长，所以很容易地完成了改动。例如，为了可以呼吸和听到外面的声音，我在皮革的某处打开了一个从外边无法察觉的细小缝隙。在靠背的内部，刚好是头颈附近的位置，我架起了储物用的细小搁板，在上面放满水壶和面包。为了生理需要，还配备了大号的塑胶袋，加上各种深思熟虑的设计，只要准备好足够粮食，待它两三天也绝不会感到不便。也就是说，椅子已经摇身一变成为一个单人房间。&lt;&#x2F;p&gt;
&lt;p&gt;我脱剩衬衣，揭开覆盖底部出入口的皮革，然后把整个身子钻进椅子。那感觉实在是非常诡异。我感觉很是不可思议，彷彿爬进了完全漆黑、令人难以呼吸的坟墓之中。再想一想，那确实是个坟墓。因为从爬进椅子那刻开始，我就像穿上了隐身蓑衣一样，完全消失于人世间。&lt;&#x2F;p&gt;
&lt;p&gt;没多久，商行的人为了拿走四张椅子，推着大货车前来。我的弟子（和我一起生活的人，就只有这个男人）在不知情下接待了他们。当椅子被放到货车上时，一名搬运工人大声喝骂︰「这家伙怎么这么重！」藏身椅子的我不禁吓了一跳。不过，扶手椅本来就是沉重的东西，所以也没有引起任何人怀疑。不久以后，喀哒喀哒的货车摆动声开始通过奇异的触感传递到我的身上。&lt;&#x2F;p&gt;
&lt;p&gt;虽然我很担心，但最终也没有出什么大事。那天的下午，我藏身的椅子已经噗通一声卸在西洋旅馆的一所房间内。我以后才得知那里并不是客房，而是跟客人会面，看看报章，抽抽烟，有不同人频繁出入，名字叫作「休息室」的房间。&lt;&#x2F;p&gt;
&lt;p&gt;或许夫人已经猜到，我这趟奇妙旅程的主要目的就是看准在没人的时候，从椅中走出来，徘徊在旅馆各处偷东西。试问有谁会想到有人会匿藏椅内，干出如此混帐的勾当呢。我就像影子一样游走各个房间进行盗窃。每当引起骚动，我就只需逃回椅子内的隐蔽房间就可以，忍住呼吸，然后观赏众人傻兮兮地搜索。不知夫人是否知道沙滩上有一种蟹种叫「寄居蟹」。它们的外表好像一只大蜘蛛，没人的时候就耀武扬威，不可一世的到处游走。但是哪怕只要听到丁点儿人类脚步的声音，就惊慌得赶快逃回自己的壳内，然后从壳中仅仅露出叫人呕心的毛茸茸前足，窥探敌人的动静。我正正就是那只「寄居蟹」。没有贝壳，却拥有椅子的隐蔽房间。不在沙滩，却在旅馆内耀武扬威，不可一世的到处游走。&lt;&#x2F;p&gt;
&lt;p&gt;这稀奇古怪的计划，出乎意料地进行得非常顺利。在到达旅馆的第三天，我已经完成为数不少的勾当。犯案时那份既惊且喜的心情，成功后那份难以言喻的喜悦，除此以外，当看到人们在面前大声嚷说「他逃到那里了！他逃到这里了！」，我都感到很滑稽可笑。凡此种种不可思议的魅力，都让我乐此不疲。&lt;&#x2F;p&gt;
&lt;p&gt;但很可惜，我现在已经无暇细说那些事情。因为，我发现了比盗窃更能让我高兴十倍，二十倍的一种荒诞乐趣。向夫人坦白承认这事，才是我这封信的真正目的。&lt;&#x2F;p&gt;
&lt;p&gt;故事还是得从我的那把椅子被安放在旅馆休息室说起。&lt;&#x2F;p&gt;
&lt;p&gt;椅子送抵旅馆时，旅馆的老板们都曾来仔细端详过。但不久之后，整个房间便静悄悄的，连一丝声响也没有，大概已经没有人留在房内了。只是因为我才刚来到这里，内心仍有些不安，迟迟不敢从椅中走出来。我在那段长时间里（但也或许只是我的错觉）。我始终全神贯注地倾听，只为不错过任何一丝细微的声音。&lt;&#x2F;p&gt;
&lt;p&gt;过了一会儿，走廊的方向传来沉重的咚咚脚步声。当那声音逼近至十来呎处时，因房内铺着厚地毯，脚步声便一下子变得模糊起来，几乎听不见了。就在这时，我听见一声男人的粗重呼吸。还来不及反应，一个疑似西洋人的庞大身躯，猛然「噗通」一声坐上了我的大腿，沉重地弹了两三下。我的大腿与他那厚实的臀部之间，只隔着薄薄一层皮革，甚至能清楚感受到他身上的体温。他的宽肩正好压在我胸口，厚重的双手隔着皮革与我自己的手掌重叠。似乎是在抽雪茄，一股浓烈的、带着男性气息的烟味，顺着皮革的缝隙悠悠渗入我的鼻中。&lt;&#x2F;p&gt;
&lt;p&gt;夫人若能设身处地想像当时的情景，定会觉得那是多么不可思议、稀奇古怪的境遇。我当时实在惊慌失措，只能僵硬地缩着身子，腋下冷汗如雨般滴落，整个人完全失去思考能力，愣愣地发着呆。&lt;&#x2F;p&gt;
&lt;p&gt;从那个男人开始，整整一天，不同的人接连坐在我的大腿上。然而，没有人察觉到我的存在——他们坚信自己坐的是一个普通的坐垫，完全无法想像，竟是我这具有血有肉的大腿。&lt;&#x2F;p&gt;
&lt;p&gt;那漆黑而无法动弹、被皮革包裹的狭小天地，是一个既奇异又充满魅力的世界。在这里，我感受到的人类，与日间所见的形象截然不同——他们彷彿是某种不可思议的生物。这些人不过是发出声音、呼吸声、脚步声和衣物摩擦声的几块富有弹性的躯体罢了。我不必依赖容貌，只凭触感便能辨别每一个人。他们的触感，有的臃肿肥大，如同腐烂的菜肴；有的则瘦削干枯，宛如枯骨。即使两人的背部形态相似，只要仔细观察脊骨曲线、肩胛骨的开合、前臂长度、大腿粗细、尾骨长短等细节，必定能发现差异。人类这种生物，除了容貌和指纹外，还能透过全身的触感被区分与识别。&lt;&#x2F;p&gt;
&lt;p&gt;异性的情况也大致相同。平常我们多半以容貌的美丑来评价异性，但在椅子里的这个世界，这些都全然失去意义。在这里，存在的只有赤裸的身躯、声音与体香。&lt;&#x2F;p&gt;
&lt;p&gt;夫人，对于我如此直白的描述，还望您勿感不悦。在那里，我已经强烈地贪恋着一位女性的身体——她正是第一位坐在我椅子上的女子。&lt;&#x2F;p&gt;
&lt;p&gt;听她的嗓音，可以想像她是个涉世未深的外国少女。此时房间里正巧没有人，她似乎很高兴，轻声哼着一首奇异的歌，踏着轻快的步伐走了进来。走到我隐藏其中的扶手椅前，她忽然将那丰盈柔软的身躯投向我。接着，她像想到什么有趣的事般，忽然咯咯地笑了起来，手舞足蹈，像网中挣扎的小鱼般，不停地跳跃窜动。&lt;&#x2F;p&gt;
&lt;p&gt;接下来的将近半个小时里，她时不时地在我的腿上唱起歌来，随着歌声的节拍扭动着那不算轻盈的身躯。&lt;&#x2F;p&gt;
&lt;p&gt;对我而言，这实在是出乎意料、震撼心灵的大事。过去面对那神圣般、甚至让我感到畏惧的女性，我从未敢多看一眼。可如今，我竟能与这位素未谋面的异国女子同处一室，共坐于同一张椅子之上。不仅如此，我们之间只隔着薄薄的皮革，彼此紧贴，甚至能感受到对方的体温。更令人难以置信的是，她毫无戒心，将全身重量托付于我，随心摆出各种姿态。我在椅中甚至能想像将她紧紧抱住，从皮革的背面亲吻她丰润的颈项。不仅如此，我还能随意做出自己想做的事情。&lt;&#x2F;p&gt;
&lt;p&gt;自从这惊人的发现以后，那最初因盗窃而起的动机已变得次要，我深陷于这不可思议的触感世界，无法自拔。我曾这样想：这椅子里的世界，才是上天赐予我的真正归宿。我这个丑陋、胆怯的男人，在光明世界中，只是个被人轻视、过着屈辱可怜生活的无用之躯；但换个居住的世界，只要稍微忍受椅子内的局促，就能接近那些在光明世界中别说交谈、连靠近都难以企及的美丽女子，细听她们的声音，触摸她们的肌肤。&lt;&#x2F;p&gt;
&lt;p&gt;椅子中的恋爱（！）那份不可思议且令人陶醉的魅力，是没有亲身钻入椅子之人无法体会的。那样的恋爱，只剩触感、听觉，还有少许嗅觉。这是暗黑世界里的恋爱，是绝对不会在人世间发生的爱情。难道这就是恶魔国度的爱欲吗？再仔细想想，在这个不被世人看见的角落，究竟还会发生什么稀奇古怪、令人恐惧惊心的事，早已远远超出我的想像。&lt;&#x2F;p&gt;
&lt;p&gt;起初，我打算完成盗窃后立刻逃离旅馆。但沉溺于这奇异嗜好的我，早已忘了逃跑的念头，反倒渴望将这张椅子当作永远的归宿，愿一生就这般度过。
只要加倍小心，不发出声响，也不让人察觉，其实晚上外出并不算特别危险。然而在这几个月的漫长岁月里，我却没有这样做，而是一直待在椅子中生活。对于自己这样的选择，连我自己都感到十分惊讶。&lt;&#x2F;p&gt;
&lt;p&gt;几乎整天，我都因为弯着手臂、屈着膝盖而全身麻痹，连身子都无法挺直站起。后来甚至只能像个跛脚的人，拄着拐杖一拐一拐地往返厨房和茅厕。我这个男人真是疯了，宁愿忍受折磨般的痛苦，也从未想过放弃这个奇异的触感世界。&lt;&#x2F;p&gt;
&lt;p&gt;虽然有人一住就是一两个月，但毕竟这里是旅馆，络绎不绝的旅客总是陆续进进出出。我的这场奇异恋情，也随着时间的流逝，不得不换上不同的对象。那些为数不少、令人难以置信的恋人，留给我最深刻的记忆，并非她们的容貌，而是她们各自独特的身形与体态。&lt;&#x2F;p&gt;
&lt;p&gt;她们有的如强悍的小马，倔强而硬朗；有的似妖艳的灵蛇，灵活且柔软；有的如饱满的皮球，圆润富弹性；还有些像希腊雕塑般，结实而充满力量。事实上，无论是哪一位女性的身躯，都拥有各自独特的特征与无可取代的魅力。&lt;&#x2F;p&gt;
&lt;p&gt;随着女性一个接着一个地更替，我也体验到一连串奇异且各具特色的新感受。&lt;&#x2F;p&gt;
&lt;p&gt;有一次，一位身躯庞大、来自某欧洲强国的大使（这是我从日本门童闲聊中听来的）恰巧坐在我的大腿上。虽然他身为政治家，但更为人所知的是他作为世界级诗人的身份。能够触碰到如此赫赫有名的大人物的肌肤，让我心中雀跃不已，充满自豪感。他坐在我身上，与两三位同国人谈笑约十分钟，随后起身离去。当然，我全然不懂他们谈论的内容，但每当他换个坐姿，我都能感受到他那比常人更温暖、丰腴的身躯。那种轻微搔痒的触感，给我带来一种难以言喻的刺激。&lt;&#x2F;p&gt;
&lt;p&gt;那时，我忽然浮现一个念头：如果我从皮革后方拿出一把小刀，直刺向他的心脏，用力一刺，会产生怎样的后果？我说的当然是那种能让他永远倒下的致命一击。这件事在他国当然不用说，甚至可能在日本政界引发连锁震荡。报章上大概会充斥着煽情的新闻，事件也必将严重影响两国外交关系。从艺术界角度来看，他的逝去同样是全球的重大损失。如此惊天动地的大事，其实只要我轻轻一举便能轻易达成。想到这里，我心底涌出一股难以言喻的成就感。&lt;&#x2F;p&gt;
&lt;p&gt;还有一次，一位某国著名的舞者来访日本，恰巧住进了这所旅馆。虽然她只坐过我的椅子一次，却让我感受到与那位大使相似的深刻触动。更重要的是，她带来了一种前所未有的完美触感之美。实在太美，使我无暇生起任何低俗念头，只能把她当作一件艺术品般欣赏，心中满溢着敬仰与赞叹。&lt;&#x2F;p&gt;
&lt;p&gt;除了这些，我也经历过各种稀奇古怪，甚至令人作呕的体验。不过，详述这些并非我写信的本意，且只会让信件冗长枯燥。还是让我尽快切入正题吧。&lt;&#x2F;p&gt;
&lt;p&gt;我来到这家旅馆几个月后，情况发生了变化。旅馆的经营者因某些原因决定回国，于是将整家旅馆转让给一家日本公司。这家公司改变了过去奢华的经营策略，转型为更平民化的旅馆，以期提高收益。为此，他们将不再使用的家具委托一家大型家具店拍卖，而我的椅子也列入了拍卖名单中。&lt;&#x2F;p&gt;
&lt;p&gt;当我得知这件事后，一度感到沮丧与失望，甚至萌生了借此回归娑婆世界、重新展开新生活的念头。我所盗窃的金额已相当可观，即使回到人间，也不必再过往日那般可怜的生活。然而，当我再三思量，离开外国人旅馆虽令人失望，另一方面却带来了全新的希望。这数月以来，虽然我爱恋过许多形形色色的异性，但因她们皆为外国人，无论身材多么出众，心灵上总让我感觉到某种微妙的不足。毕竟，对日本人而言，若对方非日本人，就无法体会真正的恋爱。这想法在我心中逐渐成形。如今我的椅子即将被拍卖，或许会被某位日本人购得，安置于日本人的家中。这成了我的新希望。因此，我决定暂且继续待在椅子中多生活一段时间。&lt;&#x2F;p&gt;
&lt;p&gt;在家具店度过的两三天虽然非常难熬，但幸运的是，拍卖刚开始不久，我的椅子就迅速遇上了买家。这把椅子虽然略显陈旧，却依然十分吸引目光，且气派非凡。&lt;&#x2F;p&gt;
&lt;p&gt;买家是一位住在离开 Y 市不远大城市的官员。货车在颠簸摇晃中，将椅子从家具店运送到他府邸的漫长路程里，我在椅子内度过了生不如死的痛苦时光。不过，这些苦楚与知道买家是日本人带来的喜悦相比，根本微不足道。&lt;&#x2F;p&gt;
&lt;p&gt;这位担任官员的买家拥有一座非常华丽的大宅。他将我的椅子安置在洋式公馆内一间宽敞的书房里。让我最为欣喜的是，使用那书房的人多半不是屋主本人，而是家中那位年轻貌美的夫人。在接下来约一个月的时间里，我几乎没离开过她的身边。除了吃饭和就寝外，夫人柔软的身躯几乎总是依偎在我身上。这完全是因为她需要在这段期间守在书房，全心投入于她正在撰写的某部作品。&lt;&#x2F;p&gt;
&lt;p&gt;我爱她之深，实在不需多言赘述。她是我第一位亲密接触的日本女性，更拥有极其美好的身躯。正是在她身上，我第一次体会到真正的爱情。与此相比，过往在旅馆中的种种经历，根本无法称之为爱情。最有力的证明是，唯独这位夫人能让我不满足于默默的爱抚，而是无论如何都渴望让她察觉我的存在。&lt;&#x2F;p&gt;
&lt;p&gt;无论如何，我都渴望让夫人感受到椅子里的我存在。虽然这想法似乎有些自说自话，但那份渴望却真切无比。我在思索，是否该给她些微妙的暗示？可若直接坦白告诉她椅子里藏着一个人，她定会震惊不已，接着可能会将此事告知丈夫和仆人。那样不仅毫无帮助，反而会让我陷入可怕的罪名，承受法律的重压。&lt;&#x2F;p&gt;
&lt;p&gt;因此，我竭力让夫人在坐上这张椅子的时候，能感受到舒适与留恋。作为艺术家，她的感知必然比常人更加细腻敏锐。倘若她能察觉到椅子里隐藏着生命的存在，不将它视为无生命的物件，而是真切地去爱护与珍惜，那对我而言，已是莫大的满足。&lt;&#x2F;p&gt;
&lt;p&gt;每当她投入我的怀抱，我便尽力温柔地承托着她。当她在我身上感到疲惫时，我会悄无声息地调整大腿的角度，轻轻移动她的身躯位置，不让她察觉。待她在恍惚中进入梦乡，我便化身为摇篮，以极其细微的动作轻轻摇晃双腿，陪伴她安然入眠。&lt;&#x2F;p&gt;
&lt;p&gt;这份体贴是否已经得到回应，还是仅仅我的一厢情愿，我无法确定；但最近我确实感觉到，她似乎已经爱上了我这张椅子。她坐在椅子里的姿态，就像婴儿依偎在母亲怀中，又或是少女依靠在恋人怀抱，带着撒娇般的依恋。她在我大腿上轻轻移动的身躯，也无声地透露出她对这张椅子的深深眷恋。&lt;&#x2F;p&gt;
&lt;p&gt;这样一来，我的热情越烧越旺，终于到了不自量力的地步，竟对那位夫人产生了狂妄的念头。我心想：哪怕只见她一眼，哪怕只跟她说上几句话，也足以让我死而无憾。&lt;&#x2F;p&gt;
&lt;p&gt;很抱歉，夫人或许早已察觉，我那位恋人正是阁下。而我，就是尊夫在 Y 市的家具店买下这张椅子后，一直深深奉献爱情的可怜男子。&lt;&#x2F;p&gt;
&lt;p&gt;夫人，我诚恳恳请您，能否与我相见一面，对这个可怜的丑陋男子说上一句温柔的安慰话？除此之外，我不敢奢求更多。恳请您实现我这个面貌丑陋、污秽不堪，在这世间备受不幸的男子的心愿。&lt;&#x2F;p&gt;
&lt;p&gt;昨夜，我偷偷溜出大宅，只为写下这封信。面对夫人亲自提出这样的请求，对我来说既是极大的危险，也是难以跨越的障碍。&lt;&#x2F;p&gt;
&lt;p&gt;当夫人打开这封信的时候，我已经因为担忧而面色苍白，在大宅周围徘徊不安。&lt;&#x2F;p&gt;
&lt;p&gt;假如夫人愿意答应我这个无礼的请求，请在书房窗前的瞿麦花盆上挂一条手帕作为暗号。届时，我便会装作一名来访的大宅客人，前来拜访。&lt;&#x2F;p&gt;
&lt;p&gt;这封令人难以置信的信件，最终以一段充满热情与真挚的祝福语作为结尾。&lt;&#x2F;p&gt;
&lt;p&gt;佳子读到信的一半时，心头已经涌起一股莫名的恐惧，脸色变得苍白如纸。&lt;&#x2F;p&gt;
&lt;p&gt;她不由自主地站了起来，惊惶失措地从放置椅子的书房里逃跑出来，跑回那座和式公馆的大厅。她原本打算不再读下半封信，干脆将它撕碎了事，但内心总有一丝挥之不去的牵挂，最终还是在大厅的小茶几旁，将整封信默默读完。&lt;&#x2F;p&gt;
&lt;p&gt;她的预感果然正确。&lt;&#x2F;p&gt;
&lt;p&gt;实在是一件非常恐怖的事情。她每天坐着的扶手椅，竟然暗藏着一个素昧平生的男人。&lt;&#x2F;p&gt;
&lt;p&gt;「啊！太可怕了！」&lt;&#x2F;p&gt;
&lt;p&gt;她全身像被冰水淋过一样，感觉透骨的寒意。她厉害地抖震，一直都没有停下来。&lt;&#x2F;p&gt;
&lt;p&gt;遇上如此大事，她顿然发呆了，完全不知该如何是好。难道要查看那张椅子吗？这种令人作呕的事，怎么可能办得到？即使那人早已不在，椅子里肯定还残留着食物，还有那人所留下的污秽痕迹。&lt;&#x2F;p&gt;
&lt;p&gt;「夫人，您的信。」&lt;&#x2F;p&gt;
&lt;p&gt;她吓了一跳，把头转过来，看见一名女仆拿着一封刚刚收到的信件走过来。&lt;&#x2F;p&gt;
&lt;p&gt;佳子接过信件，正要拆开之际，却被上面的文字吓得差点把信件掉到地上。因为信封上写着自己名字的笔迹跟刚才那封让人毛骨悚然的信件的笔迹一模一样。&lt;&#x2F;p&gt;
&lt;p&gt;她犹豫未决，不知应否拆开。良久以后，最终全身抖震的撕开信封阅读。虽然信件的内容非常简短，却再次写着让她吃惊的说话。&lt;&#x2F;p&gt;
&lt;p&gt;冒昧奉上此信，尚祈老师海涵，见谅在下失礼之处。近日，我因深深倾心于老师的作品，遂鼓起勇气寄上拙作一篇，盼能蒙老师不吝指教，对我而言，若得老师垂阅批评，将是不胜荣幸之事。事实上，在寄出此信之前，拙作原稿已先行寄达，想必老师已有机会一读。不知老师对那篇拙作有何高见？若能蒙老师留下些微印象，对我来说，便是无上的喜悦了。&lt;&#x2F;p&gt;
&lt;p&gt;故事原稿没有标题，我想把它命名为「人间椅子」。&lt;&#x2F;p&gt;
&lt;p&gt;敬希见谅，就此搁笔。&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>竹林中</title>
      <pubDate>Mon, 01 May 1922 00:00:00 +0000</pubDate>
      <dc:creator>芥川龙之介</dc:creator>
      <link>https://www.aspchang.com/posts/in-a-grove/</link>
      <guid>https://www.aspchang.com/posts/in-a-grove/</guid>
      <description xml:base="https://www.aspchang.com/posts/in-a-grove/">&lt;h3 id=&quot;受检察官查问的樵夫供词&quot;&gt;受检察官查问的樵夫供词&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#受检察官查问的樵夫供词&quot;
   aria-label=&quot;Anchor link for: 受检察官查问的樵夫供词&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;对。是小人发现尸体的。今早小人跟往常一样到后山伐杉树，在竹林中发现那具尸体。大人问是在哪里发现？那里距离山科马路大约四五町，是一处夹杂了枯杉的偏僻竹林。&lt;&#x2F;p&gt;
&lt;p&gt;尸体穿了湖水蓝色绸缎，头戴京式乌帽仰卧地上。虽然只是受了一刀，但因为伤口在胸膛处，所以旁边的竹叶都犹如被苏芳染红一样变成深红。没有，伤口已经没流出鲜血，看来已经凝结。除此以外，只有一只马蝇紧紧吸啜着尸体，仿佛听不到我走近的脚步声。&lt;&#x2F;p&gt;
&lt;p&gt;大人问有没有见到大刀之类的东西？没有，完全没有。我只见尸体旁的杉树下放了一根绳子。除此之外 …… 对！对！除了绳子以外，还有一把头梳。尸体四周就只有这两件东西。大片草地和竹树落叶都被践踏得非常凌乱，看来男人被杀以前，一定受尽了折磨。什么？大人问有没有见到马匹？马匹是没法走进那里的。毕竟那里跟马匹走的路可是隔了一个竹林。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;受检察官查问的云游僧供词&quot;&gt;受检察官查问的云游僧供词&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#受检察官查问的云游僧供词&quot;
   aria-label=&quot;Anchor link for: 受检察官查问的云游僧供词&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;那死去的男人，贫僧昨天确实见过他。是昨天 …… 大概是下午时候。地点是贫僧从关山走往山科的路途上。那男人和骑马的女人一起向关山方向走。女人帽缘垂下薄纱，所以贫僧看不清她的容貌，只看见她衣服上的一抹紫红。那是一匹桃花马 …… 把鬃毛剪得很短。大人问马匹有多高？有没有四尺四寸？ …… 贫僧只是个出家人，不太懂那些事情。那男人 …… 不对，他配有一把大刀和携带着弓箭。黑色箭筒里插着二十多支箭，就是到了现在，贫僧还记得清清楚楚。&lt;&#x2F;p&gt;
&lt;p&gt;那男人落得如斯下场，贫僧实在做梦也想不到。人的性命真的如梦幻泡影，如露亦如电。唉！这么悲惨的事情，贫僧真是不知怎说才好。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;受检察官查问的捕快供词&quot;&gt;受检察官查问的捕快供词&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#受检察官查问的捕快供词&quot;
   aria-label=&quot;Anchor link for: 受检察官查问的捕快供词&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;大人问这男人是否在下所拘捕？对，正是在下。这人叫多襄丸，是个恶名昭彰的大盗。在下拘捕他时，他躺在粟田口的石桥上呻吟，看来是刚从马背上坠下的。大人问是什么时候？大约是昨晚初更时分。早前我差点就逮捕他的时候，他也是穿着这身深蓝色的衣服的，配着崭新大刀，带着这些弓箭。真的吗？死者也有这些东西 …… 那么，杀人凶手分明就是多襄丸。皮革包裹的弓、黑色的箭筒、十七支鹰羽做成的箭、…… 这些都是那男人的物件吧。对，就如大人所说，马匹是剪短鬃毛的桃花马。多襄丸从畜生背上坠下，分明就是因果报应。马匹当时在石桥前不远的地方，拖着长长的缰绳在路旁吃芒草。&lt;&#x2F;p&gt;
&lt;p&gt;这个多襄丸，在京城一众盗贼中是个尤其好色的坏蛋。去年秋天，听闻他也在鸟部寺宾头卢的后山把一名来寺内参拜的夫人和女孩杀掉。这家伙杀掉这男人以后，桃花马上的女人也就下落不明了。请恕在下斗胆，希望大人能为女人的事一同定断。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;受检察官查问的老奶奶供词&quot;&gt;受检察官查问的老奶奶供词&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#受检察官查问的老奶奶供词&quot;
   aria-label=&quot;Anchor link for: 受检察官查问的老奶奶供词&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;是，这尸体正是小女的丈夫。他并不是京城人，而是若狭府武士，名字叫金泽武弘，今年二十六岁。不，他性情温和，应该不会跟人结下仇怨。&lt;&#x2F;p&gt;
&lt;p&gt;大人问小女的事？小女名字叫真砂，今年十九岁，性格刚烈，好胜心不下男儿。除了武弘以外，没有嫁过人。她肤色微黑，长着一张瓜子小脸，左眼角旁长有一颗小痣。&lt;&#x2F;p&gt;
&lt;p&gt;昨天，武弘跟小女一同前往若狭。发生这件事，真不知是哪门子报应。即使不计女婿遇害的事，就是小女如今下落不明已经叫老妪忧心忡忡。让老妪恳求大人，就是翻天覆地，也请大人找回小女。说到底，最可恨的是那个名叫多襄丸的贼人，不但杀掉老妪的女婿，还把小女 …… （老奶奶泣不成声，说不出话来。）&lt;&#x2F;p&gt;
&lt;h3 id=&quot;多襄丸的招认供词&quot;&gt;多襄丸的招认供词&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#多襄丸的招认供词&quot;
   aria-label=&quot;Anchor link for: 多襄丸的招认供词&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;杀死那男人的就是我，但我没有杀掉那女人。你问她现在去了哪里？那个我就不知道了。啊！你先等等。无论你怎样审问，不知的事情我是无法招认的。况且事已至此，我也不打算怯懦隐瞒。&lt;&#x2F;p&gt;
&lt;p&gt;我在正午过后遇见那对夫妇。那时一阵风把女人的面纱吹起，在仅仅一瞬间我瞥见她的容貌。可能因为这缘故，在我眼中她就如一尊菩萨。当时我下定决心，即使杀掉那男人，也要把女人抢过来。&lt;&#x2F;p&gt;
&lt;p&gt;怎么？杀人也不是你们所想般大不了。要把女人抢到手，就要把男人杀掉。只是我杀人是用腰间大刀，而你们却不用刀，只用权力金钱来杀人，有时只说些假仁假义的话就置人于死地。尽管实际上还是活生生没有淌血…… 其实却早已跟被杀无异。是你们还是我比较罪业深重？我看只有上天才知晓。（发出嘲讽的冷笑声）&lt;&#x2F;p&gt;
&lt;p&gt;不过，假若不用杀掉男人就能抢女人到手，这也是件不错的事情。不，其实当时我已经决定尽量不要杀掉男人而把女人抢到手。但在山科大路之上，根本不可能办到。于是我花了些工夫把他们夫妇二人引到山里去。&lt;&#x2F;p&gt;
&lt;p&gt;这也不是什么难办的事情。跟那对夫妇成为同路伙伴后，我跟男人说：&quot;我在对面山头发现了一个古坟，里面藏着大量铜镜和大刀。我静静把它们埋在山后竹林。如果遇上买家，卖得便宜一点也可以。&quot;男人对我的话渐渐心动。…… 然后怎样？你不觉得欲望很可怕吗？不到半个时辰，那对夫妇已经把马头一转，跟我一起向山路进发。&lt;&#x2F;p&gt;
&lt;p&gt;当我们来到竹林前面，我跟他们说：&quot;宝物埋在竹林内，你们来看看吧。&quot;男人被欲望所操控，当然没有异议。女人却没有下马，只说自己在竹林外等候。望见茂密竹林，女人这样想也不无道理。老实说，这也正中我的下怀。因此我们留下女人，一起走进竹林里。&lt;&#x2F;p&gt;
&lt;p&gt;开始的路尽是密密麻麻的竹树。走了大约半町以后，却来到一处略为开阔、生长了若干杉树的丛林。…… 要完成我的计划，没有比这里更合适的地方。&quot;宝物就埋在杉树下。&quot;我一边拨开挡路竹树，一边装模作样地说着谎话。男人听我这么说，就拼命向竹林背后隐约可见的枯杉方向前进。里边的竹树长得较外边稀疏，同时还生长了数株杉树。……他走进去以后，我就立刻发狠把他压倒地上。那男人身怀大刀，应该气力不少。但被我如此突袭，也还是无法招架。我随即把他捆绑在一株杉树下。你问绳子何来？我们当大盗的，不知何时需要爬越高墙，所以经常把绳子缠在腰间，以备不时之需。为了不让他叫喊，我把竹叶塞满他口中。这样就不会再惹上麻烦。&lt;&#x2F;p&gt;
&lt;p&gt;我收拾完男人以后，就回到女人身边跟她说男人似乎得了急病，要她去见他。不由分说，女人当然中计。女人还没有戴上轻纱帽子就被我牵着手走进竹林深处。当她到达时，发现男人被绑在杉树下，…… 女人见这状况，不知什么时候，从怀里拔出一把小刀。直到现在，我也未曾遇过如此刚烈的女人。假若当时稍一犹豫，恐怕肚子就要被她一刀戮穿。虽说避过一刀，但在女人拼命戮过来的情况下，也是有可能给她刺伤的。尽管如此，我好歹也是多襄丸，左闪右避，没有拔出大刀就把她的小刀打落地上。无论多刚烈的女性，没有武器在手也只好认命。最终我如愿以偿，没有杀掉男人就得到这女人。&lt;&#x2F;p&gt;
&lt;p&gt;即使不取下那男人性命其实也没关系，…… 对，事实上我也没打算杀掉男人。我没有理会伏在地上嚎哭的女人，正当准备离开竹林时，女人突然像发疯般抓紧我肩膀。我听到她断断续续地叫：&quot;不是你死，就是我丈夫要死。被两个男人看见我被如此羞辱，实在是比死更难受。不，你们两人当中谁活下来，我就跟谁。&quot;那时候，我突然生起杀掉那男人的冲动。（阴沉中带兴奋）&lt;&#x2F;p&gt;
&lt;p&gt;事情说到这里，你一定认为我比你们更加残酷不仁。这都不过是因为你没见过那女人的容貌吧，尤其是没有见到她那在一瞬间犹如燃烧的眼神。当我和女人四目交投时，我决定就算天打雷劈，也要娶她为妻。…… 我的脑海中，其实只有这个念头。并不是你们所想的卑劣淫欲。假若只是为了单纯满足欲望，我必定会把女人踢倒地上然后逃走。男人的鲜血亦不会溅在我大刀之上。在那阴暗竹林中，在我凝视女人容貌的瞬间，已经做好心理准备，假若不杀掉那男人，我是绝不离开的。&lt;&#x2F;p&gt;
&lt;p&gt;但即使要杀掉男人，我也不会用卑鄙的方法。我解开捆绑男人的绳子，并且说跟他决斗。（杉树下的绳子是我当时忘记拿走的。）男人面色一沉，拔出大刀。二话不说就愤怒地飞扑过来。…… 决斗的结果当然不用说。我在第二十三个回合，一刀贯穿他的胸膛。是在第二十三个回合 …… 请不要忘记这一点。直至今天，我对他仍然心存敬佩，能和我大战二十回合的人，天下就只有这男人。（畅快地微笑）&lt;&#x2F;p&gt;
&lt;p&gt;在男人倒下的同时，我丢下染血的大刀，回头望向女人。怎料 …… 女人已经不见踪影。我在杉树丛间寻找女人身影。但竹树落叶却没有留下任何线索。静心细听，听到的只有男人死前挣扎的声音。难不成，女人在我们决斗时就逃出竹林外求救？…… 当我想到这里，心想这可是非同小可，于是立即拿去大刀弓箭，沿着来路逃走。在路上遇到女人的马匹在静静吃草。之后的事情你们也清楚吧，我就不再多说了。至于那把大刀，在上京前已经卖掉了。 …… 我的供词只有这些。反正某天这颗头颅都要挂在椿树之上，你就把我处死吧。（一脸傲慢）&lt;&#x2F;p&gt;
&lt;h3 id=&quot;女人来到清水寺的忏悔词&quot;&gt;女人来到清水寺的忏悔词&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#女人来到清水寺的忏悔词&quot;
   aria-label=&quot;Anchor link for: 女人来到清水寺的忏悔词&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;…… 那个穿着深蓝色衣服的男人奸污了我以后，他望着我那被捆绑着的丈夫发出嘲讽的笑声。无论丈夫多不甘心，不断挣扎，捆绑全身的绳结都只是愈扯愈紧。我禁不住连滚带爬跑到丈夫身边。不对，是想跑到丈夫身边。这时，男人用脚把我踢倒，正正就在我走到一半的路上。那时候，我察觉丈夫露出&quot;跟你没什么好说&quot;的眼神。是&quot;跟你没什么好说&quot;…… 每当想起那眼神，即使到了现在，我还是会感到不寒而栗。丈夫没说一句话，只用一个眼神，就把他心中所想的都表达出来。那眼神不是愤怒，也不是哀伤 …… 只能说是鄙视和冷漠的眼神。也不知是因为被那男人踢倒还是被丈夫那眼神击倒，我歇斯底里地叫，然后失去意识昏倒过去。&lt;&#x2F;p&gt;
&lt;p&gt;当我醒来，身穿深蓝色衣服的男人已经不知所踪。留下的只剩下捆绑在杉树下的丈夫。我总算从竹叶上站起来，望着丈夫的面容。丈夫的眼神跟刚才并没有很大分别，是显露着冷漠蔑视的憎恨眼神。羞耻、悲哀、愤怒，…… 我也搞不清应该怎样形容自己当时的心情。我摇摇晃晃站起来，走到丈夫身边。&lt;&#x2F;p&gt;
&lt;p&gt;&quot;事到如今，我们已经不可能在一起。虽然我已经决定寻死，但是 ……但是，你也跟我一同去死吧。你看到我被如此羞辱，我不能让你一人活下去。&quot;&lt;&#x2F;p&gt;
&lt;p&gt;我尽力把话说完。尽管如此，丈夫只用讨厌的眼神凝视我。我一边按着快要爆裂的胸口，一边找寻丈夫的大刀。不过，贼人似乎已经拿走大刀。大刀当然不见了，就连弓箭都消失于竹林之中。可幸还有一把小刀掉落在我脚下。我举起小刀，又再向丈夫说：&quot;请你先行一步，我很快就来。&quot;&lt;&#x2F;p&gt;
&lt;p&gt;丈夫听到这话后，嘴巴终于动起来。但因为嘴巴塞满竹叶，所以我也听不清他说什么。但我看着当时的情景，突然感觉自己明白他在说什么。他是在鄙视地跟我说：&quot;杀吧！&quot;于是，我迷迷糊糊间把小刀对着湖水蓝上衣的胸部位置，一刀刺进去。&lt;&#x2F;p&gt;
&lt;p&gt;我再次失去知觉，再可以望见四周的时候丈夫依然是被捆绑着，但早已气绝身亡。挂于竹林中杉树丛上空的落日照射在丈夫苍白的脸庞上。我一边饮泣，一边解掉尸骸的绳子。然后，…… 然后怎样？我说不下去了。说到底就是没有自杀的勇气。我尝试过用小刀割喉，也试过跳进山脚的湖中自尽。虽然尝试了各种方法，但仍然死不了。既然死不了，就没有什么值得骄傲。（寂寞地微笑）像我这样没用的人，恐怕就是大慈大悲观世音菩萨也会鄙弃我。杀掉丈夫的我，被贼人奸污的我，以后要怎样好？究竟我 …… 我 …… （突然间嚎哭）&lt;&#x2F;p&gt;
&lt;h3 id=&quot;亡灵借助女巫之口说出的供词&quot;&gt;亡灵借助女巫之口说出的供词&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#亡灵借助女巫之口说出的供词&quot;
   aria-label=&quot;Anchor link for: 亡灵借助女巫之口说出的供词&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;……贼人奸污了妻子以后，就坐在那里开始安慰妻子。我当然没办法开口说话。身体也被捆绑在杉树下。然而，我还是不停向妻子使眼色。&quot;千万不要相信这男人，他说的全都是谎话。&quot;……我尽管很想把心意传给她，但她却只是静静坐在竹叶上望着膝盖，看来是正在倾听贼人的说话。我被妒忌心折磨难奈，而贼人却一直喋喋不休，花言巧语。&quot;只要被人玷污一次，就不可能再跟丈夫和好如初。与其跟随这样的丈夫，不如当我的妻子。我是出于爱慕之情，才会干出如此过分的事情。&quot;…… 贼人愈说愈胆大，连这样的话都说出来。&lt;&#x2F;p&gt;
&lt;p&gt;被贼人这样说，妻子茫然抬起头来。我从未见过妻子比那刻更美。但是你知道我那如此美丽的妻子在捆绑着的我面前是怎样回答贼人吗？虽然我只是游魂野鬼，但每当想起妻子的回答，都会燃起心中嗔恨之火。妻子确实是这样说 ……&quot;无论往哪里去，都请带着我。&quot;（漫长的沉默）&lt;&#x2F;p&gt;
&lt;p&gt;妻子的罪行可不止此。如果仅是这样，黑暗中的我也不至于像现在般痛苦不已。犹如做梦似的，我看见妻子被男人牵走。当他们快要离开竹林的时候，妻子突然面色一青，指着捆绑在杉树下的我。&quot;把那个人杀掉！只要那个人仍然活着，我是不能跟你一起的。&quot;……　妻子像疯了一样不停叫喊。&quot;把那个人杀掉！&quot;……　这话犹如风暴般把我吹倒在遥远黑暗的深处。如此叫人厌恶的说话，是从人的口里说出来的吗？如此叫人厌恶的说话，是一个人会听得到的吗？即使只是仅仅一次 ……　（突然发出嘲笑声）贼人听到这话后，突然脸色一沉。&quot;把那个人杀掉！&quot;妻子这样叫喊的同时，抓着贼人的肩膀。贼人凝视妻子，没说要杀也没说不杀。……想了一想，然后把妻子一脚踢倒在地上。（再次发出嘲笑声）贼人静静抱着胳膊，向我使个眼色。&quot;要怎样处置这个女人？是杀了她还是放过她？你点个头就可以。要杀吗？&quot;…… 就是单单这句话，就足以让我饶恕这贼人。（再一次漫长的沉默）&lt;&#x2F;p&gt;
&lt;p&gt;妻子在我犹豫之际，大叫一声后立即跑往竹林深处。贼人迅速飞扑上前，但却连衣袖也抓不住。我只是呆呆地望着当时的情境。贼人在妻子逃跑以后，拿去我的大刀和弓箭，把绳子割断。&quot;这回逃跑的是我了。&quot;…… 我记起贼人在隐没于竹林外时是这样喃喃自语的。然后，就是一片寂静。不对，似乎有人在哭泣。我把绳子解开，细耳倾听，那不就是自己的哭泣声吗？（第三次漫长的沉默）&lt;&#x2F;p&gt;
&lt;p&gt;我终于筋疲力竭地从杉树旁站起。我眼前闪着妻子掉落地上的小刀。我拿起小刀，一刀戳进胸膛。我感到一股血腥涌到口里。但是，我却感觉不到丝毫的痛楚，只是感到胸口有点冷，四周也比之前更寂静。呀，是多么的寂静。在这山后竹林的上空，连一只小鸟的叫鸣声也听不到。只见杉树和竹树之间飘荡着寂寞的阳光。…… 阳光渐渐变得昏暗 …… 杉树和竹树都已经看不见。我在那里倒下来，被完全的寂静所包围。&lt;&#x2F;p&gt;
&lt;p&gt;这时有人静静来到我身边。尽管想要望真是谁，但周遭已经被幽暗所笼罩。是谁……不知是谁人用手缓缓地把我胸前的小刀拔出。这时，我口中再次涌出一股血水，就这样永远坠进死亡的黑暗中。……&lt;&#x2F;p&gt;
&lt;p&gt;（大正十年十二月）&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>藥</title>
      <pubDate>Fri, 25 Apr 1919 00:00:00 +0000</pubDate>
      <dc:creator>鲁迅</dc:creator>
      <link>https://www.aspchang.com/posts/medicine/</link>
      <guid>https://www.aspchang.com/posts/medicine/</guid>
      <description xml:base="https://www.aspchang.com/posts/medicine/">&lt;p&gt;&lt;mark&gt;&lt;em&gt;收錄於《吶喊》和《新青年·第六卷·第五號》&lt;&#x2F;em&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;一&quot;&gt;一&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#一&quot;
   aria-label=&quot;Anchor link for: 一&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;秋天的後半夜，月亮下去了，太陽還沒有出，只剩下一片烏藍的天；除了夜遊的東西，什麽都睡着。華老栓忽然坐起身。擦着火柴，點上遍身油膩的燈盞，茶館的兩間屋子裏，便瀰滿了靑白的光。&lt;&#x2F;p&gt;
&lt;p&gt;『小栓的爹，你就去麽？』是一個老女人的聲音。裏邊的小屋子裏，也發出一陣咳嗽。&lt;&#x2F;p&gt;
&lt;p&gt;『唔。』老栓一面聽，一面應，一面扣上衣服；伸手過去說，『你給我罷。』&lt;&#x2F;p&gt;
&lt;p&gt;華大媽在枕頭底下掏了半天，掏出一包洋錢，交給老栓，老栓接了，抖抖的裝入衣袋，又在外面按了兩下；便點上燈籠，吹熄燈盞，走向裏屋子去了。那屋子裏面，正在窸窸窣窣的響，接着便是一通咳嗽。老栓候他平靜下去，纔低低的叫道：『小栓……你不要起來。……店麽？你娘會安排的。』&lt;&#x2F;p&gt;
&lt;p&gt;老栓聽得兒子不再說話，料他安心睡了；便出了門，走到街上。街上黑沈沈的一無所有，只有一條灰白的路，看得分明。燈光照着他的兩脚，一前一後的走。有時也遇到幾隻狗，可是一隻也沒有叫。天氣比屋子裏冷得多了；老栓倒覺爽快，彷彿一旦變了少年，得了神通，有給人生命的本領似的，跨步格外高遠。而且路也愈走愈分明，天也愈走愈亮了。&lt;&#x2F;p&gt;
&lt;p&gt;老栓正在專心走路，忽然喫了一驚，遠遠裏看見一條丁字街，明明白白橫着。他便退了幾步，尋到一家關着門的鋪子，蹩進簷下，靠門立住了。好一會，身上覺得有些發冷。&lt;&#x2F;p&gt;
&lt;p&gt;『哼，老頭子。』&lt;&#x2F;p&gt;
&lt;p&gt;『倒高興。……』&lt;&#x2F;p&gt;
&lt;p&gt;老栓又喫一驚，睜眼看時，幾個人從他面前過去了。一個還回頭看他，樣子不甚分明，但很像久餓的人見了食物一般，眼裏閃出一種攫取的光。老栓看看燈籠，已經熄了。按一按衣袋，硬硬的還在。仰起頭兩面一望，只見許多古怪的人，三三兩兩，鬼似的在那里徘徊；定睛再看，卻也看不出什麽別的奇怪。&lt;&#x2F;p&gt;
&lt;p&gt;沒有多久，又見幾個兵，在那邊走動；衣服前後的一個大白圓圈，遠地裏也看得淸楚，走過面前的，並且看出號衣上暗紅色的鑲邊。——一陣腳步聲響，一眨眼，已經擁過了一大簇人。那三三兩兩的人，也忽然合作一堆，潮一般向前趕；將到丁字街口，便突然立住，簇成一個半圓。&lt;&#x2F;p&gt;
&lt;p&gt;老栓也向那邊看，卻只見一堆人的後背；頸項都伸得很長，彷彿許多鴨，被無形的手揑住了的，向上提着。靜了一會，似乎有點聲音，便又動搖起來，轟的一聲，都向後退；一直散到老栓立着的地方，幾乎將他擠倒了。&lt;&#x2F;p&gt;
&lt;p&gt;『喂！一手交錢，一手交貨！』一個渾身黑色的人，站在老栓面前，眼光正像兩把刀。刺得老栓縮小了一半。那人一隻大手，向他攤着；一隻手卻撮着一個鮮紅的饅頭，那紅的還是一點一點的往下滴。&lt;&#x2F;p&gt;
&lt;p&gt;老栓慌忙摸出洋錢，扯抖的想交給他，卻又不敢去接他的東西。那人便焦急起來，嚷道，『怕什麽？怎的不拿！』老栓還躊躇着；黑的人便搶過燈籠，一把扯下紙罩，裹了饅頭，塞與老栓；一手抓過洋錢，揑一揑，轉身去了。嘴裏哼着說：『這老東西……。』&lt;&#x2F;p&gt;
&lt;p&gt;『這給誰治病的呀？』老栓也似乎聽得有人問他，但他並不答應；他的精神，現在只在一個包上，彷彿抱着一個十世單傳的嬰兒，別的事情，都已置之度外了。他現在要將這包裏的新的生命，移植到他家裏，收穫許多幸福。太陽也出來了；在他面前，顯出一條大道，直到他家中，後面也照見丁字有頭破匾上『古口亭口』這四個黯淡的金字。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;二&quot;&gt;二&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#二&quot;
   aria-label=&quot;Anchor link for: 二&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;老栓走到家，店面早經收拾乾淨，一排一排的茶桌，滑溜溜的發光。但是沒有客人；只有小栓坐在裏排的桌前喫飯，大粒的汗，從額上滾下，夾襖也貼住了脊心，兩塊肩胛骨高高凸出，印成一個陽文的『八』字。老栓見這樣子，不免皺一皺展開的眉心。他的女人，從竈下急急走出，睜着眼睛，嘴脣有些發抖。&lt;&#x2F;p&gt;
&lt;p&gt;『得了麽？』&lt;&#x2F;p&gt;
&lt;p&gt;『得了。』&lt;&#x2F;p&gt;
&lt;p&gt;兩個人一齊走進竈下，商量了一會；華大媽便出去了，不多時，拏着一片老荷葉回來，攤在桌上。老栓也打開燈籠罩，用荷葉重新包了那紅的饅頭。小栓也喫完飯，他的母親慌忙說：——&lt;&#x2F;p&gt;
&lt;p&gt;『小栓——你坐着，不要到這裏來。』&lt;&#x2F;p&gt;
&lt;p&gt;一面整頓了竈火，老栓便把一個碧綠的包，一個紅紅白白的破燈籠，一同塞在竈裏，一陣紅黑的火燄過去時，店屋裏散滿了一種奇怪的香味。&lt;&#x2F;p&gt;
&lt;p&gt;『好香！你們喫什麽點心呀？』這是駝背五少爺到了。這人每天總在茶館裏過日，來得最早，去得最遲，此時恰恰蹩到臨街的壁角的桌邊，便坐下問話，然而沒有人答應他。『炒米粥麽？』仍然沒有人應。老栓匆匆走出，給他泡上茶。&lt;&#x2F;p&gt;
&lt;p&gt;『小栓進來罷！』華大媽叫小栓進了裏面的屋子，中間放好一條凳，小栓坐了。他的母親端過一碟烏黑的圓東西，輕輕說：——&lt;&#x2F;p&gt;
&lt;p&gt;『喫下去罷，——病便好了。』&lt;&#x2F;p&gt;
&lt;p&gt;小栓撮起這黑東西，看了一會，似乎拏着自己的性命一般，心裏說不出的奇怪。十分小心的拗開了，焦皮裏面竄出一道白氣，白氣散了，是兩半個白麵的饅頭。——不多工夫，已經全在肚裏了，卻全忘了什麽味；面前只剩下一張空盤。他的旁邊，一面立着他的父親，一面立着他的母親，兩人的眼光，都彷彿要在他身裏注進什麽又要取出什麽似的；便禁不住心跳起來，按着胸膛，又是一陣咳嗽。&lt;&#x2F;p&gt;
&lt;p&gt;『睡一會罷，——便好了。』&lt;&#x2F;p&gt;
&lt;p&gt;小栓依他母親的話，咳着睡了。華大媽候他喘氣平靜，纔輕輕的給他蓋上了滿幅補釘的夾被。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;三&quot;&gt;三&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#三&quot;
   aria-label=&quot;Anchor link for: 三&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;店裏坐着許多人，老栓也忙了，提着大銅壺，一趟一趟的給客人沖茶；兩個眼眶，都圍着一圈黑線。&lt;&#x2F;p&gt;
&lt;p&gt;『老栓，你有些不舒服麽？——你生病麽？』一個花白鬍子的人說。&lt;&#x2F;p&gt;
&lt;p&gt;『沒有。』&lt;&#x2F;p&gt;
&lt;p&gt;『沒有？——我想笑嘻嘻的，原也不像……』花白鬍子便取消了自己的話。&lt;&#x2F;p&gt;
&lt;p&gt;『老栓只是忙。要是他的兒子……』駝背五少爺話還未完，突然闖進了一個滿臉橫肉的人，被一件玄色布衫，散着紐釦，用很寬的玄色腰帶，胡亂綑在腰間。剛進門，便對老栓嚷道：——&lt;&#x2F;p&gt;
&lt;p&gt;『喫了麽？好了麽？老栓，就是運氣了你！你運氣，要不是我信息靈。……』&lt;&#x2F;p&gt;
&lt;p&gt;老栓一手提了茶壺，一手恭恭敬敬的垂着；笑嘻嘻的聽。滿座的人，也都恭恭敬敬的聽。華大媽也黑着眼眶，笑嘻嘻的送出茶碗茶葉來，加上一個橄欖，老栓便去沖了水。&lt;&#x2F;p&gt;
&lt;p&gt;『這是包好！這是與衆不同的。你想，趁熱的拏來，趁熱喫下。』橫肉的人只是嚷。&lt;&#x2F;p&gt;
&lt;p&gt;『眞的呢，要沒有康大叔照顧，怎麽會這樣……』華大媽也很感激的謝他。&lt;&#x2F;p&gt;
&lt;p&gt;『包好，包好！這樣的趁熱喫下。這樣的人血饅頭，什麽癆病都包好！』&lt;&#x2F;p&gt;
&lt;p&gt;華大媽聽到『癆病』這兩個字，變了一點臉色，似乎有些不高興；但又立刻堆上笑，搭赸着走開了。這康大叔卻沒有覺察，仍然提高了喉嚨只是嚷，嚷得裏面睡着的小栓也合夥咳嗽起來。&lt;&#x2F;p&gt;
&lt;p&gt;『原來你家小栓碰到了這樣的好運氣了。這病自然一定全好；怪不得老栓整天的笑着呢。』花白鬍子一面說，一面走到康大叔面前，低聲下氣的問道，『康大叔——聽說今天結果的一個犯人，便是夏家的孩子，那是誰的孩子？究竟是什麽事？』&lt;&#x2F;p&gt;
&lt;p&gt;『誰的？不就是夏四奶奶的兒子麽？那個小傢伙！』康大叔見衆人都聳起耳朵聽他，便格外高興，橫肉塊塊飽綻，越發大聲說，『這小東西不要命，不要就是了。我可是這一回一點沒有得到好處；連剝下來的衣服，都給管牢的紅眼睛阿義拏去了。——第一要算我們栓叔運氣；第二是夏三爺賞了二十五兩雪白的銀子，獨自落腰包，一文不花。』&lt;&#x2F;p&gt;
&lt;p&gt;小栓慢慢的從小屋子走出，兩手按了胸口，不住的咳嗽；走到竈下，盛出一碗冷飯，泡上熱水，坐下便喫。華大媽跟着他走，輕輕的問道，『小栓你好些麽？——你仍舊只是肚餓？……』&lt;&#x2F;p&gt;
&lt;p&gt;『包好，包好！』康大叔瞥了小栓一眼，仍然回過臉，對衆人說，『夏三爺眞是乖角兒，要是他不先吿官，連他滿門抄斬。現在怎樣？銀子！——這小東西也眞不成東西！關在牢裏，還要勸牢頭造反。』&lt;&#x2F;p&gt;
&lt;p&gt;『阿呀，那還了得。』坐在後排的一個二十多歲的人，很現出氣憤模樣。&lt;&#x2F;p&gt;
&lt;p&gt;『你要曉得紅眼睛阿義是去盤盤底細的，他卻和他攀談了。他說：這大淸的天下是我們大家的。你想：這是人話麽？紅眼睛原知道他家裏只有一個老娘，可是沒有料到他竟會那麽窮，搾不出一點油水，已經氣破肚皮了。他還要老虎頭上搔癢，便給他兩個嘴巴！』&lt;&#x2F;p&gt;
&lt;p&gt;『義哥是一手好拳棒，這兩下，一定够他受用了。』壁角的駝背忽然高興起來。&lt;&#x2F;p&gt;
&lt;p&gt;『他這賤骨頭打不怕，還要說可憐可憐哩。』&lt;&#x2F;p&gt;
&lt;p&gt;花白鬍子的人說，『打了這種東西，有什麽可憐呢？』&lt;&#x2F;p&gt;
&lt;p&gt;康大叔顯出看他不上的樣子，冷笑着說，『你沒有聽淸我的話；看他神氣，是說阿義可憐哩！』&lt;&#x2F;p&gt;
&lt;p&gt;聽着的人的眼光，忽然有些板滯；話也停頓了，小栓已經喫完飯，喫得滿身流汗，頭上都冒出蒸氣來。&lt;&#x2F;p&gt;
&lt;p&gt;『阿義可憐——瘋話，簡直是發了瘋了。』花白鬍子恍然大悟似的說。&lt;&#x2F;p&gt;
&lt;p&gt;『發了瘋了。』二十多歲的人也恍然大悟的說。&lt;&#x2F;p&gt;
&lt;p&gt;店裏的坐客，便又現出活氣，談笑起來。小栓也趁着熱鬧，拚命咳嗽；康大叔走上前，拍他肩膀說：——&lt;&#x2F;p&gt;
&lt;p&gt;『包好！小栓——你不要這麽咳。包好！』&lt;&#x2F;p&gt;
&lt;p&gt;『瘋了。』駝背五少爺點着頭說。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;四&quot;&gt;四&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#四&quot;
   aria-label=&quot;Anchor link for: 四&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;西關外靠着城根的地面，本是一塊官地；中間歪歪斜斜一條細路，是貪走便道的人，用鞋底造成的，但卻成了自然的界限。路的左邊，都埋着死刑和瘦斃的人，右邊是窮人的叢塚。兩面都已埋到層層疊疊，宛然闊人家裏祝壽時候的饅頭。&lt;&#x2F;p&gt;
&lt;p&gt;這一年的淸明，分外寒冷；楊柳纔吐出半粒米大的新芽。天明未久，華大媽已在右邊的一坐新墳前面，排出四碟菜，一碗飯，哭了一場。化過紙，呆呆的坐在地上；彷彿等候什麽似的，但自己也說不出等候什麽。微風起來，吹動他短髮，確乎比去年白得多了。&lt;&#x2F;p&gt;
&lt;p&gt;小路上又來了一個女人，也是半白頭髮，襤褸的衣裙；提一個破舊的朱漆圓籃，外挂一串紙錠，三步一歇的走。忽然見華大媽坐在地上看他，便有些躊躇，慘白的臉上，現出些羞愧的顏色；但終于硬着頭皮，走到左邊的一坐墳前，放下了籃子。&lt;&#x2F;p&gt;
&lt;p&gt;那墳與小栓的墳，一字兒排着，中間只隔一條小路。華大媽看他排好四碟菜，一碗飯，立着哭了一通，化過紙錠；心裏暗暗地想，『這墳裏的也是兒子了。』那老女人徘徊觀望了一回，忽然手脚有些發抖，蹌蹌踉踉退下幾步，瞪着眼只是發怔。&lt;&#x2F;p&gt;
&lt;p&gt;華大媽見這樣子，生怕他傷心到快要發狂了；便忍不住立起身，跨過小路，低聲對他說，『你這位老奶奶不要傷心了，——我們還是回去罷。』&lt;&#x2F;p&gt;
&lt;p&gt;那人點一點頭，眼睛仍然向上瞪着；也低聲吃吃的說道，『你看。——看這是什麽呢？』&lt;&#x2F;p&gt;
&lt;p&gt;華大媽跟了他指頭看去，眼光便到了前面的墳，這墳上草根還沒有全合，露出一塊一塊的黃土，煞是難看。再往上仔細看時，卻不覺也喫一驚；——分明有一圈紅白的花，圍着那尖圓的墳頂。&lt;&#x2F;p&gt;
&lt;p&gt;他們的眼睛都已老花多年了，但望這紅白的花，卻還能明白看見。花也不很多，圓圓的排成一個圈，不很精神，倒也整齊。華大媽忙看他兒子和別人的墳，卻只有不怕冷的幾點靑白小花，零星開着；便覺得心裏忽然感到一種不足和空虛，不願意根究。那老女人又走近幾步，細看了一遍，自言自語的說，『這沒有根，不像自己開的！這地方有誰來呢？孩子不會來玩；——親戚本家早不來了。——這是怎麽一回事呢？』他想了又想，忽又流下淚來，大聲說道：——&lt;&#x2F;p&gt;
&lt;p&gt;『瑜兒，他們都寃枉了你，你還是忘不了，傷心不過，今天特意顯點靈，要我知道麽？』他四面一看，只見一隻烏鴉，站在一株沒有葉的樹上，便接着說，『我知道了。——瑜兒，可憐他們坑了你，他們將來總有報應，天都知道；你閉了眼睛就是了。——你如果眞在這裏，聽到我的話，——便教這烏鴉飛上你的墳頂，給我看罷。』&lt;&#x2F;p&gt;
&lt;p&gt;微風早經停息了；枯草支支直立，有如銅絲。一絲發抖的聲音，在空氣中愈顫愈細，細到沒有，周圍便都是死一般靜。兩人站在枯草叢裏，仰面看那烏鴉；那烏鴉也在筆直的樹枝間，縮着頭，鐵鑄一般站着。&lt;&#x2F;p&gt;
&lt;p&gt;許多的工夫過去了；上墳的人漸漸增多，幾個老的小的，在土墳間出沒。&lt;&#x2F;p&gt;
&lt;p&gt;華大媽不知怎的，似乎卸下了一挑重擔，便想到要走；一面勸着說，『我們還是回去罷。』&lt;&#x2F;p&gt;
&lt;p&gt;那老女人歎一口氣，無精打采的收起飯菜；又遲疑了一刻，終于慢慢地走了。嘴裏自言自語的說，『這是怎麽一回事呢？……』&lt;&#x2F;p&gt;
&lt;p&gt;他們走不上二三十步遠，忽聽得背後『啞——』的一聲大叫；兩個人都竦然的回過頭，只見那烏鴉張開兩翅，一挫身，直向着遠處的天空，箭也似的飛去了。&lt;&#x2F;p&gt;
&lt;p&gt;（一九一九年四月。）&lt;&#x2F;p&gt;
</description>
    </item> <item>
      <title>梦十夜</title>
      <pubDate>Sat, 25 Jul 1908 00:00:00 +0000</pubDate>
      <dc:creator>夏目漱石</dc:creator>
      <link>https://www.aspchang.com/posts/ten-nights-of-dreams/</link>
      <guid>https://www.aspchang.com/posts/ten-nights-of-dreams/</guid>
      <description xml:base="https://www.aspchang.com/posts/ten-nights-of-dreams/">&lt;p&gt;&lt;em&gt;1908 年（明治四十一年）7 月 25 日至 8 月 5 日载于《朝日新闻》&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;第一夜&quot;&gt;第一夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第一夜&quot;
   aria-label=&quot;Anchor link for: 第一夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;我做了这样一个梦。&lt;&#x2F;p&gt;
&lt;p&gt;我抱着胳膊，落在枕边，仰面躺着的女人用静静的语调说道：我就快死了。女人的长发披散在枕头上，轮廓柔和的瓜子型脸 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 横卧其间。雪白的两颊深处，恰到好处地泛出暖和的血色，唇色自然是红的。一点也看不出像是要死的样子。可女人用寂静的语调，清清楚楚地说道：我就快死了。我也觉得，此番是必死无疑的了。于是，深深地俯视着，问道：是么？就快死了么？就快死了，女人答道，并睁开了大大的眼睛，大而潮润的眸子里，埋在环围的长睫毛里，乌漆漆的眸子深处，清晰地浮映着我的身影。&lt;&#x2F;p&gt;
&lt;p&gt;望着这双清澈见底的黑眸子的色泽，我不禁思忖，连这黑眸子也要死去么？便体贴地将嘴凑近枕边，又反问道，不会死吧？你没事吧？于是，女人睁着迷离惺忪的黑眸子，仍以静静的语调说道：可是，死，是奈何不得的呀！&lt;&#x2F;p&gt;
&lt;p&gt;那么，看得清我的脸么？她专注地问。看得清么？唔，正在那里边映着呢！她微微绽出了笑容。我黯然无语地将脸从枕边挪开，抱着胳膊思忖道，难道就没有一丝生的希望了么？&lt;&#x2F;p&gt;
&lt;p&gt;过了好一会，女人又说：&lt;&#x2F;p&gt;
&lt;p&gt;死后，请把我埋了。要用大珍珠贝壳挖墓穴，然后将天上坠下的星辰碎片放置在墓碑上，然后在墓旁守候着，因为我还要来见你。&lt;&#x2F;p&gt;
&lt;p&gt;我问：什么时候来见我？&lt;&#x2F;p&gt;
&lt;p&gt;日头升起，是吧，然后日头坠下，是吧，然后又升起，再坠下——在通红的日头自东向西、自东向西坠下的日子里——你能等着我么？&lt;&#x2F;p&gt;
&lt;p&gt;我默然无语地点头答应下来，女人用越发显得寂静的语调，断断然然地说道：&lt;&#x2F;p&gt;
&lt;p&gt;请等上——百年！&lt;&#x2F;p&gt;
&lt;p&gt;请在我的墓旁坐等一百年！因为我一定会来见你的。&lt;&#x2F;p&gt;
&lt;p&gt;我只得回答说：我等着。于是，清晰地倒映在漆黑眸子里的我的身影，便一下子土崩瓦解了，就像映在平静水面上的倒影被人搅动后星散流走似的，刚察觉到这一点，女人的眼便啪地一声阖上了，眼泪从长长的睫毛间滴落到了脸颊上。——她死了。&lt;&#x2F;p&gt;
&lt;p&gt;于是，我走下庭院，用珍珠贝壳挖出了墓穴，是那种很大的、边缘光滑而又锋利的珍珠贝壳。每挖一下，月光便在贝壳的内壁上闪烁一下。潮润的泥土气息也随之弥散开来。墓穴很快就挖好了，我将女人安置在墓穴里，然后，在上面轻轻地撒上柔软的泥土。每撒一次土，珍珠贝壳的内壁便会有月光浸出。&lt;&#x2F;p&gt;
&lt;p&gt;然后，捡来坠落的星辰碎片。这些碎片，想来是在从太空坠下的那——长段时间里，被打磨棱角、变得光滑的吧？在将它们拢来放置在土墓上的时候，我的胸膛和手稍稍变得暖和了起来。&lt;&#x2F;p&gt;
&lt;p&gt;我在青苔上坐了下来。思忖着从今往后的百年间，得一直这样守候着，一边抄着胳膊，瞅着圆圆的墓石。当儿，正如女人说过的那样，日头从东方升了起来。是一轮巨大的红日。又如女人说过的那样，很快便坠向西天去了。通红通红地，一下子便坠了下去。我数道：一。&lt;&#x2F;p&gt;
&lt;p&gt;过了好久，红彤彤的太阳又慢吞吞地升了上来，然后默不作声地坠落下去。我数道：二。&lt;&#x2F;p&gt;
&lt;p&gt;数着数着，我却闹不清自己和这红彤彤的日头究竟打过多少次照面了。数呀数呀，任你怎么数，通红的日头仍是没完没了地从头上飞越而过，即便如此，百年还是迟迟没有到来，望着已生出苔藓的圆墓石，我不禁起了疑心，该不会是女人骗了我吧？&lt;&#x2F;p&gt;
&lt;p&gt;于是，斜对着我这边，从墓石下探出一枝青茎，转眼间就长高了，长到我胸高时便停住了。颤巍巍的茎端，像是向人点头致意似的，一轮细长花蕾绽开了蓬松的花瓣。洁白的百合在我鼻尖处散发出彻骨的花香。露珠在它的上方遥遥滴落下来，花便因自身的重量而前后翻地晃动。我伸出脖子，吻到了滴落着清凉露珠的白色花瓣。我把脸从百合那里挪开的一刹那，无意中瞥见了远处的天空，晨星正眨了眨眼睛。&lt;&#x2F;p&gt;
&lt;p&gt;这时我才意识到：百年已经到了！&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第二夜&quot;&gt;第二夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第二夜&quot;
   aria-label=&quot;Anchor link for: 第二夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;从和尚的屋子里退身出来，点着迷迷瞪瞪的纸灯笼，沿走廊回到自己的屋子。单膝跪在蒲团上，拨着灯芯时，灯花啪地一声溅落在朱漆的灯台上，一时间屋子里突然亮堂了起来。&lt;&#x2F;p&gt;
&lt;p&gt;隔扇移门上的画出自芜村 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 的手笔，黑黑的柳枝，或深或浅地随处勾描着，带有几份寒意的渔夫，斜戴着斗笠正行走在河堤上。挂在壁龛里的画轴上，是骑着狮子、驾云渡海的文殊菩萨 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 身姿。其余的香炉香合依然在暗处飘散着香气。寺院空旷清寂，显得了无生气。灯笼的圆影，投射在黑糊糊的天花板上，乍一仰脸，看上去像是活物似的。&lt;&#x2F;p&gt;
&lt;p&gt;支楞着一条腿，左手掀起蒲团，朝右边一捅，那里早已安置妥贴了，于是将蒲团放回原位，在那上面舒坦地坐了下来。&lt;&#x2F;p&gt;
&lt;p&gt;你是个武士。武士悟不了道，那就说不过去了！和尚说。既是如此的开不了悟，看来你并不是什么武士！和尚说。不过是人间渣滓！和尚说。哈哈，发怒了！和尚说着。要是心里觉得窝火的话，那就拿出开悟的证据来！和尚说着，把头扭向一边。岂有此理！&lt;&#x2F;p&gt;
&lt;p&gt;到隔壁客堂间壁龛里的时钟敲响下一个时刻时，非给我开悟不可。开悟后，今夜还要入室独参。于是，将和尚的脑瓜与开悟作了番换算：开不了悟，就取不了和尚的小命。无论如何也得开悟。我是武士。&lt;&#x2F;p&gt;
&lt;p&gt;要是开不了悟，那就自刃。武士一旦受辱，就没有脸面再苟活于世了。体面地死去吧！&lt;&#x2F;p&gt;
&lt;p&gt;寻思之间，手不知不觉伸到了被褥下面，摸出——柄朱鞘短刀。猛力攥住刀把，除下朱鞘，寒冽的刀刃一下子在漆黑的屋子里闪出了光亮。这锋利无比的东西，像是要从手中嗖嗖逃逸而去似的。于是，杀气向一处凝聚，悉数集中到了刀尖上。望着这锋利无比的刀尖上，被无念无想地催成了针尖状，突然涌出了一它一家伙的冲动，身上的血朝右腕流去，攥着的刀柄变得潮黏，嘴唇也哆嗦了起来。&lt;&#x2F;p&gt;
&lt;p&gt;把短刀收回鞘中，掖在右腋下，然后盘腿趺坐，做了个全跏 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 。——赵州 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 曰无，无者何谓？我咬牙切齿地叫道：&lt;&#x2F;p&gt;
&lt;p&gt;这鸟和尚！&lt;&#x2F;p&gt;
&lt;p&gt;因死命紧咬口齿，滚烫的气息从鼻孔间粗壮地呼出。太阳穴疼作痛。眼睁得有平常日子加倍的那么大。&lt;&#x2F;p&gt;
&lt;p&gt;看清悬物，看得清灯笼，看得清榻米，和尚的秃脑瓜也历历在目，就连张着大嘴岔儿的嘲笑声，也听得一清二楚。混账和尚！非得把这秃脑瓜卸掉不可！开悟给他瞧瞧！用舌根念叨：无、无。虽念叨着无，却仍能闻到线香的气息，明明白闻得到线香，却偏偏要说无。&lt;&#x2F;p&gt;
&lt;p&gt;攥紧拳头，冷不防礅地朝自己脑袋打去。接着，臼齿咬得咯咯作响，汗水从两腋下流出，脊脊变得木棍似的僵硬。膝盖接缝处突然作痛起来，伸屈着膝盖磨琾道，到底怎么回事？但就是痛，真要命！怎么也开悟不了。刚以为要开悟了，痛感便马上袭来。气恼。万念俱灰。窝心透了。眼泪潸然落下。真想横下心来，对准巨岩撞去，让骨肉统统碎成一堆齑粉。&lt;&#x2F;p&gt;
&lt;p&gt;虽则如此，仍忍者。仍不动画地趺坐着，将难以忍受的苦恼盛在胸间闷着。虽说这苦恼焦灼地鼓动起体内的肌肉，像是马上要从汗毛孔中喷涌而出，但却四处受窘，找不到一处导泄口，是处在这么一种残酷之极的状态。&lt;&#x2F;p&gt;
&lt;p&gt;就在当儿，我的头脑变得爽枣所思起来。灯笼，芜村的画，榻榻米，壁龛里的隔板，看上去全是若隐若现，似有却无、无却似有的样子。说起来，便是眼前空无一物，只是大喇喇地坐着。正寻思着，隔壁客堂间的时钟铛地一声敲响了。&lt;&#x2F;p&gt;
&lt;p&gt;我恍然想起，右手立时攥住了短刀。时钟敲响了第二下。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第三夜&quot;&gt;第三夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第三夜&quot;
   aria-label=&quot;Anchor link for: 第三夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;我做了这样一个梦。&lt;&#x2F;p&gt;
&lt;p&gt;背上驮着个六岁的孩子。确实实是我的儿子。好生奇怪的是，他的眼睛不知什么时候瞎了，推了个青光光的和尚头。我问他，眼睛是什么时候弄坏的？他回答道，什么时候呀，早就瞎喽！说话的声音虽说还是个孩子，但措辞完全像个大人，而且是一种与大人平起平坐的口气。&lt;&#x2F;p&gt;
&lt;p&gt;左右都是绿田。路很窄。鹭的影子不时浮现在夜色中。&lt;&#x2F;p&gt;
&lt;p&gt;“这走的是去庄稼地的路哩。”他在背上说。&lt;&#x2F;p&gt;
&lt;p&gt;“你怎么知道？”我转过脸去问道。&lt;&#x2F;p&gt;
&lt;p&gt;“你没听见鹭在叫？”孩子回答道。&lt;&#x2F;p&gt;
&lt;p&gt;于是，果然，鹭叫了两声。&lt;&#x2F;p&gt;
&lt;p&gt;虽说驮着的是自己的儿子，我还是感到有几分害怕。我闹不清背着这个孩子走下去，会出现什么样的情况，得找个地方把他搁下才是。我朝前面寻索，夜色中发现了一片很大的丛林，倒是个好去处。我刚这么一寻思，背上就发出了一声冷笑。&lt;&#x2F;p&gt;
&lt;p&gt;“笑什么？”&lt;&#x2F;p&gt;
&lt;p&gt;孩子没回答，只是问道：“爹，沉吧？”&lt;&#x2F;p&gt;
&lt;p&gt;“呵，不沉。”我答道。&lt;&#x2F;p&gt;
&lt;p&gt;“马上就要变沉的！”他说。&lt;&#x2F;p&gt;
&lt;p&gt;我默不作声地向那片丛林走去。路曲折蜿蜒，很不规则，要走出这片田野不像想像中的那么容易。走了会儿，路径岔成了两股，我在路的分岔处站下，稍稍歇了口气。&lt;&#x2F;p&gt;
&lt;p&gt;“该有块石头竖在这里的。”小家伙说。&lt;&#x2F;p&gt;
&lt;p&gt;果真，一块八寸见方的石碑竖立着，高可及腰。碑的左边镌刻着“日之窪” &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 。虽然夜色昏暗，但这几个红字却看得清清楚楚。字是那种蟛蜞腹般的红色。&lt;&#x2F;p&gt;
&lt;p&gt;“往左边走，行么？”小家伙命令道。朝左边看去，前面丛林的深重阴影，正从高高的天空朝我们泼头倾泻下来。我有点踌躇。&lt;&#x2F;p&gt;
&lt;p&gt;“甭担心！”小家又说。我硬着头皮向丛林走去。明明是个瞎子，却什么都清楚，我一边在心里暗中寻思，一边顺着两条道中的一条，渐渐挨近树林。“眼晴瞎了，有多不方便呀！”背上的孩子说。&lt;&#x2F;p&gt;
&lt;p&gt;“有人背你还不琄？”&lt;&#x2F;p&gt;
&lt;p&gt;“让您背着，真对不起。但就是不能遭人欺侮，就连自己的亲爹，也不能让他欺侮我！”&lt;&#x2F;p&gt;
&lt;p&gt;我也不由地感到腻烦起来。紧了紧脚步，只想赶快去丛林里把他搁下丁事。&lt;&#x2F;p&gt;
&lt;p&gt;“再稍稍走上一程就明白了。——正好也是这么个夜晚！”孩子在背上像是自言自语地说道。&lt;&#x2F;p&gt;
&lt;p&gt;“什么？”我紧张万分地出声问道。&lt;&#x2F;p&gt;
&lt;p&gt;“是什么，你还不清楚？”孩子反嘲似的回答说。不知何故，我很乐意地作出——副十分知情的神情，但显然是毫不知情。只隐隐觉得，好像是这么个夜晚，觉得再稍稍朝前走几步就会真相大白，真相大白了就麻烦了，得赶在真相大白之前快把这孩子扔下才行。我越发紧了紧脚步。&lt;&#x2F;p&gt;
&lt;p&gt;雨从前一晌就下起来了。路渐渐变得暗起来。像是做梦。只是背上粘着个毛孩子，这孩子就像一面不会漏掉一星半点事实的镜子，熠熠闪烁，照和润悉着我全部的过去、现在和未来。更何况这是我自己的儿子，而且且是个瞎子。这真叫我受不了。&lt;&#x2F;p&gt;
&lt;p&gt;“到丁，就是这儿！正好是在那棵杉树底下！”&lt;&#x2F;p&gt;
&lt;p&gt;孩子的声瘖，在雨中听起来显得格外地清晰。我不由地停下了脚步。不知不觉间已来到了丛林当中。相距一间屋子开外的漆黑之物，确如孩子所言，是一棵杉树。&lt;&#x2F;p&gt;
&lt;p&gt;“爹，就在那棵杉树的底下！”&lt;&#x2F;p&gt;
&lt;p&gt;“哦，是吧。”我不由自主地应了声。&lt;&#x2F;p&gt;
&lt;p&gt;“是文化五年辰年吧？”&lt;&#x2F;p&gt;
&lt;p&gt;没错，好像是文化五年辰年的事。&lt;&#x2F;p&gt;
&lt;p&gt;“你杀我，距今正好一百年！”&lt;&#x2F;p&gt;
&lt;p&gt;话音刚落，我的脑子里立时醒悟到了这样一个场景：距今一百年前的这个昏黑的夜晚，就在这棵杉树下，我杀了一个双目失明的人。我原来是个杀人凶犯！刚意识到这一点，背上的孩子便骤然间变得像石地藏菩萨一般地沉重起来。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第四夜&quot;&gt;第四夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第四夜&quot;
   aria-label=&quot;Anchor link for: 第四夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;床泛着幽黑的亮光。角落里，老爷子 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 就着一方食案，正独自饮酒，下酒的菜看像是酱炖的。&lt;&#x2F;p&gt;
&lt;p&gt;随酒一杯杯落肚，老爷子的脸变得通红通红，并且光泽红润得找不到一处皱纹，惟有丛生的——把白胡子，表明他是个上了岁数的老人。我虽是个孩子，却很想弄明白这老爷子到底有多大岁数了。正巧，提着水桶来屋后长竹管下汲水的老婆婆，用围裙拭着手问道：&lt;&#x2F;p&gt;
&lt;p&gt;“大爷，您高寿多少？”&lt;&#x2F;p&gt;
&lt;p&gt;老爷子吞咽着满嘴的酱炖菜肴，若无其事地答道：&lt;&#x2F;p&gt;
&lt;p&gt;“多少岁数？早忘啦！”&lt;&#x2F;p&gt;
&lt;p&gt;老婆婆用细长的和服衣带绞着拭过的手，站在一旁望着老爷子的脸。老爷子朝碗般大的酒盅里斟上酒，饮下，然后从白胡子间长舒出一口气。于是，老婆婆问道：&lt;&#x2F;p&gt;
&lt;p&gt;“大爷，您府上是哪里？”&lt;&#x2F;p&gt;
&lt;p&gt;老爷子收住长长了一半的气，说：“肚脐里边！”&lt;&#x2F;p&gt;
&lt;p&gt;老婆婆把手插进细长的和服衣带里边，又问：&lt;&#x2F;p&gt;
&lt;p&gt;“去哪里呢？”&lt;&#x2F;p&gt;
&lt;p&gt;于是，老爷子又往饭碗般大的酒盅里斟上酒，饮下，像刚才一样地舒了口气说：&lt;&#x2F;p&gt;
&lt;p&gt;“去那边！”&lt;&#x2F;p&gt;
&lt;p&gt;“一直朝前？”&lt;&#x2F;p&gt;
&lt;p&gt;就在老婆婆发问的当儿，舒出的气息呼地一声穿过隔扇移门，打柳树底下，直奔河滩而去。&lt;&#x2F;p&gt;
&lt;p&gt;老爷子走出屋外。我也从后面跟了出去。老爷子的腰间耷拉着一只小小的瓢箪，悬在肩头的方匣垂到腋下。穿着浅黄的紧腿裤和浅黄的坎肩儿，惟有布袜是正黄色的，看上去像是皮制的一般。&lt;&#x2F;p&gt;
&lt;p&gt;老爷子笔直地来到柳树下。柳树下有三四个孩子。老爷子笑着从腰间拽出一万浅黄色手巾，像捻纸绳似的把它捻得又细又长，放在当中，然后，绕手巾画了个大——个圈，最后，从肩头悬着的匣子里取出——支卖糖人常用的那种铜笛来。&lt;&#x2F;p&gt;
&lt;p&gt;“眼睛一眨，手巾儿就会变成蛇，瞧好喽，瞧好喽！”&lt;&#x2F;p&gt;
&lt;p&gt;他翻来覆去地念叨。&lt;&#x2F;p&gt;
&lt;p&gt;孩子们死命地瞅着那手巾。我也一起瞅着。&lt;&#x2F;p&gt;
&lt;p&gt;“瞧好喽，瞧好喽，好不好？”老爷子吆喝着吹起笛子，沿圆圈转起圈来。我一心门思瞅着那手巾，但手巾却纹丝不动。&lt;&#x2F;p&gt;
&lt;p&gt;老爷子又会儿子突然止住了笛声，然后后肩头悬着的匣子，稍稍撑住手巾的脖颈，随手往里边一扔。&lt;&#x2F;p&gt;
&lt;p&gt;“往里边这么一搁，就会在匣子里变成蛇。这就让你们瞧，这就让你们瞧！”老爷子这么念叨着，直往前走去。他穿过柳树，下了又窄又长的小路。我因为心里惦念着想看蛇，便随他来到小道上，一路走去。老爷子不时地说：&lt;&#x2F;p&gt;
&lt;p&gt;“马上就成！”“变蛇喽！”一边不停地走着。后来，他唱了起来：&lt;&#x2F;p&gt;
&lt;p&gt;“马上就成，变蛇喽。&lt;&#x2F;p&gt;
&lt;p&gt;“肯定会变，吹笛喽。”&lt;&#x2F;p&gt;
&lt;p&gt;唱着，唱着，终于来到了河岸上。既没有桥，也没有船，该在这儿瞅那匣子里的蛇了吧？我刚这么思忖着，老爷子却哗啦啦地朝河心趟起水来。起初，水只有没膝深，渐渐地，从腰间至胸脯都浸没了，消失在水中。但老爷子仍在唱：&lt;&#x2F;p&gt;
&lt;p&gt;“水深深，天黑喽！&lt;&#x2F;p&gt;
&lt;p&gt;“笔直向前走喽！”&lt;&#x2F;p&gt;
&lt;p&gt;一边唱着，一边义无反顾地笔直走去。然后，胡子，脸，头巾，全都消失不见了。&lt;&#x2F;p&gt;
&lt;p&gt;我思衬道，待老爷子上了对岸，该会让我看到他的蛇了吧？我站在芦苇簌簌作响的地方，独自一人久久地等候着。可老爷子始终没有上岸。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第五夜&quot;&gt;第五夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第五夜&quot;
   aria-label=&quot;Anchor link for: 第五夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;我做了这样一个梦。&lt;&#x2F;p&gt;
&lt;p&gt;不管怎么说，那也该是一段十分古老的故事了，想来当是邻近神治时代的一段往昔之事。因为背运，我吃了败仗，被人生擒，强拽着蹲在了敌军大将的面前。&lt;&#x2F;p&gt;
&lt;p&gt;那年头，人长得武高武大，并且都是长髯簇生。紧系的皮带上，挂着一柄棍子似的剑。马看上去直接就是一段未经修饰的粗大藤蔓，既没有上漆，也没有打磨，朴素自然之极。&lt;&#x2F;p&gt;
&lt;p&gt;敌军大将右手攥住弓的正中，弓支着秣草，就这么落坐在横卧着的酒瓮上。瞅一眼他的脸，只见鼻子的上端，是左右两道连成一片的粗眉。那年头，当然不会有剃须刀这一说。&lt;&#x2F;p&gt;
&lt;p&gt;我是俘虏，自然没资格看座，就在秣草上盘腿坐着。脚下踞着一双大草履。那年头的草履，统很高，站起来够得着膝盖，统留留几穗编剩下的草，垂挂着，走起路来，一步三颤，起一种装饰的作用。&lt;&#x2F;p&gt;
&lt;p&gt;敌军大将用篝火照着我的脸，喝问，是想死还是想活？这是当时的一种惯例，不管是准，大致都会对俘虏这样发问的。回答想活，表示打算降服之意，若回答想死，便是表示决不屈服，我只答道：想死！敌军大将把支在秣草上的弓掷向一边，嗖地抽出挂在腰间的那柄棍子般的剑来。篝火趁着风势，火焰从一旁向我舔来。我将右手枫叶般地展开，掌心朝向敌军大将，高举过目。这是表示稍安勿躁的一种手势。大将把那柄粗重的剑咔嚓一声收回了鞘中。&lt;&#x2F;p&gt;
&lt;p&gt;即便足这样的时刻，心里也还是存有着眷爱。我说，在我死去之前，很想看一眼自己所思念的女子。大将说，那就等到黎明鸡啼。在得鸡啼之前把那女子唤到这里来，要是到鸡啼仍来不了，那就看小上她一眼，我就被杀了。&lt;&#x2F;p&gt;
&lt;p&gt;大将一动不动地坐在那里，眼里，很想看一眼自己所思念的女子，我盘起大草履，在秣草上等待着女子的到来。夜渐渐地深了。&lt;&#x2F;p&gt;
&lt;p&gt;篝火不时地发出崩塌的声响，每崩塌一下，火焰便惊慌失措似的斜向大一边，浓黑的眉毛下，大将的眸子熠熠生辉。于是，不知是谁走了过来，将新树枝扔进熊熊之火中，霎时间，篝火发出了劈劈啪啪的爆响。这像是要把黑暗反弹回去似的，勇猛而泼辣。&lt;&#x2F;p&gt;
&lt;p&gt;此时，女子曳出拴在屋后小橡树上的一匹白马，将马系前石抚摸了三遍，然后飞身跃上高高的马背。这是一匹既没有鞍也没有镫的裸马。女子修长的双腿一叩马腹，马便一溜烟地奔驰起来。不知是哪个起来给篝火添柴加柴的，瞥见了遥远天空中依稀薄明的曙色，吗正迎着这微明的曙色，从黑地里飞驰而来，马喷出的鼻息，犹如两道火柱，就是这样，女子修长的双腿仍一刻不停地叩着马腹。疾驰的马蹄声在天宇间回荡着，像是发像风幡一样拖在黑夜里，即便如此，还是没能赶到那点着篝火的地方。&lt;&#x2F;p&gt;
&lt;p&gt;于是，漆黑一片的路旁，突然响起了鸡鸣声。女子身子后仰，猛力勒住手中的缰绳，马的前蹄踏地镌刻在了坚硬的岩石上。&lt;&#x2F;p&gt;
&lt;p&gt;喔——鸡又鸣呜了二声。&lt;&#x2F;p&gt;
&lt;p&gt;女子吁地惊叫一声，紧攥着的马缰一下了松弛了下来。马四膝跪地，与背上的骑者一道朝前倒在了地上。岩下是万丈深渊。&lt;&#x2F;p&gt;
&lt;p&gt;马蹄的印迹至今仍残留在岩石上。那几声鸡啼原是恶魔探女学的鸡叫。只要这马蹄的印迹仍镌刻在岩石上，天探女就是我共戴天的怨敌。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第六夜&quot;&gt;第六夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第六夜&quot;
   aria-label=&quot;Anchor link for: 第六夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;听说运庆 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 塑像，我趁着散步前去观看，不想在我到达那里之前，早已围着一大群人，在那里七嘴八舌地品评着了。&lt;&#x2F;p&gt;
&lt;p&gt;距山门前五六开间处，是一株巨大的赤松，枝干斜逸，遮庇着山门的瓦脊，直向遥远的苍天伸展开去。松的翠绿与朱漆的山门互为映衬，相得益彰，并且松的位置也长得恰到好处，像是有意要不挡住山门左端的视野似的，斜劈而过，尽力朝上，一直到屋脊之上，方才铺天盖地探出头来，不知怎么的，让人觉得它身上有一种古风犹存的味道，也可以说是镰仓时代的古风。&lt;&#x2F;p&gt;
&lt;p&gt;但围观者跟我一样，都是明治时代的人。车夫还以车夫居多。多半是在路旁招徕客人，无聊得难以自遣，才聚到这儿来的。&lt;&#x2F;p&gt;
&lt;p&gt;“好大的家伙呀！”有人说。&lt;&#x2F;p&gt;
&lt;p&gt;“比生养一个活人还要费心费力哩！”也有人说。敢情？正寻思间，一个男子嚷道：“嗨！是金刚哪！现如今还兴这金刚么？嘿，真是那么回事呢？我原以为金刚只有古时候才雕呢！”&lt;&#x2F;p&gt;
&lt;p&gt;“好强壮呵！虽说古时候人部长得强壮，但从没听说有像金刚这般强壮的，说什么时候也要比日本武尊 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 来得强壮哩……”另一位男子这样说道。这男子掀起后衣襟，也没戴帽子，看来是个无知无识的汉子。&lt;&#x2F;p&gt;
&lt;p&gt;运庆庆动着凿和锤，毫不在理会围观者的众说纷纭，连头都不回一下。他攀在高处，手中的凿子不住地在金刚的脸部游移着。&lt;&#x2F;p&gt;
&lt;p&gt;运庆头上扣顶小黑帽，闹不清是不是素袍的两只肥大袖管绑在脊背上。这身穿着打扮实在陈旧过时，跟一旁嗡嗡围观议论着的人比，显得极不协调。我不禁一边观看，一边感慨，运庆何以要活到如今这样的世道呢？这是多么不可思议的事！&lt;&#x2F;p&gt;
&lt;p&gt;但运庆却专注地雕刻着，看上去丝毫也不觉得自己有什么不可思议和古怪的。一位年轻男子抬头望着运庆的神态，侧过脸来朝我称赞道：“到底是运庆呐！目中根本没有你的位置。天下英雄，惟有金刚和他自己，是这样的一副神态，真了不起！”&lt;&#x2F;p&gt;
&lt;p&gt;我觉得这话说话得有趣，遂瞥了他一眼。那年经男子忙又一番声地说道：&lt;&#x2F;p&gt;
&lt;p&gt;“瞧这运臂和指挥的把式，自是到了从心所欲不逾矩的妙境！”&lt;&#x2F;p&gt;
&lt;p&gt;此刻，运庆正往金刚粗眉上端一寸间横着凿去，复将凿刀竖过来，自上而下斜着一路锤凿下去。刚觉得坚硬的木头被雕削了一下，厚厚木屑随应声飞出，金刚鼻翼翕张作发怒状的鼻子侧面便突然浮现了出来。这刀法果然无拘无束，并且不带半点迟疑，屈和昂扬。&lt;&#x2F;p&gt;
&lt;p&gt;“运筹好生漫不经心，屈指却得如此心应手。”因为感慨之极，我也不禁自言自语起来。于是，刚才那位年轻人便接口道：&lt;&#x2F;p&gt;
&lt;p&gt;“什么呀！这眉和鼻才不是用凿刀雕出来的呢！那不过是把潜埋在木头里的跟这一模一样的眉毛和鼻子用凿刀和锤子挖将出来罢了，就像把石头从泥土里挖出来一样，没错，准是这么回事！”&lt;&#x2F;p&gt;
&lt;p&gt;听了这话，我不禁寻思道，雕刻真是这么回事？若真是如此，那谁不会呢？于是急着也想雕个金刚出来，便退出围观，火烧火燎地赶回家中。&lt;&#x2F;p&gt;
&lt;p&gt;从器具箱里取出凿刀和铁锤，来到屋后。前些口了让一场暴风刮倒的青冈栎，本想用作柴薪的，已让樵夫锯成一截截的，堆了一大堆，正合适适手。&lt;&#x2F;p&gt;
&lt;p&gt;我挑出最大的一截，摆开架势雕了起来，但不走运，并未发现金刚。第二次也不凑巧，也没挖到。第三次还是没找到金刚的影儿。我将堆着的柴薪逐一雕去，但没有一截是藏有金刚的。我终于醒悟到，明治的木头里，是怎么也不可能潜埋着金刚的。于是，运庆何以要活到今天，这里的道理，也便恍然有所领悟了。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第七夜&quot;&gt;第七夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第七夜&quot;
   aria-label=&quot;Anchor link for: 第七夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;好像是乘坐一条巨船上。&lt;&#x2F;p&gt;
&lt;p&gt;船日夜兼程，吐着黑烟，劈浪前行，没个停歇的时候，发出惊人的轰鸣，但却不知它要驶向何方。惟有烧火箸一般通红的日头，从波涛深处钻出，升高高高的帆柱的头顶上，刚在那儿挂了片刻，便又在不知不觉间，抄到了巨船的前头，然后，终于又像烧火箸似的，嗤地一声，沉落到波涛深处去了。每当此时，遥遥的前方，湛蓝的波涛会沸腾成一片深红。于是，巨船挟着惊人的轰鸣，前去追赶日头的行踪，但却永远也追赶不上。&lt;&#x2F;p&gt;
&lt;p&gt;一天，我攥住船夫问道：&lt;&#x2F;p&gt;
&lt;p&gt;“船是在西行么？”&lt;&#x2F;p&gt;
&lt;p&gt;船夫脸上露出诧异的神色，瞅了我半天，然后反问道：&lt;&#x2F;p&gt;
&lt;p&gt;“为什么？”&lt;&#x2F;p&gt;
&lt;p&gt;“因为好像在追逐着落日。”&lt;&#x2F;p&gt;
&lt;p&gt;船夫呵呵笑了笑，然后走开了。&lt;&#x2F;p&gt;
&lt;p&gt;“日之西行兮，尽头为东，此岂非真？日出东隅兮，故里为西，此岂非真？身在波涛之上兮，枕楫而眠，漂流复漂流。”&lt;&#x2F;p&gt;
&lt;p&gt;击节吟哦着，来到船头，只见聚集了众多的水手，正在来回扯动着粗大的帆索。&lt;&#x2F;p&gt;
&lt;p&gt;一种虚妄之感猛地攫住了我。不知道什么时候才能登岸，也不知道船在驶向何方，只有船吐黑烟、劈浪前行，才是惟一确凿无疑的事。波高浪阔，湛蓝得无际无涯，有时也呈紫色。惟有行驶着的船的四周，永远飞溅着雪白的泡沫。一种虚妄之感攫住了我。与其乘坐这样的船上，还不如纵身跃入海中死去的确痛快，我这样思衬道。&lt;&#x2F;p&gt;
&lt;p&gt;同船共渡的旅客可真不少，差不多都是些外国人，但神情各异。一位倚着船栏的女子不住声地啜泣着，拭眼的于帕是白色的，身上穿的是一袭印花布料的西服。见到这女子我才意识到，心怀感伤者，这船上原来还不止我一人。&lt;&#x2F;p&gt;
&lt;p&gt;一大晚上，我在甲板上独自眺望星星，有个外国人走了过来，问我知道不知道天文学。我正穷极无聊得只想以死丁此残生，自然无须知道什么天文学，便不作答理。于是，他便对我讲起了金牛宫上面的七星故事，然后又告诉我，星辰和大悔，无非都是上帝的作品，末了又问我信不信仰上帝。我望着星空，不作答理。&lt;&#x2F;p&gt;
&lt;p&gt;有时走进船上的客厅，便会有衣饰华丽的妙龄女子，正面朝着你在弹奏钢琴，她的身旁，则站着一位高大英俊的男子在引吭高歌，开阔开阔得惊人的嗓子。两人对自己之外的世界完全视而不见，就连自己也乘坐在船上这件事，似乎也早已遗忘在了九霄云外。&lt;&#x2F;p&gt;
&lt;p&gt;我愈来愈感到虚妄无聊，终于决定前去赴死。于是，一天夜晚，趁周围没有人影时，我毅然决然纵身跃入海中。可是——就在我的脚蓠甲板、与船分手的一刹那，突然冒出了一种对生命的顿惜之意。若能在心里终止这一赴死之念那该多好呀。然而，已经迟了。不管情不情愿，我都得坠身于大海之中。眼见得船越显越高，我人虽已与船分离，但脚底海水却并非轻易而易举，只是无物可供抓攀，只得听任身体一步步接向海水，纵使怎样提缩双腿，那也无济于事。海水漆黑一片。&lt;&#x2F;p&gt;
&lt;p&gt;这当儿，船一如既往地吐着黑烟，从我身边驶了过去。我这才醒悟到，即使是一条不知驶向何方的船，那终究还是乘坐上面的好呀，但这样的醒悟为时已晚，我只得带着无限的懊悔和恐怖，朝漆黑的波涛静静坠去。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第八夜&quot;&gt;第八夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第八夜&quot;
   aria-label=&quot;Anchor link for: 第八夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;一踏进理发铺子的门槛，身穿白褂、正聚成一堆的三四个伙计，异口同声地吆喝：欢迎光临。&lt;&#x2F;p&gt;
&lt;p&gt;站在铺子正中环视了一眼。是间四方形的屋子。窗子对开在两垛壁上，余下的两垛壁挂着镜子，数一数，该是六块。&lt;&#x2F;p&gt;
&lt;p&gt;我在其中的一块前坐了下来，于是，屁股底下发出一声欢快的呻吟，委实是一把坐着舒心的椅子。镜子里清晰无比地映着我的脸。脸后面的窗和那斜刺里的账台格子，也一一收入眼底。格子里边空无一人。窗外过往的行人，自腰以上的部位，也历历在目。&lt;&#x2F;p&gt;
&lt;p&gt;只见庄太郎携着一个女人打这儿经过。真闹不懂，这庄太郎不知几时买了顶巴拿马草帽 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#10&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，扣在了头上。那女人也不知几时结识的，两人一副春风得意的样子。正待仔细瞅瞅那女人的脸，不想一闪就过去了。&lt;&#x2F;p&gt;
&lt;p&gt;卖豆腐的吹着喇叭打过来了，喇叭紧紧贴在嘴上，双颊像让蜂蜇了似的肿胀起来，肿胀得不能再肿胀地打窗外过去，让人瞅着直替他担心，觉得像是让蜂蜇了一辈子似的。&lt;&#x2F;p&gt;
&lt;p&gt;艺者来了。没化妆，岛田髷 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#11&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 的底部松散着，像是没系牢在头上似的；她一脸迷迷瞪瞪，脸色很难看，一副惨兮兮的模样。她向某人点头打招呼，可对方始终没在镜子里露面。&lt;&#x2F;p&gt;
&lt;p&gt;于是，身穿白褂的大个儿男子来到了我身后，手持剪子和梳子端详着我的脑袋。我拈了下稀疏的胡子，问他，人怎么才能出人头地呢？白颜色男子一言不发地用手中的琥珀色梳子，轻轻地叩了叩我的脑袋。&lt;&#x2F;p&gt;
&lt;p&gt;“嗯，怎么才能让头脑也变得出类拔萃呢？”我问。白颜色男子依然一言不发地咔嚓咔嚓剪了起来。为了不漏过任何一个映进镜子里的身影，我一直睁大着眼，可剪子每剪一下，便会有黑发应声飞落，怕有头发掉进眼里，我不得不阖上了眼。于是，白颜色男子这样问道：“掌柜的，大门口来了个卖金鱼的，看不看？”&lt;&#x2F;p&gt;
&lt;p&gt;我说不看。白颜色男子遂不再言语，不住舞动着剪子。突然间，有人高喊丁声“危险！”我猛地睁开眼睛，刚从白颜色男子的衣袖下瞥见了自行车的轮子和人力车的车辕，脑袋便让白颜色男子的双手摁住，使劲拨向了一边。自行车和人力车便从眼前消失了。剪子咔嚓咔嚓作响。&lt;&#x2F;p&gt;
&lt;p&gt;不一会儿，白颜色男子绕到我身侧，在我耳根边剪了起来。因为没有头发在前一面飞落，我放心地睁开了眼。栗子糕、糕糕糕糕的吆喝声便立时在那头响了起来。卖糕糕的正手持小木杵，拿腔拿势地朝白里春，按着节律在捣糕。我只是在做孩子时给见过卖栗子糕，此时很想看个究竟，究竟卖糕糕的就足迟迟不在镜子里露面，只听得到捣糕的声音。&lt;&#x2F;p&gt;
&lt;p&gt;我竭尽所有的视力注视着镜子的一角。于是，账场格子 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#12&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 里边，不知什么时候已坐进了一位女子。是位体格壮硕的女子。长着稠密的浅色眉毛，头发绾成左右两个发髻，穿一袭黑缎子衬领的服夹袄，以支着一条腿的坐姿，在核计着钱钞。钱钞像是十元的面额。女子垂下长长的睫毛，双唇紧抿，努力地点着钱额，她点得够快的，但钱钞像是怎么也点不完似的。叠在膝头的钱钞也就不下过是一百张的样子，这一百张的钱钞，再怎么点也就不过是一百张。&lt;&#x2F;p&gt;
&lt;p&gt;我茫然地凝视着那女子的脸和那十元票面的钱钞。于是，白颜色男子便大声冲着我耳根说道：“洗头喽！”这可是个良机！我从椅子上站起身，扭头朝账台格子那边望去，但格子里却空无一物，既没有女子，也没有钱钞。&lt;&#x2F;p&gt;
&lt;p&gt;付了账，走出大门，只见门口左侧摆着五只小巧玲珑的木桶，桶里盛着好多多金鱼，也有带斑纹的，有瘦的，也有肥的。桶后面蹲着卖金鱼的。卖金老鱼的两手托腮，目不转睛地盯着眼前摆着的金鱼，纹丝不动，对熙来攘往的喧闹，几乎毫小加以理会。我停下，久久望着这卖金鱼的，在我盯着他看的这段时间里，他竞没有挪动一下身子。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第九夜&quot;&gt;第九夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第九夜&quot;
   aria-label=&quot;Anchor link for: 第九夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;不知怎么的，世界变得嘈杂起来，这样子马上就要打起仗来。让人觉得就像是一匹因火灾而流离失所的裸马，没日没夜，暴躁不安地绕着宅地转圈，而步卒们正没日没夜、步履杂沓地追赶着它似的。因而射手的家显得寂静无声。&lt;&#x2F;p&gt;
&lt;p&gt;屋里，是三岁的孩子和母亲。父亲不知上哪儿去了。父亲是在没有月亮的夜晚去了哪儿的。母亲在榻榻米上套上草履，戴了黑头巾，从厨房门出去的。走时，母亲手里的六角纸灯，照出狭长的一片黑夜，照见了篱巴前的那棵老桧树。&lt;&#x2F;p&gt;
&lt;p&gt;父亲一直没有回来。母亲每天都要问三岁的孩子，“爹呢？”孩子随什么也不吱声，闷上老半天，才像是回答说：“那边。”即便母亲再问他“什么时候回来？”孩子仍是笑着答道：“那边。”这时，母亲也笑了笑。然后，翻来覆去教他说丁不知多少遍的“马上就回来！”可孩子只记住了“马上”两个字。有时问他：“爹在哪儿？”他也会回答说：“马上。”&lt;&#x2F;p&gt;
&lt;p&gt;入夜后，四邻一片寂静，母亲又重系上腰带，将鲏皮鞘的短刀插在腰带里，用细细的背带将孩子背在背上，悄无声息地出了小门。母亲总是穿着一双草履，孩子常常是听着这草履声上睡着的。&lt;&#x2F;p&gt;
&lt;p&gt;穿过土墙鳞次栉比的屋宅，朝西而下，缓缓下到坡道的尽头处，是一株巨大的银杏。以银杏为标记，右拐，穿过一道巷子，那深处便是石鸟居 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#13&quot;&gt;13&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 。一边是庄稼地，一边是山竹林，在两相夹峙中来到鸟居前，鸟居，是一片幽阔的杉树林，踩着铺路石冉冉上前二十来开间，便到了——座古老神社拜殿的石阶下。刷成深灰色的香资柜上方，垂下一根粗粗的钟绳，要是在白天，可以看到钟的一旁高悬着八幡宫的匾额。八幡宫的八字，仿佛两两相对的两根鸽子羽毛，是用一种非常有题的书体写成的。此外，还挂着其他各式各样的匾额。这多半是旌表那些独自实践了人们憧憬向往的目标的诸侯家臣的，上面附着他们的名字。偶尔也有是囚为向神社献纳了长刀的。&lt;&#x2F;p&gt;
&lt;p&gt;打鸟居下走过时，总有林枭在杉树梢头叫着。然后是粗糙的草履发出吧唧吧唧地哪声。在神社的拜殿前歇住脚，母亲先是敲了敲钟，接着马上蹲下身子，拍手合十。此时，林枭多半会突然变得缄默无声。然后，母亲便专心致志地祈求起丈夫的平安无事来。在母亲的心目中，自己的丈夫是个了不起的人，所以，向弓箭之神的八幡，许下如此超绝一切理由和价值判断的最为恳切的心愿，想必是不会被置之不理的。&lt;&#x2F;p&gt;
&lt;p&gt;有时，孩子让敲得很响的钟声给吵醒了，看到四周漆黑一团，便马上在背上惊哭起来，母亲一边口中喃喃祈求着什么，一边晃动身子哄着背上的孩子，于是孩子往往会安静上片刻，接着却又越哭越凶起来。但母亲横竖就是不起身。&lt;&#x2F;p&gt;
&lt;p&gt;替丈夫的命运祈求了一通之后，这才解开细细的背带，把背上的孩子转到前面，卸了下来，两手抱着，走上拜殿，脸颊紧贴在孩子的手颊额摩挲着说道：“乖孩子，就等上一会儿。”说着挣长细细的背带，缚住孩子，把他拴在了拜殿一端的栏杆上，然后，走下石阶，在二十开间左右的铺路石上来回回，拜神祈愿上一百回 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#14&quot;&gt;14&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 。&lt;&#x2F;p&gt;
&lt;p&gt;被绑在拜殿里的孩子，在黑暗中，就着细带留下的那点余地，在宽廊里来回走动着。此时此刻，对母亲说来，便是极其快乐的一个夜晚了。可是，让拴在那儿的孩子那么哇哇一哭，母亲便会心烦意乱起来，拜庙许愿的脚步也会随之变得急促，变得气喘欲绝，万般无奈之际，只得走上拜殿，然后再重新做上一百次的拜庙许愿。&lt;&#x2F;p&gt;
&lt;p&gt;无数个夜晚，让母亲如此苦心焦虑、彻夜不眠担忧着的父亲，早在前些年就让浪人 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#15&quot;&gt;15&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 给杀死了。&lt;&#x2F;p&gt;
&lt;p&gt;这段悲惨的故事，是在梦里，从母亲那里听来的。&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;h3 id=&quot;第十夜&quot;&gt;第十夜&lt;a class=&quot;zola-anchor&quot;
   href=&quot;#第十夜&quot;
   aria-label=&quot;Anchor link for: 第十夜&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;庄太郎遭女人挟持后，第七天的晚上突然回到了家，一下子倒在了床上，健得知这个消息后，便赶了过去。&lt;&#x2F;p&gt;
&lt;p&gt;庄太郎是镇上第一美男子，人极为善良正直，只是有一佯嗜好，那就是一到傍晚，便会头戴巴拿马草帽，坐在水果铺的门口，端详起过路女子的脸来。他就嗜好这个，一直乐此不疲，除此之外，也就找不出能像这样有特色的举止了。&lt;&#x2F;p&gt;
&lt;p&gt;过路女子稀少的时候，他就不朝川流不息的大街看，而是端详着水果。水果品种繁多，篓子里盛放着色彩鲜艳的水蜜桃、苹果、枇杷、香蕉，煞是诱人地排成两列。庄太郎端详着水果篓，说，好漂亮呵！又说，做买卖的话，就得挑水果铺这样的行当。话虽那么说，可他依然头戴巴拿马草帽，游手好闲着。&lt;&#x2F;p&gt;
&lt;p&gt;这颜色好！有时他也这样品评柚子。但却从来不曾掏钱买过水果，当然也就从来不曾吃过，光是称赏着色泽而已。&lt;&#x2F;p&gt;
&lt;p&gt;一天傍晚，有个女子突然站丁在铺子的门口，看上去年龄有身份，穿着十分端庄，那和服的色泽很合庄太郎的心意，女子的容颜也让庄太郎吃惊不小。于是，他便脱下那顶宝爱的巴拿马草帽，殷勤地卜前招呼，女子指着大的一篓说，就要这个，庄太郎忙不迭地把那篓水果提了过去。于是，女子试着提了提，说了声，好沉呵。&lt;&#x2F;p&gt;
&lt;p&gt;庄太郎本来就闲着，加上又是个十分直爽的人，便接口说，那我来帮着提到府上去吧，说着，随那女子一起离开了水果铺子，再也没有回来。&lt;&#x2F;p&gt;
&lt;p&gt;这庄太郎，也太无忧无虑了，这一下可怎么得了哟！亲戚朋友们嚷嚷着，乱作一团，到了第七天的晚上，他却突然回来了，于是，前来打听他究竟去了什么地方的人，差不多快把家里的门槛给踩破了。坐电车去山里了，庄太郎回答说。&lt;&#x2F;p&gt;
&lt;p&gt;那自然是坐了很长的一段电车。听庄太郎说，一下电车，人就已经踏在了一片原野上，原野异常辽阔，不管朝哪儿望去，都只能看到茂盛的绿草。他和那女子在草原上——路走去，突然来到了一处断崖上。女子对庄太郎说，你从这里跳下去！庄太郎朝崖底下望去，虽看得清断崖，却见不着崖底。庄太郎巴拿马草帽，再三谢绝那女子的提议。于是女子又说，若是横不下心来跳崖的话，那就让猪来舔你，怎么样？庄太郎平生最讨厌的就是猪和云右卫门 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#16&quot;&gt;16&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; ，但一想到生命不可更替，终究还是决定暂不跳崖。说话间便有一头猪喷着响鼻出现在了眼前，庄太郎只得用手中细筷榧枝作成的手杖击打猪的鼻尖，猪嗷嗷叫着，打着滚，转身而逃，坠下了绝壁，庄太郎刚舒了口气，另一头猪的大鼻子已蹭到了他的身上，庄太郎不得不再一次扬起手杖，那猪便嗷地一声，一个倒栽葱，滚进了洞穴中。接着又一头猪出现了。这时，庄太郎忽然留了下神，朝前瞅了一眼，只见绿色草原遥远的尽头处，有数不胜数的好几万头猪，正成群结队，一字排开，喷着响鼻，朝站在断崖绝壁上的庄太郎袭来。庄太郎满心惶恐，却又无计可施，只得挥舞榧枝杖的手杖，照准挨近来的猪鼻尖，不敢有半点懈怠地一打去。不可思议的是，只要手杖一触碰到猪鼻尖，猪便会滚落进崖谷深处。庄太郎酸了一眼，只见成群结队坠下深不见底的断崖绝壁的反而是猪。将如此数不胜数的猪逐入谷底的是我么？一想到这个，庄太郎既觉得自豪，又觉得害怕。但猪群仍络绎不绝地袭来，就像一片黑压压长了腿的乌云似的，踏开绿草丛，喷着响鼻，没完没了地袭来。&lt;&#x2F;p&gt;
&lt;p&gt;庄太郎抖擞起殊死的勇气，挥杖击打丁七天六夜的猪鼻尖，但终于精疲力竭，手变得柔弱无力，最终倒在了断崖绝壁上，只得听任猪的啃舔。&lt;&#x2F;p&gt;
&lt;p&gt;待庄太郎讲到这儿，健才插嘴道：所以说么，老瞅女人，是不会有好果子吃的！庄太郎也觉得这话说话得在理。但健接着向庄太郎开口索要那顶巴拿马草帽。&lt;&#x2F;p&gt;
&lt;p&gt;庄太郎最终没能获救。那顶巴拿马草帽，想必已经戴在了健的头上。
（明治四十一年七月——八月）&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;日本女性中美人的脸型之一。明治二十四年，漱石就读东京帝大期间，曾记述过前往医院求治沙眼时，在休息室与一女子相遇的情景。据镜子夫人（漱石夫人）口述、松冈让笔记录的《回忆漱石》：“细高挑儿的身材，长脸姣美一女子——这便是人们常常挂在嘴边的那种可人意意的女子。”《从此以后》中的三千代，也即同属此一胎型者。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;与谢芜村，江户时代画家、俳人。少时擅长绘画，文人画造诣深，绘画之余则作俳句，与松尾芭蕉齐名。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;即渡海文殊，一种佛教画，描绘文殊菩萨以狮子为座骑，率领随从乘云渡海的情景。文殊，即文殊师利的略称，偕同普贤，侍列于释尊的左侧，系司掌智慧之菩萨。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;4&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;4&lt;&#x2F;sup&gt;
&lt;p&gt;跏，通常写作趺，全跏，即结跏趺坐之意，与半跏相对的一种坐禅方式。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;5&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;5&lt;&#x2F;sup&gt;
&lt;p&gt;赵州，唐代禅僧。《无门关》第一则赵州狗子条：“赵州和尚，因有僧问：狗子还有佛性也无？州云：无。”《无门关》作者为南宗无门慧开（1183—1260）。亦称《禅宗无门关》。狗子云云无这一公案，为该书之根本思想。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;6&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;6&lt;&#x2F;sup&gt;
&lt;p&gt;日之窪，旧时东京麻布区一名地，分北日下窪町与南日下窪町，位于今港区六本木五、六丁目一带。）三字，右边是“堀田原”（位于旧时北日下窪町，明治年间贵族堀田氏邸址附近一带。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;7&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;7&lt;&#x2F;sup&gt;
&lt;p&gt;漱石写于明治三八、三十九年的《断片》：“老人之 DESCRIPTION（描写）独自朝道路的某处走去。在 TAVERN（小酒馆）向旁人打听，其人是何年何月来此地的。回答是，不知道。去到河边。《断片》：“下到河里，快步向前趟去，去到河水淹过头顶，也未见其上岸。”也有人认为，这是漱石留学英伦时所留下的一段记忆。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;8&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;8&lt;&#x2F;sup&gt;
&lt;p&gt;日本镰仓时代著名佛像雕刻师，生卒年不详。定朝五代孙康庆之子。文治、建久年间（1185—1195），参与东大寺、兴福寺的修复，亦以雕刻东大寺南大门金刚著称于世。安元二年（1176）至贞应二年（1223），是其创作力最为旺盛的时期。）在护国寺（指东乡音羽町（今文京区大丘四丁目十一番号）之新义真言宗丰山派大本山。天和元年（1681），德川五代将军纲吉之母桂昌院所建。其后发生过变迁。亦称“音羽护国寺”。漱石时代的护国寺金刚雕像，已非创作力最为旺盛时期的作品。）的山门上雕刻金刚（又名哼哈二将。--左--右，守护在佛寺门口的一对力士。手中所持之金刚杵，单叉者独钻，三叉为三钻，五叉则为五钻，用以表示破除烦恼之菩提心，由铁或铜铸成。金刚身强力壮，作怒目而视状。其中一个咧着嘴，另一个则紧闭双唇。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;9&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;9&lt;&#x2F;sup&gt;
&lt;p&gt;日本武尊，神话人物，神武天皇之子（82—113），遵父皇之命平定西方的熊袭国与东方的虾夷国，留下了许多的传说，班师途中，在征伐近江伊吹山的叛乱者时患病，死于伊能褒野。“日本武尊”这一尊号，即是此次被讨伐的熊袭国主帅川上枭，临死之际，感铭其武勇而呈献的。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;10&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;10&lt;&#x2F;sup&gt;
&lt;p&gt;巴拿马草帽，由南美出产的一种草叶编织而成。明治二十五年起开始流行，日清战争后几乎人手一顶；当时日本使用的此类草帽多产自台湾，带有强烈的异国情调。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;11&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;11&lt;&#x2F;sup&gt;
&lt;p&gt;岛田髷，日本女性传统发型之一，也常见于艺者装束。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;12&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;12&lt;&#x2F;sup&gt;
&lt;p&gt;商店里记账算账的地方，由低矮门矮圈围而成。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;13&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;13&lt;&#x2F;sup&gt;
&lt;p&gt;鸟居，日本神社的大门，类似中国的牌坊&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;14&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;14&lt;&#x2F;sup&gt;
&lt;p&gt;日本拜神祈愿的一种仪式。日文为“御百度参り”，也称“御百度请”或“御百度回り”。祈求神佛者，每天上神社或寺庙，在一定距离间来回往复参拜神佛一百回。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;15&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;15&lt;&#x2F;sup&gt;
&lt;p&gt;浪人，离开主家，失去俸禄的武士。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;16&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;16&lt;&#x2F;sup&gt;
&lt;p&gt;云右卫门，即桃中轩云右卫门（1873—1916），日本风靡一时的民间三弦乐师、说唱艺人。原名冈本峰吉。气度雄健庄重，曲目多歌颂武士道。志贺直哉小说《清兵卫与瓢箪》中的主人公，即取材于少年时代的云右卫门卫门。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
    </item> </channel>
</rss>
