<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/feeds/rss-style.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>希莫Simon</title>
        <link>https://sirmo-blog.pages.dev/</link>
        <description>闲静则观书，欲知而望海；希莫Simo 的网站、文档、笔记</description>
        <lastBuildDate>Thu, 20 Aug 2026 10:01:30 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Astro-Theme-Retypeset with Feed for Node.js</generator>
        <language>zh</language>
        <copyright>Copyright © 2026 Simon</copyright>
        <atom:link href="https://sirmo-blog.pages.dev/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[推荐尝试阿里云 ESA]]></title>
            <link>https://sirmo-blog.pages.dev/posts/aliyun-esa-review/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/aliyun-esa-review/</guid>
            <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[阿里云和腾讯云都推出了自家的免费 CDN 服务，个人尝试后认为二者都有属于自己平台的优势，如果感兴趣以及想要在国内获得较为不错的 CDN 体验并且预算不是很足或者想要白嫖的话，二者都建议尝试一下，选择最适合自己的那个进行使用]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>重要</p>
<p>2025 年 12 月 27 日：下面的发帖领取代金券个人只建议你有空折腾并且你愿意用国际站（要有外币卡 + 海外号码接码 + IP一致注册）的话就参加一下</p>
<p>不然现在国内阿里云 ESA 也推出了和 EdgeOne 一样的免费套餐，无需发帖审核折腾，直接上号领取即可，我是直接切换到国内的 ESA 了……</p>
</blockquote>
<p>我当前站点是采用了 EdgeOne 加速的，效果也挺不错的，而且目前 EdgeOne 国际站不需要做任务，都可以免费领取四五个加速名额（一个名额对应一个域名），哪怕没有备案的站点接入 EdgeOne，加速后的效果也是比较理想的：</p>
<p>&lt;img src="/_astro/20250902164334354_Z2HbNG.webp" alt="EdgeOne 加速效果（未备案域名）" loading="lazy" /&gt;</p>
<p>EdgeOne 加速效果（未备案域名）</p>
<p>虽然只提供了 2 个 IP，而且国内有部分地区是解析失败的，但是凑合着还是能用，毕竟完全免费而且不限流量还是挺好的，而且国内访问效果比 Cloudflare 要好上一些（但是综合来讲，如果条件允许或者主要面向的是国际服务的话，那么 CF 依旧是首选，因为 EdgeOne 是限速的，还有其他的一些问题，比如有时候可能会被打？或者回源请求莫名其妙攀升让源站负载升高？不过个人使用的话还是可以尝试的）</p>
<p>不过如果采用的是备案后的域名接入的话，那么效果就会理想很多：</p>
<p>&lt;img src="/_astro/20250902164714345_Z28MXif.webp" alt="EdgeOne 加速效果（备案域名）" loading="lazy" /&gt;</p>
<p>EdgeOne 加速效果（备案域名）</p>
<p>可以看到不但给的解析 IP 更多了，而且效果也显著提升了。所以如果站点面向的主要是内地地区，而且有备案域名的话，EdgeOne 还是值得考虑的（不过截至 2025年09月02日，似乎每个国内站的账号只能持有一个免费域名额度，也就是只能加速一个域名，不能做到像国际站那样可以领取多个套餐）</p>
<p>但是我在使用 EdgeOne 的时候，又恰好碰到了隔壁的阿里云也在免费推广他们的 ESA 服务，也是主打一个不限量，而且相较于 EdgeOne，阿里云这边似乎对速度并没太过于严格的限制（EdgeOne 单线程限制 500 KB 的速度），而且也是不需要做任务就可以免费使用（国内站有流量限制 50GB，国际站没有，后续主要是说国际站的 ESA），但是如果做了他们的发帖任务，也就是：</p>
<blockquote>
<p>在任一社交平台或论坛博客（Linux.do、V2EX.com、X.com、LowEndTalk.com、您的个人博客、哔哩哔哩、即刻App、小红书、facebook.com、youtube.com）上发布一篇推荐阿里云ESA的帖子，并包含以下内容：</p>
<ul>
<li>带有一张包含ESA元素的图片（控制台截图、速度测试图、产品宣传图等）</li>
<li>带有免费领取链接（这个链接似乎不是固定的，想要了解点击右边链接就可以跳转到详情界面）：<a href="http://s.tb.cn/e6.0Fu67m">http://s.tb.cn/e6.0Fu67m</a></li>
</ul>
<p>那么就可以解锁中国内地加速（备案域名才可以解锁），还可以每周发帖额外不限次数领取 Pro 版。</p>
</blockquote>
<blockquote>
<p>不过需要值得注意的是，想要完全领取权益，需要有一个阿里云国际站的账号，而想要创建这个账号，需要准备大陆外的国家或者地区的手机号码和一张可以进行全球支付的卡（Visa 或者万事达等）</p>
<p>而国内账号参与这个任务似乎无法获取完整的权益，但是也可以参与，而且推荐参与，因为「只需按要求发帖即可<strong>每周</strong>都领取1个月基础版的等值代金券（代金券还可抵扣超量流量费用），高阅读量的推文更有机会获得高级版」</p>
<p>这说明如果使用的是国内 50GB 加速限制的版本，只要进行发帖，就可以获得代金券，用于抵扣流量费用</p>
<p>所以如果无法解决国际站注册手机号和付款用的卡（会在绑卡的时候扣除 1 美元进行验证，通过后会返还），并且只是个人网站的简单加速，最后喜欢使用阿里云的产品的话，也是建议尝试使用的（阿里云 ESA 有免费的 WAF，EdgeOne 没有）</p>
<p>但是，如果对流量有更高要求，那么，EdgeOne 更适合。总之，按照自己的情况来选择即可，不需要纠结太多（二者都可以采用传统的 CNAME 方式接入，无需修改域名的 DNS 解析服务器），哪个方便而且更贴近自己的业务需求就选择哪个，而且双方都有属于自己的优势</p>
</blockquote>
<p>然后我便尝试在小红书上面发了帖子，领取了 Pro 权益，并且将自己的一个站点接入到了国际站的 ESA，效果也是十分不错（已备案域名，未备案效果不是很理想，建议 EdgeOne）：</p>
<p>&lt;img src="/_astro/20250902171106835_1HTula.webp" alt="阿里云 ESA 加速效果" loading="lazy" /&gt;</p>
<p>阿里云 ESA 加速效果</p>
<p>可以看到，解析域名达到了 107 个<code>（2026 年 01 月 04 日留言：解析域名数量似乎砍了，好像只有 70 个左右了）</code>，个人认为在这一点上，还是比 EdgeOne 更有优势</p>
<p>当然，解析是一回事，实际用户体验又是另外一回事儿了，限于时间和篇幅，在此我便不多赘述（其实也是因为手头没有东西和较好的方法去测试，而且我相信网上已经有了不少的测评，毕竟阿里和腾讯都是大厂，二者都“不约而同”地推出了免费套餐，当然就要比较比较咯！）</p>
<p>所以还是要根据自己的实际情况来进行挑选，甚至可以将不同的域名接入到不同的 CDN 厂商进行使用，以满足更多的要求</p>
<p>不过最后，因为这个是一个推荐帖，所以在帖子的最后，如果你感兴趣的话，我也建议去尝试一下阿里云的 ESA</p>
<p>比如可以将自己的一些笔记或者图片托管在阿里云的 OSS 中，然后通过 ESA 进行私有的回源访问然后进行分发的话，OSS 流量走的是阿里云内网传输，因此是完全免费的（注意事项写在下面的括号内）</p>
<p>也就相当于我们有了一个 50GB 每月的免费的 CDN 分发流量<code>（国际站基础套餐就是不限量咯，不过要求 OSS 要在非大陆地区，如果使用的是国内的阿里云 ESA 和 OSS，那么会产生回源 CDN 流量和请求，这个是需要按量付费的，没有减免；国际站目前是回源流量限免，请求好像是 5 亿次每月的免费额度，如果不放心记得多看看官方文档）</code>，个人使用我认为还是绰绰有余的（毕竟 50GB 以内的 OSS 存储费用真的不高，国内站 40GB OSS 单存储费用才 9 元一年，我的思源笔记内容就是托管在阿里云 OSS 上的。不过前提是笔记大小不要太大，因为外网下行传输流量也是按量计费的，我才不到 100MB 内容，因此没有什么影响）</p>
]]></content:encoded>
            <author>Simon</author>
        </item>
        <item>
            <title><![CDATA[创建部署一个 Quartz4 网站吧！]]></title>
            <link>https://sirmo-blog.pages.dev/posts/create-quartz-site/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/create-quartz-site/</guid>
            <pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[详细介绍如何从零开始创建和部署 Quartz4 静态网站的完整教程，包括环境配置、项目设置、个性化定制和服务器部署等全流程步骤]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>重要</p>
<p>这篇文章之前是写在我的文档站的，但是那个站点现在已经关闭了</p>
<p>所以其中的部分内容可能不是那么准确</p>
<p>不过怎么说呢，Quartz4 还是很适合我这样的不太想折腾的人的，有可能后面还会使用也说不定</p>
<p>毕竟维护一个站点还是有些麻烦的，Quartz4 和 Obsidian 搭配的真不错，省心省力……</p>
</blockquote>
<h2>说在前面</h2>
<p>部署属于一个自己的 <a href="https://quartz.jzhao.xyz">Quartz 4</a> 站点并不是一件难事，而且你可以在网上找到不少的教程，我也是参考了其中一两篇然后部署起来的。</p>
<blockquote>
<p>我选择使用这个框架是因为：</p>
<p>无后端支持，纯静态的站点，可以直接部署在 Github Pages 或者托管在 Cloudflare Pages 上；原生支持 Obsidian 的链接语法与文件结构（这个对我而言暂时没有什么作用，因为我用 Typora 写作的，但是能够完美支持 Obsidian 就意味着可以很好地支持和渲染 Markdown 语法）。</p>
<p>而且这个框架有完整的开源社区支持、结构清晰、样式也足够现代，也有 SEO 优化，还是很不错的，开箱即用。我的主站用的是 Vitepress，而且用的是一个不错的主题，其实比这个框架还要轻量和精简不少，也有完善的 SEO 优化，效果应该是比这个站点要好不少的，但是奈何 Quartz 4 自带的主题挺漂亮的，我懒得去优化主站的主题了（因为也不错，极简风格我也喜欢），所以就尝试用这个了。</p>
<p>补充：因为个人的一些调整，目前这个网站对应的仓库已经关闭了……</p>
</blockquote>
<p>因此我也写一个简单的笔记，来记录一下创建和发布的一些步骤。</p>
<h2>准备工作</h2>
<p>首先你需要有：</p>
<ul>
<li>一台能够正常上网和运行的电脑（MacOS、Windows、Linux 操作系统都可以）</li>
<li>较好的网络环境（用于下载安装 Node.js 和用 NPM 安装需要的包，以及配置 Git）</li>
<li>一个开发用的 IDE（我使用的是 VSCode）</li>
</ul>
<p>不同操作系统的 Node 安装方式有所区别，一个可能是统一的安装法是从 Node.js 的 <a href="https://nodejs.org/zh-cn/download">官网</a> 来获取下载的安装包，然后进行安装。如果你不需要进行其他的对版本有特点要求的开发的话，那么这个方法是完全足够的，而且也足够快也直观。不然，你有其他的高级需求，还是建议选择自己平台对应的包管理器进行安装和管理：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3c8f82d1f3.webp" alt="image-20250716193145263.webp" loading="lazy" /&gt;</p>
<p>具体的安装配置方式可以自行去搜索一下，网上有很多的教程，找一个新一些的就好了。不使用包管理器的方式进行安装一般需要涉及配置环境变量的操作，务必寻得一个详细的教程进行安装，以减少出错的可能性。</p>
<p>同理，对于 Git 的安装，也建议你在网上寻找一个详细、带图且发布时间较新的教程。正确地配置好 Git 有助于我们顺利地通过后续的步骤，降低出现意外情况的可能性。</p>
<h3>确认你的 Node.js 版本</h3>
<p>我使用的是 Fnm 来管理我的 Node 版本，Quartz 4 项目对 Node 的版本要求比较高，至少需要 <code>v22.16.0</code> 的版本（官方项目要求如此，社区的第三方分支暂不清楚；而且项目根目录有 <code>.node-version</code> 文件，要求使用 <code>v22.16.0</code> 版本的 Node，如果你的版本比这个高的话，直接删了这个文件或者将其中的 <code>v22.16.0</code> 改成你的 Node 版本避免出现版本问题 ），在安装配置好 Node 之后，可以在终端用 <code>node -v</code> 命令来查看自己环境当前默认的 Node 版本：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cc10b1cb0.webp" alt="image-20250716173330372.webp" loading="lazy" /&gt;</p>
<p>确认自己的 Node 版本满足要求后，我们继续去到下一步。</p>
<h3>使用官方的仓库模板</h3>
<p>官方的模板仓库地址为：<a href="https://github.com/jackyzha0/quartz">https://github.com/jackyzha0/quartz</a></p>
<p>我们直接 Fork 或者使用这个项目作为模板创建一个新仓库，需要先登录自己的 Github 账号再进行操作：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cc367b7d7.webp" alt="image-20250716173907700.webp" loading="lazy" /&gt;</p>
<p>我选择的是 Use this template ，如果你没有什么其他的需求，我建议你也选择这个而不是选择 Fork（一句话总结就是：Fork 是为了给原项目做贡献而创建一个带有完整提交历史的关联副本，而 Use this template 则是用一个全新的、独立的仓库来快速启动一个新项目，且不包含原有的提交历史）。</p>
<p>填写好必要的信息之后就获得了一个属于我们自己的仓库，我们就可以通过 <code>git clone</code> 加上自己的仓库的 Git URL 来将我们的仓库内容拉取到本地进行修改了。</p>
<p>你可以通过上图中显示的绿色的 Code 按钮来获取到你自己仓库的 HTTPS 链接，当然也推荐你使用 SSH 的方式进行 Clone，不过后者需要你事先在自己的电脑上配置好 SSH 密钥，并且将其添加到自己的 Github 账号中完成验证，这样才可以正常使用。这一步如果你有疑问或者不太熟悉，可以暂时跳到此文的 “同步、构建和部署” 部分，或者在线搜索查询相关的资料来获取帮助。</p>
<h3>打开项目和配置依赖</h3>
<p>使用自己的 IDE 找到并打开我们上一步 Clone 下来的文件夹，然后在自己的 IDE 中打开终端，确认 Node 的版本无误之后，使用 <code>npm install</code> 命令来安装好需要的依赖包。这里需要注意的是，这个命令需要在项目的根目录下执行，也就是我们 Clone 下来后，进入文件夹后的那个层级。</p>
<p>稍等一段时间，如果网络通畅的话，一般一分钟左右就可以完成包的安装，然后会输出一些提示，一般不是红色，有可能会包含黄色的提示（是一些简单的英文单词，你可以很容易判断是否安装成功，如果没有把握，可以复制后询问 AI）。如果下载很慢或者最后出现了红色的报错信息什么的，建议可以配置一下镜像源，再执行命令：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;npm&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; config&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; set&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; registry&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; https://registry.npmmirror.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>上面这个命令是设置 Npm 下载包时，使用的镜像源为淘宝的镜像，这个镜像网站是用的较多的。</p>
<blockquote>
<p>如果你需要恢复官方镜像源，可以执行：</p>
<p><code>npm config set registry https://registry.npmjs.org/</code></p>
<p>也可以通过 <code>npm config get registry</code> 命令查看当前设置的镜像源信息</p>
</blockquote>
<p>如果不想设置镜像源，但是想要在这次安装的时候走一次镜像，可以使用</p>
<p><code>npm install --registry=https://registry.npmmirror.com</code></p>
<p>这可以实现仅在当次命令执行的时候修改下载源，而不会修改任何配置。</p>
<p>下载安装完毕依赖包后，如果你觉得不够保险，或者在刚开始没有设置镜像源就进行下载的时候出现了网络问题导致了报错输出，那么你可以重新运行一次新的命令，也可以多运行几次，直到最后提示你没有任何包被添加和修改为止。</p>
<h2>开始属于自己的写作</h2>
<p>在处理好上面的步骤之后，应该是可以获得一个和我类似的目录结构的：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cc5c1bb73.webp" alt="image-20250716194618089.webp" loading="lazy" /&gt;</p>
<p>我使用的是 VSCode，如果你显示的样式和我的不太一样，不必担心，我是自己添加了一些插件美化过的，只要文件什么的类似即可（这里我说“类似”，是因我不清楚未来官方结构是否会有变动，总之，如果和我的有很大差别，建议阅读官方文档），因我之前看到的一篇写于几个月前的教程，他的文档是写好放在 content 目录下的，但是我在进行写作的时候，文档是放在 docs 目录下的（因此，在后面我使用的启动命令同样也是基于这个目录的）。</p>
<p>没有什么意外的话，建议你也将写好的文章放到 docs 这个目录下（你可以先将这个目录下的文件全部清空，只留下一个 <code>index.md</code> 文件即可，这个 <code>index.md</code> 就是我们网站的首页，你可以在里面写一些话给第一次来到你网站的读者）：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cc79abd07.webp" alt="image-20250716195033426.webp" loading="lazy" /&gt;</p>
<p>文件夹可以使用中文命名，Quartz 4 能够处理好，但是文章命名建议不要使用中文，会导致意外的后果。可以使用英文大小写、分隔符来进行命名，扩展名都是 <code>.md</code> ，也就是标准的 Markdown 格式（你也可以采用其他的软件进行写作，比如和我一样使用 Typora 也是可以的，如果觉得入正价格太贵，可以去买单设备授权版——有些商家会拆出来单独售卖；至于学习版，这个就靠各自手段了）。</p>
<p>写作随意，只要在最开始添加一些必要的内容即可，官方支持的字段不少，我没有那么多追求，仅用了两个字段：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#22863a;--shiki-dark:#85E89D"&gt;title&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#22863a;--shiki-dark:#85E89D"&gt;description&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>第一个是文章的标题，第二个是对这个文章的简要概述。在英文输入法的状态下写好需要的属性字段和冒号之后，不要忘记先打一个空格，再切换到中文输入法状态进行输入，不然可能会导致一些意外的问题。</p>
<p>后面的内容就照常书写即可，为了美观，一级标题建议保留不使用，从二级标题开始，右侧的大纲默认支持显示到三级标题（当然也可以自行修改），因此如果你想要展示文章的大纲，建议不要使用四级标题等标题。</p>
<p>写好内容之后就和平常一样的，比如你使用的是 Obsidian，就将文章在这个 docs 目录下放好，或者和我一样创建个自己喜欢的文件夹，然后将文章放进去就好。Quartz 4 会自动处理好这些内容，并在最后渲染出来的前端界面的左侧规整地展示出来。</p>
<p>然后我们可以在根目录下使用命令 <code>npx quartz build --serve -d docs</code> 来在本地启动一个开发服务器看看效果。在我们使用这个命令后，Quartz 4 会进行一系列的处理，最终给出一个图示的地址，我们可以按住键盘上的 Ctrl 按键（MacOS 上是 Command 按键），然后用鼠标左键点击一下这个链接，就会自动打开浏览器给我们展示出来渲染好的界面：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cca9ce9da.webp" alt="image-20250716200109627.webp" loading="lazy" /&gt;</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3ccc0b0a3b.webp" alt="image-20250716200407438.webp" loading="lazy" /&gt;</p>
<p>你可以在界面的左边看到你写好的文章的标题，像往常浏览网页那样用鼠标点一点，就可以跳转到对应的文章，你可以看看显示效果正不正常。如果你的图片是采用和我一样的相对链接插入的方式，并且统一放在对应文章所在目录同一级的 assets 文件夹下的话，那么可能会碰到图片加载失败的问题。因此建议使用图床来管理自己的图片，不但可以避免一些问题，而且也便于其他人浏览（一般情况下，你选择和我一样将图片打包放在一起的话，不使用 CDN 会导致用户在访问你的网站的时候图片加载慢或者加载不出来，比较影响阅读体验。而图床大部分都会采用 CDN 达到更好的图片优化和加载体验）。</p>
<p>但是如果你确定自己需要采用本地相对引用（Typora 和 Obsidian 都接受这样的设置，你可以很轻松地在软件的设置中找到对图片的处理方式，耐心找找然后启用就可以了。启用之后你便可以在写文章的时候和往常一样，直接复制粘贴即可，软件会自己处理好引用）的方式来展示图片的话，你需要修改一下配置文件，这个部分我放在后面会提到。</p>
<p>至此，我们便完成了从设置开发环境到新建项目和添加自己的文章并查看效果的简易流程。</p>
<h3>按需修改配置文件</h3>
<p>当我们将自己的文章整齐放好后，我们自然就要考虑修改配置文件以满足我们自己的需求。比如需要将站点默认语言修改为中文，修改网站的标题等等。我自己的修改幅度不大，因此我只能简单讲讲我修改了什么，如果你有更多的额外的修改需要，我建议可以看看 <a href="https://quartz.jzhao.xyz">官方文档</a> 有没有提及到配置的方式，或者你可以借助较为智能的 AI 助手来深入检索和理解这个框架的代码，然后给出合适的修改建议（建议使用 Claude 3.7/4 系列模型，或者 Gemini 2.5 Pro 模型，或者 GPT-4.1 及以上模型来达到更好的效果。辅助插件可以选择 Roocode、Cline、KiloCode，也可以使用 Cursor 等软件或者 Gemini CLI、Claude Code 等工具）。</p>
<p>找到项目目录下的 <code>quartz.config.ts</code> 文件，打开它，然后我们会看到不少代码内容。不用担心，我们仅仅修改其中的一部分代码即可，不会对这个框架造成什么不好的影响，毕竟个性化是我们的追求，而且配置文件本身就是为了让我们进行个性化编辑的。</p>
<p>这个文件中的属性和值的语法是 <code>属性: 值</code>，你会看到不少值的部分是加了一对英文状态的双引号或者单引号的，这个是固定的语法。有些没有加，一般是布尔类型，也就是我们常说的 True 和 False。还有一些用了括号和花括号，甚至是其他的一些奇妙的符号……不用担心，我们只要修改其中的内容就好，那些奇奇妙妙的符号，我们都不要去动它即可（如果你确实无从下手，可以问问 AI，把你需要修改的部分复制发给它，然后告诉它你想要怎么改，AI 一般会给出正确的代码，然后你可以直接粘贴或者按照 AI 的指引进行修改即可。IDE 会智能检查，如果有问题会给出提示，也不用担心看不懂，问问 AI 就好了）。</p>
<p>我修改的属性如下 <s>（你也可以直接访问<a href="https://github.com/yunxinx/ZZZ">我的 Github 仓库</a>，找到我的配置文件，就可以看到我的修改情况）</s>：</p>
<ul>
<li><code>pageTitle</code>：这个部分的修改会影响网站左上角的显示文字。我将其修改为 Some Notes，所以你可以看到我的网站左上角显示的文字就是这个。</li>
<li><code>analytics</code>：修改这里可以使用自己需要的网站统计方式，支持的种类不少，包括但不限于 Google 分析、Umami、Bing 分析等。我使用的是微软提供的完全免费的 Clarity 服务，你也可以去 <a href="https://clarity.microsoft.com">官网</a> 很轻松地申请属于自己的 ID，然后按照我的样子填写好即可。</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;analytics&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;  provider&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"clarity"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;  projectId&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"&lt;这里替换为你获取到的 ID，左右两边的尖括号不要保留，只留下 ID 在双引号中即可&gt;"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;},&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<ul>
<li><code>locale</code>：如果你写的是中文站点，那么需要将这个属性的值修改为 <code>zh-CN</code>，如果是英文站点则保持默认的 <code>en-US</code> 即可。其他语言的站点则需要修改为对应的属性，你可以将鼠标移动到前面的属性上面去，IDE 会智能提示可以写的值，填入自己需要的即可。</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cd4b3f87f.webp" alt="image-20250716220731510.webp" loading="lazy" /&gt;</p>
<ul>
<li><code>baseUrl</code>：修改为你打算部署的域名。比如我的这个网站的域名是 <code>notes.134257.xyz</code>，那么我写的就是这个（现在不是了，现在我写的是 <code>notes.yueweix.com</code> ）。</li>
<li><code>colors</code>：我仅仅调整了浅色和深色模式下的主题色，将浅色主题的白色添加了一些灰度，深色模式主题的黑色添加了一些蓝色，我认为在一定程度上优化了阅读体验，阅读效果柔和了不少。尤其是深色模式，不是那么强烈的黑白对比度，在有些时候可以让我们阅读起来更舒服一些。</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;colors&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;  lightMode&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    light&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#f1f1f1ff"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;, &lt;/span&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;// [!code highlight]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    lightgray&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#e5e5e5"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    gray&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#b8b8b8"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    darkgray&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#4e4e4e"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;    ......&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;  darkMode&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    light&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#1b1b1f"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;, &lt;/span&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;// [!code hl]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    lightgray&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#393639"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    gray&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#646464"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;    darkgray&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"#d4d4d4"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;    ......&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;},&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<ul>
<li><code>markdownLinkResolution</code>：如果你碰到了我在前文提到的图片是相对引用的方式插入的，Typora 和 Obsidian 都可以正常显示，但是预览网站的时候却无法正常加载的问题的话，则将这个属性值修改为 <code>relative</code> 即可。这个属性在下面部分，往下面翻一翻就可以找到，或者你可以使用 IDE 自带的搜索功能，一般情况下和浏览器的搜索快捷键是一样的，Windows 上是 Ctrl + F 按键，MacOS 则是 Command + F 按键，即可调出来搜索面板，搜索一下这个属性即可找到。</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;Plugin.&lt;/span&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;CrawlLinks&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  markdownLinkResolution: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"relative"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  openLinksInNewTab: &lt;/span&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;true&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}),&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>我仅仅修改了这些属性，在我看来这些修改已经可以满足我的需求。</p>
<p>除此之外我们需要注意一个叫做 <code>ignorePatterns</code> 的属性，我们可以看到这个属性的默认值是 <code>["private", "templates", ".obsidian"]</code>，这表明「Quartz 4」在构建的时候会忽略掉这三个文件夹，因此在写作的时候，我们应该避免将需要发布的页面放在 <code>private</code> 和 <code>templates</code> 这两个文件夹下。而 <code>.obsidian</code> 文件夹是假设你用的是 Obsidian 进行写作的，如果你使用 Obsidian 打开了 docs 文件夹开始写作的话，那么 Obsidian 会自动在打开的目录下生成一个这个默认隐藏的文件夹（因为这个文件夹名字的第一个字符是英文的点号，这表明这个文件夹是默认隐藏的，文件也是同理。如果不在操作系统中打开 “显示隐藏的文件” 这个选项的话，默认是不会显示的，但是在 IDE 中无论打不打开那个选项都会显示出来），这个文件夹同样是要忽略的。</p>
<p>我还修改了 <code>quartz.layout.ts</code> 这个文件中的一点点内容：</p>
<ul>
<li><code>links</code> ：修改这个影响的是每个页面的最底部显示的内容，我将其简单修改了一下，添加上了我的主站的链接，并且优化了一下原本的前端显示文字。</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;footer&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: Component.&lt;/span&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;Footer&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  links: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;    "Home Site"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"https://yueweix.com"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;    "Theme Github"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"https://github.com/jackyzha0/quartz"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;    "Theme Discord Community"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"https://discord.gg/cRFFHYye7t"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}),&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<ul>
<li><code>right</code> ：我注释掉了其中的 <code>Component.Graph()</code> 函数。这样我的网站右上角就不会显示关系图谱了，因为我觉得这个对于我的网站而言是多余的。我不是「Obsidian」的高级使用者，我仅仅是简单的写写文章而已。被注释的代码会被忽略掉，因为是给我们人类看的，不是实际的代码，因此我在需要注释掉的内容前面加上注释的语法，也就是两个英文模式下的正斜杠，就可以实现注释。</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;right&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;  // 移除掉右侧的关系图谱组件 // [!code hl]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;  // Component.Graph(), // [!code hl]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  Component.&lt;/span&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;DesktopOnly&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;(Component.&lt;/span&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;TableOfContents&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;()),&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  Component.&lt;/span&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;Backlinks&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;],&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<ul>
<li><code>left</code> ：在这个属性中，我添加了一个框架自带但是默认没有使用的 <code>Component.RecentNotes()</code> 函数，作用是在左侧显示我的最近写的 3 篇文章。建议是将这个函数放在 <code>Component.Explorer()</code> 函数下面一行，这样便可以将最近写的文章显示在左侧目录的下方，同时还使用了 <code>Component.DesktopOnly()</code> 函数包装，确保只在桌面端显示，在手机等移动设备上自动隐藏，避免因移动设备显示空间不足而导致的样式问题。</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;Component.&lt;/span&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;DesktopOnly&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;(Component.&lt;/span&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;RecentNotes&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  title: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"Recent writing"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  limit: &lt;/span&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;3&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<ul>
<li><code>afterBody</code> ：我在这个属性后面添加了一些内容，用于启用 Giscus 评论集成，具体的操作步骤可以参考<a href="https://quartz.jzhao.xyz/features/comments">官方文档</a>，按照教程获取到属于你自己的 ID 等内容之后，就可以参考官方文档下方给出的示例代码来启用自己的文章的评论功能。因为官方文档给出了详细的步骤，我便不在下方给出我自己的代码。</li>
</ul>
<p>最后我修改了 <code>README.md</code> 这个文件的内容，换成了我自己随便写的一些话。</p>
<p>这个文件中写的内容不会被显示到网站上，而是会显示在我们的 Github 仓库首页的下面，既是给别人看的，也是可以给自己看的。</p>
<p>至此，我们便完成了个性化的设置，让这个框架更加满足我们的要求。</p>
<h3>同步、构建和部署</h3>
<p>我们在写好自己的文章和修改好配置文件之后，不要忘记用 Git 进行保存的操作。</p>
<p>这一步可以使用命令行，也可以使用 IDE 给我们提供的图形化界面。但是在进行 Git 之前，我们需要设置好自己的用户名和邮箱，并且先生成好一个 SSH 密钥，绑定到 Github 我们的账户中后，才能进行后续的操作。这些操作在此便不详细展开了，可以自行去搜索一下，网上也是很多详细的教程，找一个新一点的教程一步步配置即可。或者你也可以参考一下我写的《1Password 接管 SSH 验证和 Commit 签名》这篇文章，里面也提及了如何添加 SSH 秘钥到自己的 Github 账号。</p>
<p>配置好必要的信息之后，我们就可以进行 Git 提交了，我们转到 IDE 提供给我们的源代码管理界面，可以看到一些我们修改过的文件（我以 VSCode 为例，如果你使用的是其他的 IDE 或者文本编辑器的话，以你的显示为准）：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cdaf328f9.webp" alt="image-20250716224138241.webp" loading="lazy" /&gt;</p>
<p>其中右边有显示字母：</p>
<p>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align="left"&gt;字母&lt;/th&gt;&lt;th&gt;表示的意思&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left"&gt;U&lt;/td&gt;&lt;td&gt;该文件还未被跟踪&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left"&gt;D&lt;/td&gt;&lt;td&gt;该文件已被删除&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left"&gt;M&lt;/td&gt;&lt;td&gt;该文件有被修改&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</p>
<p>这里仅仅说明了这三个比较常见的状态，我们可以不必深入理解。</p>
<p>我们只要关心的是这里列出来的文件是否确定是我们修改和删除过的即可，我们可以一个个点击这里列出来的文件，就会在右侧用差异化的方式显示出来我们的修改情况（红色表示删除，绿色表示增加）。检查确认无误之后，我们可以在最上面写一个消息。</p>
<p>这个消息是必须的，对于我们这种个人的项目，我们可以简单写写自己做了些什么即可，或者让 AI 为我们总结生成一个简短的消息就好。</p>
<p>最后我们点击提交，我们的 IDE 就会提示我们还有未暂存的更改，是否要提交，我们直接同意即可。因为我们已经检查过了，所以直接确认。</p>
<p>然后提交按钮会变成同步，我们再次点击一次，稍等片刻（如果网络通畅的话……），我们的这次改动就会同步到我们的 Github 仓库。我们登录自己的 Github 账号然后找到我们在最开始创建的那个仓库，就会发现我们的更改已经同步到云端上了，这样我们就不用担心本地数据保存问题了，因为我们的更改都完完整整保存在云端了。</p>
<p>那么我们便可以在本地开始构建我们的网站。</p>
<p>同样的在项目根目录打开终端（不用担心自己是不是在项目根目录，只要你通过 IDE 打开的文件夹是正确的，那么我们通过最上方的菜单栏直接打开的终端默认就是我们项目的根目录），然后输入命令 <code>npx quartz build -d docs</code> ，稍等片刻，我们就会看到构建完毕的提示：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cdccf15e9.webp" alt="image-20250716225431315.webp" loading="lazy" /&gt;</p>
<p>检查一下我们目录下是不是有个 public 文件夹，我们的构建输出内容都在这个文件夹下面（其实在我们最开始用命令启动开发服务器的时候，这个文件夹就已经生成好 了，我们再使用这个构建命令是为了确保这个文件夹下的内容是最新的）。</p>
<p>然后我们右键点击这个文件夹，选择 “在资源管理器中显示” 或者 “在 Finder 中显示” 或者类似的表述。就会弹出我们熟悉的文件管理器界面，然后我们将这个 public 文件夹下的内容全选后通过自己的压缩软件压缩为一个压缩包（其实也可以不压缩，根据个人情况来选择），然后将这个压缩包上传到我们的服务器网站的根目录下解压，保证这些内容都在服务器网站对应的目录下的根目录中即可。</p>
<p>如果你在服务器上使用的是 1Panel 或者宝塔这样的服务器运维面板的话，那么操作起来的流程是类似于下面的步骤的（我以 1Panel 为例）：</p>
<ul>
<li>登录到你服务器的 1Panel 后台中</li>
<li>确保已经安装好了需要的网站服务</li>
<li>在网站选项卡中新建一个网站</li>
<li>网站类型选择静态站点</li>
<li>保存后点击打开网站目录</li>
<li>然后将压缩包或者不压缩直接将那个目录拖动到上传窗口中，然后点击确认进行上传</li>
<li>上传完毕后，如果上传的是压缩包则右键进行解压，然后删除掉压缩包即可；如果直接是上传了文件夹，那么默认是不需要进行其他操作的，上传完毕即可</li>
<li>访问站点确认无误，左侧证书部分创建一个 Acme 账户 用于申请免费证书。然后点击申请证书，选择自己的网站，选择好自己创建好的 Acme 账户 然后其他的保持默认（申请方式我一般用 HTTP，你也可以保持默认），最后点击申请，稍等几十秒即可申请成功</li>
<li>重新回到网站选项卡，找到之前创建好的那个站点，进入配置界面，然后在HTTPS这一栏中启用，再在 SSL 选项 选择 “选择已有证书”，Acme 账户 选择好自己创建好的账户，然后下面的证书会自动匹配我们网站的域名（如果没有可以手动选择正确的），其他的都保持默认，左下角别忘记保存</li>
<li>重新访问我们的网站，发现已经成功配置好 HTTPS 访问</li>
</ul>
<p>至此，我们便完成了整个流程，你也获得了一个属于自己的 Quartz 4 站点。</p>
<p>最后的部署步骤我仅仅笼统写了个大概，因我目前的 1Panel 版本还是 V1 的，没有升级到 V2，而现在官方默认安装的版本是 V2 的，操作步骤可能和我的有些不同，为了避免出现差错，我便只写了基本流程，推测大体上是差不多的，如果没有把握，可以去找找其他人分享的步骤。</p>
<p>而使用宝塔或者纯自己用 Nginx 或者其他服务的情况，在此也不做补充了，各个平台有所不同，按照平台的要求来即可完成部署。当然你也可以参考<a href="https://quartz.jzhao.xyz/hosting">官方文档</a>，文档中详细提供了不少主流的平台的部署方法，如果你有托管或者部署的需求，那么还是建议看一下。</p>
<h3>一点补充</h3>
<p>值得一提的是，如果你在自己的服务器上部署好了静态网页，然后接入 CDN 的话，有概率出现在网站中点击文章链接，但是却返回 404 的情况。这个是个有趣的问题，当我们使用静态网站生成器（如 Quartz、Hugo、Jekyll 等）并配合 CDN 时，很容易遇到。</p>
<p>为了美观和简洁，它们在生成页面链接时，会自动省略掉 URL 末尾的 <code>.html</code> 。所以在网站内部的链接是 <code>/notes/my-first-note</code> ，而不是 <code>/notes/my-first-note.html</code> 。而当我们的 CDN 服务器收到一个对 <code>/notes/my-first-note</code> 的请求时，它会忠实地去源站（或者它自己的缓存里）寻找一个叫做 <code>my-first-note</code> 的文件。但实际上，服务器上的真实文件是 <code>my-first-note.html</code> 。因为找不到完全匹配的文件，所以返回 404 Not Found 错误。</p>
<p>所以我们需要在我们的 CDN 请求规则中添加一个 URL 重写 规则，让 CDN 收到一个看起来不像文件（比如没有文件后缀）的请求时，在去源站寻找文件之前，自动在请求的 URL 后面尝试加上 <code>.html</code> 。</p>
<p>我采用的规则是（询问 Gemini 2.5 Pro 得到的，仅供参考；我的 CDN 供应商是 EdgeOne）：</p>
<p>先设置两条 And 连接的条件</p>
<ul>
<li>
<p>条件一：</p>
</li>
<li>
<p>匹配类型: <code>URL Path</code></p>
</li>
<li>
<p>运算符: <code>正则不匹配</code></p>
</li>
<li>
<p>值: <code>\.[a-zA-Z0-9]+$</code></p>
</li>
<li>
<p>这个正则表达式的意思是：URL 路径不是以 “点+字母/数字” 结尾的。这就能排除掉所有带后缀的文件请求，如 .css, .js, .png 等</p>
</li>
<li>
<p>条件二:</p>
</li>
<li>
<p>匹配类型: <code>URL Path</code></p>
</li>
<li>
<p>运算符: <code>正则不匹配</code></p>
</li>
<li>
<p>值: <code>/$</code></p>
</li>
<li>
<p>这里是用正则不匹配和 /$ 来排除所有以斜杠结尾的目录请求</p>
</li>
</ul>
<p>THEN (那么执行这个操作)：</p>
<ul>
<li>
<p>操作: 选择 回源 URL 重写</p>
</li>
<li>
<p>重写方式：</p>
</li>
<li>
<p>在配置项中，需要将访问的 URI 重写为它自身再加上 .html。通常变量的形式是 <code>{”${http.request.uri.path}.html”}</code> 或类似的写法</p>
</li>
<li>
<p>重写后的 URI 路径：<code>{”${http.request.uri.path}.html”}</code></p>
</li>
<li>
<p>(请查找 CDN 供应商文档或在界面中寻找提示，确认变量名就是 <code>{”${http.request.uri.path}.html”}</code> 或类似的形式)</p>
</li>
</ul>
<p>保存之后便成功解决了这个问题。</p>
<p>同时，如果你也启用了 Giscus 评论功能并且也使用了 CDN 的话，那么可能会出现 Giscus 的样式错误或者加载失败的问题。这个是因为 CORS 跨域策略阻止了 CSS 样式表的加载。简单来说，出于安全考虑，浏览器默认禁止网页从一个域名去请求另一个域名上的资源。要解决这个问题，CDN 服务器需要在返回 <code>dark.css</code> 和 <code>light.css</code> 这些文件时，在 HTTP 响应头中明确地加入 Access-Control-Allow-Origin 字段，并指明允许 <code>https://giscus.app</code> 这个来源访问。</p>
<p>我采用的规则是（同样也是询问 Gemini 2.5 Pro 得到的，仅供参考）：</p>
<ul>
<li>
<p>IF 条件：</p>
</li>
<li>
<p>匹配类型为 <code>URL path</code> 使用 <code>正则匹配</code> 值为 <code>(dark|light)\.css</code></p>
</li>
<li>
<p>这个规则能够精确地捕获到所有以 dark.css 或 light.css 结尾的 URL 请求，无论它们具体在哪个目录下</p>
</li>
<li>
<p>操作：</p>
</li>
<li>
<p>修改 HTTP 节点响应头，类型为设置，将 Access-Control-Allow-Origin 的头部值设为 <code>https://giscus.app</code></p>
</li>
</ul>
<p>保存生效即可。</p>
]]></content:encoded>
            <author>Simon</author>
        </item>
        <item>
            <title><![CDATA[使用 WSL2 的一些注意事项]]></title>
            <link>https://sirmo-blog.pages.dev/posts/wsl2/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/wsl2/</guid>
            <pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[WSL2 使用建议：包含发行版管理工具推荐、终端卡顿解决方案、网络配置、Docker 使用建议和内网穿透设置等实用技巧]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>这个文章的内容最先发布在 L 站上，如果你想要看原帖则可以移步至<a href="https://linux.do/t/topic/784102/5">链接</a></p>
</blockquote>
<blockquote>
<p>但是这个原贴内容是旧的不准确的，建议还是以下面内容为准，我 2026年01月10日 更新修复了不少描述问题，不过可能还是会有一些细节没有表述到位，见谅。碰到疑问可以看看官方 wsl 文档或者问问 AI 也是个不错的选择</p>
</blockquote>
<p>我使用 WSL2 的一般情况是 Windows 电脑放在固定的位置，然后启动内网穿透服务，再在外面用 Macbook 远程 ssh 连接使用。</p>
<p>先补充一下我的 Windows 电脑系统情况：</p>
<blockquote>
<p>Windows 版本：24H2 专业版</p>
<p>操作系统版本：26100.4652</p>
<p>已经通过 <code>wsl --update</code> 升级到最新版本（2025-07-14）</p>
<p>WSL2 发行版：Ubuntu 24.04</p>
</blockquote>
<h2>辅助工具分享</h2>
<p>WSL Manager 项目地址：<a href="https://github.com/bostrot/wsl2-distro-manager">https://github.com/bostrot/wsl2-distro-manager</a></p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3cea5a4150.webp" alt="image-20250715153030328.webp" loading="lazy" /&gt;</p>
<p>这个是个发行版管理工具，图形化地管理和创建 WSL2 实例，并且可以在创建的时候就修改数据存放的位置，不需要一开始通过 Microsoft Store 下载发行版后再用命令迁移数据位置，并且可以直接搜索需要创建的镜像和进行下载创建等高级功能（支持中文，详细内容使用方法移步到项目地址，免安装下载后即点即用；实例创建的时候如果无法搜索发行版，请开启 TUN 模式即可解决）</p>
<h2>解决终端卡顿的方法</h2>
<p>有时候 WSL2 内置终端在输入命令的时候会出现输出延迟感，这个是因为 WSL2 默认将 Windows 的环境变量加载到了系统里。WSL2 默认会进行遍历环境变量，而 WSL2 访问 Windows 的 I/O 性能并不理想，因此导致卡顿，尤其是如果你也将 bash 切换为了 zsh 并且安装配置好了 Oh-my-zsh 的命令高亮提示插件后，卡顿感觉更为明显</p>
<p>解决方案也简单，直接禁用 WSL2 访问 Windows 的环境变量即可</p>
<p>编辑 <code>/etc/wsl.conf</code> 文件，添加如下内容：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;[interop]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;appendWindowsPath=false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>然后再编辑 <code>/etc/profile</code> 文件，将自己需要挂载的目录添加进去，我默认只添加了一个路径，你可以根据情况自己修改用户名和路径情况：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;export&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; PATH&lt;/span&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;=&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;$PATH&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;:/mnt/c/Users/idea/AppData/Local/Microsoft/WindowsApps"&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>重启 WSL2 即可解决问题</p>
<h2>其他的一些补充</h2>
<ul>
<li>关于 WSL2 使用代理（mirrored 网络情况下）</li>
</ul>
<p>首先自己主机上开启系统代理后，wsl2 会弹出“检测到代理已经更改，请重启生效”类似的提示，这个时候如果不嫌麻烦，请在确认没有在 wsl 中执行任何任务或者操作并且保存好文件后，以管理员身份（似乎不用管理员也可以）打开 PowerShell 或 命令提示符（也就是 CMD），输入 <code>wsl --shutdown</code> 命令并按下回车键，此命令将关闭所有正在运行的 WSL 实例并终止 WSL 2 的虚拟机。然后等待 7s 左右再启动即可生效</p>
<p>如果觉得这个麻烦，可以在 wsl 的配置文件中，比如 <code>.zshrc</code> 中添加：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;proxy&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;  export&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; HTTP_PROXY&lt;/span&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;=&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"http://127.0.0.1:8888"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;  export&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; HTTPS_PROXY&lt;/span&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;=&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"http://127.0.0.1:8888"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;  export&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; ALL_PROXY&lt;/span&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;=&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"socks5://127.0.0.1:8888"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;  export&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; http_proxy&lt;/span&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;=&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"http://127.0.0.1:8888"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;  export&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; https_proxy&lt;/span&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;=&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"http://127.0.0.1:8888"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;  export&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; all_proxy&lt;/span&gt;&lt;span style="color:#d73a49;--shiki-dark:#F97583"&gt;=&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"socks5://127.0.0.1:8888"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  echo&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; "Proxy environment variables set."&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;unproxy&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  unset&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; HTTP_PROXY&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; HTTPS_PROXY&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; ALL_PROXY&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  unset&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; http_proxy&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; https_proxy&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; all_proxy&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  echo&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; "Proxy environment variables cleared."&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;proxy_status&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;(){&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  echo&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; "HTTP_PROXY: &lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;$HTTP_PROXY&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  echo&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; "HTTPS_PROXY: &lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;$HTTPS_PROXY&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  echo&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; "ALL_PROXY: &lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;$ALL_PROXY&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>这样的代码，其中 <code>8888</code> 需要修改为代理软件实际监听的端口。然后保存（可能需要新开终端或者用 <code>source .zshrc</code> 命令刷新一下）后输入 <code>proxy</code> 命令即可开启代理。开启之后可以通过 <code>curl -I google.com</code> 类似命令查看是否返回有效内容。如果不需要使用了，则可以用 <code>unproxy</code> 命令取消代理，通过 <code>proxy_status</code> 命令可以查看当前终端的代理配置情况</p>
<p>值得一提的是，如果使用的是 Windows 自带的 Terminal 软件打开 wsl 的终端窗口的话，只要先启动代理后启动 wsl，那么 Windows 会自动在你通过 Terminal 打开的终端中配置好代理环境变量，因此如果使用的流程是：“开代理 -&gt; 使用 Windows Terminal 软件打开 wsl（wsl 会自动启动）”。这样的顺序的话，就无需在自己的配置文件中写入上分的命令，日常直接使用即可</p>
<p>配置命令是面向使用 vscode 连接 wsl 或者同一局域网连接 wsl 或者是通过内网传统等其他的手段进行远程 ssh 连接的时候，如果不这样配置的话，哪怕运行着 wsl 的 Windows 主机开了系统代理，默认也不会有正确的环境变量，导致无法正确使用代理（如果觉得写配置文件麻烦，可以通过 TUN 模式代理或者软路由方式上网，这样的话就无需这么折腾了）</p>
<ul>
<li>在 Windows 上面使用 Docker</li>
</ul>
<p>但是实际上 Docker Desktop 在 Windows 上面的体验很差。我建议是不要使用 Docker Desktop，而是直接在 WSL2 中原生安装 Docker 使用。</p>
<p>WSL2 启动很快，远比使用 Docker Desktop 方便，而且因为使用的是镜像模式的网络共享方案，在 WSL2 中启动好 Docker 容器后，可以原生地使用 <code>localhost:&lt;端口号&gt;</code> 的方式来访问 WSL2 中的容器服务</p>
<ul>
<li>关于内网穿透</li>
</ul>
<p>如果想要实现内网穿透然后远程访问的效果，需要先在 WSL2 中启用 SSH 服务，并且设定好端口号和验证方式（我选择的是密钥认证，关闭密码认证，因为一般情况下，内网穿透就意味着将自己内网的服务暴露到公网，如果没有额外的配置安全手段的话，是很危险的一件事情），然后在的 Windows 防火墙中放通所设定的端口（比如设置 SSH 端口为高位的 25588 而不是默认的 22 的话，就需要在防火墙中开放 25588 端口准入，协议选择 TCP 即可），最后使用内网穿透软件将自己电脑上对应的端口比如 25588 映射出去，外部主机通过映射出来的地址直接进行连接即可</p>
<ul>
<li>关于终端</li>
</ul>
<p>在 Windows 上，使用自带的 Windows Terminal 就可以规避大部分问题，不过为了有更好的体验，我建议准备一个能够支持显示图标的字体（避免在使用一些工具比如 Claude Code 等 TUI 工具出现图标缺失显示方括号或者一些其他的奇奇怪怪的字符的问题）</p>
<p>Windows Terminal 默认使用的字体我不太记得是什么了，因为我是直接修改字体为我常用的 <a href="https://font.subf.dev/zh-cn/">Maple Mono NF</a> 字体的，我也推荐一下这个字体，个人觉得还不错</p>
<p>安装好之后，在 Windows Terminal 的设置的默认值里面可以修改字体为自己下载好的字体，选择好之后保存即可</p>
<ul>
<li>暂时只想到这么多。。。。</li>
</ul>
<p>最后放一下我的 <code>wsl.config</code> 文件给大家参考一下（其实一般情况下不需要配置这么麻烦，保持默认即可，最有必要配置的可能就是 mirrored 的网络连接方式了）：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;[wsl2]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;processors=12&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;firewall=true&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;networkingMode=mirrored&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;dnsProxy=false&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;dnsTunneling=false&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;memory=17179869184&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;swap=8589934592&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;[experimental]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;hostAddressLoopback=true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>配置文件中的内容作用都可以在微软的官方文档找到，有些配置是我很久之前写的，实际作用我自己也不太记得了，但是我用起来倒是还行</p>
<p>其实还有一点点配置有可能是需要修改 wsl 里面的一个配置文件的，我记得是关于 <code>systemctl</code> 的启用的。但是我后面使用新的发行版的时候似乎不需要显式地修改配置文件去配置了，而是默认启用了 <code>systemctl</code> 的支持，因此就更加不需要怎么修改配置文件了，只要确保上网方式是 mirrored 即可（好像 Windows 10 的一个版本号之后才支持，如果系统太老了也是不支持的，Windows 11 默认支持）</p>
]]></content:encoded>
            <author>Simon</author>
        </item>
        <item>
            <title><![CDATA[1Password 接管 SSH 验证/签名]]></title>
            <link>https://sirmo-blog.pages.dev/posts/1password-config-ssh/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/1password-config-ssh/</guid>
            <pubDate>Tue, 15 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[介绍如何使用 1Password 密码管理器接管 SSH 验证和 Git 提交签名，包括 SSH 密钥的云端存储管理、多设备同步配置，以及在 GitHub 上实现 Verified 提交标记的完整配置流程]]></description>
            <content:encoded><![CDATA[<h2>为何用 1Password ？</h2>
<p>我之前是用自己的服务器加开源的 <a href="https://github.com/dani-garcia/vaultwarden">Vaultwarden</a> 项目来配合 Bitwarden 插件使用的。Bitwarden 同样很强大很好用，而且也支持我这篇文件所提到的 SSH 验证接管等功能。</p>
<p>而且我去年在 1Password 赠送新用户一年家庭版权益的时候也用过 1Password，不过嫌它国内访问慢，就转而采用自建的方案了，一直用到 2025-07-13。</p>
<p>就在前两天，我看到 1Password 又开启了新的赠送活动，于是我拿自己的主邮箱去注册了一个拿来用用。也许是因为许久没用了，我倒是觉得 1Password 的 UI 好像比之前好看了一些，然后国内访问效果好像没有以前那么让人难绷了。再加上 1Password 这么久了也没有出过什么问题，自己自建 Vaultwarden 还需要进行数据备份（其实也不麻烦，计划任务罢了，服务器也还有三年多才过期），想着干脆就用用 1Password 得了……</p>
<p>于是乎，我便将我的 Vaultwarden 密码数据导出，放到了 1Password 中（但是我的 Vaultwarden 数据还在，偶尔我也会将 1Password 里面的数据导入到我的 Vaultwarden 中，也算是一个后手吧），打算在这段时间内好好用用这个 1Password，让我感受一下来自 “大厂” 的体验。</p>
<h2>关于密码管理器</h2>
<p>当时我在我服务器上自己搭建好了 Vaultwarden 的服务之后，我也问过我周边的人，“你需不需要管理很多密码呀？”，想着让他们也可以感受到密码管理器给我们带来的便利 —— 什么只要记住一个主密码、密码自动填充、生物验证、二步验证、强密码生成、多端同步、自动保存……</p>
<p>但是转了一圈发现，好像没几个人用到，我得到的回答要么是“我的密码很少的”，或者是“我只用那么一两个密码的”，也有的是“我觉得没有必要……”。我也不好说些什么，毕竟确实，这种密码管理工具在日常生活中似乎没有什么存在感，大家只要保密好那几个关键的密码就好了，其他的也许通过 “微信登录” 或者 “手机号短信验证码登录” 就可以替代了，完全不需要考虑用密码管理器。</p>
<p>对我而言，从接触到一直使用密码管理器也是一个意外。那是我在翻看 1Panel 的应用商店的时候，看到了那个叫作 Bitwarden 的应用，然后我点击了查看详情，自此一发不可收拾……我将我原本保存在浏览器（其实这个很不安全，因为浏览器一般是明文保存密码的，也就是说只要有人能够操作你的电脑，那么就可以获得你浏览器中保存的所有用户名和对应的网站以及密码）、笔记本、手机备忘录中的密码全部都迁移到了 Bitwarden（其实就是 Vaultwarden）中去，开始了我的密码自动填充和管理之旅。</p>
<p>我只需要在浏览器上装好对应的同名插件，然后连接到我的自建服务器对应的域名，然后登录一下，就可以享受到它所带来的便利。而且如果你的电脑支持生物解锁（其实就是我们常说的“指纹解锁”或者“面容识别”），也可以一键关联，省去密码的输入步骤，快速填好需要的密码，而且还能同步和管理所有的二步验证码（这个功能在国内其实挺小众的，国外很常见，国内一般是面向开发者才有的，如果不知道这个是什么，可以类比银行的 U 盾，是一种基于时间的二步验证码），也可以同步管理一些私密的信息。</p>
<p>总之，我认为在现在信息化的社会，使用一个密码管理器也是很有必要的，不但可以让我们每次设置密码都无需思考（可以智能填充强密码并且一键保存），而且能够让我们避免因为想不出而大规模使用相同密码而产生的隐患。</p>
<h2>1Password 配置 SSH 密钥</h2>
<p>我们回到正题。</p>
<p>在之前我管理自己的 SSH 密钥的时候，我是采用一机一码的形式，这个时候就比较繁琐，因我有时候会重装系统，或者使用其他设备进行 SSH 验证，这个时候我只能重新生成和设置好一个新的 SSH 密钥然后将公钥绑定到我的账户里面去。</p>
<p>而在使用 1Password 等密码管理器后，我的私钥是存储在 1Password 中的，数据是存在云端而非本地，我只要在新设备或者我的其他设备上配置好 1Password，然后按照提示修改好配置文件，就可以无缝地在新设备上进行 SSH 验证等操作。</p>
<p>其实我们不难发现，比如 Termius 这样的软件，就是采用云端存储私钥的方式，来帮助我们用户在多设备的时候，可以无视设备的环境配置情况，只要下载安装好 Termius，登录同一个账户，数据就会同步，然后直接 SSH 连接即可。</p>
<p>1Password 也差不多，只是在一些机制上更为巧妙一些。</p>
<p>首先我们需要在本地有需要保存到 1Password 里去的私钥，如果没有可以先生成，然后通过 1Password 的「开发者」选项卡进入到这个单独的界面，补充一下，是桌面应用才有的功能，网页版不可以：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0798fa23.webp" alt="image-20250715202442438.webp" loading="lazy" /&gt;</p>
<p>启用这个功能之后，如果你本地有密钥，那么可以点击右下角的「Watchtower」来一键扫描和导入。我已经完成了导入了，所以我们直接点击左上角的「SSH Agent」来查看一下我们当前已经保存好的密钥情况：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d07bb4862.webp" alt="image-20250715202638841.webp" loading="lazy" /&gt;</p>
<p>点击我们需要绑定到平台的密钥（假设还没有完成绑定），比如我需要将「GitHub-MacBook」这个密钥绑定到我的 GitHub 上去，那么就点击对应密钥的右侧的「查看 SSH 密钥」，然后在新窗口中，点击「公钥」部分复制，然后在对应的平台上面绑定好即可：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0836d06f.webp" alt="image-20250715202935853.webp" loading="lazy" /&gt;</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0886124e.webp" alt="image-20250715203046443.webp" loading="lazy" /&gt;</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d08db7322.webp" alt="image-20250715203304357.webp" loading="lazy" /&gt;</p>
<p>这里添加成功之后我们需要回到 1Password 中去，然后进入 1Password 的设置，启用「SSH Agent」这个功能，也就是框选出来的部分需要打上钩，如果是在这个设备上第一次设置，那么就会弹出提示，让你将一段配置文件添加到自己家目录下的 <code>.ssh</code> 目录下的 <code>config</code> 文件中去（也就是常说的 <code>~/.ssh/config</code> 文件），一般情况下可以选择「自动添加」，然后 1Password 就会自动将配置写入到正确位置，其他的配置则保持默认即可，当然你也可以使用我的配置：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d09409565.webp" alt="image-20250715203519890.webp" loading="lazy" /&gt;</p>
<p>写入的内容类似这样：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0998ecf9.webp" alt="image-20250715203849625.webp" loading="lazy" /&gt;</p>
<p>然后我们可以在终端中通过 <code>ssh -T git@github.com</code> 命令尝试连接一下 GitHub，如果不出意外的话，执行这个命令会出现一个类似下面的授权窗口：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d09f8081e.webp" alt="image-20250715204036839.webp" loading="lazy" /&gt;</p>
<p>进行批准之后，就会显示连接成功的消息：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0a56311b.webp" alt="image-20250715204130744.webp" loading="lazy" /&gt;</p>
<p>至此，我们便配置好了 1Password 的 SSH 连接管理。当你有多个需要 SSH 连接的主机的时候，你只需要和往常一样，在 <code>config</code> 文件中写好主机信息，然后在 1Password 中保存好私钥，公钥则保存一份到远程主机上去，这样在进行 SSH 连接的时候，1Password 会自动进行接管（前提是 1Password 必须处于运行状态）。</p>
<p>然后我们也可以在 1Password 的「开发者」选项卡中看到我们的连接情况：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0aee51fa.webp" alt="image-20250715204532712.webp" loading="lazy" /&gt;</p>
<h2>接管 Commit 签名</h2>
<p>这个功能其实很有趣，如果你在进行 Git Commit 之前，用 SSH 密钥进行了签名，然后提交 Commit 到 GitHub 等平台上去后，你可以在提交记录中看到右边显示一个绿的「Verified」，这表明这次提交确实是你做的，用的是和你账户相关联的密钥，而非其他人进行的提交。</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0b6cc827.webp" alt="image-20250715204916477.webp" loading="lazy" /&gt;</p>
<p>实现起来也很容易。Git 从 2.34 开始就支持使用 SSH 签名了，不过 GitHub 似乎在 23 年中旬才加入这个功能，但是很显然，现在完全不用考虑这个问题。</p>
<p>在进行托管之前，需要检查自己的 GitHub 账号有没有对自己的邮箱设置隐私模式：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0c0ef55e.webp" alt="image-20250715205459694.webp" loading="lazy" /&gt;</p>
<p>如果你和我一样设置了强隐私模式，那么你需要在你的项目下配置你的提交 Email 为对应的，GitHub 提供的 noreply 邮箱，然后再进行提交的操作，不然会阻止你的提交。如果你没有设置这么严格，那么就可以直接开始后面的操作。</p>
<p>我们回到添加 SSH 公钥的界面，这次我们再次重新提交一次相同的公钥给 GitHub，但是这次，我们需要将这个公钥的类型修改为「Signing Key」，然后保持即可。</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0c9396a3.webp" alt="image-20250715205813924.webp" loading="lazy" /&gt;</p>
<p>然后你就会在下面的「Signing keys」中看到你刚刚添加好的密钥。其实公钥部分和上面的用于 SSH 验证的完全一致，只是需要这么做，一个用于登录，一个用于验证罢了。SSH 签名虽然相较于原生的 「GPG keys」似乎少了一些强大的功能，但是对于一般情况下而言，完全够用。</p>
<p>回到我们的 1Password 对应的密钥界面，这个时候我们点击右上角的三个点，然后在里面选择「配置 Commit 签名…」（如果你在当前电脑上是第一次配置，那么不需要这么繁琐，1Password 会在你这个密钥上面进行横幅提示）</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0d09e5c9.webp" alt="image-20250715210208649.webp" loading="lazy" /&gt;</p>
<p>同样的，我们在弹出的窗口中选择左下角的「自动编辑」即可，或者你也可以手动将给出的代码片段添加到对应的文件中去。</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0d77871e.webp" alt="image-20250715210350062.webp" loading="lazy" /&gt;</p>
<p>这样便完成了配置，这个时候我们回到自己的项目中，进行一次新的提交之后，我们可以到自己的 GitHub Commit 界面去查看，就可以看到自己的新的提交后面也出现了绿色的「Verified」图标了。</p>
<h2>如果密钥数量过多</h2>
<p>当我们使用 1Password 存储了较多密钥的后，在 SSH 连接验证时，我们大概率会碰到这样的错误：</p>
<p><code>Too many authentication failures</code></p>
<p>这是因为 SSH 客户端（比如 VS Code）在连接时，会逐一尝试 1Password SSH Agent 提供的所有密钥。SSH 服务器在多次尝试失败后，会主动断开连接以保障安全，从而导致了这个错误。</p>
<p>一个有效的解决方案就是使用 SSH 书签 (SSH Bookmarks)。这个功能可以为我们的 SSH 主机和对应的密钥创建映射关系，并生成一个 SSH 配置文件。这样，当连接特定主机时，SSH 客户端就会被明确告知使用哪一个密钥，从而避免了无效的尝试。</p>
<p>虽然这个功能目前（2025 年 08 月 29 日时）在 1Password 上显示为 Beta 功能，但经过测试完全可用。如需详细了解，可见<a href="https://support.1password.com/developer/#ssh-bookmarks">官方文档</a>。</p>
<p>使用起来方法有所讲究，不过也不是很麻烦。</p>
<p>首先需要在 1Password 的设置中打开 <code>生成带有已添加到书签主机的 SSH 配置文件</code> 选项：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0dfce481.webp" alt="image-20250829141335974.webp" loading="lazy" /&gt;</p>
<p>然后你可以在自己的 Home 目录下的 <code>.ssh</code> 文件夹下看到一个 1Password 文件夹。里面有一个 <code>config</code> 文件，通过文本编辑器（VSCode 就可以）打开，我们可以看到类型下面的内容：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;# This config file and the *.pub files in this folder are automatically&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;# generated and managed by 1Password. Any manual edits to this file or&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;# any *.pub file will be lost.&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;# You can include this file in your main SSH config by adding the&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;# following line to your ~/.ssh/config file:&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;#   Include ~/.ssh/1Password/config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>我们按照指引，检查一下我们的 <code>~/.ssh/config</code> 文件中是否包含了 <code>Include ~/.ssh/1Password/config</code> 这一条配置内容，如果没有，就需要将其手动加上。</p>
<p>做好这一步之后，我们就可以开始添加书签了。</p>
<p>可能是因为我使用的还是 Beta 版本，添加书签并没有那么智能，也就是我无法在“活动”界面找到需要添加书签的链接进行一键添加，但是幸好，手动添加也没有那么复杂，我们只要知道我们的密钥需要连接的主机目标即可。</p>
<p>以我的 Github 密钥为例，先在自己的 1Password 中找到自己的密钥，然后点击编辑，添加更多，新加一个“URL”类型，然后使用 <code>ssh://your_user@your_host_address</code> 这样的语法去添加记录。因为我这个密钥是要连接 Github 的，所以我要填写的就是 <code>ssh://git@github.com</code>，然后保存，结果如下（可以添加多个，适用于不同情况）：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0e5eb2d4.webp" alt="image-20250829142442138.webp" loading="lazy" /&gt;</p>
<p>然后我们去到开发者的 SSH Agent 的书签界面，可以看到已经添加成功了：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/08/31/68b3d0ed445d6.webp" alt="image-20250829142550557.webp" loading="lazy" /&gt;</p>
<p>这样我们在连接的时候，1Password SSH Agent 就可以直接指定这个密钥完成连接，就不会出现之前的 <code>Too many authentication failures</code> 问题了。</p>
<p>最后再补充一下 VSCode 平台 SSH 连接需要注意的事情：</p>
<p>我们通过上面的方式配置好后，日常使用终端等连接是没有问题的，但是使用 VSCode 的 Remote SSH 插件进行远程开发的时候有可能还是会出现类似 <code>Too many authentication failures</code> 的错误。这个时候我们需要在我们的 <code>~/.ssh/config</code> 文件中为 VSCode 单独写一个配置文件：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;Host Remotexxx&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  HostName xxx.xxx.xxx.xxx&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  User xxx&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  Port xxx&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  IdentityFile ~/.ssh/1Password/SHA256_INbxxx.pub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>上面是我的一个示例配置文件。其中 Host 后面是别名，也就是你可以给自己需要远程的主机取一个自己容易辨认的名字，可以包含中文，但是建议不要用空格去分隔。</p>
<p>而 HostName 就是你需要远程主机的 IP 地址或者域名；User 就是你需要使用的登录账号；Port 就是端口，如果不写这一行默认就是 22 端口；最后最重要的一行就是这个 IdentityFile。</p>
<p>我们需要显式地指定公钥文件让 VSCode 知道我们在远程 SSH 连接的时候，需要使用这个公钥进行验证。后面的路径不是随意写的，而是在我们完成了上面说到的添加书签的流程之后，在我们的 <code>.ssh</code> 文件夹的 1Password 文件夹中的 <code>config</code> 文件内，会自动生成对应的配置文件：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;# 1Password Item: Remotexxx&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;Match Host Remotexxx User xxx&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  IdentitiesOnly yes&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  IdentityFile ~/.ssh/1Password/SHA256_INbxxx.pub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>将这个里面的 IdentityFile 这一行复制到我们的<code>~/.ssh/config</code> 配置文件对应的主机的连接配置部分即可（对应关系不要弄混了，是哪个主机的就用哪个公钥，如果在这个 1Password 的 config 文件中没有看到，那么就是之前的书签没有配置好）。</p>
<p>这样在使用 VSCode 进行远程 SSH 连接开发服务器的时候，就不会出现无法验证的问题了。</p>
]]></content:encoded>
            <author>Simon</author>
        </item>
        <item>
            <title><![CDATA[通过自定义主机名优化 Cloudflare CDN 的访问速度]]></title>
            <link>https://sirmo-blog.pages.dev/posts/cloudflare-cdn-optimization/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/cloudflare-cdn-optimization/</guid>
            <pubDate>Mon, 02 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[利用 Cloudflare 的 “自定义主机名” (Cloudflare for SaaS) 功能，将主域名通过一个优选的 Cloudflare CNAME 目标进行流量加速，同时使用一个辅助域名作为 Cloudflare 内部的回退源 (Fallback Origin) 来正确路由请求到源服务器]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>重要</p>
<p>这篇文章的图片使用的是一个免费图床，如果图片加载不出来请见谅，因为个人原因暂不考虑迁移，如影响到阅读请通过页面底部邮件方式联系我进行修复</p>
<p>该教程经他人指出，有封号风险，所以请酌情使用</p>
<p>建议去此处查看本文：<a href="https://linux.do/t/topic/694293">https://linux.do/t/topic/694293</a></p>
</blockquote>
<h2>引言</h2>
<p>Cloudflare 作为全球领先的网络性能与安全服务商，以 CDN 加速、DDoS 防护、WAF 防火墙、免费 SSL 证书 等核心能力享誉行业。其依托 Anycast 网络技术，让同一 IP 能在全球多节点宣告，理论上可自动路由用户请求至最近节点。</p>
<p>但国内用户访问时存在天然短板：免费版 Cloudflare 对中国大陆流量常默认路由至美国节点，叠加跨境链路波动、运营商路由策略差异等因素，导致延迟高、稳定性差，甚至被戏称为“赛博减速器”。</p>
<p>而 “优选 IP/CNAME”——通过测速、路由追踪、社区共享等方式，筛选出特定地区（如中国大陆）访问 Cloudflare 网络时延迟更低、丢包更少的节点 IP 或专用 CNAME 域名。结合 Cloudflare 「自定义主机名」（Cloudflare for SaaS 功能）与「回退源」机制，可精准定向优质节点，让国内用户体验更好。</p>
<h2>准备工作</h2>
<p>在动手配置前，需要准备两个域名和一张外币卡以及较好的网络环境：</p>
<ul>
<li><strong>主域名</strong>：<code>134257.xyz</code>（需加速的目标域名，这里以我自己的域名为例，不需要托管在 Cloudflare 上，我是放国内腾讯云处的）</li>
<li><strong>辅助域名</strong>：<code>134258.xyz</code>（用于搭建 Cloudflare 内部“回退源”，需托管在 Cloudflare 上，也就是将该域名的 DNS 记录修改为 Cloudflare 分配的 DNS 地址）</li>
<li><strong>Cloudflare 账户</strong>：似乎现在创建 Cloudflare 账户，以及开启 SaaS 功能都需要一张外币卡，国内 Visa 卡可过（我是自己的 Visa 卡过的）</li>
<li><strong>通畅的网络环境</strong>：这个基本也是必须的，有些时候似乎不能直连 Cloudflare，需要自行准备</li>
</ul>
<h2>第一阶段：搭建 Cloudflare 回退源（配置辅助域名）</h2>
<p>步骤一：先将辅助域名，我选择的是 <code>134258.xyz</code>（在实际操作时，你应该换成你自己买的属于你自己的辅助域名，而不是用我的辅助域名，主域名同理）接入到 Cloudflare</p>
<ul>
<li>登录到 Cloudflare 控制台，右上角加号，添加“连接域”</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d5bf211a53.png" alt="1748851696069.png" loading="lazy" /&gt;</p>
<ul>
<li>在弹出来的界面输入你的辅助域名，下面的选项保持默认，然后点击“继续”</li>
<li>Cloudflare 会自动扫描你当前域名的 DNS 记录情况，如果你是在腾讯云处购买的域名，那么你需要在腾讯云的<a href="https://console.cloud.tencent.com/domain/all-domain/all">域名管理界面</a>找到你的辅助域名，将其 DNS 服务器修改为 Cloudflare 提供给你的新的 DNS 服务器</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d5d427c73e.png" alt="1748852032876.png" loading="lazy" /&gt;</p>
<ul>
<li>修改完毕之后，生效需要一段时间，一般是几个小时之后，等到 Cloudflare 那边显示正常，或者 Cloudflare 给你发邮件说成功添加了，那么就可以进行接下来的步骤了。下图是添加成功后的 Cloudflare 界面：</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d5de9c5df7.png" alt="1748852200137.png" loading="lazy" /&gt;</p>
<p>步骤二：配置回退源的 A 记录</p>
<ul>
<li>进入到辅助域名的详细界面：</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d5fd5887c3.png" alt="1748852691224.png" loading="lazy" /&gt;</p>
<ul>
<li>
<p>点击左侧栏的“DNS”下的“记录”，进入到“记录”界面，然后点击那个蓝色的“添加记录”按钮，添加一个记录：</p>
</li>
<li>
<p>类型：A</p>
</li>
<li>
<p>名称：cname（可以随意命名，我取这个名字便于分辨）</p>
</li>
<li>
<p>IPv4地址（内容）：你的网站源服务器的公网 IP 地址</p>
</li>
<li>
<p>代理状态：打开（黄色启用状态，右边小黄云亮起，显示“已代理”）</p>
</li>
<li>
<p>TTL：保持默认即可</p>
</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d6051c7db5.png" alt="1748852816076.png" loading="lazy" /&gt;</p>
<p>完成以上步骤之后，<code>cname.134258.xyz</code> 将成为 Cloudflare 内部指向源站的“稳定代理入口”（我这里还是以我自己的辅助域名为例，实际域名还是以你的实际情况为准）。</p>
<h2>第二阶段：将主域名作为自定义主机名</h2>
<p>步骤一：在 Cloudflare 中创建自定义主机名。同样的在这个辅助域名管理界面的左侧栏，找到“SSL/TLS”，点击其下方的“自定义主机名”，进入到“自定义主机名”界面。</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d63732579e.png" alt="1748853617053.png" loading="lazy" /&gt;</p>
<ul>
<li>在这里需要先设置好回退源，也就是将上一阶段的最后步骤得到的新的，指向你源服务器的辅助域名，填入到“回退源”内并保存。等待变成上图的绿色的“有效”状态</li>
<li>然后再点击蓝色的“添加自定义主机名”按钮，在新的界面添加自定义主机名。在新的界面中，自定义主机名一栏填写你需要加速的主域名，比如我的就是 <code>134257.xyz</code> ，其他的都保持默认即可，然后点击右下角的“添加自定义主机名”保存</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d63a7b1f2d.png" alt="1748853670887.png" loading="lazy" /&gt;</p>
<ul>
<li>
<p>添加好自定义主机名之后，“主机名”会显示待定状态，这个时候，需要去主域名的托管处，我的是<a href="https://console.cloud.tencent.com/cns">腾讯云</a>，找到自己的主域名。添加一条 cname 解析到我们的辅助域名，也就是<code>cname.134258.xyz</code> 使它生效（你需要填写你自己的辅助域名而不是我的）：</p>
</li>
<li>
<p>主机记录：@（这个就够了我觉得）</p>
</li>
<li>
<p>记录类型：选择 CNAME</p>
</li>
<li>
<p>线路类型：默认即可（除非你开了会员？有什么更高级的线路？）</p>
</li>
<li>
<p>记录值：辅助域名（我的是 <code>cname.134258.xyz</code> 你需要改成你自己的）</p>
</li>
<li>
<p>其他的保持默认</p>
</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d651ae9736.png" alt="1748854030597.png" loading="lazy" /&gt;</p>
<ul>
<li>稍等片刻，再去看一下 Cloudflare，就会看到 Cloudflare 给我们提供了对于我们“自定义主机名”的“证书验证 TXT 名称”和“证书验证 TXT 值”（如果你的是“预验证”的话，等待一下就好），同时我们的“主机名”会显示一个蓝色的“待验证（TXT）”和一个绿色的“有效”，如果那个绿色的有效没有出来或者是红色的报错什么的，等待上一步的 cname 解析生效即可：</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d674c7a5fb.png" alt="1748854601441.png" loading="lazy" /&gt;</p>
<ul>
<li>我上面这个图片是截图早了，等一会儿就不是“预验证”了，等到不是“预验证”的时候，再进行后续步骤</li>
</ul>
<p>步骤二：添加 TXT 名称和值到我们的主域名解析处</p>
<ul>
<li>
<p>回到<a href="https://console.cloud.tencent.com/cns">腾讯云</a>自己的主域名解析处，添加一个新的 TXT 记录：</p>
</li>
<li>
<p>主机记录：复制 Cloudflare 给的“主机名验证 TXT 名称”，左下角有个“单击以复制”，点击一下这行字就复制了，然后将后面的域名去掉就可以了（比如我复制的是 <code>_acme-challenge.134257.xyz</code> ，那么我应该填入的是 <code>_acme-challenge</code> 如下图所示）</p>
</li>
<li>
<p>记录类型：选择 TXT</p>
</li>
<li>
<p>线路类型：默认即可</p>
</li>
<li>
<p>记录值：复制 Cloudflare 给的“主机名验证 TXT 值”，直接粘贴就好了，不需要做修改</p>
</li>
<li>
<p>其他的保持默认</p>
</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d685f83f79.png" alt="1748854877533.png" loading="lazy" /&gt;</p>
<p>完成以上操作之后，稍等片刻，我等了十多分钟吧，等待“主机名”处变成如下所示的样子，就可以了：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d69ebbcf47.png" alt="1748855274283.png" loading="lazy" /&gt;</p>
<p>这样主域名就配置好了 CDN 的同时还带上了自动续期的 SSL 加密证书。</p>
<p>至此，便配置好了 CNAME，但是这个时候还没有加速，因为我们还没有进行优选，优选的话可以通过以下开源项目来获取到优选的 IP：</p>
<blockquote>
<p><a href="https://github.com/XIU2/CloudflareSpeedTest">XIU2/CloudflareSpeedTest</a></p>
</blockquote>
<p>获取到之后，就可以在主域名处使用A记录解析Cloudflare比较快的IP即可（这张图片是网上找的，可以参考一下）：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d6aca1e2ab.png" alt="1748855496983.png" loading="lazy" /&gt;</p>
<p>或者你可以和我一样，采用别人已经优选好的：</p>
<blockquote>
<p>cloudflare.182682.xyz</p>
</blockquote>
<p>维护者网站：<a href="https://www.wetest.vip">https://www.wetest.vip</a></p>
<p>使用起来也比较容易，在你上述步骤都完成，且可以通过主域名成功访问到你的网站之后，在主域名解析处，将我们原本的 CNAME 记录直接替换为上面的 <code>cloudflare.182682.xyz</code> 即可：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/02/683d6c0025e27.png" alt="1748855805807.png" loading="lazy" /&gt;</p>
<p>至此便完成了 Cloudflare 的 CDN IP 优选加速。</p>
<p>那个辅助域名的有关设置均不可修改，保持在 Cloudflare 处即可，然后域名记得续费就好。</p>
<p>最后补充一下，建站的时候，比如用 1Panel 快速建站，域名就是我们加速的主域名。比如你想让用户访问 <code>134257.xyz</code> 就可以访问到你的网站，那么建站的时候，设置的域名就应该是这个，而不是其他的。</p>
<h2>一些补充</h2>
<h4>优选原理图</h4>
<p>由 Gemini 给出，仅供参考：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f940577715.png" alt="" loading="lazy" /&gt;</p>
<p>Q1：我不理解为什么我通过 <code>cname.134258.xyz</code> 这个辅助域名，在主域名处添加好 CNAME 记录并且验证成功后，就可以将这个辅助域名修改为 <code>cloudflare.182682.xyz</code> 了</p>
<blockquote>
<p>Gemini Answer：</p>
<p>好的，我们来拆解一下这个过程，希望能让你更清晰地理解。</p>
<p>这里有两个关键阶段：</p>
<ul>
<li><strong>验证和激活阶段</strong>：让 Cloudflare 知道 <code>134257.xyz</code> 是你的，并且你希望通过 Cloudflare 的“自定义主机名”功能来处理它，同时为它颁发 SSL 证书。</li>
<li><strong>日常运行阶段</strong>：让用户通过优选 IP 访问 <code>134257.xyz</code>。</li>
</ul>
<p>让我们看看 <code>cname.134258.xyz</code> （辅助域名）在这个过程中的具体作用：</p>
<p><strong>阶段一：验证和激活 <code>134257.xyz</code> 作为自定义主机名</strong></p>
<p>在这个阶段，Cloudflare 需要你做两件事来验证 <code>134257.xyz</code>：</p>
<ul>
<li>
<p><strong>TXT 记录验证</strong>：</p>
</li>
<li>
<p>你在主域名 <code>134257.xyz</code> 的 DNS 设置（腾讯云）中添加一条特定的 TXT 记录。</p>
</li>
<li>
<p><strong>作用</strong>：这向 Cloudflare 证明了你对 <code>134257.xyz</code> 这个域名有控制权。这是颁发 SSL 证书和信任这个域名的基础。</p>
</li>
<li>
<p><strong>初始 CNAME 记录指向辅助域名 <code>cname.134258.xyz</code></strong>：</p>
</li>
<li>
<p>你在主域名 <code>134257.xyz</code> 的 DNS 设置（腾讯云）中添加一条 CNAME 记录，指向你的辅助域名 <code>cname.134258.xyz</code>。</p>
</li>
<li>
<p><strong>作用</strong>：</p>
</li>
<li>
<p><strong>建立回源路径</strong>：<code>cname.134258.xyz</code> 是你在 Cloudflare 上正常添加并开启代理的域名，它指向你的源服务器。通过将 <code>134257.xyz</code> CNAME 到 <code>cname.134258.xyz</code>，你告诉 Cloudflare：“当 <code>134257.xyz</code> 的自定义主机名生效后，请通过 <code>cname.134258.xyz</code> 的配置去回源。” 这就是你在 Cloudflare 后台设置“回退源 (Fallback Origin)”为 <code>cname.134258.xyz</code> 的实际体现。</p>
</li>
<li>
<p><strong>SSL 证书颁发和主机名激活</strong>：Cloudflare 在颁发证书和激活自定义主机名时，会检查这个 CNAME。它需要确认请求能够通过 Cloudflare 的网络正确路由到你指定的（通过辅助域名间接指定的）源头。这确保了整个链路是通畅的。</p>
</li>
</ul>
<p><strong>一旦这个验证和激活阶段完成：</strong></p>
<ul>
<li>
<p>Cloudflare 内部已经记录了：</p>
</li>
<li>
<p><code>134257.xyz</code> 是一个有效的自定义主机名。</p>
</li>
<li>
<p><code>134257.xyz</code> 的 SSL 证书已经颁发并激活。</p>
</li>
<li>
<p>当收到针对 <code>134257.xyz</code> 的请求时，应该通过 <code>cname.134258.xyz</code> (作为回退源)的配置去获取内容。</p>
</li>
</ul>
<p><strong>阶段二：切换到 <code>cloudflare.182682.xyz</code> 进行日常访问</strong></p>
<p>现在，因为 Cloudflare 的内部系统已经“认识”了 <code>134257.xyz</code> 并知道如何处理它（特别是如何回源到 <code>cname.134258.xyz</code>），你就可以更改 <code>134257.xyz</code> 的 CNAME 记录了。</p>
<ul>
<li>
<p>你将 <code>134257.xyz</code> 在腾讯云的 CNAME 记录从 <code>cname.134258.xyz</code> 修改为 <code>cloudflare.182682.xyz</code>。</p>
</li>
<li>
<p><strong>为什么这样可行？</strong></p>
</li>
<li>
<p><strong>请求入口改变</strong>：<code>cloudflare.182682.xyz</code> 是一个解析到 Cloudflare 优选 IP 池的域名。现在，当用户访问 <code>134257.xyz</code> 时，他们的请求会通过这些优选的 Cloudflare IP 进入 Cloudflare 的网络。</p>
</li>
<li>
<p><strong>Cloudflare 内部识别和路由</strong>：当请求到达这些优选 IP 时，Cloudflare 的服务器会查看请求头中的主机名（即 <code>Host: 134257.xyz</code>）或 SNI 信息。</p>
</li>
<li>
<p>由于在第一阶段 <code>134257.xyz</code> 已经被成功设置为自定义主机名，并且其回退源被指定为 <code>cname.134258.xyz</code>，Cloudflare 的系统会识别出这个主机名。</p>
</li>
<li>
<p>然后，Cloudflare 会根据其内部保存的这个自定义主机名配置，<strong>依然按照“回退源是 <code>cname.134258.xyz</code>”的规则</strong>，通过 <code>cname.134258.xyz</code> 在 Cloudflare 上的设置（最终指向你的源服务器）去获取内容。</p>
</li>
</ul>
<p><strong>总结一下关键点：</strong></p>
<ul>
<li><strong>初始 CNAME 到辅助域名 <code>cname.134258.xyz</code> 是为了完成 Cloudflare 对自定义主机名 <code>134257.xyz</code> 的验证、SSL 证书颁发以及建立正确的回源链路。</strong> 这是告诉 Cloudflare：“嘿，<code>134257.xyz</code> 是我的，我想让你用这种方式（通过 <code>cname.134258.xyz</code>）来代理它。”</li>
<li><strong>一旦 Cloudflare 内部的这个“自定义主机名配置”被激活并保存下来，它就独立于外部 DNS 的 CNAME 指向了。</strong> Cloudflare 已经“记住”了 <code>134257.xyz</code> 的处理方式（回源到 <code>cname.134258.xyz</code>）。</li>
<li>之后，你将 <code>134257.xyz</code> 的 CNAME 指向 <code>cloudflare.182682.xyz</code>，仅仅是改变了流量进入 Cloudflare 网络的“入口点”，选择了更优的入口。但进入网络后，Cloudflare 仍然会根据它已经保存的自定义主机名配置来处理这个请求。</li>
</ul>
<p>把辅助域名 <code>cname.134258.xyz</code> 想象成在 Cloudflare 系统内注册的一个“锚点”或“代理指令”，它告诉 Cloudflare 如何找到你的真实服务器。自定义主机名 <code>134257.xyz</code> 则利用了这个锚点。初始的 CNAME 是为了建立和验证这个利用关系。验证通过后，只要请求能带着 <code>134257.xyz</code> 这个主机名到达 Cloudflare 的任何服务器，Cloudflare 就能根据已存的配置找到那个锚点并正确回源。</p>
</blockquote>
<p>Q2：这样配置好后可以一直生效么？如果 SSL 证书过期了怎么办？还会正确颁发证书和续期吗？</p>
<blockquote>
<p>Gemini Answer：</p>
<p>是的，这个设置<strong>通常可以一直生效</strong>，并且 Cloudflare <strong>会自动处理 SSL 证书的续期</strong>，前提是所有相关的配置保持不变且有效。</p>
<p><strong>关于长期生效：</strong></p>
<ul>
<li><strong>Cloudflare 自定义主机名配置的持久性</strong>：一旦你在 Cloudflare 中成功配置了 <code>134257.xyz</code> 作为自定义主机名，并将其回退源设置为 <code>cname.134258.xyz</code>，这个配置会一直保留在 Cloudflare 的系统中，除非你手动删除它。</li>
<li><strong>辅助域名 <code>cname.134258.xyz</code> 的配置</strong>：你的辅助域名 <code>cname.134258.xyz</code> 必须持续在 Cloudflare 上保持激活状态，开启代理，并且其 DNS 记录（通常是 A 记录）正确指向你的源服务器。这是回源链路的关键。</li>
<li><strong>主域名 <code>134257.xyz</code> 的 CNAME 记录</strong>：你在腾讯云上为 <code>134257.xyz</code> 设置的 CNAME 记录指向 <code>cloudflare.182682.xyz</code>（或其他优选 IP 服务）必须保持。如果 <code>cloudflare.182682.xyz</code> 这个服务失效或不再提供优选 IP，你可能需要更新这个 CNAME 到其他有效的 Cloudflare 优选 IP 解析服务，或者暂时改回指向你的辅助域名 <code>cname.134258.xyz</code>。</li>
<li><strong>TXT 验证记录</strong>：添加的 TXT 记录最好也一直保留在你的 DNS 设置中。虽然主要用于初始验证，但 Cloudflare 有时可能会在续期或进行其他检查时再次查询它。</li>
</ul>
<p>只要以上这些环节都保持配置正确，这个加速方案就会持续生效。</p>
<p><strong>关于 SSL 证书续期：</strong></p>
<ul>
<li>
<p><strong>Cloudflare 自动管理</strong>：对于通过 Cloudflare 代理并使用其自定义主机名功能的域名，Cloudflare 会自动管理其 SSL 证书的生命周期，包括在证书到期前进行续期。</p>
</li>
<li>
<p><strong>续期方式</strong>：</p>
</li>
<li>
<p><strong>HTTP-01 验证</strong>：由于你的主域名 <code>134257.xyz</code> 的流量是通过 CNAME 指向 <code>cloudflare.182682.xyz</code>，最终通过 Cloudflare 的服务器进行代理的，Cloudflare 可以在其自己的服务器上完成 HTTP-01 验证来续期证书。这是最常见和无缝的方式。Cloudflare 会在其边缘节点上响应 Let’s Encrypt (或其他 CA) 的验证请求。</p>
</li>
<li>
<p><strong>DNS-01 验证 (TXT 记录)</strong>：Cloudflare 也可能依赖于你初次设置的 TXT 记录，或者在续期时要求更新/添加新的 TXT 记录。但对于已经通过其代理的自定义主机名，HTTP-01 通常更为便捷。</p>
</li>
<li>
<p><strong>前提条件</strong>：</p>
</li>
<li>
<p>自定义主机名 <code>134257.xyz</code> 在 Cloudflare 中必须保持“有效”状态。</p>
</li>
<li>
<p>回退源 <code>cname.134258.xyz</code> 必须配置正确且有效。</p>
</li>
<li>
<p><code>134257.xyz</code> 的流量必须能正确路由到 Cloudflare 的网络（即 CNAME 记录有效）。</p>
</li>
</ul>
<p><strong>总结来说：</strong></p>
<p>是的，Cloudflare 会努力确保你的自定义主机名的 SSL 证书自动续期，你不需要手动干预。只要你的整体配置（Cloudflare 内部设置、DNS 记录）保持不变，并且你的域名持续通过 Cloudflare 的网络提供服务，证书续期通常是无缝的。</p>
<p><strong>需要注意的潜在问题点（虽然不常见）：</strong></p>
<ul>
<li>如果 <code>cloudflare.182682.xyz</code> 这个第三方优选 IP 服务出现问题，导致流量无法到达 Cloudflare，可能会影响 HTTP-01 续期。</li>
<li>如果你不小心删除了关键的 DNS 记录（如 TXT 记录，或修改了 CNAME 使其不再指向 Cloudflare 网络）。</li>
<li>Cloudflare 平台自身的服务中断（非常罕见）。</li>
</ul>
<p>因此，建议偶尔检查一下 Cloudflare 仪表盘中自定义主机名的状态，确保一切正常。</p>
</blockquote>
]]></content:encoded>
            <author>Simon</author>
        </item>
        <item>
            <title><![CDATA[Windows 下通过 PowerShell 配置 Mcp]]></title>
            <link>https://sirmo-blog.pages.dev/posts/mcp-powershell-setup/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/mcp-powershell-setup/</guid>
            <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[记录一下在 Windows 上使用 Cursor 或者 Roocode 的时候，通过 PowerShell 配置 Mcp 服务器的方法]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>重要</p>
<p>这篇文章的图片使用的是一个免费图床，如果图片加载不出来请见谅，因为个人原因暂不考虑迁移，如影响到阅读请通过页面底部邮件方式联系我进行修复</p>
<p>本文最先发布在：<a href="https://linux.do/t/topic/624552">https://linux.do/t/topic/624552</a> 上，建议去原贴查看</p>
</blockquote>
<h2>前言</h2>
<blockquote>
<p>如果嫌前言啰嗦，可以直接跳转到后文 “改用 Powershell” 部分没有使用 CMD，哪怕我后面发现在 Powershell 中启动 Mcp 服务器，实际上也是在 CMD 中启动的因为我个人更喜欢更现代的 Powershell 而非 CMD</p>
</blockquote>
<p>我一开始是在我的 MacBook 上面使用 Mcp 的，说实话并没有碰到什么奇怪的问题，只需要配置好必要的终端环境，比如 Nodejs 或者 Python 环境什么的，然后找到自己想用的 Mcp，比如我自己常用的是一位佬友写的 <a href="https://linux.do/t/topic/556607">Codelf</a>，通过阅读配置说明，我们可以获取到一个类似以下形式的 JSON 内容：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;      "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;      "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<blockquote>
<p>在此引用一下前文提到的 Codelf Mcp 配置文件，仅作为解释使用，如果需要正确使用该 Mcp，请点击前文链接去原帖和项目地址查阅</p>
</blockquote>
<p>然后将其中的核心配置文件，也就是：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;        "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>部分，然后粘贴到我的 Cursor 或者 Roocode 的 Mcp 配置文件中去。然后稍等片刻（网络通畅情况下），就可以看到工作指示灯变成绿色：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c31b4d6736.png" alt="cursor" loading="lazy" /&gt;</p>
<p>下方的是 Roocode 的 Mcp 配置界面，可以看到也是生效的（虽然启用的并不是 Codelf 而是 context7）：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c2a4cb2e52.png" alt="Roocode 的 Mcp 配置界面图" loading="lazy" /&gt;</p>
<p>然后我就可以愉快地在我的 MacBook 上使用 Mcp 给我带来的便利了……</p>
<h2>尝试用 CMD 启动 Mcp</h2>
<p>但是有一天，我心血来潮，打算在我的 Windows 电脑上进行 Mcp 的使用。我先在我的 Windows 上配置好了 Nodejs 环境和 Python 环境，然后我按照在 Mac 上的逻辑，直接复制粘贴一气呵成，然后就……失败了</p>
<p>我尝试通过搜索引擎得到解决方案（没有用 AI 搜索是因为我还不太习惯）：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c2b9a781da.png" alt="搜索结果图" loading="lazy" /&gt;</p>
<p>第一个第二个写的文章感觉起来还不错，然后我依葫芦画瓢，都试了一次：</p>
<blockquote>
<p>在此之前我已通过</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;npm install -g codelf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>命令全局安装了佬友的包（其实可以不用这么做的，当时是因为问了一下 AI）</p>
<p>我的 Windows 电脑上的 Cursor 版本为 0.49.6，Roocode 版本为 v3.15.5，Windows 版本为 11 24H2</p>
<p>Powershell 版本为 v7.5.1（通过 Winget 命令参考<a href="https://learn.microsoft.com/zh-cn/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5#install-powershell-using-winget-recommended">官方文档</a>安装的）</p>
<p>Nodejs 通过 Fnm（v1.38.1） 管理，Node 版本为 v20.19.0，npm 版本为 v10.8.2</p>
</blockquote>
<ul>
<li>第一篇文章的思路：</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd /c npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>嗯…… 失败了：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c2c714d9fa.png" alt="思路一失败图" loading="lazy" /&gt;</p>
<ul>
<li>第二篇文章的思路：</li>
</ul>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "/c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>还是失败了，报错是一样的，而且说实话，我感觉这两个都是同一个命令（其实还有一个版本，是在第二篇的思路的 “/c” 和 “npx” 中间加上一个 “-y” 但是也不行）</p>
<p>然后我就纳闷了，怎么回事儿。于是我就自己打开一个 cmd 窗口，试了一下：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c2ce07ce16.png" alt="CMD窗口图" loading="lazy" /&gt;</p>
<p>原来是没有设置好 CMD 下的环境变量，怪不得启动不成功</p>
<p>那么到这里其实已经知道了原因了，可是我一般不用 CMD 的啊，我的开发工具也好，终端的默认启动也好都是 Powershell，而且我看站里面有人说，每次启动 Mcp 服务器会出现一个黑框框？好像是 CMD 的那个进程框框，我也不喜欢……</p>
<p>所以……</p>
<h2>改用 PowerShell</h2>
<h3>Cursor 配置 Mcp</h3>
<blockquote>
<p>在此之前我已通过（重声明一次，便于跳看文章的读者理解）</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;npm install -g codelf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>命令全局安装了佬友的包（其实可以不用这么做的，当时是因为问了一下 AI）</p>
<p>我的 Windows 电脑上的 Cursor 版本为 0.49.6，Roocode 版本为 v3.15.5，Windows 版本为 11 24H2</p>
<p>Powershell 版本为 v7.5.1（通过 Winget 命令参考<a href="https://learn.microsoft.com/zh-cn/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5#install-powershell-using-winget-recommended">官方文档</a>安装的）</p>
<p>Nodejs 通过 Fnm（v1.38.1） 管理，Node 版本为 v20.19.0，npm 版本为 v10.8.2</p>
</blockquote>
<p>我们重新审视一下前文最后提及的两个思路的配置文件内容：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;// 第一种思路（JSON中不允许有注释，我这里只是方便解释）&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd /c npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;// 第二种思路（JSON中不允许有注释，我这里只是方便解释）&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "/c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>我们可以写出以下配置文件：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd /c pwsh"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "-c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>或者如下形式</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "/c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "pwsh"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "-c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>任选其一粘贴到 Cursor 的 Mcp 配置文件中后刷新：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c31b4d6736.png" alt="启动Mcp成功图" loading="lazy" /&gt;</p>
<p>启动成功，检测是否生效：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c31e07c5e0.png" alt="Cursor生效成功图" loading="lazy" /&gt;</p>
<p>成功生效。同时，我并没有弹出什么黑窗口，我不知道是不是我通过 CMD 启动 Powershell 的原因，总之，这很好</p>
<h3>Roocode 配置 Mcp</h3>
<p>但是在 Roocode 中需要注意一下，似乎第一种形式的写法是不会生效的，总之我复制到 Roocode 的配置文件中后，等待许久都不见加载成功，也没有看到报错</p>
<p>而采用第二种形式，也就是如下形式，则可以生效：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "codelf"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "/c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "pwsh"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "-c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "codelf"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c32452e18b.png" alt="Roocode生效成功图" loading="lazy" /&gt;</p>
<p>验证一下：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c3272460a3.png" alt="Roocode使用成功图" loading="lazy" /&gt;</p>
<p>至此，便成功使用 Powershell 启动本地 Mcp 服务器</p>
<p>如果没有特殊要求，建议采用第二种写法，无论是 Cursor 还是 Roocode 都可以生效</p>
<h3>其他 Mcp 添加尝试</h3>
<h4>添加 Context 7</h4>
<p>官方 JSON 配置：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;  "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "context7"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;      "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;      "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"-y"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;, &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"@upstash/context7-mcp@latest"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>修改为：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "context7"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"pwsh"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "-c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "@upstash/context7-mcp@latest"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>即可在 Cursor 中正常生效：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c32e1638e1.png" alt="Cursor生效成功图" loading="lazy" /&gt;</p>
<p>Roocode 似乎不可以采用上面的写法，会出现问题：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c3306e9ee8.png" alt="Roocode失败图" loading="lazy" /&gt;</p>
<p>采用如下写法即可：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;    "mcpServers"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;        "context7"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "command"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: &lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;"cmd"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt;            "args"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "/c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "pwsh"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "-c"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "npx"&lt;/span&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt;                "@upstash/context7-mcp@latest"&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;            ]&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#24292e;--shiki-dark:#E1E4E8"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>我猜测是因为我的 Cursor 已经设置好了启动的终端为我的 Powershell：</p>
<p>&lt;img src="https://free.picui.cn/free/2025/06/01/683c332d6dc8e.png" alt="Cursor配置界面图" loading="lazy" /&gt;</p>
<p>所以可以正确识别 <code>pwsh</code> 命令（仅仅个人猜测，没有验证）</p>
<p>但是 Roocode 似乎没有？</p>
<p>总之不是很影响，如果不想出现这样的问题，可以统一采用第二种写法也就是 Roocode 可以识别的写法即可</p>
<h2>结语</h2>
<p>以上就是我自己在 Windows 上面配置和使用 Mcp 的经验</p>
<p>限于时间和精力，以及我自己的使用情况，我仅仅粗略地分享了两种 Mcp 服务的配置方式，至于其他的，比如使用 <code>uvx</code> 的，我便没有尝试了，但是我个人觉得，方式应该是差不多的</p>
<p>然后补充一下我启动 Mcp 的时候没有出现黑框框，我不知道是不是个例，但是确实没有任何窗口弹出…… 反而用 CMD 命令的时候确实弹出来了，但是因为加载环境失败直接自己关闭了……总之没有弹出额外的窗口确实挺好的</p>
<p>最后限于个人水平，文章内容如有不妥或者缺漏或者其他问题，欢迎联系我反馈</p>
]]></content:encoded>
            <author>Simon</author>
        </item>
        <item>
            <title><![CDATA[基础的下载软件和解压缩入门实践]]></title>
            <link>https://sirmo-blog.pages.dev/posts/download-and-extract-basics/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/download-and-extract-basics/</guid>
            <pubDate>Thu, 17 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[简单讲讲如何在 Windows 电脑上进行基本的下载和解压缩等操作]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>重要</p>
<p>这篇文章的图片使用的是一个免费图床，如果图片加载不出来请见谅，因为个人原因暂不考虑迁移，如影响到阅读请通过页面底部邮件方式联系我进行修复</p>
</blockquote>
<h2>说在最前面</h2>
<p>“怎么下载东西”，这似乎是一个很简单的话题。无论我们是使用电脑还是手机，我们都会碰到或者了解到这个概念。比如你在某个网站上面看到了一个好看的图片，或者是一个让你觉得很有收藏价值的视频，你想下载到自己的设备上永久的保存下载，无论这个网站是否存在，你都可以在自己的设备上浏览和观看。</p>
<p>亦或者是你偶然在 B 站或者其他的博主那里看到了一个有趣的软件或者工具，你想将其下载到自己的电脑或者手机上，然后去享受这个软件给你带来的各种功能和便利。</p>
<p>那么这些念头从产生到落实，都不可避免的要提及到“下载”这个熟悉又陌生的概念。</p>
<p>手机上我们操作起来很简单，比如我需要下载一个软件，这个软件假如叫做“百度”，那么我们先让自己的手机连接上自己家的 Wi-Fi，或者打开手机的流量，然后找到自己手机上的一个叫做“应用商店”或者“软件商店”的 App（苹果设备叫做 App Store），点击它然后在最上面的搜索框中输入“百度”这两个字，然后我们就可以看到这个软件如我们所想的那样出现在了我们屏幕上，然后我们就可以点击它右边的“安装”或者“下载”来完成这个步骤，这样“百度”就被下载，然后安装到了我们手机当中。</p>
<p>下图为手机下载和安装百度的主要方式（我用的设备是 OPPO 手机，其他品牌也是类似的操作）：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f7d32b3428.gif" alt="手机下载软件演示" loading="lazy" /&gt;</p>
<p>简单来说，这其实包含了两个动作，一个是“下载”，一个是“安装”。不过我们现在仅仅只关注“下载”这个步骤，在手机上安装 App，应用商店会在我们下载软件后自动帮我们安装，我们只需要搜索自己想要的软件然后下载等待安装完毕使用即可，手机系统帮助我们做好了后续的工作。</p>
<p>但是在电脑上，情况就变得似乎完全不是那么一回事儿了，我们需要自己去寻找和下载我们需要安装的软件，而且还要经过我们一系列必要的操作，才能顺顺利利地将软件安装到我们的电脑上，这样我们才可以使用。这似乎听起来是一件比较困难的事情，因为我们也许曾经听到过各种有关于电脑下载和安装软件的“陷阱”，比如不当操作下载到了含有病毒或者广告的软件，又或者是下载安装了盗版的软件，又或者是根本就不知道怎么下载，手足无措……真是让人头疼！这些操作不当而导致的糟糕的后果，可能会让我们寸步难行。不过其实准确地找到和下载安装我们需要的软件并不是一件困难的事情，相反，这个其实是我们每个人应该具备的基础操作，就像我们每天打开手机，然后找到我们喜欢的软件，接受它给我们带来的我们所感兴趣的信息一样简单。</p>
<p>所以，如果你刚买了一台新的电脑，想要在上面安装自己想要的软件，或者你还对“解压”和“压缩”以及“下载”这些概念还感到困惑的话，那么你可以尝试阅读一下我后面的分享，这也许会对你有一些帮助。</p>
<h2>电脑篇（Windows 系统）</h2>
<h3>下载前的准备</h3>
<p>在现在这个新时代，我们并不需要像好几年甚至十多年前那样，电脑上要必备一个下载器，用于应对各种下载情况。现在不但下载方式更为人性化，而且浏览器就可以帮助我们解决绝大部分的下载需求。</p>
<p>因为本文讲究实践而非理论，并且是基础向的，因此下载的原理什么的都不会在此展开，我们直接开始实践。</p>
<p>首先你的电脑必须满足以下条件：</p>
<ul>
<li>可以正常开机使用以及接入了互联网，已经可以“上网”，也就是我们一般情况下说的已经可以看电视或者用浏览器搜索东西。</li>
<li>拥有一个可以使用的浏览器，一般情况下 Windows 系统都会自带一个 <code>Edge</code> 浏览器，所以这个条件大多数情况下都满足。</li>
</ul>
<h3>用浏览器下载（非压缩包）</h3>
<p>我以一个十分常用的软件为例，简单地讨论和演示一下，我们该如何比较好地去在电脑上面下载和安装这个软件。首先我们关注一下“搜索”，之前我已经提及过，在电脑上安装软件并没有像手机那样简便，而是需要我们用户自己去主动地寻找和安装自己所需的软件。</p>
<p>所以我们首先要知道自己需要安装什么软件，然后我们就可以开始尝试进行搜索，查找互联网上这个软件是否有电脑版供我们下载安装（因为有部分软件是没有 Windows 电脑端的，可能只有手机端，甚至只有 MAC 端或者 Linux 端，这些都是其他的系统了，不过我们都可以通过搜索来验证我们这个软件兼容性如何）。</p>
<p>那么我们可以打开我们的浏览器，在你的电脑上可能是<code>Microsoft Edge</code>或者是<code>Google Chrome</code>，总之随便选择一个，如果你没有找到，那么你可以通过键盘快捷方式来进行搜索，先按住你电脑键盘上的方块键不要松开（四个小正方形拼接成的大正方形。其实就是微软的logo，又叫做windows徽标键等），然后再按下字母 Q 键，这样就会弹出来一个搜索框，然后你就可以输入<code>edge</code>就可以看到这个浏览器图标了，然后就可以点击它打开自己的浏览器。</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f7ec8e1d77.gif" alt="gif2" loading="lazy" /&gt;</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f7f8a14936.jpeg" alt="image-20241011105221692.jpeg" loading="lazy" /&gt;</p>
<p>在这个页面你可以点一下上面的那个搜索框，将自己的键盘输入聚焦在这个搜索框内（意思就是点一下那个搜索框，不过一般情况下会自动聚焦过去，你会看到有个小竖着的小光标在那个框框里面闪着），然后输入<code>微信</code>二字，按一下你电脑键盘上的<code>Enter</code>，也就是键盘右边中间的那个按键，然后你的浏览器就会根据你的输入给出结果，我们选择微信的官方网站，点击进入：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f7fe4772db.png" alt="image-20241011105722968.png" loading="lazy" /&gt;</p>
<p>然后选择我们需要的系统版本下载：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8050ebc29.jpeg" alt="image-20241011105835462.jpeg" loading="lazy" /&gt;</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f806214df2.jpeg" alt="image-20241011110016805.jpeg" loading="lazy" /&gt;</p>
<p>点击一下那个大的绿色的图标，然后我们浏览器右上角就会弹出来一个提示，告诉我们已经开始下载我们需要的软件了，我们稍等片刻，等待其下载完毕：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8099065e0.jpeg" alt="image-20241011110230794.jpeg" loading="lazy" /&gt;</p>
<p>下载完毕之后，请将自己的鼠标移动到这个对话框上面去，点击“在文件夹中显示”，而不推荐直接点击那个有颜色的“打开文件”，因为点击这个“在文件夹中显示后”系统会直接打开一个新的窗口，然后自动定位到这个软件下载的目录，也就是下载到了哪里。这样以便于在我们完成安装之后，删除掉这个安装包以节约电脑存储空间，这是个好习惯，而且及时清理不必要的文件，也可以避免因下载目录文件堆积而导致的混乱。</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f80c6ca1b6.gif" alt="gif3" loading="lazy" /&gt;</p>
<p>接下来在打开的文件夹中，我们找到刚刚下载好的软件，一般情况下不需要我们自己去寻找，系统会自动帮助我们选中已下载好的文件，便于我们快速定位。</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f81c719ee7.png" alt="" loading="lazy" /&gt;</p>
<p>找到我们刚刚下载好的微信，然后双击它开始安装：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f81d60c0f6.gif" alt="" loading="lazy" /&gt;</p>
<p>在弹出的窗口中选择“是”以允许微信开始安装到我们电脑上，然后我们等待其加载完毕，然后就会弹出来正式的安装窗口：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f82441c38a.png" alt="gif4" loading="lazy" /&gt;</p>
<p>如果你的电脑上面有其他分区，不想占用自己的电脑 C 盘空间，那么我十分建议你将各种各样的应用都安装到其他的盘中，限于篇幅我这里就仅仅展示一下如何操作，其他软件的大致流程也是类似的（当然，如果你电脑就一个分区，那么就直接安装吧，想修改也修改不了😄）：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f82886db24.gif" alt="" loading="lazy" /&gt;</p>
<p>而我在这个演示里面新建了两个文件夹，是因为我想要一个更为整洁的软件收纳情况，并且我用的都是英文文件名，我十分推荐这样操作，因为这样可以避免安装其他软件的时候碰见的各种各样的稀奇古怪的问题：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f82b4cf801.png" alt="" loading="lazy" /&gt;</p>
<p>如果你电脑没有第二个分区或者硬盘，那么你直接同意协议安装即可，不需要修改位置。确认无误之后，便可以点击安装来进行安装操作了：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f82e2ebcd0.gif" alt="" loading="lazy" /&gt;</p>
<p>如果你需要开机自启动微信的话，可以点击勾选底下的“开机时自动启动微信”，不然，请保持不变。</p>
<p>怎么看自己的电脑有几个分区或者几个盘呢？这里不做更为细致的区分，我提供一个最符合直觉的判断方式，就是打开你的电脑上的“资源管理器”，也就是桌面的“此电脑”或者是“我的电脑”，然后观察其中有几个看起来长得像磁盘而且还有容量标注的东西，就说明有几个分区：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8322703a2.png" alt="" loading="lazy" /&gt;</p>
<p>如果你找不到你电脑桌面上的“此电脑”，那么同样的你可以使用之前提及到的搜索方式，不过这次搜索的内容并不是“此电脑”，而应该是“文件资源管理器”：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f834692d67.gif" alt="move7.gif" loading="lazy" /&gt;</p>
<p>而如果你想要在自己的桌面看到这个图标，那么你可以通过在设置中，修改主题，然后选择修改桌面图标来添加它：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f836d3b19b.gif" alt="move8.gif" loading="lazy" /&gt;</p>
<p>至此，微信已经安装完毕，最后我们做一些收尾工作，也就是删除微信的安装包，因为微信已经安装完毕了，安装包我们已经不需要了，所以我们可以将其删除清理掉，同样的是找到微信安装包的位置，默认一般是在你电脑的“下载”文件夹内，找到将其彻底删除即可（包含两个步骤，第一是移动到回收站，第二是清空回收站，这样才能彻底删除，或者可以像视频中的那样，手动打开回收站找到你想要彻底删除的文件，右键将其彻底删除即可，如果不在回收站中彻底删除，那么也没有释放完空间，仅仅只是给要删除的文件换了个位置而已。不过这个机制也有好处，就是面对一些小文件，这样的二步确认删除，可以避免误删操作，但是文件要是太大了，比如达到了几个甚至几十个 GB 大小，那么默认可能是永久删除而非移动到回收站）：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f839f6ac35.gif" alt="move9.gif" loading="lazy" /&gt;</p>
<p>经过这次简单的实践，相信你已经知道了如何在电脑上通过浏览器来简单的进行搜索和下载安装自己需要的软件了。我个人建议是用 <code>Edge</code> 浏览器自带的 <code>Bing</code> 搜索引擎进行软件的查找，也就是这个实践最开始演示的那样，直接搜索就好了，而减少使用用百度，因为百度有时候广告确实多，<code>Bing</code> 虽然也有广告，但是相对而言会少很多，可以减轻我们筛选的负担。</p>
<p>但是因为这篇文章主要讲的是如何下载，而不是如何搜索，所以搜索引擎到底该如何使用，以及准确地搜索到我们需要的内容，便不在这个文章的讨论范围内，请各位自行发挥了……</p>
<h3>用浏览器下载（压缩包）</h3>
<p>那么浏览器下载的第二部分就是该如何去处理压缩包文件了。</p>
<p>浏览器下载软件的方式，上一个部分已经讲的差不多了，现在我们来简单介绍一下该如何去处理下载下来的东西是压缩包而非微信这样的可以直接点击安装的软件包的情况。</p>
<p>有时候我们可能会碰到这样的场景：在学校或者在公司，学校或者老板要求提交某些材料，一般情况下提交一份还好，我们做好了文档就可以直接发出去，但是如果需要提交的材料很多，比如五六份或者十多二十份，那么这个时候还是一个个发的话，不但发起来累，对方接收起来也十分混乱。</p>
<p>或者我们需要发一个比较大的文件，直接发会受到文件大小限制，比如文件大小不能超过多少 MB。</p>
<p>又或者是我们需要从别人那里下载某些破解或者有趣的软件，而发布者为了便于整理和发布，大部分都是会选择以压缩包加解压密码的方式进行分享，而且加上解压密码有时候还可以用来保护自己的资源，或者可以以此收一笔解压费……</p>
<p>而以上情况，我们都需要涉及到“压缩”和“解压”这两个概念。同样的，这个具体是怎么实现的不是本文的目的，我们直接开始实践。</p>
<h4>如何解压？</h4>
<p>如果你想要知道压缩和解压的原理以及它们具体的实现还有它们的作用什么的，那么我建议你去看看其他的文章，因为我这里不会讲这些，我只会给你分享怎么用而不是为什么。</p>
<p>我们可以看到这里有一个压缩包，我们观察它的后缀（文件扩展名）就可以确认，或者看它这里显示的类型也可以知道这个是压缩包文件。</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f85da993d6.png" alt="" loading="lazy" /&gt;</p>
<p>那么如何显示这个文件后缀呢？这个需要先在你电脑上打开一个设置，这样才能显示文件后缀：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f85f386468.gif" alt="" loading="lazy" /&gt;</p>
<p>至于什么是文件扩展名，以及为什么叫这个我就不多说了，简单说就是看这个后缀（文件扩展名）就可以判断一个文件的类型是什么，比如它是图片，后缀就可能是 <code>.png</code>或者<code>.jpg</code>。然后视频就可能是<code>.mp4</code>或者其他是什么，这是规定，我也不知道该怎么更合理地去解释……</p>
<p>然后我们就需要进行解压，压缩包就像是快递站发给我们的包裹，我们虽然知道里面是什么东西（当然也有可能不知道😄），可是我们要先拆开快递盒，才可以真正的看或者用到里面的东西，所以其实解压缩和拆快递盒差不多。</p>
<p>在 Windows 系统中，系统是内置了解压缩的工具的，我们可以直接解压缩，在一般情况下是足够用的了，用法也很简单，就是直接右键“全部解压缩”或者直接双击打开压缩包，然后再选择“全部解压缩”就可以了：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f861824c02.gif" alt="da2.gif" loading="lazy" /&gt;</p>
<p>但是。。。虽然这样可行，不过我觉得这个自带的不但不好看而且也不是很好用，有时候效率也不高，因此我们就需要一些其他的软件来帮助我们进行这个操作，这里以我常用的一款软件<code>Bandizip</code>为例，当然你也可以用其他的软件，比如经典的<code>7z</code>或者<code>Winrar</code>（好像是叫这个）什么的。</p>
<p>首先我们需要下载安装这个软件，官方网站是：<a href="https://www.bandisoft.com/bandizip/">https://www.bandisoft.com/bandizip/</a></p>
<p>点一下上面这个链接就会自动让你的浏览器跳转到这个网站，当然你也可以搜索<code>Bandizip</code>找到官网进行下载然后进行安装：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f863bc156c.gif" alt="do4.gif" loading="lazy" /&gt;</p>
<p>按照我这样的安装和设置基本上就够了，如果你想要更改其他的设置你可以自行修改。</p>
<p>安装完毕之后，我们就可以通过 <code>Bandizip</code> 来帮助我们解压缩了，使用起来也是非常的简单快捷，我们只要对我们需要解压的文件右键然后选择解压或者“智能解压”（我挺喜欢这个），<code>Bandizip</code> 就会帮我们完成好这件事情：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8696d5004.gif" alt="" loading="lazy" /&gt;</p>
<p>当然解压完毕之后，记得将之前的压缩包删除掉，因为我们已经拿到了压缩包里面的东西了，所以如果你不需要再多拿几次的话，就可以将其删除了，操作也是和之前删除微信安装包一样的，两步走，这样比较保险（毕竟谁知道会不会又要拿一次里面的东西呢？）：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f86cc797e8.gif" alt="do6.gif" loading="lazy" /&gt;</p>
<h4>如何解压？（有密码）</h4>
<p>操作其实也是很简单的，当一个压缩包有密码的时候，我们对其进行解压操作，会自动提示我们输入密码，然后就可以解压了（以<code>1234</code>为密码举例）：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f874e292c3.gif" alt="" loading="lazy" /&gt;</p>
<h4>如何压缩？</h4>
<p>有了 Bandizip 后，压缩也是一件十分容易的事情，我们只需要选择好我们需要压缩的文件，然后右键添加到<code>xxx.zip</code>或者<code>xxx.7z</code>就可以压缩了：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8768c26c1.gif" alt="" loading="lazy" /&gt;</p>
<h4>如何为压缩包加密码？</h4>
<p>也是十分方便，我们同样的选择我们需要压缩的文件，然后再右键，不过这次我们选择<code>新建压缩包</code>：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f878118d97.gif" alt="" loading="lazy" /&gt;</p>
<p>然后输入你想要设置的密码，就可以完成加密压缩了。</p>
<h3>用下载工具下载</h3>
<p>有个时候，我们可能会碰见这样的情况，比如我们需要下载一个国外的软件或者其他的什么东西，但是通过浏览器下载，速度却十分缓慢，动辄就是以小时甚至天为单位，当我们遇到这样的情况，就需要用其他的一些办法来帮助我们快速下载了。而且这个方法同样也适用于其他的下载，比如我们可以用下载器替代浏览器下载文件，有时候速度甚至会更快！</p>
<p>在此我介绍一下我个人认为比较简洁好用的软件：<code>Motrix</code></p>
<p>官网（中文）：<a href="https://motrix.app/zh-CN/">https://motrix.app/zh-CN/</a></p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f87c1142b2.png" alt="" loading="lazy" /&gt;</p>
<p>但是因为这个网站也是在国外，所以下载起来也很慢……所以我这里放一下国内的下载链接，是我通过网盘分享给你的，但是我用的是蓝奏云，不需要登录也不需要安装客户端，点击就可以下载，还是很方便的（Windows便携版）：</p>
<p><a href="https://wwww.lanzoue.com/b00wm1apah">https://wwww.lanzoue.com/b00wm1apah</a> 访问密码</p>
<p>下载下来之后不需要安装，直接双击就可以使用，在第一次使用的时候，我们需要稍微调整一下设置，按照我的步骤来基本就够了，如果你有其他自己的个人需要，请自便：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f88025b237.gif" alt="do10.gif" loading="lazy" /&gt;</p>
<p>然后我们尝试用这个软件去下载一个国外软件<code>Wireshark</code>，首先我们看看如果我们使用浏览器会是个什么情况：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f88214f988.gif" alt="" loading="lazy" /&gt;</p>
<p>可以看到这个速度是让人不可接受的……</p>
<p>那我们用<code>Motrix</code>试试？我们先复制下载链接，然后粘贴到<code>Motrix</code>中尝试一下（我这里是先点击下载，再通过浏览器获取到下载链接，而不是直接对着那个下载链接右键复制，是因为这样有时候可以规避掉一些奇妙的问题）：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8848b72a8.gif" alt="" loading="lazy" /&gt;</p>
<p>可以看到，我复制好链接之后，在<code>Motrix</code>中新建下载任务的时候，它自动获取了我剪切板中的链接，这个还是很方便的，而且我们也可以看到，这个速度比我们之前用浏览器下载快了何止一两倍！</p>
<p><code>Motrix</code>也是默认将文件下载到我们的“下载”文件夹内的，我们可以很方便的找到：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8865a9257.gif" alt="" loading="lazy" /&gt;</p>
<p>这样，我们就可以通过下载工具，来加速我们的下载，以节约我们的时间。</p>
<p>下载完毕之后，我们应该打开任务栏的折叠区域，将<code>Motrix</code>退出，以节约我们的电脑内存的占用：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f88917f70a.gif" alt="" loading="lazy" /&gt;</p>
<p>这个软件只是我个人认为还是比较方便且干净的，没有登录也没有其他的什么使用门槛。但是有时候可能加速效果不是那么明显，比如当你去下载一些比较老的资源或者是一些其他的奇奇怪怪的东西……它也可能下载不动，那么你可以去尝试一下国产的<code>迅雷</code>。</p>
<p>虽然这个软件很多人讨厌，很多人觉着很不好，很多人觉得这样或者那样的恶劣……但是它确实是有用的，有些古老的资源哪怕你不抱希望了，但是用一下<code>迅雷</code>，说不定就突然可以下载了。这些其实都是工具，能够解决自己的需求，我觉得也是一个好的工具。</p>
<h2>说在最后面</h2>
<p>至此，我们这个简单的下载和解压教程便结束了，虽然没有演示多少内容，但是主要的流程都已经包含在内，这些都是最为基础的基本操作，依葫芦画瓢，读者自行探索，在不断实践中积累经验，也可以在下载的时候游刃有余。</p>
<p>这篇教程限于时间和篇幅，其他的部分，例如“手机篇”以及“如何下载其他平台的视频，比如 B 站或者爱奇艺或者腾讯视频”以及“如何进行 BT 下载”等，都不能在此一一展示，如果读者有兴趣或者需求的话，建议自己通过浏览器或者视频平台进行搜索和学习，我相信其他人也会给你一个很不错的方法，以满足你的多样化需求。</p>
<p>现如今，手机已然成为我们生活的必需品，我们生活的方方面面都离不开它。</p>
<p>手机厂商和开发者们为了降低手机的使用门槛，我们在手机上面完全不需要考虑很多事情，就可以实现文章最开始的那样，打开应用商店，找到自己想要的应用，一键安装下载即可。这确实是一个很不错的体验，至少在我看来，这非常的方便和现代化😄。我个人也十分喜欢这样的省心省力的方式，但是由于在生活中又不可避免地要接触到电脑，那么这些基本的操作在电脑上就有所不同，我们便需要自己主动去探索和尝试，以找到我们最舒服的操作，来满足我们的下载需要。</p>
<p>可是，如果可以一键安装，免去这种繁杂的步骤，在电脑上下载安装使用软件如同手机那般丝滑，谁又愿意去这样一步步操作呢？尤其是不少人深受国内搜索引擎的广告轰炸之苦，寻找一个软件的官网需要擦亮眼睛，和广告商斗智斗勇。</p>
<p>如果你也有这样的烦恼，那么我十分推荐使用<code>scoop</code>进行软件的下载和管理，比如我需要安装 <code>Motrix</code>，那么我用<code>scoop</code>就是这样操作的：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f88af846a5.gif" alt="" loading="lazy" /&gt;</p>
<p>如果读者感兴趣的话，可以自己去了解一下，这个可能需要一定的操作门槛，不过设置好之后，使用起来还是十分方便的。</p>
<p>但是这个也不是一个十全十美的方法，其实国内大部分软件这个都不能下载，意思就是其实这个适用面也不是那么的广。不过对于开发者啊或者程序员来说，这个确实是不可多得的好工具。大家有精力的话，可以自己去探索一下，网上也有不少长篇教程是专门讲这个如何安装到使用的（不过有些文章可能比较老了，比如有些文章让我们定义环境变量来安装的，怎么说呢，其实官方是不推荐的，官方推荐传递参数就可以了，在此不多讲了，大家看其他教程的时候，最好看看文章发表时间，建议是不要看太老的文章）……</p>
]]></content:encoded>
            <author>Simon</author>
        </item>
        <item>
            <title><![CDATA[Wireshark 的下载与安装]]></title>
            <link>https://sirmo-blog.pages.dev/posts/wireshark-installation/</link>
            <guid isPermaLink="false">https://sirmo-blog.pages.dev/posts/wireshark-installation/</guid>
            <pubDate>Thu, 17 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[这个文章仅仅只包含了此软件的最基本的安装，如果需要更为深入地学习和使用这个软件的话，请移步至此软件的官方说明书页面]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>重要</p>
<p>这篇文章的图片使用的是一个免费图床，如果图片加载不出来请见谅，因为个人原因暂不考虑迁移，如影响到阅读请通过页面底部邮件方式联系我进行修复</p>
</blockquote>
<h2>本文简述</h2>
<p>这个文章仅仅只包含了此软件的最基本的安装，如果需要更为深入地学习和使用这个软件的话，请移步至此软件的官方说明书页面（英文）：<a href="https://www.wireshark.org/docs/wsug_html_chunked/index.html">https://www.wireshark.org/docs/wsug_html_chunked/index.html</a></p>
<h2>软件简介</h2>
<p><code>WireShark</code> 是非常流行的网络封包分析工具，可以截取各种网络数据包，并显示数据包详细信息。常用于开发测试过程中各种问题定位。</p>
<h2>安装</h2>
<h3>方法一（常规）</h3>
<p>通过官方网站选择自己系统对应的版本安装：<a href="https://www.wireshark.org/">https://www.wireshark.org/</a></p>
<p>鉴于国内网络环境复杂和种种约束，如果在点击了下载之后，显示下载速度极其缓慢，可以通过以下方法来提高下载速度（应用名称带下划线的是我设置好了官方网站，点击就可以跳转下载）：</p>
<ul>
<li>使用国内软件商店（很不推荐但如果你电脑上有这些安全软件。。。可以考虑一下）：<a href="https://pc.qq.com/">腾讯电脑管家应用商店</a>、<a href="https://baoku.360.cn/baokuweb.html">360应用商店</a>等</li>
<li>采用专业的下载工具（比较推荐）：<a href="https://pc.xunlei.com/">迅雷</a>（会用也可以的）、<a href="https://motrix.app/zh-CN/">Motrix</a>、<a href="https://xdown.org/">XDown</a>等（下图为Motrix下载界面，可以看到速度还不错）</li>
</ul>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8a1d1a5f7.jpeg" alt="" loading="lazy" /&gt;</p>
<ul>
<li>在网上选择一些下载站，然后直接下载他们的软件（很不推荐）：风险比较大，不列举</li>
<li>有些博客博主给出的网盘下载链接（还可以也不很推荐，但是我可以给你我的😄，解压密码都是<code>1234</code>）：</li>
</ul>
<p><a href="https://wwww.lanzoue.com/b00wm177qh">https://wwww.lanzoue.com/b00wm177qh</a> 访问密码: <code>ci5m</code></p>
<blockquote>
<p>进去后点击软件名字，不出意外的话就会自动开始下载了，不需要注册也不需要下载什么软件，点击就可以下载，不过这个网盘里面我只放了Windows系统的，如何你想要下载其他系统版本，以及不知道如何解压的话，则你可以看看我的这篇文章：<a href="./wireshark-installation">「点我直达」</a></p>
</blockquote>
<p>在下载好安装包后，就可以找到你下载的目录，然后双击进行安装，具体安装步骤我无法给出，因为我是用第二种方法进行下载安装的，但是不用灰心，你可以在自己的浏览器或者手机浏览器上面搜索<code>Wireshark 安装步骤</code>，然后选择一个有图文的详细的，比较新的教程，按照操作来就可以了。</p>
<h3>方法二（推荐）</h3>
<p>使用<code>scoop</code> 进行下载和安装以及管理。</p>
<p>通过官网的软件查询可以看到，此软件在 <code>scoop</code> 的 <code>extras</code>里面：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8a96e5b5d.jpeg" alt="" loading="lazy" /&gt;</p>
<p>那么我们就可以通过以下命令进行安装：</p>
<pre><code>&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;# 如果你还没有添加 extras 源，则应该先执行这个命令&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;# 如果已添加，请忽略&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;scoop&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; bucket&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; add&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; extras&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;# 安装 Wireshark，添加 -k 是为了禁止本地缓存安装包&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6a737d;--shiki-dark:#6A737D"&gt;# 简单说就是手机上的“安装并删除安装包”，减少存储空间占用&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#6f42c1;--shiki-dark:#B392F0"&gt;scoop&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; install&lt;/span&gt;&lt;span style="color:#005cc5;--shiki-dark:#79B8FF"&gt; -k&lt;/span&gt;&lt;span style="color:#032f62;--shiki-dark:#9ECBFF"&gt; extras/wireshark&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
</code></pre>
<p>等待下载和安装命令完成之后，根据提示，转到对应的目录下再去安装<code>Npcap</code>，至于<code>USBPcap</code>，这个是可选的，作用是捕获 USB 数据包，根据自己情况选择性安装，但是一般情况下用不到。</p>
<p>至此，我们便完成了该软件的安装。</p>
<h2>基础使用</h2>
<p>在自己电脑的“开始”菜单中，或者桌面上找到这个软件图标，然后点击它启动软件（“开始”菜单中单击鼠标左键一次就可以启动，桌面上需要将鼠标移动上去后，双击鼠标左键才可以启动），我们就可以看到如下界面：</p>
<p>&lt;img src="https://free.picui.cn/free/2026/01/08/695f8ad48c146.jpeg" alt="" loading="lazy" /&gt;</p>
<p>我们不需要修改或者动什么东西，保持默认就差不多了。</p>
<p>然后我们选择我们需要进行分析的网卡，一般而言，我们都是通过 Wi-Fi 来上网的，所以这里我们就可以选择<code>WLAN</code></p>
<blockquote>
<p>后面的内容先暂时搁置着，有机会再写了……</p>
</blockquote>
]]></content:encoded>
            <author>Simon</author>
        </item>
    </channel>
</rss>