<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>陈浩南的文档和博客 – Blog</title>
    <link>https://blog.chn.moe/blog/</link>
    <description>Recent content in Blog on 陈浩南的文档和博客</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Sat, 11 Apr 2026 19:14:04 +0800</lastBuildDate>
    
	  <atom:link href="https://blog.chn.moe/blog/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>日记中的时间标记</title>
      <link>https://blog.chn.moe/blog/time-notation-in-diary/</link>
      <pubDate>Sat, 11 Apr 2026 19:14:04 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/time-notation-in-diary/</guid>
      <description>
        
        
        &lt;h2&gt;时间标记&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;时间标记&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%97%b6%e9%97%b4%e6%a0%87%e8%ae%b0&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;很多地方都要标记时间。例如每周记账要标记这是哪一周，或者日记也要写这是哪一天。怎么做这个标记呢？&lt;/p&gt;
&lt;p&gt;直接写时间怎样？例如，现在是2026年2月13日晚上9点26分5秒；
或者更宽松一点，写到2月13日就行；
或者再加一些信息，例如星期、天气，毕竟这些也是影响自己状态的重大因素，而且一些日记本上也会有专门记录天气的地方&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。
我曾经就是直接写时间，和大部分人的做法一样。
但我觉得这样太冗长，同时又不直观。研究生前我还常用纸笔写日记，这样长的东西，想在字里行间插入一个时间的话，空白地方太小也写不下。&lt;/p&gt;
&lt;p&gt;做出改变的契机是，本科初期的某段时间，我需要在日记本里经常提到别的时间。
这时写“明天上午”之类的词汇是不合适的，因为我可能今天写一半、明天再打开接着写，时间就乱套了；写几月几日的话，又不够直观，且要么缺少信息要么太长。&lt;/p&gt;
&lt;p&gt;快速迭代了几个方案后，第四个&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;方案得到了长期的使用，在本科时用了很久，几乎贯穿我的本科，直到研究生才换到下一个方案。
这个方案是，用四位数字或字母来标记时间（形如&lt;code&gt;1A34&lt;/code&gt;），可以精确到几个小时。具体来说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一位（例子中的&lt;code&gt;1&lt;/code&gt;）标记这是第几个学期或者假期，从开始使用的那个学期（&lt;code&gt;0&lt;/code&gt;）开始计数，之后每个新学期或寒暑假加一；
阿拉伯数字用完就用大写英文字母&lt;code&gt;A&lt;/code&gt;到&lt;code&gt;Z&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;第二位（例子中的&lt;code&gt;A&lt;/code&gt;）用来标记这是学期第几周，从第一周开始（&lt;code&gt;0&lt;/code&gt;），之后每周加一，同样，阿拉伯数字用完后就用字母。&lt;/li&gt;
&lt;li&gt;第三位表示这是周几。周日视作一周的第一天（&lt;code&gt;0&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;第四位表示一天中的第几个时间段，从凌晨三点算起，每四个小时一个时间段，这恰好与我的生物钟基本重合，不同的时间段对应身体的不同状态。
例如，凌晨三点到七点标记为&lt;code&gt;0&lt;/code&gt;，这个时间段我往往在睡觉，如果写日记了说明因为特殊原因醒了；
中午11点到3点标记为&lt;code&gt;2&lt;/code&gt;，这时我一般在吃饭、去吃饭的路上、思考吃什么、吃完回味，或者在晕碳。凌晨三点以前的三个小时算到前一天。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我自认为这个设计妙极了。它：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;很短，只有四个字母，写起来方便；&lt;/li&gt;
&lt;li&gt;符合直觉，不需要再考虑“3月2日是周几、我当时是在上课还是周末在玩”，或者“这个日记是在下午时精神集中时写的，还是凌晨睡不着精神涣散时写的”；&lt;/li&gt;
&lt;li&gt;在大多数场合下足够精确，甚至比常用的记录几年几月几日更精确。&lt;/li&gt;
&lt;li&gt;规避了常用的记录时间的方式与我的实际生活不符合的地方。例如，晚上12点半应该算到前一天还是后一天里面，的问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它失效于上研究生一段时间之后，那时我发现学期对我的影响已经不大，因此开始用第五个方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前两位只用字母，满26进1，它们共同表示第几周，不再有学期的划分；&lt;/li&gt;
&lt;li&gt;后面两位的定义不变。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;直到刚开始写这篇文章时，也依然在使用这个方案。例如，现在是&lt;code&gt;GJ54&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;马后炮地说，第五个方案是不合适的。一方面是，已经几乎全部电子化的情况下，没必要再追求极短的字符串；但这只是个小问题，不重要。
更重要的另一方面是，丢掉学期、简单按照周数累加，导致了这样一个心理暗示：不再有几个月或者几周尺度上的改变，只有一周又一周的轮回。&lt;/p&gt;
&lt;p&gt;实际上我整个研究生生活，存在这样一个基调（虽然不是唯一的基调），就是&lt;strong&gt;保持现状&lt;/strong&gt;。
很难说形成这样的状况的最重要的原因是什么，尽管能找到很多的线索；也很难说这个行为本身是对还是错。
据我观察，很多人都是这样，一旦进入一个自己满意的状态，
思考方式就会从像打猎那样“明天整个大的、把这个事情摆平”，变成像维护机器那样“只要调整好这个地方，之后就可以继续顺利运行了”。
对一些人来说，这样的状态的确可以一直维持下去；但我失败了。
2024年到2025年的一些时间，可能是我人生第二灰暗和压抑的时间段&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;，各个方面都出现了严重的问题&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;，
我意识到没办法再“一周又一周”轮回下去了，穷则思变，我需要做出剧烈的改变。&lt;/p&gt;
&lt;p&gt;改变并不是从现在才开始的，它早就开始了，只是最近一个月才渗透到更基本的地方。
比如，直到开始写这个文章的前后一两天，我才意识到：这个时间标记有问题，我需要把它换掉。&lt;/p&gt;
&lt;p&gt;第六个方案从2026年2月15日（也就是第五个方案中的&lt;code&gt;GK00&lt;/code&gt;）开始，经过一段时间的调整，现在（2026年4月6日）才确定下来。
整个字符串包括八位数字（没有字母），两个一组，含义是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前两位（第一二位）固定为&lt;code&gt;06&lt;/code&gt;，表示是第六个方案。这个一般不会变，如果变的话，一定是下一次人生的重大变革，可能几乎所有的东西都要大改。&lt;/li&gt;
&lt;li&gt;接下来两位（第三四位）从&lt;code&gt;00&lt;/code&gt;开始，与我的计划&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;中最基本的那一层（较长期的愿望）绑定，当那些愿望发生比较大的改变时，这里就加一，并把五六位置零。它大致对应于本科时的“学期”，区别在于，从外部的衡量尺度（是否需要上课、是否可以离校）改成了内部的（我想要什么）。我期待它会间隔两三个月发生一次改变，但一年或者几周就发生一次改变也是允许的。也就是说，在这个标记中，变化应该是常态，且应该被明确记录。&lt;/li&gt;
&lt;li&gt;五六位就是指第几周。&lt;/li&gt;
&lt;li&gt;七八位与之前的最后两位定义相同（星期几、一天中的第几个时间段）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;虽然看起来很长，但由于已经全部电子化，所以大多数情况下只需要键入最后两位或最后四位。&lt;/p&gt;
&lt;p&gt;上大学对我来说就是信息的“宇宙大爆炸”，每天都要见识不少的新东西，同时思维的演化变得极快。
在这个过程中，对时间的标记本身抗住了时间的洗礼，像活化石一样留了下来。
我甚至可以回忆起自己高三最痛苦的时候，在自习室里写日记时，发现记录时间很不方便，要挤挤挤挤挤，的感受。&lt;/p&gt;
&lt;h2&gt;绝对诚实的日记&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;绝对诚实的日记&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%bb%9d%e5%af%b9%e8%af%9a%e5%ae%9e%e7%9a%84%e6%97%a5%e8%ae%b0&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;“日记”对我来说往往是个泛指。
它并不专指那个小学的时候被老师要求每天写的、两三百字的、主要记录今天发生了什么的事情的东西，并且现在主要也不指它。
它现在是一个私密的git仓库，里面有我写的只给我自己看的文字，主要按照写下的时间来划分。
只是因为我想不到什么更好的名词，所以就用这个指代了。&lt;/p&gt;
&lt;p&gt;我在写日记的时候，会对日记绝对诚实。我并不是说，我写下的每一句话都要核实它是否是真的；而是，任何话都可以写。
没有任何禁忌、没有任何的道德约束，没有什么不可以在日记中讨论的；只要是我脑子里可以想到的、想要写下的，都可以写下。&lt;/p&gt;
&lt;p&gt;这样的“诚实”显然是与“公开”相悖的；但我又不想完全不公开，其中一些内容还是希望大家看到。
我曾经尝试过将它变成半公开的状态，你大概可以在我以前的帖子/聊天记录中，看到一些我的日记的截图或者转述；但现在已经不再有了。
现在是完全隔开的状态，日记就是日记，帖子就是帖子；它们的语言习惯甚至都不相同，我写日记不需要担心除我以外的人看不懂/误解。
我也曾经尝试将日记和亲密关系分享过；后来发现不行，即使是最亲密的关系，只要日记的保密不是绝对的（其他人有看的可能），那就会让日记变质。&lt;/p&gt;
&lt;p&gt;不仅是可以没有禁忌，我倾向于多写一些“禁忌”或者“非主流”的东西。
我有这样一个观点：人类社会广泛流传着一些故事（或者说，习惯或观念），这些故事并非对事实不偏不倚的描述，而是带有相当多的偏颇。
日记是一个可以零负担地把这些东西摊开、拆解开、审视它们的地方，去思考这些故事里掩盖了什么；也可以尝试构建自己的故事和想象，而无论现实如何。
我不用在生活中打破所有的幻觉、禁止所有的故事，会基本遵循人与人沟通时约定俗称的礼仪，与此同时还可以尽我自己的所能去理解真实、去尽量保持内心的自洽。
做到这样并不是顺理成章、自然而然的事情，它依赖于“日记”这样一个平台。
在更极端的情况下，日记也还作为我最后的心理防线而存在；
只要我有不被打扰和监视、可以边写日记边反思的机会，那么我就永远不会被难倒，我总能找到一些办法来应付各种事情。&lt;/p&gt;
&lt;p&gt;总之，日记承担着这样的任务：我几乎任何复杂的想法都孵化自日记中。
也因此，在其中采用的时间标记被延伸应用到了所有不需要（或者极少需要）和别人交流、同时又需要文字来记录下来的地方。
如果把我自己比做一本书，它就是每个章节的序号。
时间标记与我的“内心世界”深深绑定，一方面导致本科时一时的奇思妙想长时间地延续了下来，另一方面我也可以适当地修改它来影响我自己的心态。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;大概是小学生喜欢用的那种日记本。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;也或许是第五个方案（如果我当时是从零开始数的话），我记不清了。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;第一在高中时。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;我不想在这里具体描述是哪些问题。&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;我在尝试建立一个多层的做计划的方案。虽说对外宣称是“计划”，但里面的结构还挺复杂，例如包含了一些我暂时不知道如何做到的愿望，且大部分内容并不直接安排到某个时间段去做（而只是在梳理它们之间的关系、把重要的强调出来）。我自己把它叫做“演进草图”，从名字就可以看出来，它的重心并不是规定好我每天几点几分做什么。这个东西还在调整和完善，等它以一个比较稳定的状态运行起来之后，我应该也会写个博客来总结和介绍它。&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>2026红包题解</title>
      <link>https://blog.chn.moe/blog/2026-hongbao/</link>
      <pubDate>Sat, 21 Feb 2026 17:19:27 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/2026-hongbao/</guid>
      <description>
        
        
        &lt;h1&gt;为什么要发这个红包&lt;/h1&gt;&lt;p&gt;因为好玩。&lt;/p&gt;
&lt;p&gt;大年初一，我花了三个小时领到了一个朋友的红包（她的题解在&lt;a href=&#34;https://blog.yuuta.moe/2026/02/17/hongbao-2026/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这里&lt;/a&gt;）。
我玩得很开心，于是俺寻思俺也可以整一个。&lt;/p&gt;
&lt;p&gt;我不计划整太难。她的题目对我来难度有点过高；难点不是面对一道难题解不出来，而是根本找不到题目在哪里。
我计划做一个简单得多的，让人每一步都能明确知道“我接下来要解决什么问题”；就算不知道怎么解决，也可以问AI或者自己查资料，不至于真把人拒之门外。&lt;/p&gt;
&lt;p&gt;此外，题目的“考试范围”也要衡量。
如果是纯计算机的内容，那即使是整到对我来说非常难的水平，对那帮专业搞计算机的来说也不会难；
如果是纯物理的内容，那估计没人来参加了（同事中极少有这种玩耍的心态的人）。
所以最终是把两者都加一点进来，难度要控制到AI能解答的范围内。&lt;/p&gt;
&lt;p&gt;这样，只要是愿意来玩的人，都不会觉得无聊；问着AI，应该也都能把红包拿到。&lt;/p&gt;
&lt;h1&gt;题目&lt;/h1&gt;&lt;p&gt;挂在 &lt;code&gt;hongbao2026.chn.moe&lt;/code&gt; 上面，目前还能访问。&lt;/p&gt;
&lt;p&gt;浏览器打开后是一段伪代码：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;# include &amp;lt;iostream&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;# include &amp;lt;crystal&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;# include &amp;lt;httplib.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;crystals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;allCrystal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SiC&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;primitiveCell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;atomNumber&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spaceGroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;httplib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://zzzhongbao2026.chn.moe&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/index.php?id=&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;哦，要补充一句：我把题目写完了才忽然想到，大部分人看到看起来麻烦的东西就会马上放弃。比如这里的伪代码，实际上很简单（再不济还有AI），但大部分人大概在这一步就放弃或者外包了（如果不是可领可不领的红包，而是必须做的工作的话，就会丢给他觉得擅长的人去做）。
所以其实有个第零关：愿意看伪代码，而且还是掺了非计算机内容的伪代码，不怕因为看起来复杂而带来的情绪。&lt;/p&gt;
&lt;p&gt;第一关对应这段伪代码：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;crystals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;allCrystal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SiC&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;primitiveCell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;atomNumber&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spaceGroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;说白了就是：找到这样一个整数，用来描述原胞（&lt;code&gt;primitiveCell&lt;/code&gt;）中有八个原子的SiC（碳化硅）的空间群。&lt;/p&gt;
&lt;p&gt;第二关对应：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;httplib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://zzzhongbao2026.chn.moe&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/index.php?id=&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;也就是如何打开这个网页。&lt;/p&gt;
&lt;h1&gt;第一关&lt;/h1&gt;&lt;p&gt;这个问题你问AI，AI可以直接给出“186”这个结果。要是一步步来的话：&lt;/p&gt;
&lt;p&gt;SiC晶体，就是字面意思：碳原子和硅原子一比一组合到一起形成的晶体。
它指的不是某一种晶体，而是一类晶体：因为碳和硅原子可以组合出不同结构的晶体来，并且其中许多在常温下都是稳定的。
这有些像中学化学学习的“同素异形体”，比如“白磷”和“红磷”，它们的分子都是由磷原子搭建而成，但因为结构不同而是两种不同的物质。&lt;/p&gt;
&lt;p&gt;如果你不知道晶体是什么、原子是什么，那这个科普起来有点长，我这里写不下，你可能得从中学课本看起。&lt;/p&gt;
&lt;p&gt;原胞中有八个原子（四个碳四个硅）的碳化硅只有一种，被叫做“4H-SiC”。如果你好奇为什么会有这个结论：&lt;/p&gt;
&lt;p&gt;如果把一个碳和一个硅的组合看作一个整体，那么所有的碳化硅都可以看作是“六方密堆”的。
如&lt;a href=&#34;https://www.dxhx.pku.edu.cn/article/2024/1000-8438/20240310/dxhx-39-3-70-3.jpg.html&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这个网页&lt;/a&gt;中的图所示，
第一层“原子”（一个碳和一个硅组合成的整体）按六边形紧密堆好（位置A），第二层自然地堆在第一层的缝隙上面（位置B），那么第三层应该堆在哪里呢？
第三层有两种不同的选择：一种是第一层的正上方（位置A），另外一种则是与第一层和第二层都错开、位于它们共同的缝隙里（图上的“八面体空隙”，我们把它叫位置C）。
同理，第四、五、六层也有不同的选择&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;原胞中有八个原子，意味着以四层为单元进行重复；那么排列组合一下就知道，只有这几种情况：ABAB、ABAC、ABCB。
其中ABAB有更小的原胞，ABAC与ABCB本质上是一样的。
因此满足条件的只有一种SiC。&lt;/p&gt;
&lt;p&gt;“空间群”是一个数学概念，用来描述晶体的对称性。如果你对这个概念好奇，可以考虑这个数学（物理）题：一张三角形的桌子，在三个顶点处有三个桌脚，放在水平的地面上；如果已知它的三条边长，那么它三个脚的受力分别是多少？
这个问题的答案推导起来并不容易，但凭直觉、不通过任何计算，我们就可以知道：如果这个桌子是等边三角形，那么三个脚的受力应该是相等的；如果它是等腰三角形，那么有两个脚的受力应该是相等的，第三个脚有极大的概率与前两个脚不同。为什么？因为这三个角（两个角）是对称的，那么受力肯定一样；不对称的角，受力大概率不一样。&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;与三角形桌子相同的是，晶体的一些物理性质，如果硬算的话非常麻烦，但利用对称性可以绕过复杂的计算直接给出答案。
与三角形桌子不同的是，晶体的对称性要复杂得多，各种物理性质与晶体对称性的关联也并不直观，直觉不足以给出答案；需要一些数学工具，把“对称”用数学具体明确地表达出来，才能说明问题。
对于每一种晶体空间群，都可以枚举出它支持的所有的对称操作（例如，绕着c轴旋转120度，结构不变），这些对称操作组成的集合就是它对应的空间群。
可以这样说：这个晶体的空间群，就是这个晶体的“对称性”的数学表达。&lt;/p&gt;
&lt;p&gt;因为一些这里地方太小写不下的原因，虽然晶体有千千万万种，但空间群只有有限种（只有230个，即晶体的对称性只有230种），并且它们的性质已经被数学家研究得干干净净了。
于是人们把这230个空间群排了个序来标记它们，4H-SiC对应的是第186号空间群。&lt;/p&gt;
&lt;h1&gt;第二关&lt;/h1&gt;&lt;p&gt;访问 &lt;code&gt;https://zzzhongbao2026.chn.moe/index.php?id=186&lt;/code&gt; 这个网站，你会发现它打不开；
并且在不同的电脑上报错可能完全不同，尤其是在开发者自己的开发机上，报错五花八门。
对于大致理解DNS/TLS协议的人来说，只要一个命令就可以看出端倪。&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ nslookup zzzhongbao2026.chn.moe 1.1.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Server:         1.1.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Address:        1.1.1.1#53
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Non-authoritative answer:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zzzhongbao2026.chn.moe  canonical &lt;span class=&#34;nv&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; remove-me.vps6.chn.moe.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name:   remove-me.vps6.chn.moe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Address: 127.0.0.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;把&lt;code&gt;remove-me&lt;/code&gt;去掉，就可以查到正确的IP地址：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ nslookup vps6.chn.moe 1.1.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Server:         1.1.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Address:        1.1.1.1#53
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Non-authoritative answer:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name:   vps6.chn.moe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Address: 144.34.225.59&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;但直接访问 &lt;code&gt;https://144.34.225.59/index.php?id=186&lt;/code&gt; 是不可以的，会返回别的内容；必须为TLS/HTTP设置正确的域名：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ curl --resolve zzzhongbao2026.chn.moe:443:144.34.225.59 https://zzzhongbao2026.chn.moe/index.php&lt;span class=&#34;se&#34;&gt;\?&lt;/span&gt;id&lt;span class=&#34;se&#34;&gt;\=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;186&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;红包口令是：35587774&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在这里挖坑的背景是这样的：
现实中对“域名”或者DNS的科普并不少，因为相关事故的新闻闹过不少次。
绝大多数科普停留在“域名是IP地址的别名”这个程度上，但域名的作用不止于此。
许多协议都会将用到的域名实际写到传输的信息中（尽管它们对应的IP地址已经知道），
服务端则同时运行着多个服务（多个网站），并利用这个信息来区分用户到底要访问哪个网站。这个操作在实践中是普遍存在的，应该说在2026年，绝大多数服务器都会这样做。
打个比方就是：就算“浩南”“男哥”“男酱”“亲爱的”“义父”“臭臭”“大臭”&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;这几个词都是指我也不能瞎叫，因为它们意思是不一样的。
回到这个例子，有两个地方会将域名写入进去：一个是TCP握手后、开始TLS握手时，会发送域名（称为SNI）；
另外一个是TLS握手完成后、HTTP请求头中会包含域名。
这两个地方都需要是&lt;code&gt;zzzhongbao2026.chn.moe&lt;/code&gt;而不是&lt;code&gt;144.34.225.59&lt;/code&gt;或者&lt;code&gt;vps6.chn.moe&lt;/code&gt;才行。&lt;/p&gt;
&lt;p&gt;看到这里，如果你完全不知道什么叫域名、什么叫IP，那这个科普起来有点长，不是我这里能写下的。
你可能得找别的系统的科普，并且愿意为此花费几个小时的时间。
站在我的角度来看，我觉得中学电脑课本应该教这些，而不是“如何在flash中让金箍棒转起来”这种上层的、很快过时的技术。
当然不这样做也可能有维稳的意思&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;我的小老板算是我在物院认识的最懂服务器的人（虽然还是没我懂），但他都不知道这个事情；
实际上我运营六年的一个谷歌镜像站（入口 &lt;code&gt;entry.mirism.one&lt;/code&gt;），就是通过不设置DNS解析来规避非目标用户的。&lt;/p&gt;
&lt;p&gt;这里有个趣事：我说“尤其是在开发者自己的开发机上，报错五花八门”，因为真的有好几个人和我说，你的网站502了，你的TLS证书配错了，等等；
但错误其实都出在他们本地自己的网站上，他们自己没有意识到这一点。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;你可能会好奇：不同堆叠位置是否有能量差别，如果有的话，晶体是否会倾向于某一种特定的堆叠方式，而不是任意堆叠？答案是肯定的。对于类似于SiC这样的结构的晶体，如果两种原子的电负性差别不大，那么它们倾向于形成ABCABC……的堆叠方式，这对应于中学的“面心立方最密堆积”，例如硅单晶、金刚石；如果两种原子的电负性差别稍微大一些，那么就会倾向于形成ABABAB……的堆叠方式，这对应于中学的“六方最密堆积”，一些金属氧化物就是这样的。碳和硅的电负性差异恰好在这个分界线附近，结果就是怎么堆能量都差不多。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;这不是一个好的例子，只是我一拍脑袋想到的。我写了这篇文章两天后，才忽然意识到三角形中线交点就是重心且重心总是在三分之二处，这导致无论是什么形状的桌子，三个脚的受力其实都是一样的。如果读者拍拍自己的脑袋，大概能想出来更好的例子。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;老家那边的风俗是，给自家孩子起一个不好听的小名（乳名），因为“贱名好养活”。我的小名是“臭”，所以一些老家的朋友会叫我“臭臭”；但我表第也叫“臭”，所以为了区分，长辈会叫我“大臭”，尤其是当我弟在场的时候。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;如果你理解了这些，那翻墙就变得很容易了。&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>记一次DNS配置错误导致的证书续签失败</title>
      <link>https://blog.chn.moe/blog/acme-error-caused-by-dns/</link>
      <pubDate>Sun, 08 Feb 2026 17:50:04 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/acme-error-caused-by-dns/</guid>
      <description>
        
        
        &lt;h2&gt;写在前面&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;写在前面&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%86%99%e5%9c%a8%e5%89%8d%e9%9d%a2&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我刚从深圳回来的那天晚上，还没到宿舍，有人说&lt;a href=&#34;https://xn--s8w913fdga.chn.moe/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;铜锣湾&lt;/a&gt;的证书过期了。
后来发现是因为DNS配置错误，导致证书自动续签失败了。
我回到宿舍，花了可能三个小时才解决，今天又整理了一下才完全搞明白怎么回事。&lt;/p&gt;
&lt;p&gt;对我来说，这个错误解决并不是一帆风顺的，
它涉及到 DNS 的一些 edge case，以及&lt;a href=&#34;https://github.com/go-acme/lego&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Lego&lt;/a&gt;（用来自动续签证书的程序）的一些特殊机制。
因此在这里写一下。&lt;/p&gt;
&lt;h2&gt;背景知识&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;背景知识&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e8%83%8c%e6%99%af%e7%9f%a5%e8%af%86&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;对于专业的人来说，可能我说的 DNS 的 edge case 其实不是那么 edge。下面我会先说一下这个情况，如果你觉得这平平无奇，说明你就是那个专业人士，剩下的不用看了。&lt;/p&gt;
&lt;p&gt;要查询一个域名的 SOA 记录，例如 &lt;code&gt;dig @1.1.1.1 aaa.bbb.org SOA&lt;/code&gt;，得到的结果会有三种情况。&lt;/p&gt;
&lt;p&gt;第一种情况，如果 &lt;code&gt;aaa.bbb.org&lt;/code&gt; 如果本身就是一个 zone 的顶部，那么会正常返回它的 SOA。例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ dig @1.1.1.1 chn.moe SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.20.15 &amp;lt;&amp;lt;&amp;gt;&amp;gt; @1.1.1.1 chn.moe SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; server found&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; global options: +cmd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; Got answer:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; -&amp;gt;&amp;gt;HEADER&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;- opco&lt;/span&gt;de: QUERY, status: NOERROR, id: &lt;span class=&#34;m&#34;&gt;16306&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; flags: qr rd ra&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; OPT PSEUDOSECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; EDNS: version: 0, flags:&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; udp: &lt;span class=&#34;m&#34;&gt;1232&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; QUESTION SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;chn.moe.                       IN      SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; ANSWER SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chn.moe.                &lt;span class=&#34;m&#34;&gt;1800&lt;/span&gt;    IN      SOA     adelaide.ns.cloudflare.com. dns.cloudflare.com. &lt;span class=&#34;m&#34;&gt;2396040839&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;10000&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2400&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;604800&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1800&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; Query time: &lt;span class=&#34;m&#34;&gt;470&lt;/span&gt; msec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; SERVER: 1.1.1.1#53&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.1.1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;UDP&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; WHEN: Sun Feb &lt;span class=&#34;m&#34;&gt;08&lt;/span&gt; 21:00:26 CST &lt;span class=&#34;m&#34;&gt;2026&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; MSG SIZE  rcvd: &lt;span class=&#34;m&#34;&gt;102&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这里 &lt;code&gt;chn.moe. 1800 IN SOA adelaide.ns.cloudflare.com. dns.cloudflare.com. 2396040839 10000 2400 604800 1800&lt;/code&gt; 就是这个域名的 SOA 记录。&lt;/p&gt;
&lt;p&gt;第二种情况，如果 &lt;code&gt;aaa.bbb.org&lt;/code&gt; 本身不是一个 zone 的顶部，并且也没有 CNAME 到别的域名，那么返回的查询结果（answer）应该是空的；但服务器往往也会顺便把这个 zone 的顶部域名的 SOA 记录一起放到响应中返回，同时又并不算是一个 answer。例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ dig @1.1.1.1 aaa.chn.moe SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.20.15 &amp;lt;&amp;lt;&amp;gt;&amp;gt; @1.1.1.1 aaa.chn.moe SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; server found&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; global options: +cmd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; Got answer:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; -&amp;gt;&amp;gt;HEADER&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;- opco&lt;/span&gt;de: QUERY, status: NOERROR, id: &lt;span class=&#34;m&#34;&gt;8057&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; flags: qr rd ra&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; OPT PSEUDOSECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; EDNS: version: 0, flags:&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; udp: &lt;span class=&#34;m&#34;&gt;1232&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; QUESTION SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;aaa.chn.moe.                   IN      SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; AUTHORITY SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chn.moe.                &lt;span class=&#34;m&#34;&gt;1800&lt;/span&gt;    IN      SOA     adelaide.ns.cloudflare.com. dns.cloudflare.com. &lt;span class=&#34;m&#34;&gt;2396040839&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;10000&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2400&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;604800&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1800&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; Query time: &lt;span class=&#34;m&#34;&gt;490&lt;/span&gt; msec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; SERVER: 1.1.1.1#53&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.1.1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;UDP&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; WHEN: Sun Feb &lt;span class=&#34;m&#34;&gt;08&lt;/span&gt; 21:04:39 CST &lt;span class=&#34;m&#34;&gt;2026&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; MSG SIZE  rcvd: &lt;span class=&#34;m&#34;&gt;106&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意这里 &lt;code&gt;chn.moe. 1800 IN SOA adelaide.ns.cloudflare.com. dns.cloudflare.com. 2396040839 10000 2400 604800 1800&lt;/code&gt; 出现在 &lt;code&gt;AUTHORITY SECTION&lt;/code&gt; 而不是 &lt;code&gt;ANSWER SECTION&lt;/code&gt;，以及 &lt;code&gt;ANSWER: 0&lt;/code&gt; 而不是 &lt;code&gt;ANSWER: 1&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;第三种情况是，如果 &lt;code&gt;aaa.bbb.org&lt;/code&gt; CNAME 到别的域名，那么返回的查询结果中会带上 CNAME 过去的那个域名的 SOA；即，CNAME 对 SOA 也有效果。例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ dig @1.1.1.1 matrix.chn.moe SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.20.15 &amp;lt;&amp;lt;&amp;gt;&amp;gt; @1.1.1.1 matrix.chn.moe SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; server found&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; global options: +cmd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; Got answer:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; -&amp;gt;&amp;gt;HEADER&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;- opco&lt;/span&gt;de: QUERY, status: NOERROR, id: &lt;span class=&#34;m&#34;&gt;7139&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; flags: qr rd ra&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; OPT PSEUDOSECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; EDNS: version: 0, flags:&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; udp: &lt;span class=&#34;m&#34;&gt;1232&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; QUESTION SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;matrix.chn.moe.                        IN      SOA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; ANSWER SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;matrix.chn.moe.         &lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;     IN      CNAME   autoroute.chn.moe.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;autoroute.chn.moe.      &lt;span class=&#34;m&#34;&gt;60&lt;/span&gt;      IN      SOA     vps6.chn.moe. chn.chn.moe. &lt;span class=&#34;m&#34;&gt;2023010100&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;7200&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3600&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1209600&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; Query time: &lt;span class=&#34;m&#34;&gt;506&lt;/span&gt; msec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; SERVER: 1.1.1.1#53&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.1.1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;UDP&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; WHEN: Sun Feb &lt;span class=&#34;m&#34;&gt;08&lt;/span&gt; 21:07:24 CST &lt;span class=&#34;m&#34;&gt;2026&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt; MSG SIZE  rcvd: &lt;span class=&#34;m&#34;&gt;112&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在上面的例子中，如果递归查询 &lt;code&gt;autoroute.chn.moe&lt;/code&gt; 的 SOA 时，服务器返回 SRVFAIL，那么会发生什么呢？对 &lt;code&gt;matrix.chn.moe&lt;/code&gt; 的查询也会 SRVFAIL。&lt;/p&gt;
&lt;h2&gt;报错与解决&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;报错与解决&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%8a%a5%e9%94%99%e4%b8%8e%e8%a7%a3%e5%86%b3&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我的域名 &lt;code&gt;chn.moe&lt;/code&gt; 的 DNS 配置，比起大多数个人网站来说，稍微复杂。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;绝大多数域名直接在 Cloudflare 上配置。只做 DNS，不代理 HTTP 请求。&lt;/li&gt;
&lt;li&gt;在我自己的服务器上运行 CoreDNS 并把少数几个域名（例如这次出问题的 &lt;code&gt;autoroute.chn.moe&lt;/code&gt; ）的 NS 记录设置为这个服务器，以实现一些 Cloudflare DNS 没有或者不能免费用的功能（例如，根据来源 IP 分流）。&lt;/li&gt;
&lt;li&gt;少数域名（例如这次出问题的 &lt;code&gt;xn--s8w913fdga.chn.moe&lt;/code&gt; ）虽然托管在 Cloudflare 上，但是 CNAME 到 &lt;code&gt;autoroute.chn.moe&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 &lt;code&gt;xn--s8w913fdga.chn.moe&lt;/code&gt; 的证书快要到期时，Lego 会调用 Cloudflare 的 API，将 &lt;code&gt;_acme-challenge.xn--s8w913fdga.chn.moe&lt;/code&gt; 的 TXT 记录修改为由 Let&amp;rsquo;s Encrypt 指定的一个随机字符串。随后，Let&amp;rsquo;s Encrypt 调用公共 DNS 发现解析与自己提供的字符串一致，就可以确认域名的所有权并签发证书。&lt;/p&gt;
&lt;p&gt;续签失败的报错是这样的：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;pre&gt;&lt;code&gt;acme: renewalInfo endpoint indicates that renewal is needed
acme: Trying renewal with 0 hours remaining
acme: Obtaining bundled SAN certificate
AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/1770186497/652530223586
acme: Could not find solver for: tls-alpn-01
acme: Could not find solver for: http-01
acme: use dns-01 solver
acme: Preparing to solve DNS-01
acme: Cleaning DNS-01 challenge
acme: cleaning up failed: cloudflare: could not find zone for domain &amp;#34;xn--s8w913fdga.chn.moe&amp;#34;: [fqdn=_acme-challenge.xn--s8w913fdga.chn.moe.] unexpected response for &amp;#39;xn--s8w913fdga.chn.moe.&amp;#39; [question=&amp;#39;xn--s8w913fdga.chn.moe. IN  SOA&amp;#39;, code=SERVFAIL]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;具体来说：Lego 要调用 Cloudflare API 修改 &lt;code&gt;_acme-challenge.xn--s8w913fdga.chn.moe&lt;/code&gt; 的解析，需要知道这个域名属于 Cloudflare 的配置中，这个账户下面的哪个 zone。Lego 中并没有选项，使得用户可以明确告诉 Lego 这个域名属于哪个 zone（可能是不想麻烦用户）；它也没有调用 Cloudflare API 来查询（不知道是不是没有这个 API）；它选择自己去探测，并且在我的配置下，在探测的过程中会崩溃。这个探测的过程就是：依次查询 &lt;code&gt;_acme-challenge.xn--s8w913fdga.chn.moe&lt;/code&gt; &lt;code&gt;xn--s8w913fdga.chn.moe&lt;/code&gt; &lt;code&gt;chn.moe&lt;/code&gt; 的 SOA，直到返回的 answer 非空（忽略 answer 以外的响应），以及 answer 没有 CNAME；如果这个过程中出现了 SRVFAIL，那么马上放弃。源代码在&lt;a href=&#34;https://github.com/go-acme/lego/blob/fac5c39f5f9d36798a270af2d71578334001c2cf/providers/dns/cloudflare/cloudflare.go#L199&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这里&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;当时，我的 CoreDNS 只配置了 A 记录，并没有配置 SOA 记录；这导致向它查询 SOA 记录时失败，进一步导致查询 &lt;code&gt;xn--s8w913fdga.chn.moe&lt;/code&gt; 的 SOA 失败，进一步导致续签失败。&lt;/p&gt;
&lt;p&gt;解决办法说来也简单：把 SOA 记录补上就行了。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>北京的照片</title>
      <link>https://blog.chn.moe/blog/2601peking/</link>
      <pubDate>Thu, 29 Jan 2026 15:20:12 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/2601peking/</guid>
      <description>
        
        
        &lt;p&gt;最近在北京旅游了一周，拍了一些照片，我把其中一些有趣的图片放到这里。&lt;/p&gt;
&lt;p&gt;这些照片原图可以在&lt;a href=&#34;https://git.chn.moe/chn/photo-public/src/branch/main/2601%e5%8c%97%e4%ba%ac&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这里&lt;/a&gt;取得（包括 raw 格式）。
这些照片使用 &lt;a href=&#34;https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CC BY-NC-SA 4.0&lt;/a&gt; 共享，意味着你可以自由地修改、分发这些图片，只要注明来源即可。&lt;/p&gt;
&lt;p&gt;下文中照片大致上按拍摄的时间排序。除非特别说明，所有图片都只在直出的基础上压缩了大小（否则加载太慢）。我特别喜欢的照片会在标题上加⭐标志。&lt;/p&gt;
&lt;h2&gt;从前有座山&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;从前有座山&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e4%bb%8e%e5%89%8d%e6%9c%89%e5%ba%a7%e5%b1%b1&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/01.%e4%bb%8e%e5%89%8d%e6%9c%89%e5%ba%a7%e5%b1%b1/DSC_0371.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/01.%E4%BB%8E%E5%89%8D%E6%9C%89%E5%BA%A7%E5%B1%B1/DSC_0371_compressed.jpg&#34; width=&#34;50%&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;拍摄于来北京路上的火车上。
远处的山被云雾覆盖，只能隐隐约约看到轮廓。
这座山里的人过着怎样的生活呢？&lt;/p&gt;
&lt;h2&gt;生闷气&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;生闷气&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%94%9f%e9%97%b7%e6%b0%94&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/02.%e7%94%9f%e9%97%b7%e6%b0%94/DSC_0378.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/02.%E7%94%9F%E9%97%B7%E6%B0%94/DSC_0378_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;一只不知道什么品种的蛙躲在角落里。摄于北京动物园。&lt;/p&gt;
&lt;h2&gt;⭐虚拟现实&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;虚拟现实&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e8%99%9a%e6%8b%9f%e7%8e%b0%e5%ae%9e&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/03.%e8%99%9a%e6%8b%9f%e7%8e%b0%e5%ae%9e/DSC_0386.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/03.%E8%99%9A%E6%8B%9F%E7%8E%B0%E5%AE%9E/DSC_0386_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;对于蝈蝈来说，草地是虚拟的，但手里的树枝是真实的。嚼着手里的树皮，望着墙上的贴纸，蝈蝈觉得自己回到了野外。&lt;/p&gt;
&lt;h2&gt;冲鸭&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;冲鸭&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%86%b2%e9%b8%ad&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/04.%e5%86%b2%e9%b8%ad/DSC_0391.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/04.%E5%86%B2%E9%B8%AD/DSC_0391_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;速度：前进四；目标：追上老婆！&lt;/p&gt;
&lt;p&gt;（又或者是在追妈妈？&lt;/p&gt;
&lt;h2&gt;⭐⭐无题&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;无题&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%97%a0%e9%a2%98&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/05.%e6%97%a0%e9%a2%98/DSC_0392.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/05.%E6%97%A0%E9%A2%98/DSC_0392_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;北极熊不知道自己为什么隔着玻璃出现在北京，就像小孩子不知道为什么北京会有北极熊。
熊不想理会这些心猿意马的游客，它只想捱过这个不痛不痒的今天。
没有意义的一天也是一天，就像“无题”也可以是照片的标题。&lt;/p&gt;
&lt;p&gt;这张图并不是 PS，而是拍摄的角度恰好可以在看清北极熊的同时又在玻璃上映出游客。&lt;/p&gt;
&lt;h2&gt;独钓寒江雪&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;独钓寒江雪&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%8b%ac%e9%92%93%e5%af%92%e6%b1%9f%e9%9b%aa&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/06.%e7%8b%ac%e9%92%93%e5%af%92%e6%b1%9f%e9%9b%aa/DSC_0394.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/06.%E7%8B%AC%E9%92%93%E5%AF%92%E6%B1%9F%E9%9B%AA/DSC_0394_compressed.jpg&#34; width=&#34;50%&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;岸边树枝垂到了被冰封的湖面里。&lt;/p&gt;
&lt;h2&gt;⭐顶风作案&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;顶风作案&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%a1%b6%e9%a3%8e%e4%bd%9c%e6%a1%88&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/07.%e9%a1%b6%e9%a3%8e%e4%bd%9c%e6%a1%88/DSC_0397.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/07.%E9%A1%B6%E9%A3%8E%E4%BD%9C%E6%A1%88/DSC_0397_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;h2&gt;小桥流水人家&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;小桥流水人家&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%b0%8f%e6%a1%a5%e6%b5%81%e6%b0%b4%e4%ba%ba%e5%ae%b6&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/08.%e5%b0%8f%e6%a1%a5%e6%b5%81%e6%b0%b4%e4%ba%ba%e5%ae%b6/DSC_0400.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/08.%E5%B0%8F%E6%A1%A5%E6%B5%81%E6%B0%B4%E4%BA%BA%E5%AE%B6/DSC_0400_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/08.%e5%b0%8f%e6%a1%a5%e6%b5%81%e6%b0%b4%e4%ba%ba%e5%ae%b6/DSC_0414.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/08.%E5%B0%8F%E6%A1%A5%E6%B5%81%E6%B0%B4%E4%BA%BA%E5%AE%B6/DSC_0414_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/08.%e5%b0%8f%e6%a1%a5%e6%b5%81%e6%b0%b4%e4%ba%ba%e5%ae%b6/DSC_0419.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/08.%E5%B0%8F%E6%A1%A5%E6%B5%81%E6%B0%B4%E4%BA%BA%E5%AE%B6/DSC_0419_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/08.%e5%b0%8f%e6%a1%a5%e6%b5%81%e6%b0%b4%e4%ba%ba%e5%ae%b6/DSC_0420.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/08.%E5%B0%8F%E6%A1%A5%E6%B5%81%E6%B0%B4%E4%BA%BA%E5%AE%B6/DSC_0420_compressed.jpg&#34; width=&#34;50%&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;摄于北京国家植物园北园入口附近和樱桃沟附近。一组比较平淡但也挺好看的照片。&lt;/p&gt;
&lt;h2&gt;⭐⭐来年给你好看&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;来年给你好看&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%9d%a5%e5%b9%b4%e7%bb%99%e4%bd%a0%e5%a5%bd%e7%9c%8b&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/09.%e6%9d%a5%e5%b9%b4%e7%bb%99%e4%bd%a0%e5%a5%bd%e7%9c%8b/DSC_0405.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/09.%E6%9D%A5%E5%B9%B4%E7%BB%99%E4%BD%A0%E5%A5%BD%E7%9C%8B/DSC_0405_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;荷花彻底败了，从开满池到一朵不剩，再到水面被厚厚的白雪覆盖。
有人说是因为环境太冷了，也有人说怪因为荷花自己不抗冻。
荷花也知道自己败了，但它不服，它把自己的茎支棱在冰上，提醒自己曾经开放过，来年也有机会再开放。&lt;/p&gt;
&lt;h2&gt;卧佛寺&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;卧佛寺&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%8d%a7%e4%bd%9b%e5%af%ba&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/10.%e5%8d%a7%e4%bd%9b%e5%af%ba/DSC_0412.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/10.%E5%8D%A7%E4%BD%9B%E5%AF%BA/DSC_0412_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;h2&gt;上岸&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;上岸&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e4%b8%8a%e5%b2%b8&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/11.%e4%b8%8a%e5%b2%b8/DSC_0416_adjusted.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/11.%E4%B8%8A%E5%B2%B8/DSC_0416_adjusted_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;人人都能一眼就看到那只成功上岸的鸭子。
于是，人们讨论着上岸之后的生活如何如何，但忽略了不上岸的鸭子在不被注视的角落里也可以过得自在，就像我的那些考研失败的朋友们。&lt;/p&gt;
&lt;p&gt;稍微拉高了一些曝光度，因为原图拍得太暗了。&lt;/p&gt;
&lt;h2&gt;⭐多冰植物&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;多冰植物&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%a4%9a%e5%86%b0%e6%a4%8d%e7%89%a9&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/12.%e5%a4%9a%e5%86%b0%e6%a4%8d%e7%89%a9/DSC_0421.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/12.%E5%A4%9A%E5%86%B0%E6%A4%8D%E7%89%A9/DSC_0421_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;拍摄于北京国家植物园的一个角落，枯树枝/草木上像多肉植物一样“长”出了冰。
我不能肯定原因是什么。
但我注意到周围地上还有一些水（图中没有拍出），因此我猜测是附近有暖气管，管道将附近的雪融化、加速蒸发后，水蒸气上升又遇到冷空气，于是凝结到了草木上。&lt;/p&gt;
&lt;h2&gt;冰糖葫芦&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;冰糖葫芦&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%86%b0%e7%b3%96%e8%91%ab%e8%8a%a6&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/13.%e7%b3%96%e8%91%ab%e8%8a%a6/DSC_0422.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/13.%E7%B3%96%E8%91%AB%E8%8A%A6/DSC_0422_compressed.jpg&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;植物园中有一些带有酸枣一样的红色小果子的枯树（不知道具体是什么）。不知道谁折了一枝下来，插在雪上。&lt;/p&gt;
&lt;h2&gt;红色药丸&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;红色药丸&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%ba%a2%e8%89%b2%e8%8d%af%e4%b8%b8&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;figure&gt;&lt;a href=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%e5%8c%97%e4%ba%ac/14.%e7%ba%a2%e8%89%b2%e8%8d%af%e4%b8%b8/DSC_0447.JPG&#34;&gt;&lt;img src=&#34;https://git.chn.moe/chn/photo-public/media/branch/main/2601%E5%8C%97%E4%BA%AC/14.%E7%BA%A2%E8%89%B2%E8%8D%AF%E4%B8%B8/DSC_0447_compressed.jpg&#34; width=&#34;50%&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;拍摄于深圳。&lt;/p&gt;
&lt;h2&gt;后记&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;后记&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%90%8e%e8%ae%b0&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在北京这几天，我辗转与四个不同的人睡了六晚。
一些人的家里里摆满了自己喜好的手办、鱼缸、植物，也有的人攒钱为了一个远方的目标，现实中的自己则奉行“极简主义”。
我意识到，我很久没有为了我自己当下的开心而做事情了。
我去植物园溜达是为了放松心情以可以正常工作，我尽量调整作息是为了更好的工作，似乎我的一切都是为了让关于我自己的某个循环可以跑起来；
但什么是为了我自己呢？&lt;/p&gt;
&lt;p&gt;这些照片大部分并不算非常优秀（少数我自认为还挺优秀的，嘿嘿），我也并不是为了拍照才去的北京。
只不过主要目的达成的同时，还顺便拍了一些照片，其中一些还不错。
为了自己，我把它们稍微整理一下，发出来。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>我用过啥电脑、正在用啥</title>
      <link>https://blog.chn.moe/blog/my-computer/</link>
      <pubDate>Mon, 29 Sep 2025 22:14:05 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/my-computer/</guid>
      <description>
        
        
        &lt;p&gt;今天刚刚卖掉了我之前的电脑。
最近买来的 幻x 2025 也用了几周了，感觉很不错，想来写个博客。&lt;/p&gt;
&lt;h1&gt;我用过什么电脑？&lt;/h1&gt;&lt;p&gt;只讲我上大学之后用过的、属于自己的电脑。
因为之前的电脑都是家里公用的，我得保证别人想玩的时候可以正常玩，所以没法折腾。&lt;/p&gt;
&lt;p&gt;我的第一个电脑牌子是麦本本。印象中是四代 i7 里最低的那个 CPU（4710MQ），显卡好像是 960M。
应该说性能还是很不错的，对于当时它的价格来说（不到五千）。
因为是自己的第一台电脑，想要在有限的预算里尽量获得最高的性能，折腾的麻烦我完全不怕，所以选择了这个。
这台电脑我用了两年（还是三年来着，忘了）。
在快要过保但还没有过保的时候，主板连着坏了两次。
虽然每次寄修都没有出除了邮费以外的钱，但每次都得接近一星期。
因为担心过保之后再损坏，所以刚过保的时候，就尽快在闲鱼上卖掉了。
在这之后，我买电脑都只买品牌稍微大一些的，最好是有线下售后店的：
因为大品牌一定会在意返修率（否则不仅影响声誉而且影响赚钱），频繁坏掉的概率比较低。
之后我的电脑确实再也没有返厂维修过，唯一一次售后是风扇坏了，在线下售后店隔天就修好了。&lt;/p&gt;
&lt;p&gt;我的第二台笔记本是小米笔记本pro，8G 的版本（板载内存）。
之所以买 8G 的版本，是因为当时穷，没有那么多的流动资金。
在换这个电脑前后，我切换到了 Linux（当时用的 deepin），开始刚需 Windows 虚拟机。
这个 8G 的板载内存狠狠地教育了我内存的重要性，
于是在这台电脑之后，我的电脑内存再也没有低于过 40G。
遇到需要给别人升级老电脑的情形，第一推荐的也是加几十块钱把内存堆到最高，然后加一两百块装个固态。&lt;/p&gt;
&lt;p&gt;第三台电脑是传奇 zen2 4800H。电脑型号是机革的 code 01。
卖掉一根原厂的 8G 内存条，买了一根 32G 的寨条，组了 40G 不对称双通道。
这个电脑宣传是给程序员用的；实际上也的确如此，我这个伪程序员用起来很不错，性能尚可，待机时间也长。
当时有人批评说，程序员工资都很高，不会买这么便宜、比较低端的电脑；我觉得这个人不懂宣传。
就像小米SU7宣传自己有与超跑看齐的性能，但真的赛车手肯定不会开SU7上场；
机革的宣传其实是指：你买了这个电脑，就相当于（在设备的方面）有了“程序员”的入门券。
后来这台电脑我还是卖掉了。
一方面是，加装的 32G 寨条用了一段时间后变得不稳定（应该是虚焊），我在确定下来到底是内存问题还是电脑问题的期间，急需一台电脑继续工作；
另一方面是，当时开始玩原神了，4800H 的核显实在是带不动。
原神是我长期玩的第一款 3D 游戏（之前没有长期玩过什么游戏，也很少玩如此吃性能的游戏）。
加上入坑了 Gentoo，对设备性能的需求开始急剧上升。
再加上有了足够的流动资金，所以在这之后，换电脑的频率开始提高，买的电脑也越来越贵。&lt;/p&gt;
&lt;p&gt;下一个电脑依然是机革，无界 16 pro，12700H+2050，价格超过了 5k，印象中是 6k 买下的；带上 64G 内存的话，价格接近 8k。
换到这个电脑，显卡性能翻了好几倍，玩原神终于不卡了！
印象中，CPU性能也是接近翻倍&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。
当时发现，自己的笔记本跑 FDTD 仿真时，速度已经可以达到服务器一半多的速度&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;；
如果是要运行大量的小脚本而不是大块的仿真，自己电脑甚至比服务器要快很多倍。
再加上来回上传下载很麻烦，从此我养成了一个习惯，做计算默认在自己电脑上处理，只有遇到性能瓶颈时，才把某些步骤丢给服务器。
我个人认为这个习惯让我对计算软件的细节更熟悉了很多，因为在自己电脑上可以随意折腾不怕弄坏。
总之，这是我用过的第一台性能让我感到“舒坦”的电脑。
后来换掉这台电脑的原因是，机革对Linux支持太差了。
这个电脑有个致命的问题：开机过程中，在initrd里、大概是加载显卡驱动的一瞬间，如果没有插着电的话，有很大概率会掉电。
一旦掉电，再按开机键是没有反应的，必须插上充电器才能再正常开机。
这个问题在Windows上完全没法复现出来。
售后不管，我在贴吧捉到了机革的工程师反馈，得到的答复是“实在腾不出人手来支持Linux”，遂换电脑。&lt;/p&gt;
&lt;p&gt;考虑到对Linux的支持，下一个电脑选择了联想。
联想电脑在兼容性方面没让我失望，除了网卡有点小问题（花50块钱就换了），用了两年我挑不出一点毛病。
电脑型号是 R9000P 2023款，7945HX+4060，比起上个电脑来，性能又翻了一倍还不止。
CPU性能是AMD把Intel摁在地上摩擦的一代，一直到2025年前都是断崖式领先，到2025年底也只比第一名差一点；
使用的时候可以几乎完全不用考虑性能问题，想开啥就开啥。
我对游戏没有太高追求，4060 对我来说也已经是“想玩啥玩啥”的程度了。
裸机价格是8.5k，带上 96G 内存2k 4T 硬盘1k，再加上其它小东西（支架、网卡 etc），总共大约12k。
虽然贵，但这机器贬值很慢，我买来用了几个月之后甚至还涨价了几百；使用大约两年后，最终贬值了大约3k卖出&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;为啥要卖掉呢？这得说到我的 x86 设备的另外一条时间线。
在主要的工作电脑之外，我几乎总是会同时保有一个 x86 平板。
最开始是酷比魔方的一个平板（忘记啥型号了），然后是联想的初代yoga（atom小垃圾），然后是苏菲和 steam deck，然后是壹号本4。
我买x86平板的目的，很长时间内，我自己也不太清楚：我直觉上就是想要一个带触摸屏的、系统自由的设备，小一些更好，大一些也无妨。
这些年来，我拿它（们）来推galgame，但玩得也不多；拿它到湖边写日记，但续航实在是拉胯；拿它在床上写日记，但好烫。
拿它出门办公，用惯了7945觉得它实在是卡，加上数据在两台电脑之间同步得并没有那么好，结果是也并没有那么常用。
前面的那些问题，加钱就可以解决，高端的轻薄本/x86平板是有的；但同步，确实没有什么很好的办法。
最好的解决办法是，把两个设备“合二为一”，用一个满足所有需求的电脑来代替我的两个设备。
有没有这样的设备呢？曾经是没有的，但在2025年的下半年，有的，兄弟有的，只是有些贵。&lt;/p&gt;
&lt;h1&gt;幻x 2025 评价&lt;/h1&gt;&lt;p&gt;以防读者不知道这大概是个什么配置：
这个玩意儿的外形像苏菲，触摸屏，键盘可以拽下来，屏幕13.4寸。
但比苏菲重一些、厚一些，大概是普通轻薄本的重量，比游戏本轻多了。
APU是395&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;，类似于9955HX，16c32t，但内存改成了四通道128G，塞了一个规模接近4060的核显（名字叫 8060s）。
轻度使用续航大约五六个小时。
更详细的信息在b站上有很多评测（商单）可以看，推荐&lt;a href=&#34;https://www.bilibili.com/video/BV1aFA8eKE9f&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;笔吧&lt;/a&gt;和&lt;a href=&#34;https://www.bilibili.com/video/BV15VA6eMEtu&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;麦香牛奶&lt;/a&gt;的评测。&lt;/p&gt;
&lt;p&gt;作为平板来说，这个机器性能非常高；对比游戏本，性能要差一些。
性能瓶颈主要在散热，而不是核心规模。
很多评测会列出这个芯片在八九十瓦甚至一百多瓦的性能，但其实散热远没有那么好。
就我手头这台来说，在跑编译的时候，不手动调风扇转速，使用默认的性能档，封装功耗稳定在 55W 附近，风扇声音不大，除非环境很安静否则可以忽略；
手动把转速拉满，可以稳定到 65W 附近，但这时声音很大，体感类似于窗外下暴雨&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;，大多情况下不值得。
因为CPU和GPU核心在空间位置上还有一点距离（大概几毫米），所以同时使用CPU和GPU的时候，封装功耗可以更高几瓦或者十瓦，但也高不到哪里去。
我到手之后把液金换成了相变片，如果不换的话，大概可以再高几瓦。
这个散热对比于游戏本常见的两百多瓦来说，根本不够看；这导致它芯片规模比很多游戏本都要大，但性能还是差一截。
按笔吧的测试，60W 的395 CPU性能差不多是100W 7945的八成，这与我跑编译时的体感一致。
显卡的测试，一些up主给出的结论是“介于同功耗的4060和4070之间”。
我没有同功耗的4060（上个笔记本的4060功耗是140W，比这个大太多）。
在我的感受里，游戏性能是显然不如140W 4060的。在内置屏幕上玩游戏（原神和无限暖暖），性能尚可，原神非常流畅，无暖目测60帧左右；
但在外接4k显示器时，帧数会大幅下降。
原神还算流畅，无暖会降低到三十多帧（不是目测，是实测），这对于一个跳跳乐游戏来说，已经卡得让人出现失误了。
降低画质不会有太多改善，需要降低分辨率（把4k当2k用）才行。
此外，无暖不支持AMD显卡的光追（这是叠纸的问题）。
总之，尽管同功率下，这个显卡的帧数是比4060略高的；但比起满功率的4060性能还是差很多，以及各种软件对它的支持也不如nvidia。&lt;/p&gt;
&lt;p&gt;性能也不完全是在降低。
四通道（256bit）、8GT/s的内存带宽大概是之前的笔记本的三倍，
导致有些看重内存带宽的事情上（比如许多科学计算，以及用CPU跑大模型），这个小平板反而要比游戏本更强。
这是在消费级产品上应该是独一档的；在此之前，如果要四通道内存，就得买服务器CPU才行。
这个内存带宽比起nvidia的常规显卡来说只有三分之一，还是差很多；但胜在显存大，nvidia不让干的事情它都能干。
此外，这个机器在离电和PD供电时，性能都几乎不会有什么下降，而7945和4060会明显下降很多（下降一半甚至更多）。&lt;/p&gt;
&lt;p&gt;我买到机器的价格是15k。
这个机器有很多个内存的配置（都是板载）。
原本想买的是64G内存的一个配置，价格13k；但我付款之后卖家反悔了，结果没买成。
又蹲了一个月，花15k买到了一个128G内存的版本。
这个128G不是原装的，是第三方店铺改的；用起来没区别，但不能直接拎着电脑去售后（售后发现改内存后会拒保）。
因为我去售后修电脑本来也是小概率事件，加上卖家也已经换好了硬盘（2230长度，换到了2T），我觉得还不错。
如果买原装128G的版本，15k应该是买不到的，因为原装128G的版本原价是22k，算上国补也有20k了，大概不会降价到15k。&lt;/p&gt;
&lt;p&gt;这个机器除了显卡性能让我有些不满意，还有其它的小瑕疵。
屏幕上有一个坏点（黑色显示为绿色，即绿色关不掉），平时使用无感，开机时能看到。
右上角塑料边框裂了，但很不明显，我到手后一直没有发现，直到拆机换相变片时才发现。
此外，PD充电时，如果同时在进行高负载的活动，电池会过热，表现为充不进电，但可以从电池继续取电来进行高负载任务；
关掉高负载的任务，等一会儿，就恢复正常了。
再有就是，linux开源社区对这个芯片的支持在边边角角的地方还有缺陷。
比如，可以用ryzenadj给CPU降压；但无法读出现在的电压曲线偏移（现在降低了多少单位）；
并且似乎存在一个被设置的降压的上限（目测似乎是六七十个单位），无法降低到更低。
网卡（MT7625）的蓝牙也有bug，
单独使用linux系统或windows系统都没有问题，但在windows里用一下、再切换到linux之后，蓝牙就不能使用了，需要reset一下。
在windows下，HDMI可以输出4k 160帧；但在linux上，只能输出4k 120帧，不过我基本感觉不出来差距。
但目前kde的HDR在这个显卡上似乎有问题，HDR在内置屏幕上是没问题的，但在外置屏幕上会导致非HDR的内容出现明显的色阶；
nvidia显卡没有问题，不知道是kde的问题还是amdgpu的问题还是华硕的问题。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1VghgzLE5G&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;云飞有一段对这个产品的评价&lt;/a&gt;，我觉得很中肯。
续航、性能、便携，这基本上是笔记本的不可能三角。
幻x是“既要也要”，结果是价格很贵的同时，也并没有能把三项都做得很好。
但在我看来，它是唯一一款把三项都做得“差不多”、“够我用”的产品。
我从上一个笔记本换到这个多花了6k，这6k花得不算超值也不算浪费，只能算是物有所值。
作为一个用电脑非常多的人，我想让我的直觉可以和电脑连通起来，让我可以和调用自己的四肢那样，方便地使用电子产品来扩展自己的能力。
游戏本性能很强，它可以满足我正襟危坐在桌子前时的所有需求；
但我一旦不是坐在一个桌子前，甚至只是坐在一个不方便充电或者桌面稍微小一些的桌子前，使用时就非常局促。
这个电脑就是以预算增加、性能降低为代价，让我能更自由地使用电脑。
如果愿意为电脑花很多钱，并且也不太想追求极致的性能或便携或续航，而是想“都差不多一点”，那这个电脑几乎是唯一的选择&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;还有一个需要补充的地方：这个机器的拆机并不困难，至少没有很多视频描述的那样困难。
根本不需要像很多视频说的那样用刀片，塑料撬片足够了。
在拧下四颗螺丝之后，用吸盘轻拉屏幕下方中部（不要太用力），屏幕下方中部就会被拉开一个缝；然后用撬棒伸进去撬一圈就撬开了。
如果你没有吸盘，那胶带什么的也可以，不需要很大的吸力。
屏幕与机身的缝是面向屏幕面而不是面向侧面的，也就是两个扬声器所在的那个缝；侧面那里看起来似乎有个缝但其实是没有的。
如果你一定要用刀片或者金属撬棒的话，别在侧面硬怼。
总之，拆这个电脑比起拆拯救者，并没有困难很多，唯二需要注意的是，屏幕不能形变太大否则会碎（拯救者的塑料后盖随便撬肯定碎不了），
以及屏幕打开后动作慢一些，小心扯到排线。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;直接查这两个 CPU，发现性能并不至于翻倍；但当时体感的确是翻倍的。可能是无界16Pro比Code01的TDP要高很多，也可能是我的记忆出错了。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;当时，如果直接在 Windows 上跑 FDTD，会出现“小核有难大核围观”的情况；在linux上kvm虚拟机里跑，调度反而一切正常。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;其实我觉得可以只贬值2k。不过因为是卖给一个我很喜欢的学弟，所以出口就给了我心里能接受的最低价格。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;全称 AMD Ryzen AI Max plus 395，名字比 iPhone 26 都要长。&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;我在调风扇的时候，隔壁办公桌的同事摘下耳机，问我外面是不是下暴雨了。&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;如果可以接受掌机（不带键盘）的话，GPD最近有出一款同芯片的。壹号本似乎也要出一款。但它们的内存可能会小一些，并且散热一定会进一步缩水。
如果可以接受砍半的核心规模，那么GPD有一款基于HX370的GPD pocket，也不错。&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>我不会写字了</title>
      <link>https://blog.chn.moe/blog/i-cant-write/</link>
      <pubDate>Sun, 01 Jun 2025 21:04:35 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/i-cant-write/</guid>
      <description>
        
        
        &lt;p&gt;让我来看看我一个小时能写些什么。&lt;/p&gt;
&lt;p&gt;首先是把编辑器的 AI 自动补全关掉。
这玩意儿烦得很，当你不想让它自动补全的时候。&lt;/p&gt;
&lt;p&gt;小学或者中学的时候，一个小时或者不到一个小时要写一篇作文。
一般来说我都能写够字数，虽然它可能不能算是我今天说的会写字。
那时的作文可以说假话，但是我真的不擅长这样做。
编假话有个问题，就是几乎所有的东西都需要靠字面意思来思考，没有直觉的对应。
这会让思考难度陡然上升。
结果就是，我的中学作文只能在半真半假之间反复摇摆。
一般来说能拿 80% 左右的分数；和前面不到 60% 的分数一平均，就能拿到及格线附近的分数。
有一次没有写够字就收卷了，但是印象中扣分也不是太严重，最终的分数也差不多。&lt;/p&gt;
&lt;p&gt;记得中学时有人教过我一个妙招：不管写什么，都在标题后面加一个逗号、再加一个“静待花开”，
形如《我扶老奶奶过马路，静待花开》；
然后再在最后一段想办法扯到“花开”这个意象上，就能多拿几分。
因为判卷老师也不认识你、不知道每次都用的同一个套路，所以也不会识破。
我倒是没有尝试过这个小技巧。也许是觉得寒碜。&lt;/p&gt;
&lt;p&gt;我一向写日记写得很好。
至少是我自认为很好，以及小学和初中的语文老师也觉得很好。
记得初中老师（还是小学老师）评价我，大概说，哎呀，浩南这小散文、小日记写得挺好，但是这作文吧，哎呀，啧。
高中老师没有评价过，因为高中写日记不是一个被推崇甚至不是一个被允许的事情。
就像有人敲着桌子说：你这个年纪，是怎么有心思写日记的！&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;
——但是我还是会写，会断断续续地写。
最困难的时候，我写不了完整的话&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;，那就写半句，
写一个字算一个字，或者写一些错别字，或者在日记本上随便划一些东西，
并试图在脑子里将这个东西和自己想要表达的东西关联起来。
就像一个失去了所有感官的水手，连上下左右都已经分不清，用力抓住什么东西让自己不要被卷走，不要死在天旋地转里；
等到一切过去、自己的感官恢复一些之后，再作进一步的打算。
那时，日记本是唯一可以和我对话的人，唯一用真心换真心，不会喊激进的口号的人。&lt;/p&gt;
&lt;p&gt;高中的“老师”已经死了&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;；但是不久之后，心里又有别的“老师”出现了。
本科的时候，我过了一段没有老师的日子；大概在研究生或者本科高年级的时候，它又出现了。
他说：写日记有什么用呢？
我说，我可以在日记里写规划，我可以在日记里描述一个意象以处理自己的复杂情绪，我可以在日记里整理自己的思路。
于是，我再也没有写过没有用的日记。
我试着将我的规划按照某个格式来写，试着明确将自己的计划分为几类。
我再也没有玩过没有意义的游戏。再也没有看过没有意义的动画。再也没有走过没有意义的路。也没有写过没有意义的字。&lt;/p&gt;
&lt;p&gt;前天晚上，我忽然意识到我很久都没有为自己做什么事情了。
我睡觉睡够八个小时，是为了第二天的工作，而不是为了我自己。
我玩游戏是为了攒够某个道具，而不是为了我自己。
我科研是为了将来可以挣一些钱，在这之后就可以不工作；而不是为了自己。
很多年了，我再也没有写过一个没有用的字。
我的心里就像一湖水，每一个水滴都想要追求自己的意义，它们互相摩擦着奔向自己的方向；
于是这便不是一个湖了，成了漫天的努力的脆弱的水花。&lt;/p&gt;
&lt;p&gt;不过今天写这些的时候，我试着让它平静下来一些。
水还是要往低处流。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;你知道我说的是哪个表情包。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;并不是指没有时间去写一个完整的句子，而是指没有能力去写。
因为长期缺乏睡眠，外加所有人都在给我施压。
当时的状况比现在要糟糕很多，因为当时我没有任何求助的渠道，给我施压的人也比现在多很多。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;并不是指通常意义上人的死亡；这里老师是指某个象征意义。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>集群的文件系统应该怎么做？</title>
      <link>https://blog.chn.moe/blog/cluster-filesystem/</link>
      <pubDate>Tue, 14 Jan 2025 12:14:06 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/cluster-filesystem/</guid>
      <description>
        
        
        &lt;p&gt;NixOS 的文件系统本来就比较复杂（加上 impermanence 之后）。
集群又需要共享家目录。
又考虑到集群里机器的 CPU 不一样（home-manager 等工具生成的配置文件指向的二进制在不同机器上不一定能用，因为编译时 &lt;code&gt;-march&lt;/code&gt; 不同），
搞得就很麻烦。
前几天把一直分开运行的两个机器合并到一起了，但在合并前并没有非常仔细地思考文件系统怎么设计，
于是成功地自己把自己绕进去了，出了一些自己也不理解的 bug。
impermanence 的配置文件，自从我一年前把它写好之后就没有大动过，遇到需要的时候就得过且过修修补补，现在它已经很混乱了，是时候重新设计一下了。&lt;/p&gt;
&lt;p&gt;按照我的设想，&lt;code&gt;/home&lt;/code&gt; 中的文件主要来自两个地方。
一个是 &lt;code&gt;/nix/persistent/home&lt;/code&gt;，这些文件在每次重启后依然会保留；一个是 &lt;code&gt;/nix/rootfs/current/home&lt;/code&gt;，这些文件在每次重启后都会丢失。
只有少量的文件挂载或软链接自别的地方。&lt;/p&gt;
&lt;h2&gt;需求&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;需求&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%9c%80%e6%b1%82&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;明确需求才能提出合理的解决方案。
最后解决方案需要满足所有的需求，也不需要过度设计，不要创造需求。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;只需要考虑 &lt;code&gt;/home&lt;/code&gt; 挂载的问题。其它目录的挂载运行良好，不需要更改。&lt;/li&gt;
&lt;li&gt;集群上，一部分文件需要共享，另一部分则不能共享：
在集群中，&lt;code&gt;/home&lt;/code&gt; 下的大多数文件需要在所有节点上共享（即，从机通过 NFS 来获得大部分文件）。
但是有一些文件和目录是不应该共享的，包括例如 &lt;code&gt;.config&lt;/code&gt; &lt;code&gt;.zshrc&lt;/code&gt; 等。
这些目录中包含许多 home-manager 生成的文件，其中指向的二进制文件在不同机器上不兼容。&lt;/li&gt;
&lt;li&gt;可复现与留存状态的平衡：
桌面用途下的 &lt;code&gt;chn&lt;/code&gt; 用户是一个特例,&lt;code&gt;/home&lt;/code&gt; 下的大部分文件应该在重启后丢失，只有少数留存。
除了这个特例以外，&lt;code&gt;/home&lt;/code&gt; 下的大部分文件应该留存状态（即，在重启后不丢失，也即来自于 &lt;code&gt;/nix/persistent&lt;/code&gt;），
少部分文件（例如 &lt;code&gt;.cache&lt;/code&gt;）应该为了确保可复现而丢失状态（即，在重启后丢失，也即来自于 &lt;code&gt;/nix/rootfs/current&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;设置正确的权限和所有者。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;基本上就这些。&lt;/p&gt;
&lt;h2&gt;解决方案&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;解决方案&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/home&lt;/code&gt; 以外的挂载代码不动。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/home&lt;/code&gt; 本身不挂载。&lt;/li&gt;
&lt;li&gt;在所有挂载开始之前，确认 &lt;code&gt;/nix/persistent/home/user&lt;/code&gt; 和 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 存在并设置合理的权限。
这通过 &lt;code&gt;system.activationScripts&lt;/code&gt; 来实现。
这个设置会在两个情况下起作用：一个是在启动时，在挂载好了根目录但还没有 switch root 前进行；另一个是 rebuild 时进行。
这里已经有了一些内容，包括：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;users&lt;/code&gt; 是 nixpkgs 设置用户的一些内容（例如创建家目录）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;createPersistentStorageDirs&lt;/code&gt; 是 impermanence 生成的，
用于在挂载前用正确的权限创建需要的目录（指 target，不是挂载点所在的目录），如果 target 已经存在则不检查权限；
并根据 target 的权限调整挂载点及其父目录的权限。
在前者之后运行。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;persist-files&lt;/code&gt; 也是 impermanence 生成的，用于挂载需要的文件（不涉及目录）。
仔细阅读之后，确认现在的代码应该已经足够，不再需要手动在这里添加代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;挂载 &lt;code&gt;/home/user&lt;/code&gt;。这分为几种情况：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;在集群的主节点上，导出 &lt;code&gt;/nix/persistent/home&lt;/code&gt;；再其它节点上，通过 NFS 挂载。
这个挂载需要在 &lt;code&gt;activationScripts&lt;/code&gt; 之前完成（&lt;code&gt;neededForBoot = true&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;对于桌面用途的 &lt;code&gt;chn&lt;/code&gt; 用户，不需要挂载。&lt;/li&gt;
&lt;li&gt;对于其它情况，挂载 &lt;code&gt;/nix/persistent/home/user&lt;/code&gt; 到 &lt;code&gt;/home/user&lt;/code&gt;。
这通过 nixos 的 impermanence 模块实现（以设置正确的权限）。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;挂载更详细的目录。大部分使用 nixos 的 impermanence 中，&lt;code&gt;users.user&lt;/code&gt; 来实现，有一个例外需要直接写 &lt;code&gt;systemd.mounts&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;对于所有用户，&lt;code&gt;.cache&lt;/code&gt; 需要在重启后丢失，它应该挂载自 &lt;code&gt;/nix/rootfs/current/home/user/.cache&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;对于桌面的 &lt;code&gt;chn&lt;/code&gt; 用户，有一些额外的目录需要挂载自 &lt;code&gt;/nix/persistent/home/chn&lt;/code&gt; 或 &lt;code&gt;/nix/rootfs/current/home/chn&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;对于集群的非主节点，需要采取额外的措施来避免覆写主节点的文件，包括：
&lt;ul&gt;
&lt;li&gt;禁用 home-manager 在家目录的根目录中创建的一些符号链接，包括 &lt;code&gt;.zshrc&lt;/code&gt; 等；改而使用挂载。&lt;/li&gt;
&lt;li&gt;额外从 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 挂载一些目录过来，例如 &lt;code&gt;.ssh&lt;/code&gt;，home-manager 将需要覆写这些目录中的文件。&lt;/li&gt;
&lt;li&gt;由于 impermanence 会将 target 及其父目录的权限复制给挂载点，这会导致一个问题：
挂载来自 nix store 的文件（即 home-manager 生成的那些文件）时，家目录会被改写为 &lt;code&gt;root:root 555&lt;/code&gt;。
这些文件改为直接用 &lt;code&gt;systemd.mounts&lt;/code&gt; 来挂载。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最终代码在&lt;a href=&#34;https://github.com/CHN-beta/nixos/tree/741b6185a4412f0e45fc5afd13bcfadb91c5de7e/modules/system/fileSystems&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这里&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;其中的坑&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;其中的坑&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%85%b6%e4%b8%ad%e7%9a%84%e5%9d%91&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我遇到了一些问题。&lt;/p&gt;
&lt;p&gt;第一个问题是，如果 home-manager 生成的文件也用 impermanence 来挂载（最开始我就是这样做的），
那么家目录的权限会在从机启动后被改写为 &lt;code&gt;root:root 555&lt;/code&gt;。
出现这个状况的原因在之前已经解释过了。
通过将这些文件直接用 &lt;code&gt;systemd.mounts&lt;/code&gt; 来挂载，这个问题可以被避免——然后我就发现家目录权限被改成了 &lt;code&gt;root:root 755&lt;/code&gt;。
为什么会出现这个状况，我想了很久才想通。这个过程是这样的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 NFS 挂载之前：&lt;code&gt;/nix/rootfs/current&lt;/code&gt; 已经被挂载到了 &lt;code&gt;/&lt;/code&gt;，而 &lt;code&gt;/home/user&lt;/code&gt; 和 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 都不存在。&lt;/li&gt;
&lt;li&gt;在 NFS 挂载时，会自动创建不存在的挂载点然后再挂载。
这样，在 NFS 挂载 &lt;code&gt;192.168.178.1:/nix/persistent/home/user&lt;/code&gt; 到 &lt;code&gt;/home/user&lt;/code&gt; 之后，
&lt;code&gt;/home/user&lt;/code&gt; 的权限是远程文件系统的 &lt;code&gt;user:user 700&lt;/code&gt;，
但 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 的权限是被自动创建的挂载点在挂载前的权限，也就是 &lt;code&gt;root:root 755&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;之后 &lt;code&gt;system.activationScripts&lt;/code&gt; 中 impermanence 中的脚本会运行，
它发现 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 已经存在了，就不会再创建或者修改它的权限；
然后它将 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 的权限复制给 &lt;code&gt;/home/user&lt;/code&gt;，这个行为也一并把远程的权限覆盖掉了。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;直觉来说，只要告诉 systemd 创建挂载点时用某个用户、设定某个权限就好了；
但我翻了一圈资料，似乎没有设定所有者的办法（权限是可以设定的，通过 &lt;code&gt;X-mount.mkdir&lt;/code&gt; 选项）。
所以最终解决办法是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先将 &lt;code&gt;192.168.178.1:/nix/persistent/home&lt;/code&gt; 挂载到 &lt;code&gt;/remote/home&lt;/code&gt;。
&lt;code&gt;/remote/home&lt;/code&gt; 的权限无所谓，随他便，这只是为了避免创建 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;再将 &lt;code&gt;/remote/home/user&lt;/code&gt; 挂载到 &lt;code&gt;/home/user&lt;/code&gt;，这一步通过 impermanence 进行，
以设定正确的权限（&lt;code&gt;/home/user&lt;/code&gt; 和 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 的权限都会被设定为 &lt;code&gt;user:user 700&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;之后，impermanence 再挂载其它来自 &lt;code&gt;/nix/rootfs/current/home/user&lt;/code&gt; 的目录或文件，都不会出问题了。&lt;/li&gt;
&lt;/ol&gt;

      </description>
    </item>
    
    <item>
      <title>如何拟合拉曼峰</title>
      <link>https://blog.chn.moe/blog/raman-spectra-peek-fit/</link>
      <pubDate>Fri, 03 Jan 2025 11:27:07 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/raman-spectra-peek-fit/</guid>
      <description>
        
        
        &lt;div class=&#34;hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-amber-200 hx:bg-amber-100 hx:text-amber-900 hx:dark:border-amber-200/30 hx:dark:bg-amber-900/30 hx:dark:text-amber-200&#34;&gt;
  &lt;div class=&#34;hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2&#34;&gt;&lt;svg height=1.2em class=&#34;hx:inline-block hx:align-middle&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; fill=&#34;none&#34; viewBox=&#34;0 0 24 24&#34; stroke-width=&#34;2&#34; stroke=&#34;currentColor&#34; aria-hidden=&#34;true&#34;&gt;&lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; d=&#34;M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;

  &lt;div class=&#34;hx:w-full hx:min-w-0 hx:leading-7&#34;&gt;
    &lt;div class=&#34;hx:mt-6 hx:leading-7 hx:first:mt-0&#34;&gt;本文的正确性不能保证。&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;测试得到的光谱总是离散的数据。
要得到峰的半高宽、高度等性质，可以从原数据中搜索最接近的点然后取出，或者对相邻点做线性插值并据此计算。
但这样的方法会受到个别点的强烈影响，更合理的还是用某个连续的曲线拟合这些离散的点，然后从这个连续曲线上读出需要的数据。&lt;/p&gt;
&lt;h2&gt;高斯还是洛伦兹？&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;高斯还是洛伦兹&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%ab%98%e6%96%af%e8%bf%98%e6%98%af%e6%b4%9b%e4%bc%a6%e5%85%b9&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;然后你会发现，有两种常见的拟合函数：高斯和洛伦兹。
我们这里定义高斯函数为：
$$
\operatorname{gaussian}(x) = A \exp\left(-\frac{(x-x_0)^2}{2\sigma^2}\right)
$$
一旦拟合出来，就可以得到峰高度 $A$、峰中心 $x_0$、半高宽 $\sqrt{8\ln2}\sigma$。
如果你的函数有一个背底值，也可以再加一个常数项或者线性项，这都很好。
定义洛仑兹为：
$$
\operatorname{lorentz}(x) = \frac{A}{1+\left(\frac{x-x_0}{\gamma}\right)^2}
$$
这个函数的峰高度 $A$、峰中心 $x_0$、半高宽 $2\gamma$。
也可以再给它加一个背景项，如果你喜欢的话。&lt;/p&gt;
&lt;p&gt;那么问题来了：应该用哪个去拟合呢？
你可以看到两个都有人用。如果你尝试的话，会发现它们的拟合结果还真的有些差异。
这背后是否有什么物理原理？
也就是说，是否是因为一些原因，导致一些峰是高斯的，一些峰是洛伦兹的？&lt;/p&gt;
&lt;p&gt;答案是：还是有一些的。
我找到了&lt;a href=&#34;https://www.researchgate.net/post/Why-are-Raman-spectra-peak-fited-with-Lorentzian-peaks&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这个&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。
接下来我会总结一下他的观点。
需要提前说明的是，我并不更深入地理解这些结论。&lt;/p&gt;
&lt;p&gt;理想情况下，谱线不应该是一个个有一定宽度的峰而应该是一条条没有宽度的线。
之所以展宽成了一个个峰，以拉曼散射的例子来说，是因为声子模式的能量因为一些扰动而不完全等于某一个值。
这个扰动包括两个方面：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;声子或振动本身寿命有限，这导致能量是一个分布而不是一个确定的值（测不准原理）。这会使得呈现出高斯形状的峰。&lt;/li&gt;
&lt;li&gt;多个频率略有不同的振动或声子，它们可以具有一定的相位差，它们干涉导致能量的展宽。这会使得呈现出洛伦兹形状的峰。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这两个效应有时会有一个占主导，也有的时候会同时存在，这可以通过考虑这两个效应导致的振动的寿命是否明显一个比另一个更短，来判断是否有一个效应占主导。
对于固体，通常是前者占主导；对于气体，通常是后者占主导；对于液体，则两者都有，此时也可以把两者叠加起来拟合。&lt;/p&gt;
&lt;h2&gt;法诺共振&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;法诺共振&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%b3%95%e8%af%ba%e5%85%b1%e6%8c%af&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;然后你会发现拉曼光谱中明显有一些左右不对称的峰，它们的某一边会凹下去；而上面两个函数都是左右对称的，这导致拟合效果不好，尤其是在峰脚附近。
一般认为这是&lt;a href=&#34;https://en.wikipedia.org/wiki/Fano_resonance&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;法诺共振&lt;/a&gt;的结果。
忘记是在哪里看到了，但其实还挺多论文引用这个结论。&lt;/p&gt;
&lt;p&gt;法诺共振的图景是这样的&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;：有一个相当宽的振动模式（背景）和一个相对窄的振动模式（峰）耦合。
你就当有两个秋千，其中一个比较“无所谓”，主要靠受迫来振动，给多少频率的力就按照多少的频率振动，力的频率变化基本不会改变力与振动的相位差；
另一个比较“有所谓”，当受力的频率与固有频率一致时，振幅非常大；当受力的频率与固有频率错开时，振幅迅速变小，同时振动与受力出现一个相位差。
当这个相位差接近 $\pm\pi/2$ 时，就几乎完全不振动了。
这样就导致，在峰两侧，窄的振动的相位相差 $\pi$，而背景的相位几乎不变，两个叠加就可能导致一侧增强而另一侧减弱。&lt;/p&gt;
&lt;p&gt;总之，法诺共振的式子是这样的：
$$
\operatorname{fano}(x) = A\frac{(q + \frac{x - x_0}{\gamma})^2}{1 + (\frac{x - x_0}{\gamma})^2}
$$&lt;/p&gt;
&lt;p&gt;$q$ 表示两个振动的强度之比。取 $q = 0$ 时就是洛伦兹，取 $q\neq0$ 时就可以看到明显的左右不对称。&lt;/p&gt;
&lt;h2&gt;那么，该用哪个呢？&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;那么该用哪个呢&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%82%a3%e4%b9%88%e8%af%a5%e7%94%a8%e5%93%aa%e4%b8%aa%e5%91%a2&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;好问题，我也不知道。我有点想把高斯和法诺共振结合起来（乘起来），因为我这里只有少数峰出现了明显的不对称，全用法诺共振来拟合可能不太合适。
或者就不管那么多，硬用高斯去拟合，反正我的目的也是看峰的相对移动等，而不是研究具体应该哪个拟合好。&lt;/p&gt;
&lt;p&gt;还有看到论文是用一系列法诺共振来拟合的。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Research Gate 不能生成直接指向答案的链接，还真是奇怪。请直接看 Alexander Shchegolikhin 的回答。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;我不确定我的理解是否真的正确。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>Linux 教程新手篇（草稿）</title>
      <link>https://blog.chn.moe/blog/linux-guide/</link>
      <pubDate>Sat, 16 Nov 2024 22:13:37 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/linux-guide/</guid>
      <description>
        
        
        &lt;p&gt;在做实验，需要每五分钟去调整一下仪器，但中间的五分钟有点无事可做。
所以来写一下这个东西得了。&lt;/p&gt;
&lt;p&gt;原本是想要写个给同专业的同学看的教程，写了一点觉得，诶，我为啥不写成更通用的教程呢。
于是就这样做吧。&lt;/p&gt;
&lt;h2&gt;顶层设计&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;顶层设计&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%a1%b6%e5%b1%82%e8%ae%be%e8%ae%a1&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我的想法是这样的：按照两个部分去写，一个新手篇，一个进阶篇。
不管哪个部分，内容都不会限制于 Linux，甚至 Linux 的内容可能只占一半。
其实很多人并不是不会用 Linux 而是对缺少对操作系统的一般认识，
就像看到自己电脑有 C D E F 盘，就以为电脑里真的插了四个硬盘一样。
另一个常见的误区就是不区分内存和外存。类似此类的问题。
要真的只是某个 Linux 上的问题不会，反而还都是少见的。&lt;/p&gt;
&lt;p&gt;暂时的计划是这样的，新手篇的内容包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;什么是 shell？（和 windows 的桌面一个作用，只是变成了敲命令）&lt;/li&gt;
&lt;li&gt;shell 里命令的格式是怎样的？（第一个是要执行的程序，之后的是参数）&lt;/li&gt;
&lt;li&gt;常用的几个命令。
说白了就是围绕 bash 介绍一些基础用法。
这其实是相当繁琐的事情，但又是很基础的，不得不介绍，新手接触 Linux 的话也不可能绕过。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;进阶篇的内容会多一些杂一些，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;冯诺依曼架构（计算机的硬件组成，至少把内存和外存分清楚吧）&lt;/li&gt;
&lt;li&gt;操作系统的结构（内核和用户态程序的区别）&lt;/li&gt;
&lt;li&gt;分区、文件系统、挂载，这些概念是指什么；linux常见的几个文件夹里放什么。&lt;/li&gt;
&lt;li&gt;程序和进程间通信（环境变量，信号，输入输出，返回值）&lt;/li&gt;
&lt;li&gt;shell 中一些内置命令，以及重定向、通配符等。&lt;/li&gt;
&lt;li&gt;常用的工具（shell 中常用的外置命令）。&lt;/li&gt;
&lt;li&gt;用户、文件所有者和权限。&lt;/li&gt;
&lt;li&gt;网络协议，NAT。&lt;/li&gt;
&lt;li&gt;编程时常用的概念（编译、链接、解释器等）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在这之后就区分“专业”了，例如做科学计算的话，需要了解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;常用的并行计算协议（MPI，OpenMP，CUDA，OpenCL，SYCL）。这里其实我也缺一些知识，我需要自己先把自己的疑惑解决了再写。&lt;/li&gt;
&lt;li&gt;队列系统。但是我已经写过了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然也可以写一些其它的。但这些要么已经有人写过了写得很好我受益匪浅，我觉得不需要我来写（例如 nix），要么我自己也不熟（例如 docker）。
总之，写个屁。&lt;/p&gt;
&lt;p&gt;我想要达成的目标是这样的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于普通用户：
&lt;ul&gt;
&lt;li&gt;读完新手篇，就可以着手做计算了。&lt;/li&gt;
&lt;li&gt;读完进阶篇，就大致知道自己遇到常见的错误时如何排查，或者如何向别人描述问题了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;对于管理员：
&lt;ul&gt;
&lt;li&gt;全读完，就可以开始学习怎么搭服务器了（遇到问题时，知道去哪里找答案了）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不只是做计算，如果有想自己折腾 Linux 的，这也算是一个比较好的入门；但我会侧重于前者，主要是后者的话，场景太杂，我根本不知道该写啥。&lt;/p&gt;
&lt;p&gt;所以说应该会写四个部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;速查篇，列个表格，满足某些人“我要一口吞个大象”的心态，他吞不下是他的问题，我给他把大象放到这里。&lt;/li&gt;
&lt;li&gt;新手篇，口语化地带领读者实践一圈。&lt;/li&gt;
&lt;li&gt;进阶篇，讲基础的、常见的、重要的、但是又往往被忽略的概念，为了给进一步向前走做准备。&lt;/li&gt;
&lt;li&gt;专业篇，指科学计算，这一部分更偏向于我自己的整理而不是科普给别人。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;那就开始吧&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;那就开始吧&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%82%a3%e5%b0%b1%e5%bc%80%e5%a7%8b%e5%90%a7&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;下面是新手篇。&lt;/p&gt;
&lt;h3&gt;那个黑框框里是什么？&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;那个黑框框里是什么&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%82%a3%e4%b8%aa%e9%bb%91%e6%a1%86%e6%a1%86%e9%87%8c%e6%98%af%e4%bb%80%e4%b9%88&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先考虑这个问题：在 Windows 电脑上，如何删除一个文件？步骤是这样的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;启动&lt;strong&gt;资源管理器&lt;/strong&gt;（就是“我的电脑”或者“此计算机”）。&lt;/li&gt;
&lt;li&gt;打开你要删除的文件所在的文件夹。&lt;/li&gt;
&lt;li&gt;右键点击文件，选择删除。
在这个过程中，“资源管理器”或者“exploer.exe”承担了这样一个“传话筒”的角色：
它接受你下达的指令（打开某个文件夹，删除某个文件，等），并将这个指令传达给系统中那些更底层的程序（即内核）去执行。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过 PuTTY 或者别的什么程序连接到服务器后打开的那个黑框框，就是 Linux 系统中的“资源管理器”&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;，它的名字叫“bash”&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;。
它的作用与 Windows 的资源管理器是一样的：你可以给他传达删除某个文件、启动某个程序等指令，它就会把这个指令传达给系统的更底层去实际执行。
学习 Linux 的第一步，就是学习如何给 bash 下达指令，例如打开某个文件夹、删除某个文件、启动某个程序等。
至于其中的细节（例如 bash 是如何与内核交互的，为了删除一个文件内核又需要做什么），暂时不需要关心。&lt;/p&gt;
&lt;p&gt;类似于 Windows 的资源管理器或 bash 这样的程序被称为“shell”，也就是“壳”，
这是指它把系统中复杂的细节包装了起来，让用户可以简单地进行删除文件、打开文件夹等操作，大多情况下不用关心细节。&lt;/p&gt;
&lt;h3&gt;几个常见的命令&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;几个常见的命令&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%87%a0%e4%b8%aa%e5%b8%b8%e8%a7%81%e7%9a%84%e5%91%bd%e4%bb%a4&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;学习英语的第一步并不是钻研语法，而是学习最常用的几句话大致怎么说。学习 bash 也是一样的。
下面是几个最常用的命令，你可以跟着操作一遍，就大致知道这些命令该怎么用了，同时也可以理解 Linux 上一些基本的概念。&lt;/p&gt;
&lt;div class=&#34;hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-amber-200 hx:bg-amber-100 hx:text-amber-900 hx:dark:border-amber-200/30 hx:dark:bg-amber-900/30 hx:dark:text-amber-200&#34;&gt;
  &lt;div class=&#34;hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2&#34;&gt;&lt;svg height=1.2em class=&#34;hx:inline-block hx:align-middle&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; fill=&#34;none&#34; viewBox=&#34;0 0 24 24&#34; stroke-width=&#34;2&#34; stroke=&#34;currentColor&#34; aria-hidden=&#34;true&#34;&gt;&lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; d=&#34;M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;

  &lt;div class=&#34;hx:w-full hx:min-w-0 hx:leading-7&#34;&gt;
    &lt;div class=&#34;hx:mt-6 hx:leading-7 hx:first:mt-0&#34;&gt;如果你是在学校超算（jykang）上跟着操作，那么一定要小心，每一次回车前都要仔细检查输入的命令是否正确，千万不要误操作。&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;pwd&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#pwd&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;在 Windows 的资源管理器中，可以在窗口上部、标题栏下方的地址栏中看到现在打开的是哪个文件夹（称为当前的“工作目录”）；
而在 bash 中，可以使用 &lt;code&gt;pwd&lt;/code&gt; 命令查看工作目录的路径（&lt;code&gt;pwd&lt;/code&gt; 是“print working directory”的缩写）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;将 &lt;code&gt;pwd&lt;/code&gt; 输入到黑框框中，然后按回车键，它就会输出一行文字，告诉你现在在哪个文件夹下。例如，它输出的结果可能是：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;pre&gt;&lt;code&gt;/home/chn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这表示你现在打开的是“&lt;strong&gt;根目录&lt;/strong&gt;”下的 &lt;code&gt;home&lt;/code&gt; 文件夹下的 &lt;code&gt;chn&lt;/code&gt; 文件夹。&lt;/p&gt;
&lt;p&gt;要解释“根目录”的意思，需要先提到一个 Linux 与 Windows 的不同之处：
Windows 中往往逻辑上有多个“磁盘”（C 盘、D 盘、E 盘等），而 Linux 中&lt;strong&gt;逻辑上&lt;/strong&gt;只有一个“磁盘”，这个“磁盘”就是所谓的“根目录”。
当然，这个“根目录”中的内容完全可能实际是分布在多个硬盘上存储的（例如，某几个文件夹在一个硬盘上，另外几个文件夹在另一个硬盘上），
但这些细节初学者并不需要关心，这些文件实际上存储在哪里对初学者来说操作起来完全没有区别。&lt;/p&gt;
&lt;p&gt;你还会发现另外一个区别：在 Windows 中，文件夹之间的分隔符是反斜杠 &lt;code&gt;\&lt;/code&gt;，而在 Linux 中，文件夹之间的分隔符是斜杠 &lt;code&gt;/&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;还有第三个重要的区别你可能没有发现：
在 Windows 中，文件和文件夹名字是不区分大小写的，也就是说无法在同一个文件夹下新建 &lt;code&gt;aaa.txt&lt;/code&gt; 和 &lt;code&gt;AAA.txt&lt;/code&gt; 两个文件；
而 Linux 中文件和文件夹名是区分大小写的，&lt;code&gt;aaa.txt&lt;/code&gt; 和 &lt;code&gt;AAA.txt&lt;/code&gt; 完全可以同时存在。
不仅仅是文件名，整个 Windows 的习惯都是不区分大小写的，而整个 Linux 的习惯则都是区分大小写的。
总之，我们之后学习的所有命令、各种参数等，它们都是区分大小写的；
如果你在哪里看到过某某命令不区分大小写的说法，那大概率是 Windows 的特色，不能不经确认套用到 Linux 上。&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;ls&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;ls&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#ls&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;ls&lt;/code&gt; 命令（“list”的缩写）列出当前目录下，名字不以 &lt;code&gt;.&lt;/code&gt; 开头的文件和文件夹（也就是不隐藏的文件和文件夹）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 Windows 上，一个文件或者文件夹是否是隐藏的，是它的一个属性（右击-属性中，可以修改）；
但在 Linux 上，通常直接把名字以 &lt;code&gt;.&lt;/code&gt; 开头的文件或文件夹称为“隐藏文件”或“隐藏文件夹”，并通常用来存放程序的设置等用户平时不需要修改的内容。
隐藏的文件与不隐藏的文件本质上并没有什么不同，这只是一种习惯性的用法。&lt;/p&gt;
&lt;p&gt;要列出当前目录中所有的文件和文件夹（包括隐藏的），可以使用 &lt;code&gt;ls -a&lt;/code&gt; 命令（“a”是“all”的缩写）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;你一定可以看到两个特殊的文件夹：一个名字叫 &lt;code&gt;.&lt;/code&gt;，令一个叫 &lt;code&gt;..&lt;/code&gt;。我稍后会介绍它们是什么。&lt;/p&gt;
&lt;p&gt;要列出别的地方的文件夹里的内容（而不是当前文件夹），可以在 &lt;code&gt;ls&lt;/code&gt; 命令后面加上这个文件夹的路径，例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls /&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这会列出根目录下的文件和文件夹（不包括隐藏的）。&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls /home/chn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这会列出 &lt;code&gt;home&lt;/code&gt; 文件夹下的 &lt;code&gt;chn&lt;/code&gt; 文件夹中的文件和文件夹（不包括隐藏的）。
当然，如果你没有权限看这个文件夹里的内容的话，这个命令就会报错，但也不会有什么坏处，也不会影响之后的命令。&lt;/p&gt;
&lt;p&gt;你可以按照自己的兴趣，随意列出几个文件夹的内容，探索一下服务器上有什么东西。不会把服务器搞坏的，不用担心。
也可以将 &lt;code&gt;ls&lt;/code&gt; 列出来的东西与 WinSCP 对照者看一下，确认它们是一样的&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;div class=&#34;hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200&#34;&gt;
  &lt;div class=&#34;hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2&#34;&gt;&lt;svg height=1.2em class=&#34;hx:inline-block hx:align-middle&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; fill=&#34;none&#34; viewBox=&#34;0 0 24 24&#34; stroke-width=&#34;2&#34; stroke=&#34;currentColor&#34; aria-hidden=&#34;true&#34;&gt;&lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; d=&#34;M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;

  &lt;div class=&#34;hx:w-full hx:min-w-0 hx:leading-7&#34;&gt;
    &lt;div class=&#34;hx:mt-6 hx:leading-7 hx:first:mt-0&#34;&gt;如果你尝试列出 &lt;code&gt;/nix/store&lt;/code&gt; 或者 &lt;code&gt;.node_modules&lt;/code&gt; 的文件夹的内容，你的 shell 可能会卡死，这只是因为里面的文件太多了。
你可以耐心等待它列完，也可以按 &lt;code&gt;Ctrl + C&lt;/code&gt; 来终止这个命令，实在不行就重启 PuTTY。&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;mkdir&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;mkdir&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#mkdir&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;mkdir&lt;/code&gt; 命令（“make directory”的缩写）在当前目录下创建一个新的文件夹：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这样就在当前目录下创建了一个名为 &lt;code&gt;test&lt;/code&gt; 的文件夹。&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;cd&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;cd&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#cd&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;cd&lt;/code&gt; 命令（“change directory”的缩写）切换当前目录（也就是，打开别的文件夹）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这样就进入了当前目录下的 &lt;code&gt;test&lt;/code&gt; 文件夹。&lt;/p&gt;
&lt;p&gt;如果要返回上一级目录，可以使用 &lt;code&gt;cd ..&lt;/code&gt; 命令：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ..&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;还记得前面提到的 &lt;code&gt;.&lt;/code&gt; 和 &lt;code&gt;..&lt;/code&gt; 这两个特殊的文件夹吗？其实 &lt;code&gt;..&lt;/code&gt; 就是指上一层文件夹，而 &lt;code&gt;.&lt;/code&gt; 就是指同一层文件夹。
例如，下面几个目录的写法,它们之间是完全等价的：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/chn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/chn/.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/chn/./././././.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/../home/chn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/chn/../../home/chn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/././chn/.././chn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;目前为止，很多命令都需要用到文件或文件夹的路径。
实际上，文件或者文件夹的路径有两种写法，大多数情况下（包括基础篇中提到的所有命令但不仅限于），两种写法都可以，完全等价：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直接写当前目录下的文件或文件夹的名字，例如 &lt;code&gt;cd test&lt;/code&gt; 或者 &lt;code&gt;cd ./test&lt;/code&gt; 或者 &lt;code&gt;cd ./test/../test&lt;/code&gt; 等，这种写法称为相对路径；&lt;/li&gt;
&lt;li&gt;写完整的路径（以 &lt;code&gt;/&lt;/code&gt; 开头的路径），例如 &lt;code&gt;cd /home/chn/test&lt;/code&gt;，这种写法称为绝对路径。
但也存在一些例外，其中一个重要的例外在基础篇的最后会提到。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;echo&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;echo&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#echo&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;echo&lt;/code&gt; 命令输出一行文字：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; Hello&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这样就输出了一行 &lt;code&gt;Hello&lt;/code&gt;。——这有什么用呢？&lt;/p&gt;
&lt;p&gt;可以使用下面这个命令，在当前目录下创建一个名为 &lt;code&gt;file.txt&lt;/code&gt; 的文件，并在这个文件中写入一行 &lt;code&gt;Hello&lt;/code&gt;
（如果这个文件之前已经存在，其中的内容会被覆盖）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; Hello &amp;gt; file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果你想在这个文件中追加一行 &lt;code&gt;World&lt;/code&gt;（之前的内容不会被覆盖），可以使用下面这个命令：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; World &amp;gt;&amp;gt; file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这里的 &lt;code&gt;&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; 是两个特殊的符号，被称为“重定向符号”，
它表示把之前的命令的标准输出（也就是，原本会输出到屏幕上的内容&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;）重定向到某个文件中。
&lt;code&gt;&amp;gt;&lt;/code&gt; 表示覆盖，&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; 表示追加。
它们的用法不仅限于 &lt;code&gt;echo&lt;/code&gt; 命令，而是可以用在任意的命令上，例如 &lt;code&gt;ls &amp;gt; file.txt&lt;/code&gt; 就会把 &lt;code&gt;ls&lt;/code&gt; 命令的输出重定向到 &lt;code&gt;file.txt&lt;/code&gt; 文件中。&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;cat&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;cat&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#cat&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;cat&lt;/code&gt; 命令（“meow meow meow”的缩写&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;）查看一个文件的内容：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;你当然可以“活学活用”，把 &lt;code&gt;cat&lt;/code&gt; 命令的输出重定向到另一个文件中，这样就变相实现了文件的复制：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat file.txt &amp;gt; file2.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;类似于这样的“活学活用”在 Linux 中其实比比皆是。就像一篇光鲜亮丽的 sci 论文背后总是充满了科研现实的苟且。&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;cp&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;cp&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#cp&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;这个才是正经用来复制文件的命令（&lt;code&gt;copy&lt;/code&gt; 的缩写）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp file.txt file2.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果要复制的是文件夹，需要加上 &lt;code&gt;-r&lt;/code&gt; 参数（“r”是“recursive”的缩写&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -r &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; test2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;&lt;code&gt;rm&lt;/code&gt;&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;rm&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#rm&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;rm&lt;/code&gt; 命令（“remove”的缩写）删除一个文件：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这样就删除了当前目录下的 &lt;code&gt;file.txt&lt;/code&gt; 文件。&lt;/p&gt;
&lt;p&gt;要删除文件夹，需要加上 &lt;code&gt;-r&lt;/code&gt; 参数（与 &lt;code&gt;rm&lt;/code&gt; 相同）：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -r test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这样就删除了当前目录下的 &lt;code&gt;test&lt;/code&gt; 文件夹。&lt;/p&gt;
&lt;h3&gt;bash 的基本语法&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;bash-的基本语法&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#bash-%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%af%ad%e6%b3%95&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;按行分割&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;按行分割&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%8c%89%e8%a1%8c%e5%88%86%e5%89%b2&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;英语分为一个个句子，以句号作为结尾；输入给 bash 的指令是一条一条的，通常以换行作为结尾。
例如，输入下面的命令：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm file.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ..&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;bash 会把它作为三条指令来执行。&lt;/p&gt;
&lt;h4&gt;命令与参数&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;命令与参数&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%91%bd%e4%bb%a4%e4%b8%8e%e5%8f%82%e6%95%b0&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;英语的一句话中，主语后接的是谓语、宾语；
bash 的一条指令中，按照空格分隔，第一个单词是要执行的命令，之后如果还有内容的话，只要不是一些特殊的符号（例如 &lt;code&gt;&amp;gt;&lt;/code&gt;），就是这个命令的参数。
例如在下面的命令中：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;rm&lt;/code&gt; 是要执行的命令，&lt;code&gt;file.txt&lt;/code&gt; 是这个命令的参数。&lt;/p&gt;
&lt;p&gt;在按照空格分割的时候，连续的多个空格与单个空格是等价的，例如下面的命令：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm    file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;与上面的命令是等价的。&lt;/p&gt;
&lt;p&gt;如果命令或者参数中包含空格，可以用双引号或单引号把它括起来，例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm &lt;span class=&#34;s2&#34;&gt;&amp;#34;file with space.txt&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这样 bash 就知道 &lt;code&gt;file with space.txt&lt;/code&gt; 是传给 &lt;code&gt;rm&lt;/code&gt; 的一个参数；而不是把它分成 &lt;code&gt;file&lt;/code&gt;、&lt;code&gt;with&lt;/code&gt;、&lt;code&gt;space.txt&lt;/code&gt; 三个参数。
也就是说，要删除的是名为 &lt;code&gt;file with space.txt&lt;/code&gt; 这一个文件，而不是名为 &lt;code&gt;file&lt;/code&gt;、&lt;code&gt;with&lt;/code&gt;、&lt;code&gt;space.txt&lt;/code&gt; 的三个文件。&lt;/p&gt;
&lt;p&gt;每个命令可以接受参数的个数不同。
例如，删除文件的命令通常需要至少一个参数（你得告诉它删除哪个文件），至多则不限制；
而复制文件的命令通常至少需要两个参数（你得告诉它将哪个文件复制到哪里）。&lt;/p&gt;
&lt;h4&gt;内置命令与外部程序&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;内置命令与外部程序&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%86%85%e7%bd%ae%e5%91%bd%e4%bb%a4%e4%b8%8e%e5%a4%96%e9%83%a8%e7%a8%8b%e5%ba%8f&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;cd&lt;/code&gt;、&lt;code&gt;pwd&lt;/code&gt; 等命令并不会启动 bash 以外的程序：它们是 bash 内置的命令，它们的作用是调整或者输出 bash 本身的状态，
相当于查看或者修改 Windows 的资源管理器本身的设置，而不是要 bash 做什么实际的事情。
而 &lt;code&gt;rm file.txt&lt;/code&gt; 这个命令则实际上是启动了一个放置在特定位置&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt;、名为 &lt;code&gt;rm&lt;/code&gt; 的程序，并将 &lt;code&gt;file.txt&lt;/code&gt; 作为参数传给它。
&lt;code&gt;mkdir&lt;/code&gt;、&lt;code&gt;cp&lt;/code&gt; 等命令也是这样的。&lt;/p&gt;
&lt;p&gt;那么，如果要运行一个程序，而这个程序又不放在类似于 &lt;code&gt;/usr/bin&lt;/code&gt; 这样的特殊位置，应该怎么调用呢？有三个办法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修改环境变量。新手篇不会介绍这个办法，因为新手很容易把环境变量搞乱。&lt;/li&gt;
&lt;li&gt;使用绝对路径调用程序。例如，这个程序放置在 &lt;code&gt;/home/chn&lt;/code&gt; 文件夹下，名字叫 &lt;code&gt;myprogram&lt;/code&gt;，那么可以这样调用：
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/chn/myprogram&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
如果要传递参数给这个程序，也是一样的写法：
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/chn/myprogram arg1 arg2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;使用以 &lt;code&gt;.&lt;/code&gt; 开头的相对路径调用程序。必须使用以 &lt;code&gt;.&lt;/code&gt; 开头的相对路径（&lt;code&gt;..&lt;/code&gt; 也可），这就是之前提到的那个重要的例外。
例如，这个程序放置在当前文件夹下，名字叫 &lt;code&gt;myprogram&lt;/code&gt;，那么可以这样调用：
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./myprogram&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;管道与 &lt;code&gt;grep&lt;/code&gt; 命令&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;管道与-grep-命令&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%ae%a1%e9%81%93%e4%b8%8e-grep-%e5%91%bd%e4%bb%a4&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;除了之前介绍的 &lt;code&gt;&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; 之外，还有一个非常常用的特殊符号，叫做“管道符号” &lt;code&gt;|&lt;/code&gt;，就是键盘上那个竖线。
它的作用是把一个命令的标准输出重定向到另一个命令的“标准输入”（就是这个命令原本看到的用户的输入&lt;sup id=&#34;fnref:8&#34;&gt;&lt;a href=&#34;#fn:8&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;8&lt;/a&gt;&lt;/sup&gt;）。&lt;/p&gt;
&lt;p&gt;管道符号经常和 &lt;code&gt;grep&lt;/code&gt; 命令一起使用，&lt;code&gt;grep&lt;/code&gt; 命令的作用是在输入中查找某个字符串，并输出包含这个字符串的行。
例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat OUTCAR &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;Total energy&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这个命令可以输出 &lt;code&gt;OUTCAR&lt;/code&gt; 文件中包含 &lt;code&gt;Total energy&lt;/code&gt; 的行。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; 有一些常用的参数，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt;（“ignore case”的缩写）：匹配时忽略大小写；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-An&lt;/code&gt;（“after”的缩写）: 除了输出匹配的内容，还输出匹配内容的后几行；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-Bn&lt;/code&gt;（“before”的缩写）: 除了输出匹配的内容，还输出匹配内容的前几行；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;（“invert match”的缩写）：输出不匹配的行，而不是输出匹配的行。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;通配符&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;通配符&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%80%9a%e9%85%8d%e7%ac%a6&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;*&lt;/code&gt; 来匹配路径中存在的文件或者文件夹。说起来抽象，举个例子就明白了。假定当前目录下有这样几个文件：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;pre&gt;&lt;code&gt;file1.txt
file2.txt
file3.txt
dir1
dir1/file.txt
dir2
dir2/file.txt
dir3
dir3/file.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;那么下面这个命令：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;myprogram *&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;等价于：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;myprogram file1.txt file2.txt file3.txt dir1 dir2 dir3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;下面这个命令：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;myprogram dir*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;等价于：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;myprogram dir1 dir2 dir3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;需要注意的是，&lt;code&gt;*&lt;/code&gt; 是由 bash 负责解释和展开的，而不是由 &lt;code&gt;myprogram&lt;/code&gt; 负责解释和展开的；
或者说，&lt;code&gt;myprogram&lt;/code&gt; 从来不知道 &lt;code&gt;*&lt;/code&gt; 的存在，它收到的信息已经是展开后的结果了。&lt;/p&gt;
&lt;p&gt;另一个常见的通配符是 &lt;code&gt;~&lt;/code&gt;，它表示当前用户的家目录（也就是你刚登陆时，所在的那个目录&lt;sup id=&#34;fnref:9&#34;&gt;&lt;a href=&#34;#fn:9&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;9&lt;/a&gt;&lt;/sup&gt;）。例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;myprogram ~/file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;可能等价于&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;myprogram /home/chn/file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这个通配符也是由 bash 负责解释和展开的。
（等等，这个东西是通配符吗？）&lt;/p&gt;
&lt;h4&gt;for 循环，大括号展开&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;for-循环大括号展开&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#for-%e5%be%aa%e7%8e%af%e5%a4%a7%e6%8b%ac%e5%8f%b7%e5%b1%95%e5%bc%80&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;bash 也支持 &lt;code&gt;for&lt;/code&gt; 循环，例如：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; i in &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; 3&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; mkdir &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ..&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这个命令会在当前目录下创建三个文件夹，分别叫 &lt;code&gt;1&lt;/code&gt;、&lt;code&gt;2&lt;/code&gt;、&lt;code&gt;3&lt;/code&gt;，然后依次进入这三个文件夹，再依次返回到当前目录。
这里用到了 &lt;code&gt;;&lt;/code&gt; 来分隔多个命令，它的具体用法在新手篇里不会提到，仅在这一个特殊的例子中照葫芦画瓢写就可以了。&lt;/p&gt;
&lt;p&gt;对于数值，bash 还支持大括号展开，例如：&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;无论是 Windows 上的资源管理器还是 Linux 上的这个“黑框框”，它有一个统一的名字，叫做“shell”，也就是“壳”，意思就是它把系统中复杂的细节包装了起来，让用户可以简单地进行删除文件、打开文件夹等操作。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Linux 上最常见的是 bash，学校的超算用的就是这个；次常见的是 zsh，我管理的其它服务器使用的其实就是 zsh 而不是 bash。
这两个的基本使用方法是相同的，初学者不需要区分。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;WinSCP 默认不会列出隐藏的文件和文件夹，有时会误导新手以为 &lt;code&gt;.bashrc&lt;/code&gt; 等文件不存在。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;命令原本输出到屏幕上的内容不仅仅来自标准输出，还有标准错误输出（用于输出出错的信息，例如“permission denied”等）等途径。
如此使用重定向符号只会重定向标准输出，不会重定向标准错误输出等其它输出。&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;实际上是“concatenate”的缩写，但这个单词我，反正我不认识。&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;系统在实际复制一个文件夹时，总是需要首先新建文件夹本身，然后新建文件夹里的
删除文件夹里的内容，而这又需要首先删除文件夹里的文件夹里的内容，以此类推。
“recursive”就是“递归”的意思。单纯删除空文件夹的参数其实是 &lt;code&gt;-d&lt;/code&gt;，意为“directory”，但这个参数很少用到，因为 &lt;code&gt;-r&lt;/code&gt; 也可以删除空文件夹。&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:7&#34;&gt;
&lt;p&gt;准确说，是 &lt;code&gt;PATH&lt;/code&gt; 指向的目录。&lt;code&gt;rm&lt;/code&gt; 等最常用的命令通常位于 &lt;code&gt;/usr/bin&lt;/code&gt; 或 &lt;code&gt;/run/current-system/sw/bin&lt;/code&gt;。&amp;#160;&lt;a href=&#34;#fnref:7&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:8&#34;&gt;
&lt;p&gt;标准输入也不是程序读取用户输入的唯一途径。最常见的例外是一些需要读取密码的程序，为了防止密码泄漏，它们往往会从更底层直接拦截、读取掉。
这也是为什么命令行中输入密码时，大多情况下没有任何显示的原因。&amp;#160;&lt;a href=&#34;#fnref:8&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:9&#34;&gt;
&lt;p&gt;准确说，是 &lt;code&gt;HOME&lt;/code&gt; 环境变量的值。&amp;#160;&lt;a href=&#34;#fnref:9&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>狭义相对论的时空观</title>
      <link>https://blog.chn.moe/blog/special-relativity-space-time-view/</link>
      <pubDate>Tue, 29 Oct 2024 13:15:55 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/special-relativity-space-time-view/</guid>
      <description>
        
        
        &lt;p&gt;狭义相对论都听说过，一些公式甚至在中学就已经在课本上给出。
然而这些公式都并不直观。
最近在看电磁学，这里的很多东西，要理解，非需要理解相对论不可。&lt;/p&gt;
&lt;p&gt;常常会说相对论把时间和空间统一在一起考虑了，也就是所谓的“四维时空”。
当想要了解具体的东西的时候，维基百科等资料往往会直接假定读者已经精通了微分几何，然后啪啪啪给出几个向量或者矩阵。
这对于我这样的小白是非常不友好的。
这里我尝试绕过微分几何里才有的一些数学概念，直接来讨论这个闵什么四维时空，力求得到一个直观的结论。&lt;/p&gt;
&lt;h2&gt;闵可夫斯基时空&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;闵可夫斯基时空&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%97%b5%e5%8f%af%e5%a4%ab%e6%96%af%e5%9f%ba%e6%97%b6%e7%a9%ba&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个空间的长度单位也是现实中的长度单位。
有四个维度，后三个就是现实中的三维，第一个维度是 $ct$，就是把时间乘以光速 $c$ 变成长度的单位。
有一些资料会把 $ict$ 作为第一个维度，但这会让数学基础模糊不清（虚数的坐标轴是什么玩意儿？）。
历史上曾经有这样的倾向，但最终还是倾向于使用 $ct$。&lt;/p&gt;
&lt;p&gt;暂时假定这几个坐标轴是相互垂直的（之后会看到，这里假定的垂直毫无意义，只是为了方便在一开始时直观理解）。
那么可以画出原点处的光锥，这个光锥的侧面就是两个坐标轴的角平分线。
可以看到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任意惯性参考系中，测量到的任意粒子的速度，都会位于这个光锥内或者最多是这个光锥的边界上，也就是和时间轴的夹角小于 45 度。&lt;/li&gt;
&lt;li&gt;同样是在惯性参考系中，任意两个事件之差对应的向量（即 $(c(t_1-t_2), x_1-x_2, y_1-y_2, z_1-z_2)$），
如果在这个光锥里（与时间轴的夹角小于与空间超平面的夹角），那么这两个事件是可能互相联系的，
无论如何变换（惯性）参考系，事件的先后顺序都不会改变。
然而，如果这个向量在光锥外（例如在某个参考系中观察到在不同两地同时发生的事件），那么这两个事件是不可能互相联系的，
通过变换参考系，可以改变事件的先后顺序。
这两个结果是可以代公式来检验它的正确性的。
但很快就可以看到，它其实会是一个非常直观的结果，根本不需要任何计算。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;斜坐标系与洛仑兹变换&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;斜坐标系与洛仑兹变换&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%96%9c%e5%9d%90%e6%a0%87%e7%b3%bb%e4%b8%8e%e6%b4%9b%e4%bb%91%e5%85%b9%e5%8f%98%e6%8d%a2&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;从一个惯性参考系变换到另一个惯性参考系去观察同一个事件，就像是从一个坐标系变换到另一个坐标系去观察同一个点。
问题是，这两个变换是如何关联的？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果两个参考系相对静止，只是零点不同，那么在闵可夫斯基时空中，显然也就是把参考系平移过去。&lt;/li&gt;
&lt;li&gt;如果两个参考系相对运动，坐标系是如何变换过去的？转动？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://wuli.wiki/SROb&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;小时百科&lt;/a&gt;给了我想要的结论。
实际上并不是转动，而是将一个互相垂直的坐标系变得并不互相垂直，
时间轴和一个空间轴（两个参考系相对运动的那个方向的空间轴）同时向它们的角平分线倾斜一个相同的角度，然后再同时拉伸一个相同的倍数。
具体来说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;倾斜的角度是 $\arctan(v/c)$，也就恰好是把事件轴倾斜到两个坐标轴的相对速度对应的那个方向上。&lt;/li&gt;
&lt;li&gt;坐标轴拉伸的比例是 $\cfrac{1}{\sqrt{\cos[2]\theta-\sin[2]\theta}}$，
或者说在变换后的坐标上再乘以 $\sqrt{\cos[2]\theta-\sin[2]\theta}$。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后将同一个点的坐标分解到新得到的斜坐标系中，就得到了事件在新的参考系中的表示。我检验过了，是正确的。
具体来说，假定第二个参考系相对于第一个参考系朝着 $x$ 轴正方向运动，速率为 $v$；
假定某事件在第一个参考系中的坐标为 $(ct, x)$，在第二个参考系中的坐标为 $(ct&amp;rsquo;, x&amp;rsquo;)$，那么就有：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
ct&amp;rsquo; &amp;amp;= \frac{ct - x\tan\theta}{\sqrt{1-\tan[2]\theta}} \\
x&amp;rsquo; &amp;amp;= \frac{x - ct\tan\theta}{\sqrt{1-\tan[2]\theta}}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;伽利略变换对应的则是，仅仅倾斜 $ct$ 轴，并且也只拉伸 $ct$ 轴
（想象将所有点都沿着 x 方向平移一点，平移的幅度随着 ct 增加而增加，拉伸的幅度是 $\cfrac{1}{\cos\theta}$）。
考虑到日常生活中，大多运动的速度都远远小于光速（也就是速度向量非常接近 $ct$ 轴），事件也往往落在 $ct$ 轴附近。
在这种情况下，转换坐标轴导致的 $ct$ 轴的倾斜角度和拉伸比例是无法忽略的影响，而空间轴的旋转和拉伸变得可以忽略，
因此就恰好符合了伽利略变换的近似。&lt;/p&gt;
&lt;p&gt;考虑变换前后的坐标轴，容易得到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;光锥依然是时间与空间的角平分线。或者说，光锥曲面与具体的坐标系无关，无论如何它都保持在空间与时间的角平分线上。&lt;/li&gt;
&lt;li&gt;光锥里的向量，无论如何变换，都依然在光锥里。
它相对于 $ct$ 轴夹角和方位（对应于运动速率和方向）会改变，但不可能变换到光锥外；并且它到 $ct$ 轴的分量的符号不会改变（先后不会颠倒）。&lt;/li&gt;
&lt;li&gt;光锥外的向量，无论如何变换，都依然在光锥外。
如果它一开始就比较接近那个发生变换的空间轴，那么它在 $ct$ 轴上的分量的符号将可能会在变换后改变，也就是事件的先后顺序可能会改变。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一切都变得非常合理，合理得不得了，狭义相对论变成了幼儿园的折纸或者小棍。
除了那个神秘的拉伸比例 $\sqrt{\cos[2]\theta-\sin[2]\theta}=\sqrt{\cos{2\theta}}$，
像是尽力在保证某个量（与表示出来的坐标有关）在变换前后不变。
实际上它是在维护 $-c^2t^2+x^2+y^2+z^2$ 不变。
但这个量在几何上确实没有看出什么直观的意义，我尝试了一下没有找到。
或许如果一开始就假定时间坐标轴与空间不垂直（实际上没有任何理由认为某个参考系对应的坐标轴是垂直的），
可以比较容易看到这个量的意义。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>像素、厘米和 DPI</title>
      <link>https://blog.chn.moe/blog/pixel-cm-and-dpi/</link>
      <pubDate>Tue, 29 Oct 2024 12:46:24 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/pixel-cm-and-dpi/</guid>
      <description>
        
        
        &lt;p&gt;昨天在看 Inkscape 的教程时，忽然发现自己没有搞明白像素、厘米、DPI 这些概念平时是如何使用的。
并不是不知道这些概念的严格定义，而是不知道在各种场合下“入乡随俗”时，有什么习惯性的用法。&lt;/p&gt;
&lt;p&gt;大概搞明白之后，发了个帖子：&lt;/p&gt;
&lt;iframe src=&#34;https://xn--s8w913fdga.chn.moe/embed/notes/9zwsb36cce&#34; data-misskey-embed-id=&#34;v1_85bef72e-6f26-49c1-ac0b-2997667a7e85&#34; loading=&#34;lazy&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; style=&#34;border: none; width: 100%; max-width: 500px; height: 300px; color-scheme: light dark;&#34;&gt;&lt;/iframe&gt;
&lt;script defer src=&#34;https://xn--s8w913fdga.chn.moe/embed.js&#34;&gt;&lt;/script&gt;
&lt;p&gt;这里再来总结一下吧。&lt;/p&gt;
&lt;p&gt;各种场合下的使用习惯是由它们的使用目的决定的。分成三类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;在屏幕上显示给用户看&lt;/strong&gt;：
对于软件开发者来说，往往会同时用到这两个单位。
除非是在开发操作系统或者底层图形库，否则可以认为一英寸（2.54 厘米）就等于 96 像素，这两个单位的比例是固定的。
开发者可以以厘米为单位指定元素大小，也可以以像素指定，它们的效果是完全相同的。
即使指定为 96 像素或者 2.54 厘米，最终显示出来的大小也不一定是 2.54 厘米，
而是根据硬件、用户设置，由操作系统和底层图形库自动协商出一个放大或者缩小的比例，上层开发者一般不用关心。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储位图信息&lt;/strong&gt;：
一般以像素单位为核心。如果偶尔出现厘米单位，一定会给出这里的一个厘米是指多少个像素。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;打印结果&lt;/strong&gt;：
一般以厘米单位为核心。例如 Word 的行间距、页面大小都是以厘米为单位。
当需要嵌入位图时（例如将 Word 转换为 PDF），一定会需要针对各个位图设定以厘米为单位的尺寸。
尽管现在 PDF 以及一些矢量图现在更多是在屏幕上看了，但是 PDF 本质上是为打印而设计的，所以它里面使用的单位依然是厘米。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好了我水完了。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>声子的拉曼活性与群表示</title>
      <link>https://blog.chn.moe/blog/raman-representation/</link>
      <pubDate>Thu, 03 Oct 2024 18:15:44 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/raman-representation/</guid>
      <description>
        
        
        &lt;div class=&#34;hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-amber-200 hx:bg-amber-100 hx:text-amber-900 hx:dark:border-amber-200/30 hx:dark:bg-amber-900/30 hx:dark:text-amber-200&#34;&gt;
  &lt;div class=&#34;hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2&#34;&gt;&lt;svg height=1.2em class=&#34;hx:inline-block hx:align-middle&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; fill=&#34;none&#34; viewBox=&#34;0 0 24 24&#34; stroke-width=&#34;2&#34; stroke=&#34;currentColor&#34; aria-hidden=&#34;true&#34;&gt;&lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; d=&#34;M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;

  &lt;div class=&#34;hx:w-full hx:min-w-0 hx:leading-7&#34;&gt;
    &lt;div class=&#34;hx:mt-6 hx:leading-7 hx:first:mt-0&#34;&gt;本文有已知的错误，尽管整体思路仍然有价值。&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;每一个声子模式都属于某个群的某个表示。
只要知道表示，不需要知道这个声子具体是怎么振的，就可以知道这个声子是否是拉曼活性的
（当然，是否强到实验中可以看到，那是另外一回事）。
这是怎么做到的呢？&lt;/p&gt;
&lt;p&gt;一些特征标表在列出各个表示对应的特征标后，还会列出各个表示对应的一些式子，例如 $x$ 或者 $xy$ 或者 $x^2-y^2$。
网上的教程会告诉你：如果声子对应的表示对应的式子有二次项，那就是拉曼活性的；没有就不是。
——这又是什么魔法？&lt;/p&gt;
&lt;p&gt;我翻烂了互联网也没找到这整个一串问题的完整解释。
或许它藏在某个上世纪的教科书里（我看了其中一本，他也没写），因为初次思考起来太抽象，一旦想明白又太简单，并且即使想不明白直接用也太简单了，
导致懂的人懒得解释，不懂的人就不懂了，于是出现了断代。
我自己闷头想了一天算是想明白了，于是写到这里分享出来。
其实想出来之后就很简单了，不知道为啥辣么大个互联网居然只有人提问没有人回答。&lt;/p&gt;
&lt;h2&gt;前置结论&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;前置结论&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%89%8d%e7%bd%ae%e7%bb%93%e8%ae%ba&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;首先说几个具体讨论问题前需要用到的前置结论。这些结论都是网上可以找到证明或者讨论的。&lt;/p&gt;
&lt;p&gt;第一个结论是：&lt;strong&gt;具有拉曼活性的声子就是使得电极化性（polarizability）变化的声子。&lt;/strong&gt;
也就是说，一个声子有拉曼活性，等价于：&lt;/p&gt;
&lt;p&gt;$$
\pdv{\alpha}{R} \neq 0
$$&lt;/p&gt;
&lt;p&gt;其中 $\alpha$ 是极化性张量，$R$ 是振动模式对应的方向向量。$R$ 的长度是 $3n$，$n$ 是原胞中的原子数。
这是微扰理论的一个结论，
具体的讨论可以看&lt;a href=&#34;https://chem.libretexts.org/Bookshelves/Physical_and_Theoretical_Chemistry_Textbook_Maps/Physical_Chemistry_%28LibreTexts%29/13%3A_Molecular_Spectroscopy/13.11%3A_Time-Dependent_Perturbation_Theory&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这里&lt;/a&gt;。
这里的证明中取的基是原本哈密顿量的本征态，但实际上这个限制是不必要的，你只要把结论中的结果再线性组合一下就能看出来一般的情况了。&lt;/p&gt;
&lt;p&gt;注意有时讨论拉曼时，有的人用的是电极化率（electric susceptibility，$\chi$）而不是极化性。
这两个物理量物理意义是一致的，但转换并不只是差一个常数，差的还挺多，具体你可以自己去看看。
一定程度上来讲，电极化性往往用来描述“微观”系统，例如一个分子对外加电场的响应；而电极化率往往用来描述“宏观”系统，例如一个晶体对外加电场的响应。
大多数讨论时使用的是电极化性，只有个别讨论使用电极化率。
可能是因为，做化学的人往往更追求通俗易懂，所以会在网上大致讨论拉曼原理，这时使用电极化性；
而做物理的人往往更追求严谨，但定量讨论拉曼散射要用到量子电磁等高深的理论，于是这些讨论就都藏到上个世纪的教科书里了。
不过这个问题和这里要讨论的问题一分钱关系都没有，你只需要知道声子模式对应于某个对称的二阶张量&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;，并且这个对应关系是线性的就行了。&lt;/p&gt;
&lt;p&gt;第二个结论是群表示论中的结论：&lt;strong&gt;物理中许多对称矩阵与它对应的二次型的对称性一致。&lt;/strong&gt;
这里“二次型的对称性”是指，这个多项式作为一个函数时（自变量为三维向量），将群元素作用上去，它变化与否与对应的矩阵是一致的。
特征标表中的式子，其实就是将群元素作用到三个空间中（包括一维齐次多项式，旋转，二维齐次多项式），支撑对应表示的子空间的基矢。
或者说，特征标表中的二次齐次多项式，你也可以把它写成一个个对称矩阵，只是矩阵写起来没有多项式方便（一行就能写完），所以才写成多项式。&lt;/p&gt;
&lt;p&gt;这里的“许多对称矩阵”是指，当将群元素 $p$ 作用到系统上后，矩阵 $A$ 变为 $p^{-1}Ap$ 或者 $pAp^{-1}$ 这种 $3\times3$ 的矩阵。
极化性就是这样的矩阵。
但并不是所有的矩阵都是这样的，例如如果将格矢（列向量）拼成一个矩阵来描述原胞的形状和大小，这个矩阵 $A$ 在作用 $p$ 后就变成 $pA$，
所以就没有这个特点。&lt;/p&gt;
&lt;p&gt;这个结论也蛮明显的，只要在矩阵左右都乘上同一个向量就得到对应的二次型了。&lt;/p&gt;
&lt;p&gt;第三个结论还是群表示论中的结论：&lt;strong&gt;如果一个群与一个线性映射对易，那么这个线性映射的值域要么是零，要么值域承载的表示是定义域上的表示的子表示。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个结论可以这样理解：定义域可以分解成两个空间的直和，一个是核空间，一个是核的正交补空间。
可以证明这两个空间都对群运算封闭（取一个群元素试一下就可以看到这个结论），
并且把核空间去除掉后，剩下的映射就是双射，群在正交补空间上的表示和在值域上的表示一样。
也就是说，群在定义域中的表示，去掉属于核空间的部分，就是在值域上的表示。
万一整个都是核空间，那就去完了，也就是“值域是零”这个特殊情况。&lt;/p&gt;
&lt;p&gt;有这三个前置结论就够了。&lt;/p&gt;
&lt;h2&gt;开始变魔法&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;开始变魔法&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%bc%80%e5%a7%8b%e5%8f%98%e9%ad%94%e6%b3%95&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;关注于某个振动模式所属的表示对应的子空间，假定这个空间的维度是 $m$，也就是这个声子模式是 $m$ 重简并的（如果没有偶然简并的话）。
这个子空间对群运算封闭。&lt;/p&gt;
&lt;p&gt;这个子空间中每一个向量都会引起极化性的一个变化（可能是零，也可能不是），极化性的变化也组成了一个线性空间，它的维度是一定不超过 $m$。
从振动模式所属的表示空间到极化性所在的线性空间的映射具有下面的性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个映射是线性映射。&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;
因为我们只考虑了极化性对原子位置的一次偏导，即可以近似将极化性看作一个超平面（而不是曲面），
几个方向向量先线性组合再求偏导，等于求偏导后再线性组合。&lt;/li&gt;
&lt;li&gt;群元素的作用与这个映射互易。
因为等价的方向上，极化性的偏导数应该是一样的。
所以它可以套用上面的第三个结论。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;考虑群在值域中的表示长什么样子。可以分成三种情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;值域是零，也就是说这一组声子模式不会导致极化性的变化。&lt;/li&gt;
&lt;li&gt;值域不是零但维度小于 $m$，也就是说值域中的表示是定义域中的表示中，扣掉某些表示（属于核空间）后的表示。
然而定义域的表示已经是不可约的，所以这种情况不会发生。&lt;/li&gt;
&lt;li&gt;值域的维度等于 $m$，也就是说值域和定义域的表示相同，是同一个不可约表示，这时就可以在特征标表中标出对应的二次型（即对应的对称矩阵）。
如果反过来，从特征标表推导拉曼活性的话，就是：
&lt;ul&gt;
&lt;li&gt;特征标表中这个表示没有齐次二次多项式，说明在对称矩阵组成的全空间中，根本不存在可以承载这个表示的子空间，也就是这第三种情况不会发生，
只能是第一种情况（没有拉曼活性）。&lt;/li&gt;
&lt;li&gt;特征标表中这个表示有齐次二次多项式，说明在对称矩阵组成的全空间中，存在可以承载这个表示的子空间，也就是这第三种情况可能发生，
也就是这个声子模式可能有拉曼活性。
这个“可能”的意思是说，如果确定点群时已经充分考虑了晶体的对称性，那么大概率这个声子是会导致极化性的变化的，
就像扔一个针在地上，没有特殊原因的话，针大概率（但不是一定）会躺倒在地上而不是竖起来；
但如果确定点群时漏了一些对称性，使用这个方法时就会判断错误
（例如，对于 4H-SiC，如果忘记它有个螺旋轴而只用了 $C_{3v}$，那么就会把 $B_1$ 归结到 $A_1$ 中而误判断）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好了这就是证明了。是不是非常容易。这个玩意儿让我想了一天。&lt;/p&gt;
&lt;p&gt;如果要考量红外活性，也是类似的思路，只不过红外活性对应的是电偶极矩（或者电极化强度，总之是一个向量而不是张量）。
从振动模式到电偶极矩的映射也是线性且与群元素互易的，所以包含一次齐次多项式的表示都是红外活性的。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;准确说，是一个厄米的二阶三维张量。
声子引起的 $\delta \chi$ 或者 $\delta \alpha$ 并不是厄米的，
但拉曼散射强度实际上是正比于 $\langle i | \delta\chi^\dagger\delta\chi | i\rangle$，
而 $\delta\chi^\dagger\delta\chi$ 是厄米的；或者说，如果是实数的话，就是对称的。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;其实，$u$ 到 $\delta\chi$ 的映射是线性的，但到 $\delta\chi^\dagger\delta\chi$ 的映射并不是线性的。
仔细琢磨一下，线性的条件其实是可以去掉的，也就是只要可交换就行。
但我一开始就是按照线性的来考虑的，文章都写好了，也没必要再去修改。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>桌搭更新</title>
      <link>https://blog.chn.moe/blog/desktop-share/</link>
      <pubDate>Wed, 02 Oct 2024 15:26:17 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/desktop-share/</guid>
      <description>
        
        
        &lt;p&gt;花了将近 500 块钱买了一堆在宿舍桌子上用的东西。来分享一下。&lt;/p&gt;
&lt;h2&gt;键盘&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;键盘&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e9%94%ae%e7%9b%98&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;型号是 OMO100，购自淘宝“DM键帽社”，代组好之后发货的，茶轴，键帽是同一家的无尽夏，壳子是紫色的，总共 338 块钱。
第一次用机械键盘，也是买的这些东西里面最满意的一个。
详细看&lt;a href=&#34;https://xn--s8w913fdga.chn.moe/notes/9yu82qf4rw&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这里&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;有个问题我忘了说：它的蓝牙连接不上我的笔记本。
我的笔记本蓝牙连接任何别的设备都没问题，它的蓝牙连接我的任何别的设备也没问题，就是它俩连不上。
我也不知道是谁的问题，就用 2.4G 接收器了。&lt;/p&gt;
&lt;h2&gt;平板支架&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;平板支架&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%b9%b3%e6%9d%bf%e6%94%af%e6%9e%b6&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;用来把 surface 支起来。
因为想用 surface 的时候，总是会觉得没有地方放（因为桌子上已经放了一个笔记本电脑），
所以想买个支架，平时把它丢到支架上插着充电（也就不怕没电了），想在床上用的时候拔下来就能用。&lt;/p&gt;
&lt;p&gt;购买于淘宝，价格 31.81。仔细找了一家又便宜又支持比较大平板的。&lt;/p&gt;
&lt;p&gt;买到后感觉它其实设计是用于床头的（虽然店铺里描述的是夹在桌子上），
也就是夹在床头上把平板吊下来看的话，它的支架的运动方向是刚好合适的。
夹在桌子上的话，可以调的角度有点太小。&lt;/p&gt;
&lt;p&gt;图就不放了，拍出来感觉并不能看清它的结构。&lt;/p&gt;
&lt;h2&gt;笔记本竖放支架&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;笔记本竖放支架&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%ac%94%e8%ae%b0%e6%9c%ac%e7%ab%96%e6%94%be%e6%94%af%e6%9e%b6&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;就是两个这个东西，卡在C面和D面之间，就可以把笔记本竖起来。
买我 37.9 块钱。我也不知道为啥这么贵，但是在网上找了一下没找到更合适的。
卖家描述说是 3D 打印出来的，我也不知道真假。
不过质感还不错。&lt;/p&gt;
&lt;img src=&#34;IMG20241002154007.jpg&#34; style=&#34;zoom: 25%;&#34; /&gt;
&lt;p&gt;唯一的问题是我用了一天之后发现不合适：我的笔记本只能打开到差不多 175 度，
但要看得舒服的话，这样竖放时需要打开到 190 度或者 200 度。
所以又买了一个支架，这个就闲置了。&lt;/p&gt;
&lt;h2&gt;第二个笔记本支架&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;第二个笔记本支架&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%ac%ac%e4%ba%8c%e4%b8%aa%e7%ac%94%e8%ae%b0%e6%9c%ac%e6%94%af%e6%9e%b6&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;花了 76.5 元，可以这样把笔记本架起来。可以方便地把屏幕拉过来或者推开。&lt;/p&gt;
&lt;img src=&#34;IMG20241002154445.jpg&#34; style=&#34;zoom:25%;&#34; /&gt;
&lt;p&gt;这个支架虽然说能用，但是有很多可以吐槽的地方：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;说明书发错了。没错说明书发错了，说明书是一个显示器支架的说明书。
然后我就发现，这个支架其实就是个显示器支架改装来的，就是加了一个用来支撑电脑的铁板，把铁板当作显示器固定在支架上就行。&lt;/li&gt;
&lt;li&gt;多发了非常多的零件。多发了很多用不上的&lt;strong&gt;整包&lt;/strong&gt;的螺丝和垫片，我甚至都不用撕开螺丝的包装袋就装好了。
我怀疑我买的是某个型号的阉割版，去掉了一些功能，但多余的零件没去掉（这些螺丝的包装是连在一起的，可能不方便去掉）。&lt;/li&gt;
&lt;li&gt;但是上一条不能解释为什么卖家还给我发了一个玩具扳手。
支架全身没有任何一个螺母能匹配得上这个扳手的尺寸。
而且这个玩具扳手没有任何包装，就是直接丢在快递盒子里发过来的。
我都怀疑是卖家家里的小孩子不小心把玩具扳手丢了进来。
&lt;img src=&#34;IMG20241002125815.jpg&#34; style=&#34;zoom:25%;&#34; /&gt;&lt;/li&gt;
&lt;li&gt;电脑放上去是斜的，需要手动调平。因为柱子在左边，电脑（重量）在右边，整体会压得支架向右倾斜。
其实显示器支架也会有类似的问题，但显示器本身是近似垂直于桌面的，显示器可以在显示器所在平面内旋转，就把这个问题补偿掉了；
而承载笔记本电脑的铁板是近似水平的，它也只能在铁板所在平面内旋转，这样旋转并不能补偿这个倾斜。
我只能用卖家送的垫片把铁板下面一半的螺丝垫高，手动调平。&lt;/li&gt;
&lt;li&gt;做工比较差。铁板上镂空的地方没有磨边，有不知道是切割还是铣出来的边上的毛刺。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总之是觉得这个支架不太行，但也没有不好到需要退货的地步。
很多年前我买的显示器支架，只比这个贵十块钱，质量好很多。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>使用 NFS 共享家目录</title>
      <link>https://blog.chn.moe/blog/share-home-over-nfs/</link>
      <pubDate>Tue, 17 Sep 2024 22:08:11 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/share-home-over-nfs/</guid>
      <description>
        
        
        &lt;h1&gt;起因&lt;/h1&gt;&lt;p&gt;在集群上做科学计算时，需要在各个节点之间同步一些文件，例如计算用到的输入文件和计算结果。
虽然 &lt;a href=&#34;https://slurm.schedmd.com/quickstart.html&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Slurm&lt;/a&gt; 也有诸如 &lt;code&gt;sbcast&lt;/code&gt; 可以在节点之间复制文件，
但这个方案我并没有见过谁使用。
你只要想一下这个问题：复制过去的文件是否要在作业后删除？如果要，在什么时机删除？如何让它避免删除别的作业或者诸如 &lt;code&gt;.zshrc&lt;/code&gt; 之类的文件？
你就会发现这种在节点之间复制文件的方案的使用前提是，
要么使用者自己能理解集群是如何工作的，并且有良好的使用习惯，并且熟悉 linux 的操作，自己去主动维护集群的健康；
要么管理者需要是全职的，能够随时处理这些问题，或者对鸡脚旮旯的细节行为有足够的了解，去设计一个自动化的解决方案。
总之，很难行得通。
所以最好的办法就是把用户的家目录共享给各个节点。
Windows 电脑大家都用过，共享之后的家目录对于用户来说就和单台的 Windows 电脑没有太大的区别，完全没有操作门槛。&lt;/p&gt;
&lt;p&gt;之所以使用 NFS 而不是更专业的文件系统来共享，是因为我要处理的集群只有四个节点，而且只有千兆网互联
（有万兆网卡，但不知为什么没有配置光纤一直闲置着）。
NFS 应该足够用了。&lt;/p&gt;
&lt;h1&gt;遇到了什么坑？&lt;/h1&gt;&lt;p&gt;关于 NixOS 特有的问题（例如 home-manager 和 impermanence）这里不讨论，实际上这些问题都可以预先想到并且想好解决方案。
这里只讨论一些与发行版无关并且不太容易预料到的问题。&lt;/p&gt;
&lt;h2&gt;挂载 NFS 的目录&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;挂载-nfs-的目录&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e6%8c%82%e8%bd%bd-nfs-%e7%9a%84%e7%9b%ae%e5%bd%95&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;和 sshfs 不同，NFS 必须先指定一个根目录（不同于系统的根目录，而是暴露给其它节点的根目录，使用 &lt;code&gt;fsid=0&lt;/code&gt; 指定）
，然后指定要导出的目录（即 &lt;code&gt;/home&lt;/code&gt;）。
在客户端，指定的目录是相对于这个根目录的，而不是系统的根目录。&lt;/p&gt;
&lt;p&gt;举例来说，如果我在服务端指定导出：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;pre&gt;&lt;code&gt;/home 192.168.178.0/24(fsid=0)
/home/chn 192.168.178.0/24()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在客户端要挂载 &lt;code&gt;/home/chn&lt;/code&gt;，需要写成：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;pre&gt;&lt;code&gt;192.168.178.1:/chn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最终我导出的是：&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;pre&gt;&lt;code&gt;/ 192.168.178.0/24(rw,no_root_squash,fsid=0,sync,crossmnt)
/home 192.168.178.0/24(rw,no_root_squash,sync,crossmnt)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;其中 &lt;code&gt;rw&lt;/code&gt; 选项是因为默认 &lt;code&gt;ro&lt;/code&gt;，我当然要 &lt;code&gt;rw&lt;/code&gt;。&lt;code&gt;sync&lt;/code&gt; 是因为 NFS 默认不会及时地向下层文件系统传递 sync 命令，我觉得还是传过去比较好。
关于其它选项，以及它的安全性，稍后会介绍。&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;no_root_squash&lt;/code&gt; 选项&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;no_root_squash-选项&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#no_root_squash-%e9%80%89%e9%a1%b9&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;NFS 默认会把 &lt;code&gt;root&lt;/code&gt; 用户的权限映射为 &lt;code&gt;nobody&lt;/code&gt;。
这会导致一个初看起来很无厘头的问题：我在客户端用 &lt;code&gt;root&lt;/code&gt; 居然 &lt;code&gt;cd&lt;/code&gt; 不到 &lt;code&gt;/home/chn&lt;/code&gt;，说我权限不够；用 &lt;code&gt;chn&lt;/code&gt; 却没什么问题。
需要加上 &lt;code&gt;no_root_squash&lt;/code&gt; 才会恢复更直觉的行为。&lt;/p&gt;
&lt;p&gt;按照文档的说法，这个是为了避免轻易地被设置带 suid 的文件。
比如我有某个节点上的 root 权限和另外一个节点上的普通用户权限，我就可以在前者上设置一个带 suid 的文件丢到共享目录里，
然后在后者上执行这个文件，就可以获得 root 权限。
但是我觉得这个问题不是问题，一方面即使限制了 root 其它用户也可以设置所有者为其它用户的 suid 文件。
况且如果黑客都能在某个节点上拿到 root 权限了，那说明这个集群已经被打成筛子了，还有什么保护的必要吗。&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;crossmnt&lt;/code&gt; 选项&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;crossmnt-选项&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#crossmnt-%e9%80%89%e9%a1%b9&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 NixOS 上使用 impermanence 后会导致大量的很多层的挂载。
例如 &lt;code&gt;/&lt;/code&gt; 是 bind mount 自 &lt;code&gt;/nix/rootfs/current&lt;/code&gt;，
但 &lt;code&gt;/home/chn/Desktop&lt;/code&gt; 是 bind mount 自 &lt;code&gt;/nix/persistent/home/chn/Desktop&lt;/code&gt;。
其它发行版可能因为挂载行为没有这样复杂所以不太会遇到这个问题。&lt;/p&gt;
&lt;p&gt;默认情况下，NFS 的表现行为类似于 &lt;code&gt;bind&lt;/code&gt; 而不是 &lt;code&gt;rbind&lt;/code&gt;，也即如果我在 NFS 客户端所在节点上的 &lt;code&gt;/home/chn/Desktop&lt;/code&gt; 创建一个文件，
这个文件会出现在 NFS 服务端的 &lt;code&gt;/nix/rootfs/current/home/chn/Desktop&lt;/code&gt;，
而不是 &lt;code&gt;/nix/persistent/home/chn/Desktop&lt;/code&gt; 和 &lt;code&gt;/home/chn/Desktop&lt;/code&gt;。
这个选项会让 NFS 表现得像 &lt;code&gt;rbind&lt;/code&gt;，也即 bind mount 的目录也会被导出。&lt;/p&gt;
&lt;h3&gt;安全性&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;安全性&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%ae%89%e5%85%a8%e6%80%a7&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;集群的网络我是这样配置的：其中一个节点插一根网线到路由器（可以上网），一根网线到一个交换机；其它节点都只插一个网线到这个交换机。
这样把内部的网络和外部的网络隔离开来，在内部网络上就可以“为所欲为”了（比如跑 NFS）。&lt;/p&gt;
&lt;p&gt;按照上面的 NFS 的配置，任何能走进这个实验室并在交换机上插一个网线的人都可以随意读写任何一个文件，或者获得任何一个节点的 root 权限。
这个问题看起来很严重，但我觉得单纯地这个问题就也还好：他都可以走进这个实验室了，为什么不能物理地把硬盘拔下来读写呢？
如果一定要给 NFS 加认证的话，我觉得套个 wireguard 是可以的，但是不知道会不会有性能问题。
况且物理接触到交换机还是比较难的，感觉没必要折腾。&lt;/p&gt;
&lt;p&gt;我有点担心的是另外一些可能和这里产生联动的网络设置。
比如，为了做 nginx 在三层协议的透明代理，我其实允许了一个不太安全的路由 &lt;code&gt;net.ipv4.conf.all.route_localnet&lt;/code&gt;。
这些设置会不会导致他在门口蹭到 WiFi 就可以访问 NFS，我暂时觉得不能，但是也不太确定。
这里需要的专业知识太多，说不准哪里会出问题。
诸如 &lt;code&gt;net.ipv4.conf.all.route_localnet&lt;/code&gt; 这种不太常见但我需要的网络设置，我初期写 NixOS 的配置的时候并没有把它拆分到特定的服务里
（即，不论是否开 nginx 都会设置这个）。
诸如此类的设置叠加起来会不会真的导致安全问题，以我的三脚猫功夫不太能打包票。&lt;/p&gt;
&lt;h2&gt;在 initrd 中联网&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;在-initrd-中联网&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%9c%a8-initrd-%e4%b8%ad%e8%81%94%e7%bd%91&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我需要在 initrd 中配置好网卡（固定 IP），以在 switch root 之前挂载好 home，避免之后出现什么 race condition。
如果你搜索互联网，会发现有许多文章提到有个 &lt;code&gt;ip=xxxx&lt;/code&gt; 的内核参数。
它确实会对网络配置产生影响，但影响是会导致配置的 systemd-networkd 全部失效，按照 &lt;code&gt;ip&lt;/code&gt; 参数的配置来配置网络。
我之前在别的模块里配置了 &lt;code&gt;ip=on&lt;/code&gt;，导致 systemd-networkd 配置的静态地址不生效。
实际上完全不写这个参数，只要在 initrd 里启用了 systemd-networkd，就可以在 initrd 使用网络。
在 initrd 里配置 systemd-networkd 的方法和 switch root 之后基本一样。&lt;/p&gt;
&lt;h2&gt;在 initrd 中挂载 NFS&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;在-initrd-中挂载-nfs&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e5%9c%a8-initrd-%e4%b8%ad%e6%8c%82%e8%bd%bd-nfs&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;有两个点与其它文件系统不同：一个是挂载 NFS 还需要用户态的程序支持，一个是 NFS 不同版本的支持是不同的内核模块和用户态程序。
总之就是两个内核模块 &lt;code&gt;nfs&lt;/code&gt; 和 &lt;code&gt;nfsv4&lt;/code&gt; （后者依赖前者），两个用户态程序 &lt;code&gt;mount.nfs&lt;/code&gt; 和 &lt;code&gt;mount.nfs4&lt;/code&gt;。
我用的应该是 NFSv4，但我把这些都塞进 initrd 里了，能用。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>使用 OriginPro 减去基线</title>
      <link>https://blog.chn.moe/blog/originpro-subtract-baseline/</link>
      <pubDate>Tue, 17 Sep 2024 14:58:25 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/originpro-subtract-baseline/</guid>
      <description>
        
        
        &lt;p&gt;让拉曼的小峰看得见。&lt;/p&gt;
&lt;h1&gt;为什么要减去基线？&lt;/h1&gt;&lt;p&gt;拉曼实验测出来的峰高度差别太大。将瑞丽散射的峰去掉，其余的峰（拉曼散射造成的峰）高度也往往差了几个数量级。
这导致很难选择合适的比例尺来展示全图：即使主峰已经飞到了画面外面，小峰也还是很难识别出来。&lt;/p&gt;
&lt;p&gt;一个思路是将结果取对数画图，但对于拉曼散射的结果，直接将数值取对数效果并不明显，因为有一个基底的光强，所有的峰都是叠加在这个基底之上的。
这个基底的光强也许来自热噪音，也许来自环境光，也许是光谱仪 CCD 本身的残留电荷什么的，我们暂时不讨论这个基底是哪里来的。但总之，这个基底是存在的。
比方说基底光强是 $100$，有个小峰光强是 $120$，主峰光强是 $1\times10^6$。
不取对数的话，小峰肯定是看不到的。
但即便取了对数之后，$\cfrac{\lg 120}{\lg{1\times10^6}} \approx 0.3465$，$\cfrac{\lg 100}{\lg{1\times10^6}} \approx 0.3333$，
可以看到小峰和基底的对比度仍然很小，依然很难看到。
而如果把基底值尽可能减去，比如说减去 $90$，
那么 $\cfrac{\lg 30}{\lg{1\times10^6 - 90}} \approx 0.2462$，$\cfrac{\lg 10}{\lg{1\times10^6 - 90}} \approx 0.1667$，
这时小峰和基底就有了明显的对比。&lt;/p&gt;
&lt;p&gt;有时减去基线还有一个动机：有的样品中缺陷太多，直接得到的拉曼的结果中基线特别高（相对于主峰），往往还会有一个大大的凸起，整个图就不是水平的。
这时候把基线减掉就能“掩盖”这个问题，让图更美观。
我们的样品没有这个问题，减不减基线肉眼看到的结果完全没有区别，减去基线只是为了让取对数后小峰更明显。&lt;/p&gt;
&lt;h1&gt;怎么减去基线？&lt;/h1&gt;&lt;p&gt;不能简单地减去一个常数，一个线性函数也不行，因为基线不是平的。要人眼盯帧去一截截确定一个直线或者几次函数作为基线并手动写程序处理也是可行的。实际上去基线是一个非常普遍的操作，一些商业软件已经做了这个功能（比如 OriginPro），动动手指点点鼠标就行，草履虫都能学会。&lt;/p&gt;
&lt;p&gt;我看的教程是&lt;a href=&#34;https://www.bilibili.com/video/BV1NZ4y1B7Zz&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这个&lt;/a&gt;。
写这个文章的目的就是自己整理记录一下基本的过程和自己的经验，免得下次再去找教程。&lt;/p&gt;
&lt;h2&gt;简单去基线的步骤&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;简单去基线的步骤&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e7%ae%80%e5%8d%95%e5%8e%bb%e5%9f%ba%e7%ba%bf%e7%9a%84%e6%ad%a5%e9%aa%a4&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;先把数据丢掉 OriginPro 里，然后选中数据。似乎是每次只能处理一列 Y 数据，选中多列也只给你处理第一列。&lt;/li&gt;
&lt;li&gt;然后点分析，点 “Peaks and Baseline”，然后 “Peak Analyzer”，打开对话框，就会见到一个像是流程图一样的东西。
&lt;img src=&#34;1.png&#34; alt=&#34;OrignPro 打开减去基线的对话框&#34;  loading=&#34;lazy&#34; /&gt;&lt;/li&gt;
&lt;li&gt;选择“Subtract Baseline”，然后下一步。之后的基线模式选择“User Defined”，之后一般使用默认的二阶导数，再之后可以调整点的个数。按我的经验，默认的八个点足够用。&lt;/li&gt;
&lt;li&gt;再之后一路下一步，最后就会得到数据。在得到的数据中，X 也会被重复几遍，没什么用但是也无伤大雅。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后就有一个啸问题，就是减去基线后的结果中会有负值，导致取对数后会出现许多“谷”（即非常接近于零的值取对数后会变成非常大的负值），甚至不取对数都会有一些小谷。
原因是 OriginPro 选取拟合基线的点时选取得与谱线过于接近，甚至一些选到了峰上，导致减出来了负值。&lt;/p&gt;
&lt;h2&gt;仔细调整基线&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;仔细调整基线&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e4%bb%94%e7%bb%86%e8%b0%83%e6%95%b4%e5%9f%ba%e7%ba%bf&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我的解决办法是，在指定点的个数之后的那一步中，点 “Modify/Del”，手动调整一下各个点的位置。
对于选取到峰上的点，把它挪到别的地方或者直接删掉。对于选取得基本正确的点，也把它往下挪动一点，使得基线与谱线之间至少有一个像素的距离。
挪动的过程中用鼠标拖拉很难操作，可以用鼠标点击一下想挪动的点，再按键盘的方向键来微调。
对于一些不关注的区域（例如，我的实验测得的拉曼谱中，靠近瑞丽散射的那一端有一个凸起，我们认为这个凸起是滤光片导致的误差），
放任它保持负值就可以了。&lt;/p&gt;
&lt;p&gt;这样的手动操作其实是不利于科学结果的复现的，但好像也暂时没有更好的办法。
我个人觉得，既然人眼能看出来基线的位置，就应该存在一个算法能更合适地把这些点找出来
（只不过这个算法可能会需要更多的参数，例如高度与半高宽的比例必须达到某个人为设定的阈值就认为是峰）。
但我暂时不知道这样的现成程序。&lt;/p&gt;
&lt;p&gt;最后的结果也可以手动再调整一下，用类似于 &lt;code&gt;Col(E)-Min(Col(E))+10&lt;/code&gt; 来赋值一个新列，将整体向上或者向下平移一点。
反应到对数的图上，就是抉择是把微小的变化放大（下移但不要产生负值），还是把乱七八糟的线条压扁使得看起来没那么乱（上移）。&lt;/p&gt;
&lt;p&gt;总结就是大概分下面几步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;软件自动寻找几个用于拟合基线的点。&lt;/li&gt;
&lt;li&gt;手动调整这几个点，把不合适的去掉或者换个位置。&lt;/li&gt;
&lt;li&gt;软件自动拟合基线，并减去。&lt;/li&gt;
&lt;li&gt;手动调整结果（可选）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;看个结果？&lt;/h1&gt;&lt;p&gt;下面第一张图是拉曼光谱直接得到的实验结果，第二张是处理之后。
可以看到，在大概 $350 \mathrm{mm^{-1}}$ 附近，原本隐匿起来的一个小峰现在就特别明显。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;2.png&#34; alt=&#34;处理之前&#34;  loading=&#34;lazy&#34; /&gt;
&lt;img src=&#34;3.png&#34; alt=&#34;处理之后&#34;  loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;实际上这个峰还是挺大的，即使不减去基线，直接取对数也能看到；更精细的峰才需要减去基线处理。
但这个图当时测得也比较粗糙，不适合去分析更精细的峰。当然这个就和这个主题无关了。&lt;/p&gt;
&lt;p&gt;这个峰实际上对应于 4H-SiC 在 $\Gamma$ 点附近的一个振动模式。
单纯从理论上来说（用群表示论分析这个振动对应的表示），这个振动不会导致 z 方向入射的光再拉曼散射到 z 方向。
实际上它也确实比那些对称性允许的散射弱得多，但实验上测到还是有一点的。更具体的物理上的分析暂时不表。&lt;/p&gt;
&lt;h1&gt;局限性&lt;/h1&gt;&lt;p&gt;这个方法画出来的图只是为了方便找小峰，方便自己和导师看。
找到的小峰必须回到原图再去仔细确认，发论文的时候也别整这种图，因为减去基线再取对数的过程中显然很可能会人为造一些峰和谷出来。
记不清是谁来着，拿个取了绝对值再取对数的图在组会上说，两条线上的两个峰之间有一定位移，这个位移有如何如何的物理意义。
但其实在取绝对值再取对数之前，数值上整体变动一点点就会导致那个峰发生巨大的位移，对一个接近零的数值取对数就是会这样，很容易放大误差。&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Helloworld</title>
      <link>https://blog.chn.moe/blog/helloworld/</link>
      <pubDate>Sat, 24 Aug 2024 20:13:59 +0800</pubDate>
      
      <guid>https://blog.chn.moe/blog/helloworld/</guid>
      <description>
        
        
        &lt;p&gt;helloworld&lt;/p&gt;
&lt;h1&gt;一级标题&lt;/h1&gt;&lt;h2&gt;二级标题&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;二级标题&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e4%ba%8c%e7%ba%a7%e6%a0%87%e9%a2%98&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;三级标题&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;三级标题&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#%e4%b8%89%e7%ba%a7%e6%a0%87%e9%a2%98&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;hello world!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无序列表1&lt;/li&gt;
&lt;li&gt;无序列表2&lt;/li&gt;
&lt;li&gt;无序列表3&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;有序列表1&lt;/li&gt;
&lt;li&gt;有序列表2&lt;/li&gt;
&lt;li&gt;有序列表3&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
  &lt;p&gt;这是一个引用
写了两行&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;如果段与段之间
没有空行
会怎样？&lt;/p&gt;
&lt;div class=&#34;hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code&#34;&gt;

&lt;div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Hello, World!&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0&#34;&gt;
  &lt;button
    class=&#34;hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50&#34;
    title=&#34;复制代码&#34;
  &gt;
    &lt;div class=&#34;hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4&#34;&gt;&lt;/div&gt;
  &lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这是一个行内代码&lt;code&gt;printf(&amp;quot;Hello, World!\n&amp;quot;);&lt;/code&gt;，和行内公式 $E=mc^2$。&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} e^{-x^2} \dd x = \sqrt{\pi}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这是粗体文本&lt;/strong&gt;，&lt;em&gt;这是斜体文本&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.example.com&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;这是一个链接&lt;/a&gt;&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
