<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Linux on 个人技术随想</title>
        <link>https://www.dhao2001.com/tags/linux/</link>
        <description>Recent content in Linux on 个人技术随想</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Tue, 08 Jul 2025 14:00:00 +0800</lastBuildDate><atom:link href="https://www.dhao2001.com/tags/linux/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>有趣的rm -rf</title>
            <link>https://www.dhao2001.com/2025/07/08/funny-rm-rf/</link>
            <pubDate>Tue, 08 Jul 2025 14:00:00 +0800</pubDate>
            <guid>https://www.dhao2001.com/2025/07/08/funny-rm-rf/</guid>
            <description>&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;root@enabling-clam:~/testdir# &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;foolish rm&amp;#34;&lt;/span&gt; &amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-rf&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;32&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;14&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:36 mydir1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:36 myfile1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir# rm * &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;一段有趣的bash命令记录&#34;&gt;&lt;a href=&#34;#%e4%b8%80%e6%ae%b5%e6%9c%89%e8%b6%a3%e7%9a%84bash%e5%91%bd%e4%bb%a4%e8%ae%b0%e5%bd%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;一段有趣的Bash命令记录&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;root@enabling-clam:~# mkdir testdir &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; testdir &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir# mkdir mydir1 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Test1&amp;#34;&lt;/span&gt; &amp;gt; myfile1 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Test2&amp;#34;&lt;/span&gt; &amp;gt; mydir1/myfile2 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;26&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:36 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;14&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:36 mydir1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:36 myfile1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir# &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;foolish rm&amp;#34;&lt;/span&gt; &amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-rf&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;32&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;14&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:36 mydir1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:36 myfile1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir# rm * &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir# rm -rf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir# rm &lt;span class=&#34;s2&#34;&gt;&amp;#34;-rf&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:37 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir# rm &lt;span class=&#34;s2&#34;&gt;&amp;#34;./-rf&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:38 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwx------ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; Jul  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 06:35 ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@enabling-clam:~/testdir#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;为什么&#34;&gt;&lt;a href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;为什么？&#xA;&lt;/h2&gt;&lt;p&gt;这两个问题本质上都与 Bash 的 &lt;a class=&#34;link&#34; href=&#34;https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Shell展开&lt;/a&gt; 有关。&lt;/p&gt;&#xA;&lt;h3 id=&#34;文件名展开&#34;&gt;&lt;a href=&#34;#%e6%96%87%e4%bb%b6%e5%90%8d%e5%b1%95%e5%bc%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;文件名展开&#xA;&lt;/h3&gt;&lt;p&gt;先看 &lt;code&gt;rm *&lt;/code&gt; 一句命令，为什么这一行命令看起来像被解析成了 &lt;code&gt;rm -rf mydir1 myfile1&lt;/code&gt;？&lt;/p&gt;&#xA;&lt;p&gt;原因很简单：文件名通配符 &lt;code&gt;*&lt;/code&gt; 遵照 Bash 的&lt;a class=&#34;link&#34; href=&#34;https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;文件名展开&lt;/a&gt;机制，在真正执行 &lt;code&gt;rm&lt;/code&gt; 命令前就被处理完毕。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;After word splitting, &amp;hellip; Bash scans each word for the characters &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, and &lt;code&gt;[&lt;/code&gt; &amp;hellip; then the word is regarded as a pattern, and replaced with a sorted list of filenames matching the pattern&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;也就是说，&lt;code&gt;rm&lt;/code&gt; 命令接收到的，是经过 Bash 展开后的文件名列表，在上面的例子中就等价于：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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 -rf mydir1 myfile1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;双引号处理&#34;&gt;&lt;a href=&#34;#%e5%8f%8c%e5%bc%95%e5%8f%b7%e5%a4%84%e7%90%86&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;双引号处理&#xA;&lt;/h3&gt;&lt;p&gt;我们还注意到，&lt;code&gt;rm &amp;quot;-rf&amp;quot;&lt;/code&gt; 一句命令并没能成功移除 &lt;code&gt;-rf&lt;/code&gt; 文件。明明我们已经试着用引号告诉 &lt;code&gt;rm&lt;/code&gt; 这是一个整体，为什么还会失败呢？&lt;/p&gt;&#xA;&lt;p&gt;在 Bash 中，经过参数展开、文件名展开等处理的命令在传递给程序前，还会最终经过 &lt;a class=&#34;link&#34; href=&#34;https://www.gnu.org/software/bash/manual/html_node/Quote-Removal.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;引号移除&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;引号移除发生在所有展开操作的最后，所有未经引号或转移保护的斜杠、单双引号都会被移除。&lt;/p&gt;&#xA;&lt;p&gt;这也就是说，对于上面的例子，双引号对 &lt;code&gt;-rf&lt;/code&gt; 的保护仍然局限在 Shell 处理阶段，保护其中字符的字面值，阻止空格分词。&lt;/p&gt;&#xA;&lt;p&gt;然而，稍后 &lt;code&gt;rm&lt;/code&gt; 命令收到的仍然是 &lt;code&gt;-rf&lt;/code&gt; 字符串，并在稍后将其解析为 &lt;code&gt;-r&lt;/code&gt; 和 &lt;code&gt;-f&lt;/code&gt; 两个 option，最后还是没能将其作为要删除的文件名称进行处理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方案与启示&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88%e4%b8%8e%e5%90%af%e7%a4%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案与启示&#xA;&lt;/h2&gt;&lt;p&gt;想要正确删除 &lt;code&gt;-rf&lt;/code&gt; 文件，有以下两种方法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;c1&#34;&gt;# Same as Example&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm ./-rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Another Example&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -- -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;上面两个例子都不需要给 &lt;code&gt;-rf&lt;/code&gt; 加引号。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对于第一种写法，其提供给 &lt;code&gt;rm&lt;/code&gt; 的参数首字符为点号 &lt;code&gt;.&lt;/code&gt; ，以避免被 &lt;code&gt;rm&lt;/code&gt; 当作短横线参数 &lt;code&gt;-&lt;/code&gt; 处理。&lt;/li&gt;&#xA;&lt;li&gt;第二种写法中，&lt;code&gt;--&lt;/code&gt; 通常约定表示“选项到此结束”，位于 &lt;code&gt;--&lt;/code&gt; 后面的参数，即使以 &lt;code&gt;-&lt;/code&gt; 开头，也应该被视为操作数而非选项。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Shell 层安全 != 命令语义安全&lt;/strong&gt;&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>利用BTRFS快照实现快速Linux环境切换</title>
            <link>https://www.dhao2001.com/2025/01/26/btrfs-linux-quick-snapshot/</link>
            <pubDate>Sun, 26 Jan 2025 16:00:00 +0800</pubDate>
            <guid>https://www.dhao2001.com/2025/01/26/btrfs-linux-quick-snapshot/</guid>
            <description>&lt;p&gt;对于喜欢折腾的人来说，经常会遇到环境玩崩的情况，在Linux下更是一件常事。而如果每次都要重装系统，其实又非常不方便，也没必要。&lt;/p&gt;&#xA;&lt;p&gt;在BTRFS文件系统逐步稳定并可用的今天，如果我们将根文件系统迁移到了BTRFS，或许，我们可以借助BTRFS快照功能，实现Linux环境的无痛切换与还原？&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;思路&#34;&gt;&lt;a href=&#34;#%e6%80%9d%e8%b7%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;思路&#xA;&lt;/h2&gt;&lt;p&gt;为了方便，我们假设一个非常无聊的例子：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;希望在一个分区内，安装一个Debian系统&lt;/li&gt;&#xA;&lt;li&gt;在Debian系统上，分别安装配置GNOME和KDE两个桌面环境&lt;/li&gt;&#xA;&lt;li&gt;实现两个桌面环境的根文件系统互不干扰，可按需分别启动&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;需要说明的是，这套配置里，我们假设包括&lt;code&gt;/usr&lt;/code&gt;, &lt;code&gt;/etc&lt;/code&gt;等路径均没有分配独立的挂载点，否则那就太麻烦啦！&lt;code&gt;/home&lt;/code&gt;是否独立挂载取决于环境隔离的程度。&lt;/p&gt;&#xA;&lt;p&gt;仔细一想，想要实现上述功能的思路是非常简单的：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;在BTRFS文件系统上安装一个基础操作系统&lt;/li&gt;&#xA;&lt;li&gt;对基础操作系统进行快照&lt;/li&gt;&#xA;&lt;li&gt;根据基础快照，创建两组新的读写快照（子卷），在两个子卷内分别安装GNOME和KDE环境，并按需切换&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;其实，以Debian为例，如果在安装系统时指定了根文件系统为BTRFS文件系统，Debian安装程序会贴心地为我们创建一个&lt;code&gt;@rootfs&lt;/code&gt;子卷，而后每次启动电脑时，实际上都是将&lt;code&gt;@rootfs&lt;/code&gt;子卷挂载成&lt;code&gt;/&lt;/code&gt;节点。因此，以上步骤的前两步都已被自动完成。&lt;/p&gt;&#xA;&lt;p&gt;似乎，我们只要解决第三步就行？但麻烦的也在这第三步。&lt;/p&gt;&#xA;&lt;h2 id=&#34;grub的麻烦&#34;&gt;&lt;a href=&#34;#grub%e7%9a%84%e9%ba%bb%e7%83%a6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;GRUB的麻烦&#xA;&lt;/h2&gt;&lt;p&gt;回忆一下，Linux是如何确定自动挂载文件系统配置的？第一个想到的一定是&lt;code&gt;/etc/fstab&lt;/code&gt;文件。&lt;/p&gt;&#xA;&lt;p&gt;还是以Debian的为例，默认情况下，如果设置根文件系统为BTRFS，在&lt;code&gt;/etc/fstab&lt;/code&gt;文件里面，我们可以找到类似于以下定义：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# / was on /dev/sda1 during installation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=12345678-1234-1234-5678-123456789012 /               btrfs   defaults,subvol=@rootfs 0       0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;显然，这一句的意思是，将硬盘上的&lt;code&gt;@rootfs&lt;/code&gt;子卷，挂载到&lt;code&gt;/&lt;/code&gt;路径上。&lt;/p&gt;&#xA;&lt;p&gt;那么接下来，我们似乎只要创建一个&lt;code&gt;@rootfs&lt;/code&gt;的快照子卷，然后修改上面的&lt;code&gt;fstab&lt;/code&gt;文件，把&lt;code&gt;subvol=&lt;/code&gt;后面替换成新子卷名称，就可以实现快速切换了？&lt;/p&gt;&#xA;&lt;p&gt;一开始我也是这么认为的，直到我安装完KDE桌面重启后，对着仍然黑麻麻的屏幕两眼发黑，我才意识到不对劲。&lt;/p&gt;&#xA;&lt;p&gt;让我们瞄一眼&lt;code&gt;/boot/grub/grub.cfg&lt;/code&gt;文件：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;menuentry &amp;#39;Debian GNU/Linux&amp;#39; --class debian --class gnu-linux --class gnu --class os $menuentry_id_option &amp;#39;gnulinux-simple-12345678-1234-1234-5678-123456789012&amp;#39; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        # ......&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        insmod btrfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        # ......&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        echo    &amp;#39;Loading Linux 6.1.0-30-amd64 ...&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        linux   /@rootfs/boot/vmlinuz-6.1.0-30-amd64 root=UUID=12345678-1234-1234-5678-123456789012 ro rootflags=subvol=@rootfs  quiet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        echo    &amp;#39;Loading initial ramdisk ...&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        initrd  /@rootfs/boot/initrd.img-6.1.0-30-amd64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;好吧……事实上根文件系统的子卷名称，是写入到了GRUB配置文件里的。在GRUB引导时，会按照&lt;code&gt;/boot/grub/grub.cfg&lt;/code&gt;的配置查找子卷，然后加载该子卷中的系统。&lt;/p&gt;&#xA;&lt;p&gt;而要修改GRUB配置，似乎就有点麻烦了。如果手动修改配置，需要在每次安装完驱动或更新内核后再手动调整一遍配置，极其麻烦且容易疏漏。而如果希望自动修改，又暂时没有好主意。&lt;/p&gt;&#xA;&lt;h2 id=&#34;重命名子卷&#34;&gt;&lt;a href=&#34;#%e9%87%8d%e5%91%bd%e5%90%8d%e5%ad%90%e5%8d%b7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;重命名子卷&#xA;&lt;/h2&gt;&lt;p&gt;修改GRUB配置的路子走不通，系统默认引导&lt;code&gt;@rootfs&lt;/code&gt;子卷的行为有点难修改。既然如此，为什么我们不通过替换&lt;code&gt;@rootfs&lt;/code&gt;子卷的方式，狸猫换太子呢！&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装基本系统&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85%e5%9f%ba%e6%9c%ac%e7%b3%bb%e7%bb%9f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装基本系统&#xA;&lt;/h3&gt;&lt;p&gt;首先正常安装Debian基本系统，在配置分区的时候，为&lt;code&gt;/&lt;/code&gt;挂载点分配一个BTRFS文件系统。&lt;/p&gt;&#xA;&lt;h3 id=&#34;进行基础配置&#34;&gt;&lt;a href=&#34;#%e8%bf%9b%e8%a1%8c%e5%9f%ba%e7%a1%80%e9%85%8d%e7%bd%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;进行基础配置&#xA;&lt;/h3&gt;&lt;p&gt;安装完系统后，重启进入基本系统，进行必要的配置，安装一些在不同环境下都用得上的包。也就是准备一个基本系统的过程啦！&lt;/p&gt;&#xA;&lt;h3 id=&#34;拍摄基础快照&#34;&gt;&lt;a href=&#34;#%e6%8b%8d%e6%91%84%e5%9f%ba%e7%a1%80%e5%bf%ab%e7%85%a7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;拍摄基础快照&#xA;&lt;/h3&gt;&lt;p&gt;重启进LiveCD，挂载BTRFS分区整个卷：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;mount /dev/sda1 /mnt&#xA;&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; /mnt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;我们给系统子卷&lt;code&gt;@rootfs&lt;/code&gt;创建一个快照&lt;code&gt;@sysbase&lt;/code&gt;（名字可以随意起），用于记录此刻基本系统的状态：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;btrfs subvolume snapshot @rootfs @sysbase&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果希望基本系统内容不变，可以增加一个选项&lt;code&gt;-r&lt;/code&gt;，以创建一个只读快照。&lt;/p&gt;&#xA;&lt;h3 id=&#34;配置环境1&#34;&gt;&lt;a href=&#34;#%e9%85%8d%e7%bd%ae%e7%8e%af%e5%a2%831&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;配置环境1&#xA;&lt;/h3&gt;&lt;p&gt;接着，重启电脑，按需要配置第一个环境，例如安装GNOME桌面等。&lt;/p&gt;&#xA;&lt;h3 id=&#34;配置环境2&#34;&gt;&lt;a href=&#34;#%e9%85%8d%e7%bd%ae%e7%8e%af%e5%a2%832&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;配置环境2&#xA;&lt;/h3&gt;&lt;p&gt;之后，如果我们想要从基本系统开始重新配置一个新环境，我们需要再次进入LiveCD，挂载BTRFS分区完整卷到&lt;code&gt;/mnt&lt;/code&gt;下。&lt;/p&gt;&#xA;&lt;p&gt;这回，我们需要把环境1，也就是现在的&lt;code&gt;@rootfs&lt;/code&gt;先移到一边，也就是重命名一下。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;mv @rootfs @gnome-env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;现在，我们的硬盘上似乎只有两个子卷了：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/mnt/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── @gnome-env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── @sysbase&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;我们现在想让系统回到基本系统，也就是回到&lt;code&gt;@sysbase&lt;/code&gt;的状态。怎么做呢？我们可以，给&lt;code&gt;@sysbase&lt;/code&gt;再创建一个快照，让这个快照成为新的&lt;code&gt;@rootfs&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;btrfs subvolume snapshot @sysbase @rootfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;接着重启电脑，我们就回到了基本系统状态，此时我们对系统的修改，就变成了我们的环境2。&lt;/p&gt;&#xA;&lt;h3 id=&#34;还要更多环境&#34;&gt;&lt;a href=&#34;#%e8%bf%98%e8%a6%81%e6%9b%b4%e5%a4%9a%e7%8e%af%e5%a2%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;还要更多环境！&#xA;&lt;/h3&gt;&lt;p&gt;如果还需要更多环境，只需要像配置环境2时一样，将当前&lt;code&gt;@rootfs&lt;/code&gt;重命名一下，再从基本系统，或者任何一个其他快照，创建一个新的&lt;code&gt;@rootfs&lt;/code&gt;快照，重启电脑，就可以创建新环境了。&lt;/p&gt;&#xA;&lt;p&gt;而如果我们希望在环境之间切换，也非常简单，同样地，将当前&lt;code&gt;@rootfs&lt;/code&gt;重命名为其他名字，再将想要切换的快照重命名成&lt;code&gt;@rootfs&lt;/code&gt;，或者创建一个新&lt;code&gt;@rootfs&lt;/code&gt;快照都行。&lt;/p&gt;&#xA;&lt;p&gt;如果我们玩坏了环境，也不用完全重装系统，只需要将不想要的环境子卷删除，&lt;code&gt;btrfs subvolume delete @broken-env&lt;/code&gt;，再选择一个好的环境为&lt;code&gt;@rootfs&lt;/code&gt;即可。非常灵活！&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>💾几分钟能了解BTRFS吗？💾</title>
            <link>https://www.dhao2001.com/2024/11/28/btrfs-quick-start/</link>
            <pubDate>Thu, 28 Nov 2024 16:00:00 +0800</pubDate>
            <guid>https://www.dhao2001.com/2024/11/28/btrfs-quick-start/</guid>
            <description>&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;安装相关组件&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85%e7%9b%b8%e5%85%b3%e7%bb%84%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装相关组件&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo apt install btrfs-progs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;创建普通文件系统&#34;&gt;&lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%99%ae%e9%80%9a%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;创建普通文件系统&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo mkfs.btrfs -L MyDisk /dev/sdxy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;创建raid文件系统&#34;&gt;&lt;a href=&#34;#%e5%88%9b%e5%bb%baraid%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;创建RAID文件系统&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo mkfs.btrfs -f -d raid1 -m raid1 /dev/sdc1 /dev/sdd2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;-f&lt;/code&gt;: 强制执行，即无视指定分区上现存的文件系统。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-d raid1&lt;/code&gt;: 指定数据块存储模式。具体请参考官方手册RAID功能介绍。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-m raid1&lt;/code&gt;: 指定Metadata块存储模式。具体请参考官方手册RAID功能介绍。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在后面指定跨盘卷使用到的块设备即可。&lt;/p&gt;&#xA;&lt;h2 id=&#34;设置卷名&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e5%8d%b7%e5%90%8d&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置卷名&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo btrfs filesystem label /dev/sdc1 MyData&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;子卷subvolume&#34;&gt;&lt;a href=&#34;#%e5%ad%90%e5%8d%b7subvolume&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;子卷(Subvolume)&#xA;&lt;/h2&gt;&lt;p&gt;创建子卷：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;c1&#34;&gt;# 假设主卷已经挂载到/mnt/mydata&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs subvolume create /mnt/mydata/@mysubvol&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;命令行挂载子卷：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo mount -o &lt;span class=&#34;nv&#34;&gt;subvol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;@mysubvol &lt;span class=&#34;nv&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;abcd1234-5678-90ab-cdef-1234567890ab /some/place/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;访问子卷内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;c1&#34;&gt;# 可以挂载后访问：&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -o &lt;span class=&#34;nv&#34;&gt;subvol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;... &lt;span class=&#34;nv&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;... /some/place/&#xA;&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; /some/place/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 当然还可以直接从卷根挂载点访问&lt;/span&gt;&#xA;&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; /mnt/mydata/@mysubvol&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;快速问答&#34;&gt;&lt;a href=&#34;#%e5%bf%ab%e9%80%9f%e9%97%ae%e7%ad%94&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;快速问答&#xA;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Q: 子卷是啥？&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A: 就理解成BTRFS文件系统下，一个可以独立挂载，独立快照，独立操作的子文件夹吧。（尽管内部实现显然不是这样）&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Q: 为啥子卷名称前面有个@符号？&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A: 似乎是约定俗成，换成其他符号也行，不用也行。参阅&lt;a class=&#34;link&#34; href=&#34;https://lists.debian.org/debian-boot/2016/06/msg00003.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Re: btrfs subvolume naming scheme&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Q: fstab中如何使用子卷？&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A: 看下文。&lt;/p&gt;&#xA;&lt;h2 id=&#34;挂载fstab&#34;&gt;&lt;a href=&#34;#%e6%8c%82%e8%bd%bdfstab&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;挂载(fstab)&#xA;&lt;/h2&gt;&lt;p&gt;BTRFS文件系统的挂载和其他文件系统别无二致。&lt;/p&gt;&#xA;&lt;p&gt;在使用块设备挂载RAID卷时，只需要指定其中一个块设备，就可以完成挂载。&lt;/p&gt;&#xA;&lt;p&gt;不过，在&lt;code&gt;/etc/fstab&lt;/code&gt;中设置挂载点，尤其是跨盘卷时，建议使用&lt;em&gt;UUID&lt;/em&gt;进行挂载。&lt;/p&gt;&#xA;&lt;p&gt;查看&lt;em&gt;UUID&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;c1&#34;&gt;# Recommended&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs filesystem show&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# OR&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo blkid&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# OR&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -lha /dev/disk/by-uuid/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;注意我们需要的是整个BTRFS卷的&lt;em&gt;UUID&lt;/em&gt;，在RAID中不是某个单一块设备的&lt;em&gt;PARTUUID&lt;/em&gt;。&lt;/p&gt;&#xA;&lt;p&gt;接着编辑&lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;p&gt;最简单的：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=abcd1234-5678-90ab-cdef-1234567890ab /mnt/mydata btrfs defaults 0 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;RAID也是一样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=abcd1234-5678-90ab-cdef-1234567890ab /mnt/mydata btrfs defaults 0 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;挂载子卷（&lt;strong&gt;注意这里使用的UUID仍然是主卷的&lt;em&gt;UUID&lt;/em&gt;，不要与&lt;em&gt;PARTUUID&lt;/em&gt;混淆&lt;/strong&gt;）：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=abcd1234-5678-90ab-cdef-1234567890ab /media/mysubvol/ btrfs defaults,subvol=@mysubvol 0 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;我喜欢的外挂硬盘挂载选项，可以在硬盘缺失时自动跳过检查：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=abcd1234-5678-90ab-cdef-1234567890ab /media/mysubvol/ btrfs defaults,subvol=@mysubvol,nofail,x-systemd.automount,x-systemd.device-timeout=3 0 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;查看磁盘空间占用&#34;&gt;&lt;a href=&#34;#%e6%9f%a5%e7%9c%8b%e7%a3%81%e7%9b%98%e7%a9%ba%e9%97%b4%e5%8d%a0%e7%94%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;查看磁盘空间占用&#xA;&lt;/h2&gt;&lt;p&gt;需要注意，系统的&lt;code&gt;du&lt;/code&gt;命令输出中，BTRFS的空间统计信息并不总是准确的。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo btrfs filesystem df /mnt/mydata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;全盘检错&#34;&gt;&lt;a href=&#34;#%e5%85%a8%e7%9b%98%e6%a3%80%e9%94%99&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;全盘检错&#xA;&lt;/h2&gt;&lt;p&gt;BTRFS的一大特色就是自动化的错误检测。&lt;/p&gt;&#xA;&lt;p&gt;在BTRFS的Checksum Tree里，保存着整个文件系统中包括Metadata块与数据块的Checksum，而在每次读取这些数据时，BTRFS会自动进行校验，进而发现硬盘数据存在的错误。&lt;/p&gt;&#xA;&lt;p&gt;不过，有时我们还希望主动执行检查，校验硬盘上的数据是否发生了损坏。那么我们可以这么做：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo btrfs scrub start /mnt/mydata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;上面一条命令将会启动一个后台检查任务，检查整个文件系统存在的错误。对于RAID系统，检查会在多块磁盘上并行进行。&lt;/p&gt;&#xA;&lt;p&gt;如果发现了数据错误且配置了RAID等数据冗余，BTRFS将会自动尝试从好数据中恢复损坏的数据。如果只是想查错，不希望BTRFS自动纠错，可以用&lt;code&gt;-r&lt;/code&gt;参数指定只读模式运行。&lt;/p&gt;&#xA;&lt;p&gt;开始检查后，可以用以下命令读取检查进度与报告：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo btrfs scrub status /mnt/mydata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;查询读写错误发生次数&#34;&gt;&lt;a href=&#34;#%e6%9f%a5%e8%af%a2%e8%af%bb%e5%86%99%e9%94%99%e8%af%af%e5%8f%91%e7%94%9f%e6%ac%a1%e6%95%b0&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;查询读写错误发生次数&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;sudo btrfs device stats /mnt/mydata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;</description>
        </item><item>
            <title>龙芯小试 —— 龙芯3A3000主机简单配置与Debian系统安装</title>
            <link>https://www.dhao2001.com/2022/03/19/loongson-first-run-install-debian/</link>
            <pubDate>Sat, 19 Mar 2022 10:53:24 +0800</pubDate>
            <guid>https://www.dhao2001.com/2022/03/19/loongson-first-run-install-debian/</guid>
            <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;a href=&#34;#%e5%89%8d%e8%a8%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;前言&#xA;&lt;/h2&gt;&lt;p&gt;前几天在咸鱼上买到了一块龙芯的电脑主板，CPU型号是龙芯(Loongson) 3A3000，芯片组似乎是780E。回来装系统的时候遇到了不少麻烦，这里记录一下，如果能帮到后来者，那自然是最好不过。&lt;/p&gt;&#xA;&lt;h2 id=&#34;系统选择&#34;&gt;&lt;a href=&#34;#%e7%b3%bb%e7%bb%9f%e9%80%89%e6%8b%a9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;系统选择&#xA;&lt;/h2&gt;&lt;p&gt;实际上，我仍然推荐有条件的用户，使用龙芯官方适配的操作系统&lt;a class=&#34;link&#34; href=&#34;http://www.loongnix.cn/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Loongnix&lt;/a&gt;，因为这是龙芯优化过的系统。&lt;/p&gt;&#xA;&lt;p&gt;只不过，因为mips64el架构上的Loongnix是基于Fedora发行版的，且版本古老。我个人习惯的环境是Debian，只有LoongArch上的Loongnix才是基于Debian制作的。况且，Loongnix默认带一个GUI，连服务器版都带，我不是很喜欢先装后卸，因此我还是希望安装一个相对干净的Debian系统上去。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;p&gt;龙芯3A3000基于mips架构，具体到Debian上，属于&lt;a class=&#34;link&#34; href=&#34;https://wiki.debian.org/mips64el&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;mips64el&lt;/a&gt;架构（MIPS 64-bit little-endian mode, MIPS 64位 小端序），请记住这个代号，因为我们后面会反复用到。&lt;/p&gt;&#xA;&lt;p&gt;关于Debian的系统代号选择，在本文编写时，最新的Debain系统是Debian 11 Bullseye，使用的系统内核是Linux 5.10. 但我们目前会使用上一个版本，也就是Debain 10 Buster，具体原因下面会说明。&lt;/p&gt;&#xA;&lt;p&gt;下面我们讨论的方法，基于&lt;a class=&#34;link&#34; href=&#34;https://wiki.godson.ac.cn/guide:debian_installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;狗剩百科:Debian 系发行版安装指南&lt;/a&gt;，并做一些自己经验的额外补充。&lt;/p&gt;&#xA;&lt;h2 id=&#34;条件限制和实现方式&#34;&gt;&lt;a href=&#34;#%e6%9d%a1%e4%bb%b6%e9%99%90%e5%88%b6%e5%92%8c%e5%ae%9e%e7%8e%b0%e6%96%b9%e5%bc%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;条件限制和实现方式&#xA;&lt;/h2&gt;&lt;h3 id=&#34;安装方式的选择&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85%e6%96%b9%e5%bc%8f%e7%9a%84%e9%80%89%e6%8b%a9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装方式的选择&#xA;&lt;/h3&gt;&lt;p&gt;在平时x86计算机上，安装Debian的方法，首选当然是直接从Debian CD源中下载安装镜像，将镜像刻录到U盘上，引导镜像中的安装程序完成安装。这样当然是最简单的。&lt;/p&gt;&#xA;&lt;p&gt;然而，根据我的简单测试，似乎Debian CD源中的ISO镜像，并不能顺利地在我手头上这块主板中引导。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;失败的Debian安装程序引导测试&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;这一段是我尝试在龙芯上引导Debian安装镜像时的失败操作，或许是该镜像不具备在龙芯电脑上引导的能力，也有可能是我本身操作方法不正确。因此我将这一过程记录在此，如有谬误，还请批评指正。如果您希望参考本文进行Debian系统的安装，请略过这一段。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;下载Debian CD中的安装镜像&lt;a class=&#34;link&#34; href=&#34;https://cdimage.debian.org/debian-cd/11.2.0/mips64el/iso-cd/debian-11.2.0-mips64el-netinst.iso&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;debian-11.2.0-mips64el-netinst.iso&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;使用&lt;code&gt;dd&lt;/code&gt;命令，将其刻录到U盘上: &lt;code&gt;dd if=debian-11.2.0-mips64el-netinst.iso of=/dev/sdb bs=8M&lt;/code&gt;，（其中&lt;code&gt;/dev/sdb&lt;/code&gt;是我的U盘设备）&lt;/li&gt;&#xA;&lt;li&gt;将U盘插入龙芯电脑，启动，提示找不到LiveCD中的一个文件。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;根据上述表现，个人猜测电脑已经成功读取并加载了U盘上的引导程序，但不知为何无法加载U盘上的后续文件，无法进入安装程序。&lt;/p&gt;&#xA;&lt;p&gt;此外，目前我个人还暂时无法确定这块龙芯主板究竟是BIOS/CSM引导模式还是EFI引导模式。BIOS设定中无对应选项可调整。&lt;/p&gt;&#xA;&lt;p&gt;在龙芯提供的Loongnix镜像中，存在一个EFI文件夹，且引导该Loongnix镜像时，在GRUB Shell中执行&lt;code&gt;echo $grub_platform&lt;/code&gt;，回显结果为&lt;code&gt;efi&lt;/code&gt;。且在Loongnix LiveCD系统中，&lt;code&gt;grub-install&lt;/code&gt;命令提示安装的平台为MIPS下的EFI平台。&lt;/p&gt;&#xA;&lt;p&gt;但进入该LiveCD系统后，使用Loongnix的安装程序尝试安装系统时，如果磁盘为GPT分区表，会提示当前计算机运行在BIOS/CSM模式下，需要创建额外分区才能继续安装。采用MS-DOS分区表则无此问题，安装时不需要创建ESP分区也可完成安装并正常引导本地磁盘系统。这也是我电脑目前的状态。&lt;/p&gt;&#xA;&lt;p&gt;因此，我已经无法区分这台龙芯电脑运行在何种模式下，需要进一步考察。如果您有什么看法或观点，欢迎通过邮件同我交流，我的电子邮件地址在站内可找到。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;有些难办的是，mips64el的Debian源，&lt;strong&gt;没有GRUB2软件包提供！&lt;/strong&gt; 这就意味着，我们需要借助其他方法，安装GRUB引导器 —— 如果没有GRUB引导器，我们是无法引导我们的系统的！&lt;/p&gt;&#xA;&lt;p&gt;因此，我们需要另辟蹊径，分两步安装Debian系统：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;安装龙芯的Loongnix系统到本地硬盘上。我选用的镜像是&lt;a class=&#34;link&#34; href=&#34;http://ftp.loongnix.cn/os/loongnix/1.0/liveinst/old/loongnix-20180930.iso&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;loongnix-20180930.iso&lt;/a&gt;。这一步骤主要目的是借助官方的安装程序，完成分区并将GRUB与Linux内核安装到本地硬盘。&lt;/li&gt;&#xA;&lt;li&gt;重新进入LiveCD系统，删除本地硬盘中原有的根目录结构 &lt;strong&gt;（但需要保留&lt;code&gt;/boot&lt;/code&gt;目录下的所有内容！因此建议在 第一步安装Loongnix系统时，将&lt;code&gt;/boot&lt;/code&gt;作为一个独立的分区，空间大约1GB）&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;使用&lt;code&gt;debootstrap&lt;/code&gt;工具，创建Debian根文件系统，并在此基础上，进行修改。更多相关的信息可以阅读&lt;a class=&#34;link&#34; href=&#34;https://www.debian.org/releases/buster/mips64el/apds03.zh-cn.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;通过 Unix/Linux 系统来安装 Debian GNU/Linux&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;总体而言，我们相当于借用了Loongnix系统提供的内核引导Debian系统。大部分情况下，这种方法没有问题，但也有一些情况下，系统中的部分程序要求Linux内核版本号高于一个指定版本。此时需要自行斟酌是否升级，升级到何版本。本文后面会讨论这一问题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;debian大版本号的选择&#34;&gt;&lt;a href=&#34;#debian%e5%a4%a7%e7%89%88%e6%9c%ac%e5%8f%b7%e7%9a%84%e9%80%89%e6%8b%a9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Debian大版本号的选择&#xA;&lt;/h3&gt;&lt;p&gt;不同Debian大版本号下，对应的Linux内核版本号也不同。原则上讲，我们使用的内核版本号应该接近Debian官方指定的内核版本号。在Debian软件源中，龙芯3代CPU使用的内核包名为&lt;code&gt;linux-image-loongson-3&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th style=&#34;text-align: center&#34;&gt;Debian版本号&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th style=&#34;text-align: center&#34;&gt;Debian代号&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th style=&#34;text-align: center&#34;&gt;软件源中使用的内核版本号&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;9&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;stretch&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;4.9&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;10&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;buster&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;4.19&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;11&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;bullseye&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: center&#34;&gt;5.10&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;此外，北京龙芯也有提供一些预编译的Debian格式内核包：&lt;a class=&#34;link&#34; href=&#34;https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/&lt;/a&gt;，我目前使用的是其提供的&lt;code&gt;linux-4.19.0-loongson-3&lt;/code&gt;下的包。暂时不清楚北京龙芯提供的内核包相对于Debian提供的包是否有特别的优化，或其他区别。&lt;/p&gt;&#xA;&lt;p&gt;选用Linux 4.19内核的前提下，Debian 10就成为了适配的最佳选择。&lt;/p&gt;&#xA;&lt;p&gt;过段时间我会尝试下是否能直接用Debian 11 + Linux 5.10，届时会更新后续。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;后续1: 2022年4月11日下午&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;根据我的简单测试，Debian维护者打包的Linux 5.10内核，虽然可以正常工作，但似乎和我手上这块780E主板有点不相兼容。&lt;/p&gt;&#xA;&lt;p&gt;具体表现为，开机后风扇非常嘈杂，怀疑是有一部分功能没能成功移交给操作系统。过段时间再试试看吧。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;安装流程&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85%e6%b5%81%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装流程&#xA;&lt;/h2&gt;&lt;h3 id=&#34;准备&#34;&gt;&lt;a href=&#34;#%e5%87%86%e5%a4%87&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;准备&#xA;&lt;/h3&gt;&lt;blockquote class=&#34;alert alert-caution&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;🚨&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;注意&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;备份文件警告！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;请务必在执行后续操作前，备份目标计算机上的所有重要文件！本人不会对您任何操作/误操作造成的损失负责！&lt;/strong&gt;&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;一个空白U盘，用于刻录LiveCD镜像&lt;/li&gt;&#xA;&lt;li&gt;Loongnix LiveCD镜像，我选用的版本为&lt;a class=&#34;link&#34; href=&#34;http://ftp.loongnix.cn/os/loongnix/1.0/liveinst/old/loongnix-20180930.iso&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;loongnix-20180930.iso&lt;/a&gt;（实际上这个版本有些不好用，因为其基于Fedora 21构建，软件包版本非常老，如果有新版本的Loongnix LiveCD在你的电脑上可用，完全可以替换）。&lt;/li&gt;&#xA;&lt;li&gt;有效的网络连接（这要求第二步中的镜像可以正常驱动网卡）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;同时，下面的操作几乎都是在root权限中完成的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;刻录livecd镜像并引导&#34;&gt;&lt;a href=&#34;#%e5%88%bb%e5%bd%95livecd%e9%95%9c%e5%83%8f%e5%b9%b6%e5%bc%95%e5%af%bc&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;刻录LiveCD镜像并引导&#xA;&lt;/h3&gt;&lt;p&gt;我想这一步会是大伙比较熟悉的了。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;dd &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;loongnix-20180930.iso &lt;span class=&#34;nv&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/sdX &lt;span class=&#34;nv&#34;&gt;bs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;8M&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;of=/dev/sdX&lt;/code&gt;部分，请替换成你的U盘实际设备块，如&lt;code&gt;/dev/sdb&lt;/code&gt;。不清楚的可以使用&lt;code&gt;fdisk -l&lt;/code&gt;查看。&lt;/p&gt;&#xA;&lt;p&gt;写入完成后，将U盘插到龙芯电脑上，开机并从U盘引导。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装debootstrap&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85debootstrap&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装debootstrap&#xA;&lt;/h3&gt;&lt;p&gt;进入LiveCD环境后，首先配置好网络。接着安装debootstrap。可以使用命令&lt;code&gt;dnf install debootstrap&lt;/code&gt;从Fedora源中下载安装。如果源中的工具太老不方便，也可以直接从Debian软件源中下载debootstrap的&lt;code&gt;.deb&lt;/code&gt;包，使用&lt;code&gt;tar&lt;/code&gt;与&lt;code&gt;ar&lt;/code&gt;将其解压即可使用该程序（在Loongnix/Fedora上也可以！）&lt;/p&gt;&#xA;&lt;h3 id=&#34;挂载目标分区&#34;&gt;&lt;a href=&#34;#%e6%8c%82%e8%bd%bd%e7%9b%ae%e6%a0%87%e5%88%86%e5%8c%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;挂载目标分区&#xA;&lt;/h3&gt;&lt;p&gt;接下来，随便在根目录下创建一个新路径，例如&lt;code&gt;/deb&lt;/code&gt;，用于挂载我们的本地磁盘分区。&lt;/p&gt;&#xA;&lt;p&gt;接着，将本地磁盘上，已经安装有Loongnix的根目录分区，挂载到挂载点上。但此时先不需要挂载&lt;code&gt;/boot&lt;/code&gt;分区。如果真的需要挂载&lt;code&gt;boot&lt;/code&gt;，请在删除时选择&lt;strong&gt;忽略&lt;/strong&gt;&lt;code&gt;/boot&lt;/code&gt;下的所有文件！&lt;/p&gt;&#xA;&lt;p&gt;挂载之后，删除该分区下的所有文件&lt;/p&gt;&#xA;&lt;p&gt;下面的例子，我们假设本地磁盘上，&lt;code&gt;/dev/sda1&lt;/code&gt;是&lt;code&gt;/boot&lt;/code&gt;分区，&lt;code&gt;/dev/sda2&lt;/code&gt;是&lt;code&gt;/&lt;/code&gt;分区，&lt;code&gt;/dev/sda3&lt;/code&gt;是swap分区。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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 /deb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount /dev/sda2 /deb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /deb/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;执行安装程序&#34;&gt;&lt;a href=&#34;#%e6%89%a7%e8%a1%8c%e5%ae%89%e8%a3%85%e7%a8%8b%e5%ba%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;执行安装程序&#xA;&lt;/h3&gt;&lt;p&gt;接下来，我们要用debootstrap创建一个Debian根文件系统。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;debootstrap --arch mips64el buster &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     /deb http://ftp.cn.debian.org/debian&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;最后的地址可以替换成你所在位置速度最快的Debian镜像地址。&lt;/p&gt;&#xA;&lt;p&gt;如果debootstrap提示找不到一个名称中包含&lt;code&gt;buster&lt;/code&gt;的配置文件，可能是当前使用的debootstrap工具版本太老（常见于使用Fedora源安装）。一种解决方法是下载新版的debootstrap工具，另一种是直接使用Debian的相对代号，如在本文编写时，Debian 10 Buster是上一个稳定版，则可以使用&lt;code&gt;oldstable&lt;/code&gt;替代&lt;code&gt;buster&lt;/code&gt;。同理，如果使用旧版的debootstrap安装Debian 11 Bullseye报错，也可以使用&lt;code&gt;stable&lt;/code&gt;替代&lt;code&gt;bullseye&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;坐下来，等一等，喝杯咖啡，根文件系统就创建好了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;基础系统配置&#34;&gt;&lt;a href=&#34;#%e5%9f%ba%e7%a1%80%e7%b3%bb%e7%bb%9f%e9%85%8d%e7%bd%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;基础系统配置&#xA;&lt;/h3&gt;&lt;p&gt;为了让系统能跑起来，单有个根文件系统是完全不够的。&lt;/p&gt;&#xA;&lt;h4 id=&#34;复制内核模块&#34;&gt;&lt;a href=&#34;#%e5%a4%8d%e5%88%b6%e5%86%85%e6%a0%b8%e6%a8%a1%e5%9d%97&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;复制内核模块&#xA;&lt;/h4&gt;&lt;p&gt;虽然这么做不知道是否合适，可以考虑试试。&lt;/p&gt;&#xA;&lt;p&gt;将Loongnix的内核模块，复制到目标Debian系统中。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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 /lib/modules /deb/lib/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h4 id=&#34;fstab文件&#34;&gt;&lt;a href=&#34;#fstab%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;fstab文件&#xA;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;/etc/fstab&lt;/code&gt;文件指定了系统启动时挂载文件目录的规则，需要仔细配置。&lt;/p&gt;&#xA;&lt;p&gt;编写该文件，可以自己亲历亲为，仔细编写即可。但懒人有懒人的方法，不喜欢自己写这种配置文件，怕出错的话，也完全可以用ArchLinux团队提供的&lt;code&gt;genfstab&lt;/code&gt;脚本，自动生成配置文件。方法也非常简单，可以去人家Github主页&lt;a class=&#34;link&#34; href=&#34;https://github.com/archlinux/arch-install-scripts&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;GitHub - archlinux/arch-install-scripts: Useful scripts for installing Arch Linux&lt;/a&gt; 直接下载源码包，&lt;code&gt;make&lt;/code&gt;一下就好。或者，现在包括Debian在内的发行版仓库也包含了这个脚本的可执行文件，下载解压运行一气呵成。&lt;/p&gt;&#xA;&lt;p&gt;使用&lt;code&gt;genfstab&lt;/code&gt;，需要在LiveCD操作系统中运行，且需要在运行前将&lt;code&gt;/boot&lt;/code&gt;分区挂载到Debian系统的&lt;code&gt;/boot&lt;/code&gt;上，物归原主。如果有swap分区的话，也需要确认已经启用。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;mount /dev/sda1 /deb/boot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;确认无误后，就可以使用下面的命令生成&lt;code&gt;fstab&lt;/code&gt;文件了。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;genfstab -U /deb &amp;gt; /deb/etc/fstab&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;-U&lt;/code&gt;参数是指定使用UUID作为分区识别的标准。&lt;code&gt;/deb&lt;/code&gt;是Debian根文件系统的挂载点，最后的重定向是将输出写入到目标系统的&lt;code&gt;/etc/fstab&lt;/code&gt;中。&lt;/p&gt;&#xA;&lt;p&gt;建议生成后自行检查一下文件是否符合预期。&lt;/p&gt;&#xA;&lt;h4 id=&#34;chroot环境&#34;&gt;&lt;a href=&#34;#chroot%e7%8e%af%e5%a2%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;chroot环境&#xA;&lt;/h4&gt;&lt;p&gt;还需要chroot进入Debian系统，对其进行一些配置。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;nv&#34;&gt;LANG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;C.UTF-8 chroot /deb /bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h5 id=&#34;设置root口令&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%aeroot%e5%8f%a3%e4%bb%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置root口令&#xA;&lt;/h5&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;passwd root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h5 id=&#34;安装常用软件包&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85%e5%b8%b8%e7%94%a8%e8%bd%af%e4%bb%b6%e5%8c%85&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装常用软件包&#xA;&lt;/h5&gt;&lt;p&gt;或许下列软件包会提供一些提示，具体是否需要可以看您的需求。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;locales: 使用英语以外的语言必须的软件包&lt;/li&gt;&#xA;&lt;li&gt;vim/emacs/nano: 文本编辑器&lt;/li&gt;&#xA;&lt;li&gt;openssh-server: SSH服务器，使用SSH登录系统的必须&lt;/li&gt;&#xA;&lt;li&gt;build-essential: Debian下用于构建软件包的套件，包含了gcc/g++/make等工具&lt;/li&gt;&#xA;&lt;li&gt;network-manager: Network Manager工具，可以自动配置网络&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;安装这些软件包只要用&lt;code&gt;apt&lt;/code&gt;工具即可。如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;apt install locales vim build-essential&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h5 id=&#34;网络配置&#34;&gt;&lt;a href=&#34;#%e7%bd%91%e7%bb%9c%e9%85%8d%e7%bd%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;网络配置&#xA;&lt;/h5&gt;&lt;p&gt;网络配置是一件烦人的事情，人生或许应该用在更有意义的事情上。因此我个人喜欢用Netowork Manager自动接管网络配置。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;apt install network-manager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;还有什么比开机就能看到有线网络已连接，无线网络只需要一行命令就可连接，更令人开心的事情吗？&lt;/p&gt;&#xA;&lt;p&gt;当然，如果你喜欢其他方法，如直接编辑&lt;code&gt;/etc/network/interfaces&lt;/code&gt;，那也可以参考对应的教程。&lt;/p&gt;&#xA;&lt;p&gt;此外，我们还需要配置hostname，也就是本机的主机名。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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; myloong &amp;gt; /etc/hostname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;完成&#34;&gt;&lt;a href=&#34;#%e5%ae%8c%e6%88%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;完成&#xA;&lt;/h3&gt;&lt;p&gt;我想上述配置已经可以让Debain系统跑起来了。退出chroot环境，重启电脑，记得拔掉U盘，没有意外的话，就可以进入Debian系统了。&lt;/p&gt;&#xA;&lt;p&gt;如果电脑引导卡在&lt;em&gt;Loongnix&lt;/em&gt;字样的引导动画，不妨尝试按下 &lt;em&gt;Ctrl + Alt + F2&lt;/em&gt; （&lt;em&gt;F2~F8&lt;/em&gt;都可以试试），看能否见到熟悉的登录界面。&lt;/p&gt;&#xA;&lt;h2 id=&#34;更换内核&#34;&gt;&lt;a href=&#34;#%e6%9b%b4%e6%8d%a2%e5%86%85%e6%a0%b8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;更换内核&#xA;&lt;/h2&gt;&lt;p&gt;如果你阅读到这里，看起来你已经进入了Debian系统，那么先恭喜你，你的Debian系统已经可以使用了！&lt;/p&gt;&#xA;&lt;p&gt;但问题随之而来，如果你使用的Loongnix镜像和我相同，那你一定会发现，Loongnix使用的内核版本较老，可能是3.10附近的版本。而即便使用Fedora 28，其内核版本号也约为4.4~4.9左右的版本，和Debian官方的内核版本号是不匹配的。对于强迫症来说，这样的情况不太爽， 我们得想想办法替换内核！&lt;/p&gt;&#xA;&lt;h3 id=&#34;备份&#34;&gt;&lt;a href=&#34;#%e5%a4%87%e4%bb%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;备份&#xA;&lt;/h3&gt;&lt;p&gt;然而，这样的操作注定是危险的，经常失败的，我想在进行下述操作前，需要先将系统备份一次。毕竟从debootstrap安装系统的流程终究繁琐，值得创建一个小小的备份帮助我们快速恢复。&lt;/p&gt;&#xA;&lt;p&gt;具体备份的方法就不展开了。数据备份的责任在各位操作者本身！&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装新内核&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85%e6%96%b0%e5%86%85%e6%a0%b8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装新内核&#xA;&lt;/h3&gt;&lt;p&gt;安装新版本内核的方法有许多，Debian官方软件源中的会是一个选择。不过既然我没用过，那我也不具体展开介绍了。反正安装方法极为简单，&lt;code&gt;apt install linux-image-loongson-3 linux-headers-loongson-3 linux-libc-dev&lt;/code&gt;就可以了。&lt;/p&gt;&#xA;&lt;p&gt;我们接下来介绍怎么安装北京龙芯提供的4.19.0内核包。&lt;/p&gt;&#xA;&lt;p&gt;下载地址位于&lt;a class=&#34;link&#34; href=&#34;https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/linux-4.19.0-loongson-3/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/linux-4.19.0-loongson-3/&lt;/a&gt;，需要下载该地址下的三个文件：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/linux-4.19.0-loongson-3/linux-headers-4.19.0-loongson-3_4.19.124-lemote-20200525_mips64el.deb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;linux-headers-4.19.0-loongson-3_4.19.124-lemote-20200525_mips64el.deb&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/linux-4.19.0-loongson-3/linux-image-4.19.0-loongson-3_4.19.124-lemote-20200525_mips64el.deb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;linux-image-4.19.0-loongson-3_4.19.124-lemote-20200525_mips64el.deb&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/linux-4.19.0-loongson-3/linux-libc-dev_4.19.124-lemote-20200525_mips64el.deb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;linux-libc-dev_4.19.124-lemote-20200525_mips64el.deb&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;可以考虑将三个文件下载到同一个文件夹中。随后进入该文件夹，执行&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;dpkg -i *.deb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;即可安装三个软件包。&lt;/p&gt;&#xA;&lt;h3 id=&#34;更新initramfs&#34;&gt;&lt;a href=&#34;#%e6%9b%b4%e6%96%b0initramfs&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;更新initramfs&#xA;&lt;/h3&gt;&lt;p&gt;首先安装&lt;code&gt;initramfs-tools&lt;/code&gt;软件包&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;apt install initramfs-tools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;执行下述命令，更新initramfs&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;update-initramfs -k 4.19.0-loongson-3 -u -v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这会在&lt;code&gt;/boot&lt;/code&gt;下生成一个&lt;code&gt;initrd.img-4.19.0-loongson-3&lt;/code&gt;文件。我们接下来配置GRUB引导项会使用到这一文件。&lt;/p&gt;&#xA;&lt;h3 id=&#34;修改grub配置文件&#34;&gt;&lt;a href=&#34;#%e4%bf%ae%e6%94%b9grub%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;修改GRUB配置文件&#xA;&lt;/h3&gt;&lt;p&gt;最后一步，修改GRUB配置文件。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;失败的GRUB配置生成&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;这一部分我也不确定最佳做法是什么，因此还请熟悉GRUB的同学批评指正！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;众所周知，在x86平台下，每次更新内核后，只需要使用&lt;code&gt;grub-mkconfig&lt;/code&gt;命令，即可自动生成正确的GRUB配置文件。&lt;/p&gt;&#xA;&lt;p&gt;尽管Debian MIPS64EL软件源不提供GRUB2软件包，但提供了&lt;code&gt;grub-common&lt;/code&gt;软件包，其包含了&lt;code&gt;grub-mkconfig&lt;/code&gt;命令。因此我尝试使用该程序为新内核创建引导菜单。就生成的结果看，其生成确实正常。&lt;/p&gt;&#xA;&lt;p&gt;但在重启引导时，GRUB提示&lt;code&gt;insmod&lt;/code&gt;命令无法找到。&lt;/p&gt;&#xA;&lt;p&gt;这是很奇怪的事情，因为无论是原Loongnix生成的&lt;code&gt;grub.cfg&lt;/code&gt;还是Debian生成的&lt;code&gt;grub.cfg&lt;/code&gt;，都使用了&lt;code&gt;insmod&lt;/code&gt;命令。&lt;/p&gt;&#xA;&lt;p&gt;目前我尚未弄清楚造成该问题的原因，正在比较两配置文件的差异，还请大家批评指正。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;这里，我们使用的方法是，直接修改原有的&lt;code&gt;/boot/grub.cfg&lt;/code&gt;文件，将原先引导的3.x内核文件，改为新安装的4.19内核文件。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;menuentry &amp;#39;Loongnix GNU/Linux&amp;#39; --class loongnix --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option &amp;#39;gnulinu$        set root=&amp;#39;hd0,msdos1&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        if [ x$feature_platform_search_hint = xy ]; then&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          search --no-floppy --fs-uuid --set=root --hint-ieee1275=&amp;#39;ieee1275//disk@0,msdos1&amp;#39; --hint-bios=hd0,msdos1 --hint-efi=hd0,msd$&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        else&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          search --no-floppy --fs-uuid --set=root b6a3a91c-82b0-4ac6-ba62-19a9d4cf63c7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        echo    &amp;#39;Loading Linux 3.10.84-20.fc21.loongson.3.mips64el ...&amp;#39;&#xA;&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;gd&#34;&gt;-        linux   /vmlinuz-3.10.84-20.fc21.loongson.3.mips64el root=/dev/sda2 ro rhgb quiet loglevel=0 LANG=zh_CN.UTF-8&#xA;&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;gd&#34;&gt;-        initrd /initramfs-3.10.84-20.fc21.loongson.3.mips64el.img&#xA;&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;gi&#34;&gt;+        echo    &amp;#39;Loading Linux 4.19.0-loongson-3 ...&amp;#39;&#xA;&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;gi&#34;&gt;+        linux   /vmlinuz-4.19.0-loongson-3 root=/dev/sda2 ro rhgb quiet loglevel=0 LANG=en_US.UTF-8&#xA;&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;gi&#34;&gt;+        initrd /initrd.img-4.19.0-loongson-3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        boot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;编辑后，保存该文件，重启，至少在我的电脑上，这种方法成功替换了系统内核。&lt;/p&gt;&#xA;&lt;p&gt;目前我还没探索到更优雅地生成GRUB配置文件的方法，如果您有好的想法或见解，欢迎给我发邮件，敬请批评指正。&lt;/p&gt;&#xA;&lt;h4 id=&#34;可能的改进方法&#34;&gt;&lt;a href=&#34;#%e5%8f%af%e8%83%bd%e7%9a%84%e6%94%b9%e8%bf%9b%e6%96%b9%e6%b3%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;可能的改进方法&#xA;&lt;/h4&gt;&lt;p&gt;这部分主要是我暂时的改进想法，如果您是参考本文安装Debian系统，或许可以跳过这一段落了。&lt;/p&gt;&#xA;&lt;p&gt;很明显，两种GRUB配置文件中，有部分insmod命令没有正常执行。&lt;/p&gt;&#xA;&lt;p&gt;一种解决方法是，每次安装内核，都通过自己手动修改&lt;code&gt;/boot/grub.cfg&lt;/code&gt;文件，达到引导新内核的目的，缺点是不优雅，容易出错。&lt;/p&gt;&#xA;&lt;p&gt;另一种解决方法是，我们都知道，GRUB配置文件的生成是基于&lt;code&gt;/etc/grub.d/&lt;/code&gt;下的模板文件的，那么可以考虑将Loongnix系统中的模板文件复制到Debian中，即可生成格式接近的配置文件，或许也可以解决问题。&lt;/p&gt;&#xA;&lt;p&gt;但目前头疼的问题还有，Debian不提供MIPS64EL架构的GRUB2包，导致必须依赖Loongnix/Fedora安装GRUB主引导记录。我在尝试自行编译GRUB，具体测试情况可能得等下一篇博文更新了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;尾声&#34;&gt;&lt;a href=&#34;#%e5%b0%be%e5%a3%b0&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;尾声&#xA;&lt;/h2&gt;&lt;p&gt;目前经过几天的使用， 龙芯3A3000整体还是超过了我的预期的。基本上，3A3000接近于英特尔J1900水准。据说使用LoongArch架构的3A5000性能上了几个台阶，或许今后有机会可以试试看。&lt;/p&gt;&#xA;&lt;p&gt;我会更期待，我们有更多的实干家出现。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>使用WSL创建精简的Hexo写作环境</title>
            <link>https://www.dhao2001.com/2021/12/29/wsl-create-mini-hexo-blog-environment/</link>
            <pubDate>Wed, 29 Dec 2021 16:44:23 +0800</pubDate>
            <guid>https://www.dhao2001.com/2021/12/29/wsl-create-mini-hexo-blog-environment/</guid>
            <description>&lt;p&gt;这篇文章将介绍一种方法，使用Windows Subsystem for Linux (WSL), Alpine Linux发行版, Git等工具，配置一个方便易用的的Hexo博客编写系统。&lt;/p&gt;&#xA;&lt;p&gt;如果结合已有的网站服务器，还可以使用Git快速进行站点部署与更新。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;&lt;a href=&#34;#%e5%89%8d%e8%a8%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;前言&#xA;&lt;/h2&gt;&lt;p&gt;如您所见，这个网站的渲染生成器是&lt;em&gt;Hexo&lt;/em&gt;。众所周知，&lt;em&gt;Hexo&lt;/em&gt;是跑在&lt;em&gt;Node.js&lt;/em&gt;上的玩意，但&lt;em&gt;npm&lt;/em&gt;环境配置是出了名的复杂，甚至在我看来还不是那么优雅，略显混乱，在Windows上更是如此。&lt;/p&gt;&#xA;&lt;p&gt;过去在&lt;em&gt;Node.js&lt;/em&gt;上开发项目，总是避免不了和系统里的&lt;em&gt;npm&lt;/em&gt;斗智斗勇，几番折腾，最后竟然无法正常地生成&lt;em&gt;Hexo&lt;/em&gt;博客。实际上，也并不是没有考虑过切换博客生成后端，但迁移的成本同样存在，而且选择也较为有限。&lt;/p&gt;&#xA;&lt;p&gt;不可否认，目前有许多优秀的&lt;em&gt;Node.js&lt;/em&gt;管理系统，例如&lt;em&gt;volta&lt;/em&gt;之类，但这些工具在Windows下支持也不能算好。而采用Linux作为主桌面？在目前还不能算特别方便。&lt;/p&gt;&#xA;&lt;p&gt;所以，是否有一种方法，既能有效地管理&lt;em&gt;npm&lt;/em&gt;，从而为&lt;em&gt;Hexo&lt;/em&gt;创建一个隔离的环境，又能保证整体性能不差，还与Windows轻松兼容呢？&lt;/p&gt;&#xA;&lt;p&gt;笔者认为，在2021年年底的当下，微软提供的Linux子系统，也就是WSL，是解决这一问题的比较优雅方法。它能满足上面的所有设计要求。以下是具体方法。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预备条件&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e5%a4%87%e6%9d%a1%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预备条件&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;启用了 &lt;code&gt;Windows Subsystem for Linux&lt;/code&gt; 功能的 Windows 10+ 操作系统&lt;/li&gt;&#xA;&lt;li&gt;Alpine Linux的&lt;code&gt;MINI ROOT FILESYSTEM&lt;/code&gt;(最小根文件系统)压缩包，可以在&lt;a class=&#34;link&#34; href=&#34;https://www.alpinelinux.org/downloads/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;downloads | Alpine Linux&lt;/a&gt;找到&lt;/li&gt;&#xA;&lt;li&gt;其他必须工具，如&lt;code&gt;git&lt;/code&gt;等&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h2 id=&#34;关于alpine-linux&#34;&gt;&lt;a href=&#34;#%e5%85%b3%e4%ba%8ealpine-linux&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;关于Alpine Linux&#xA;&lt;/h2&gt;&lt;p&gt;Alpine Linux是一个非常精简的Linux发行版，本文编写时，其最新版&lt;code&gt;minirootfs&lt;/code&gt;的&lt;code&gt;tar.gz&lt;/code&gt;包，仅2.6MB大小，可以在为我们提供尽可能的环境隔离同时，大幅度节省隔离环境所需的额外空间开销。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h2 id=&#34;mini-root-filesystem的作用是&#34;&gt;&lt;a href=&#34;#mini-root-filesystem%e7%9a%84%e4%bd%9c%e7%94%a8%e6%98%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;MINI ROOT FILESYSTEM的作用是?&#xA;&lt;/h2&gt;&lt;p&gt;用于我们手动导入Alpine Linux到WSL中，作为我们的Hexo环境。不过，目前微软商店里已经上架了&lt;code&gt;Alpine WSL&lt;/code&gt;应用程序包，和手动导入效果类似，可供选择。如果选择从应用商店安装，请跳过下面&lt;em&gt;&lt;strong&gt;导入Alpine Linux&lt;/strong&gt;&lt;/em&gt;一节。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h2 id=&#34;为什么使用alpine-linux发行版&#34;&gt;&lt;a href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%bf%e7%94%a8alpine-linux%e5%8f%91%e8%a1%8c%e7%89%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;为什么使用Alpine Linux发行版?&#xA;&lt;/h2&gt;&lt;p&gt;Alpine Linux发行版体积比目前绝大多数其他通用的发行版（无论是Debian系还是CentOS系）都要小得多。先前，Alpine由于&lt;code&gt;musl&lt;/code&gt;的原因，兼容性不如其他&lt;code&gt;glibc&lt;/code&gt;发行版。但后来docker普及之后，许多软件都提供了运行于Alpine Linux的二进制文件。包括Visual Studio Code远程插件，也提供了Alpine Linux的支持。因此，就本文描述的任务而言，选用Alpine Linux是完全没有问题的。&lt;/p&gt;&#xA;&lt;p&gt;当然，如果更喜欢使用其他发行版，也是完全没有问题的，操作流程和下文整体上还是相同的。注意一下部分命令的替换就好。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;导入alpine-linux&#34;&gt;&lt;a href=&#34;#%e5%af%bc%e5%85%a5alpine-linux&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;导入Alpine Linux&#xA;&lt;/h2&gt;&lt;h3 id=&#34;解开gzip包&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%bc%80gzip%e5%8c%85&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解开GZip包&#xA;&lt;/h3&gt;&lt;p&gt;这一步，我们要导入Alpine Linux系统作为一个WSL的发行版(Distro)。&lt;/p&gt;&#xA;&lt;p&gt;首先下载Alpine Linux的&lt;code&gt;.tar.gz&lt;/code&gt;包，然后用解压工具，解压出&lt;code&gt;.tar&lt;/code&gt;包。记住/复制这个&lt;code&gt;.tar&lt;/code&gt;包的路径。例如，&lt;code&gt;D:\alpine-minirootfs-3.15.0-x86_64.tar&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;alert alert-warning&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;⚠️&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;警告&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h3 id=&#34;注意事项&#34;&gt;&lt;a href=&#34;#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;注意事项&#xA;&lt;/h3&gt;&lt;p&gt;只需要将压缩包的第一层&lt;code&gt;.gz&lt;/code&gt;部分解开，得到里面的&lt;code&gt;.tar&lt;/code&gt;包即可。&lt;em&gt;&lt;strong&gt;不需要&lt;/strong&gt;&lt;/em&gt;解开&lt;code&gt;.tar&lt;/code&gt;包里面的文件系统。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;建立目录并导入发行版&#34;&gt;&lt;a href=&#34;#%e5%bb%ba%e7%ab%8b%e7%9b%ae%e5%bd%95%e5%b9%b6%e5%af%bc%e5%85%a5%e5%8f%91%e8%a1%8c%e7%89%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;建立目录并导入发行版&#xA;&lt;/h3&gt;&lt;p&gt;在你希望放置这个发行版相关系统文件的地方，创建一个文件夹，这里为了举例子，我们取&lt;code&gt;D:\AlpineHexoBlog&lt;/code&gt;。这个路径不一定需要在C盘，可以在你想的合理的位置。名字也是随意的。&lt;/p&gt;&#xA;&lt;p&gt;接着，我们输入下述命令。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;wsl --import AlpineHexo D:\AlpineHexoBlog D:\alpine-minirootfs-3.15.0-x86_64.tar --version 2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这个命令的意思是，将我们解压得到的&lt;code&gt;.tar&lt;/code&gt;包，作为一个Linux发行版，导入一个新的发行版，并将相关文件放置在&lt;code&gt;D:\AlpineHexoBlog&lt;/code&gt;目录下，这个发行版的名称叫&lt;code&gt;AlpineHexo&lt;/code&gt;(这个名字可以随意)，并指定使用WSL版本2（关于WSL1和2的差别，请自行参阅微软官方文档）。&lt;/p&gt;&#xA;&lt;p&gt;这样，一个自定义的发行版就导入完成了。可以在普通命令行/Powershell里面输入&lt;code&gt;wsl -d AlpineHexo&lt;/code&gt;(注意名称替换)进入该发行版的终端。如果电脑装有&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/terminal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Windows Terminal&lt;/a&gt;，也可以在标签页启动列表中直接选择该发行版。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装hexo相关环境&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85hexo%e7%9b%b8%e5%85%b3%e7%8e%af%e5%a2%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装Hexo相关环境&#xA;&lt;/h2&gt;&lt;p&gt;切换到Alpine Linux终端，执行命令。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;apk add nodejs npm git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;等待安装完成。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装hexo&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85hexo&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装Hexo&#xA;&lt;/h2&gt;&lt;p&gt;这部分的步骤和&lt;a class=&#34;link&#34; href=&#34;https://hexo.io/docs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Hexo官方文档&lt;/a&gt;部分相同，因此直接放出命令如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;npm install -g hexo-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;创建博客资源主目录&#34;&gt;&lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%8d%9a%e5%ae%a2%e8%b5%84%e6%ba%90%e4%b8%bb%e7%9b%ae%e5%bd%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;创建博客资源主目录&#xA;&lt;/h2&gt;&lt;p&gt;参考&lt;a class=&#34;link&#34; href=&#34;https://hexo.io/docs/setup&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Setup | Hexo&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;hexo init MyBlog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;上面命令中，&lt;code&gt;MyBlog&lt;/code&gt;是可以自定义的文件夹名称，这个文件夹用于存储博客网站的源文件，如站点设置，博客文章原始文件等。在生成渲染网站时，&lt;code&gt;hexo&lt;/code&gt;程序会根据这一目录里的配置生成静态网站，我们的大部分操作也都将在这个文件夹里完成。本文剩余部分中，这个目录将称为&lt;em&gt;&lt;strong&gt;Hexo主文件夹&lt;/strong&gt;&lt;/em&gt;。&lt;/p&gt;&#xA;&lt;p&gt;如果输出如下所示，说明创建成功了。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;INFO  Cloning hexo-starter https://github.com/hexojs/hexo-starter.git&#xA;&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;go&#34;&gt;INFO  Install dependencies&#xA;&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;go&#34;&gt;INFO  Start blogging with Hexo!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;接着进入这个新文件夹，执行&lt;code&gt;npm install&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&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;go&#34;&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这下，我们的站点就初始化完成了。我们可以任意对这个站点进行自定义，如主题自定义，撰写文章等。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;可选使用git管理站点内容历史记录&#34;&gt;&lt;a href=&#34;#%e5%8f%af%e9%80%89%e4%bd%bf%e7%94%a8git%e7%ae%a1%e7%90%86%e7%ab%99%e7%82%b9%e5%86%85%e5%ae%b9%e5%8e%86%e5%8f%b2%e8%ae%b0%e5%bd%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;(可选)使用Git管理站点内容历史记录&#xA;&lt;/h2&gt;&lt;p&gt;这就完了？不打算让博客内容管理更加自动化一些吗？比方说版本控制，自动部署等等。我们接下来就来介绍！&lt;/p&gt;&#xA;&lt;p&gt;我们首先从使用&lt;em&gt;Git&lt;/em&gt;管理&lt;strong&gt;站点内容历史记录&lt;/strong&gt;开始说起。网站内容日新月异，因此有需要将我们的博客站点原始内容，如博客文章的原始Markdown文件，站点的配置文件，Node.js包依赖等，做一些历史备份。&lt;/p&gt;&#xA;&lt;p&gt;还可以注意到，&lt;em&gt;Hexo&lt;/em&gt;的站点文件，包括配置、文章等，实际上都可以被视为文本文件，因此&lt;em&gt;Git&lt;/em&gt;就是负责管理版本历史的极佳选择。&lt;/p&gt;&#xA;&lt;p&gt;以下方法不依赖于具体的Git云托管平台，因此不必纠结Github还是Gitee这种问题，原理都是一样的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;初始化git仓库&#34;&gt;&lt;a href=&#34;#%e5%88%9d%e5%a7%8b%e5%8c%96git%e4%bb%93%e5%ba%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;初始化Git仓库&#xA;&lt;/h3&gt;&lt;p&gt;进入Hexo主文件夹，并执行&lt;code&gt;git init&lt;/code&gt;，这将在本地端创建一个初始Git仓库。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&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;go&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;接着，我们让git跟踪Hexo主文件夹内所有有用的文件，并进行第一次提交(commit)。其中&lt;code&gt;-m&lt;/code&gt;参数后的是提交信息，内容任你填写。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git add .&#xA;&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;go&#34;&gt;git commit -m &amp;#34;Init commit.&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;推送到在线git云托管平台&#34;&gt;&lt;a href=&#34;#%e6%8e%a8%e9%80%81%e5%88%b0%e5%9c%a8%e7%ba%bfgit%e4%ba%91%e6%89%98%e7%ae%a1%e5%b9%b3%e5%8f%b0&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;推送到在线Git云托管平台&#xA;&lt;/h3&gt;&lt;p&gt;如果希望同步到在线的Git云托管平台，需要先自行在网页中创建一个空仓库，之后推送到该远程仓库中。这里以内网的一台Git服务器为例，创建的仓库地址为&lt;code&gt;http://git.mysrv.in/dhao2001/MyBlog.git&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git remote add origin http://git.mysrv.in/dhao2001/MyBlog.git&#xA;&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;go&#34;&gt;git push -u origin main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;在另一个地方继续创作&#34;&gt;&lt;a href=&#34;#%e5%9c%a8%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%9c%b0%e6%96%b9%e7%bb%a7%e7%bb%ad%e5%88%9b%e4%bd%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;在另一个地方继续创作&#xA;&lt;/h3&gt;&lt;p&gt;下次，当重装了操作系统，或是更换了电脑，希望在另一个地方恢复相同的博客环境以及源文件，只需要这么做:&lt;/p&gt;&#xA;&lt;p&gt;首先还是要搭好最基本的环境，也就是&lt;code&gt;git&lt;/code&gt;, &lt;code&gt;nodejs&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;。安装完成后克隆仓库到当前系统。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git clone http://git.mysrv.in/dhao2001/MyBlog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;进入该文件夹，执行&lt;code&gt;npm install&lt;/code&gt;，这将根据&lt;em&gt;Hexo主文件夹&lt;/em&gt;里的&lt;code&gt;package.json&lt;/code&gt;文件，安装所需的&lt;em&gt;node.js&lt;/em&gt;包。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&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;go&#34;&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;至此，在新环境中的博客编写环境已经准备就绪，就可以像在老地方一样创作和发布博客了。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;可选使用git进行页面部署&#34;&gt;&lt;a href=&#34;#%e5%8f%af%e9%80%89%e4%bd%bf%e7%94%a8git%e8%bf%9b%e8%a1%8c%e9%a1%b5%e9%9d%a2%e9%83%a8%e7%bd%b2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;(可选)使用Git进行页面部署&#xA;&lt;/h2&gt;&lt;p&gt;咦，怎么又是Git？上一节不是刚刚才讲过吗？&lt;/p&gt;&#xA;&lt;p&gt;刚刚上一节的内容，主要是使用Git对博客的&lt;strong&gt;原始配置文件、原始代码、原始Markdown源文件&lt;/strong&gt;进行管理。&lt;/p&gt;&#xA;&lt;p&gt;而本节的内容是，使用Git工具，将本机上通过Hexo命令渲染生成的&lt;strong&gt;静态Html等站点资源文件&lt;/strong&gt;，推送到远程服务器的指定Web目录内，供其他人通过Web服务器进行访问。&lt;/p&gt;&#xA;&lt;h3 id=&#34;设置远程服务器&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e8%bf%9c%e7%a8%8b%e6%9c%8d%e5%8a%a1%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置远程服务器&#xA;&lt;/h3&gt;&lt;p&gt;第一步，首先需要登录到博客网站主机，也就是部署在公网的Web服务器上。&lt;/p&gt;&#xA;&lt;p&gt;接着，在服务器上安装&lt;code&gt;git&lt;/code&gt;软件包。例如，如果使用的是Debian/Ubuntu系统，可以运行:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;sudo apt install git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果使用的是其他发行版，请参阅对应发行版的软件包安装手册。&lt;/p&gt;&#xA;&lt;h4 id=&#34;设置web服务器&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%aeweb%e6%9c%8d%e5%8a%a1%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置Web服务器&#xA;&lt;/h4&gt;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;关于Web服务器的选择&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本教程以nginx作为Web服务器，若希望使用其他Web服务器如Apache，请自行调整以下步骤中Web服务器配置文件内容。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;在&lt;code&gt;/var/www&lt;/code&gt;下新建一个文件夹，用于存放博客网站的静态Html文件，这里以&lt;code&gt;blog&lt;/code&gt;作为文件夹名称示例。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;mkdir -p /var/www/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;接下来修改nginx的站点配置文件(Debian/Ubuntu系统位于&lt;code&gt;/etc/nginx/sites-enabled/&lt;/code&gt;下)，修改配置文件中的&lt;code&gt;server&lt;/code&gt;块(当然，更建议新建一个&lt;code&gt;server&lt;/code&gt;块，更方便区分和管理，详见其他教程)。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;default_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;[::]:80&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;default_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;root&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/var/www/blog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;index&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;index.html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kn&#34;&gt;try_files&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$uri&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$uri/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;404&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&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;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;修改完配置文件后，重启nginx:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;service nginx restart   # 使用系统服务管理重启nginx&#xA;&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;err&#34;&gt;&#xA;&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;gp&#34;&gt;#&lt;/span&gt; 如果上面的命令无效&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;nginx -s reload         # 使用nginx命令重新读取配置文件&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;以上配置足以满足&lt;em&gt;Hexo&lt;/em&gt;这样的静态网站部署要求。此时，可以考虑在&lt;code&gt;/var/www/blog/&lt;/code&gt;下新建一个测试用Html文件，测试能否正常访问网站。&lt;/p&gt;&#xA;&lt;h4 id=&#34;设置git仓库用于传输博客网站资源&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%aegit%e4%bb%93%e5%ba%93%e7%94%a8%e4%ba%8e%e4%bc%a0%e8%be%93%e5%8d%9a%e5%ae%a2%e7%bd%91%e7%ab%99%e8%b5%84%e6%ba%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置git仓库用于传输博客网站资源&#xA;&lt;/h4&gt;&lt;p&gt;设置好Web服务器后，如何使用&lt;code&gt;git&lt;/code&gt;，把本机生成好的&lt;em&gt;Hexo&lt;/em&gt;站点静态文件，推送到远程Web服务器上的网站目录，也就是本例中的&lt;code&gt;/var/www/blog&lt;/code&gt;去呢？&lt;/p&gt;&#xA;&lt;p&gt;实际上，在服务器和本地机器之间传输文件有很多方法。为了方便，考虑&lt;em&gt;Hexo&lt;/em&gt;提供的部署工具集合，我们可以继续使用Git工具完成这项任务。&lt;/p&gt;&#xA;&lt;p&gt;使用Git传输网站资源主要分成两个过程：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;第一步，先将本机生成的静态文件，通过Git传输到Web服务器上。&lt;/li&gt;&#xA;&lt;li&gt;第二步，使用Git钩子，将传输到Web服务器上的网站资源，复制到&lt;code&gt;/var/www/blog&lt;/code&gt;，供Web用户访问。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;为了达到这一目标，需要按照以下方法，在本机和远程Web服务器上分别调整配置。&lt;/p&gt;&#xA;&lt;h4 id=&#34;远程web服务器的配置&#34;&gt;&lt;a href=&#34;#%e8%bf%9c%e7%a8%8bweb%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9a%84%e9%85%8d%e7%bd%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;远程Web服务器的配置&#xA;&lt;/h4&gt;&lt;p&gt;首先，&lt;strong&gt;在远程Web服务器上&lt;/strong&gt;，创建一个用户，用户名可以自拟。当然，考虑使用Git的习惯，甚至可以给这个用户起名为&lt;code&gt;git&lt;/code&gt;，如本例接下来所示。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;adduser -s /bin/git-shell git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;blockquote class=&#34;alert alert-warning&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;⚠️&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;警告&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;关于Git Shell&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;出于安全考虑，可以将&lt;code&gt;git&lt;/code&gt;用户的默认shell指定为只有简单功能的&lt;code&gt;git-shell&lt;/code&gt;，执行命令结束后就会退出。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意，&lt;code&gt;/bin/git-shell&lt;/code&gt;是Debian/Ubuntu系发行版的默认路径，新版本或其他发行版请务必确认&lt;code&gt;git-shell&lt;/code&gt;的具体位置，并将&lt;code&gt;/bin/git-shell&lt;/code&gt;替换成真实路径。&lt;/strong&gt;&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;为了配置自动部署，建议使用密钥对进行认证。SSH密钥对可以在本机上使用&lt;code&gt;ssh-keygen&lt;/code&gt;或&lt;code&gt;putty&lt;/code&gt;等工具生成。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;sudo -u git /bin/bash -i        # 以git用户身份进行下列操作&#xA;&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;go&#34;&gt;cd ~&#xA;&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;go&#34;&gt;mkdir .ssh&#xA;&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;go&#34;&gt;cd .ssh&#xA;&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;go&#34;&gt;vim authorized_keys             # 将公钥添加到authorized_keys中&#xA;&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;go&#34;&gt;chmod 600 authorized_keys&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;完成用户创建后，选择任意一处地方，创建一个git裸仓库，该仓库就是用于传输网站资源的git仓库。如果没有其他要求的话，&lt;code&gt;git&lt;/code&gt;用户的家目录&lt;code&gt;/home/git&lt;/code&gt;似乎就是一个不错的选择。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd ~&#xA;&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;go&#34;&gt;git init -b main --bare myblog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;为了在上传网站资源文件后，git可以自动帮我们将更新的资源文件，拷贝到&lt;code&gt;/var/www/blog&lt;/code&gt;文件夹，我们需要在git仓库中创建一个&lt;code&gt;post-receive&lt;/code&gt;钩子。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;vim myblog.git/hooks/post-receive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;添加如下内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git --work-tree&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/www/blog --git-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/git/myblog.git checkout -f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;保存该文件，回到终端，赋予该文件可执行权限。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;chmod 744 myblog.git/hooks/post-receive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;也不要忘记将nginx网站根目录&lt;code&gt;/var/www/blog&lt;/code&gt;所有权转移给用户&lt;code&gt;git&lt;/code&gt;，否则将无法进行写入和更新操作！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;chown -R git:git /var/www/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样，远程Web服务器端的配置就完成了。&lt;/p&gt;&#xA;&lt;h4 id=&#34;本机端的操作&#34;&gt;&lt;a href=&#34;#%e6%9c%ac%e6%9c%ba%e7%ab%af%e7%9a%84%e6%93%8d%e4%bd%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;本机端的操作&#xA;&lt;/h4&gt;&lt;p&gt;这部分的配置也可以参考官方文档&lt;a class=&#34;link&#34; href=&#34;https://hexo.io/docs/one-command-deployment&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;One-Command Deployment | Hexo&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;回到本机上的WSL Hexo环境。首先切到Hexo主文件夹。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;为了使用Git进行一键部署，我们需要安装Hexo的Git一键部署插件。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;npm install hexo-deployer-git --save&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;在&lt;code&gt;_config.yml&lt;/code&gt;最后&lt;code&gt;deploy&lt;/code&gt;下添加一节。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;deploy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;git@mysrv.in:myblog.git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;记得把&lt;code&gt;mysrv.in&lt;/code&gt;替换成你的远程Web服务器地址。如果有其他需求，如指定认证使用的私钥位置、端口等，可以参考我先前写的文章&lt;a class=&#34;link&#34; href=&#34;https://www.dhao2001.com/2021/12/04/ssh-config-specific-private-key-filename/&#34; &gt;SSH配置主机别名及指定认证私钥路径&lt;/a&gt;，修改&lt;code&gt;ssh_config&lt;/code&gt;文件实现。&lt;/p&gt;&#xA;&lt;p&gt;完成以后，试试运行命令:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;hexo g -d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后再访问一下博客站点，是不是已经成功将Hexo内容部署上去了呢？&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;常见问题的解决&#34;&gt;&lt;a href=&#34;#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e7%9a%84%e8%a7%a3%e5%86%b3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;常见问题的解决&#xA;&lt;/h2&gt;&lt;h3 id=&#34;本机部署命令执行成功但远程服务器上访问到的资源未更新&#34;&gt;&lt;a href=&#34;#%e6%9c%ac%e6%9c%ba%e9%83%a8%e7%bd%b2%e5%91%bd%e4%bb%a4%e6%89%a7%e8%a1%8c%e6%88%90%e5%8a%9f%e4%bd%86%e8%bf%9c%e7%a8%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e8%ae%bf%e9%97%ae%e5%88%b0%e7%9a%84%e8%b5%84%e6%ba%90%e6%9c%aa%e6%9b%b4%e6%96%b0&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;本机部署命令执行成功，但远程服务器上访问到的资源未更新&#xA;&lt;/h3&gt;&lt;p&gt;在调试网站并刷新时，建议使用&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;F5&lt;/kbd&gt;快捷键强制刷新，这将强制浏览器重新请求网站文件，从而可以避免缓存对调试结果造成影响。&lt;/p&gt;&#xA;&lt;p&gt;其次，检查网站目录&lt;code&gt;/var/www/blog&lt;/code&gt;的内容是否已经更新，以及nginx配置文件正确性。&lt;/p&gt;&#xA;&lt;p&gt;如果明明git推送成功，但却没更新到网站目录中，需要检查&lt;code&gt;post-receive&lt;/code&gt;钩子内容是否正确，路径是否正确，&lt;strong&gt;权限是否正确。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在这里，&lt;code&gt;post-receive&lt;/code&gt;钩子文件对以上用户（本例中为&lt;code&gt;git&lt;/code&gt;）必须具备可执行权限。同时，nginx的站点文件夹（本例中为&lt;code&gt;/var/www/blog&lt;/code&gt;）必须对&lt;code&gt;git&lt;/code&gt;用户开放写入权限，对nginx用户&lt;code&gt;www-data&lt;/code&gt;开放读取权限。&lt;/p&gt;&#xA;&lt;p&gt;正确的权限是，权限8进制代码为&lt;code&gt;744&lt;/code&gt;或&lt;code&gt;755&lt;/code&gt;，所有者为&lt;code&gt;git:git&lt;/code&gt;。可以通过下列命令指定。&lt;/p&gt;&#xA;&lt;p&gt;如果不确定，可以以&lt;code&gt;git&lt;/code&gt;用户身份尝试以下命令：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd ~&#xA;&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;go&#34;&gt;chown git:git myblog.git/hooks/post-receive&#xA;&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;go&#34;&gt;chmod 744 myblog.git/hooks/post-receive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;再以&lt;code&gt;root&lt;/code&gt;身份执行以下命令：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;sudo chown -R git:git /var/www/blog&#xA;&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;go&#34;&gt;sudo chmod -R 744 /var/www/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;修改博客后更新资源时发现生成的页面字母大小写异常&#34;&gt;&lt;a href=&#34;#%e4%bf%ae%e6%94%b9%e5%8d%9a%e5%ae%a2%e5%90%8e%e6%9b%b4%e6%96%b0%e8%b5%84%e6%ba%90%e6%97%b6%e5%8f%91%e7%8e%b0%e7%94%9f%e6%88%90%e7%9a%84%e9%a1%b5%e9%9d%a2%e5%ad%97%e6%af%8d%e5%a4%a7%e5%b0%8f%e5%86%99%e5%bc%82%e5%b8%b8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;修改博客后更新资源时，发现生成的页面字母大小写异常&#xA;&lt;/h3&gt;&lt;p&gt;这是由于默认的Hexo Git插件对大小写不敏感导致的。需要修改&lt;code&gt;&amp;lt;Hexo主目录&amp;gt;/.deploy_git/.git/&lt;/code&gt;下面的&lt;code&gt;config&lt;/code&gt;文件，在&lt;code&gt;[core]&lt;/code&gt;一节中添加一行&lt;code&gt;ignorecase = false&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[core]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        repositoryformatversion = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        filemode = true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bare = false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        logallrefupdates = true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+       ignorecase = false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[branch &amp;#34;master&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        remote = git@mysrv.in:myblog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        merge = refs/heads/master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;</description>
        </item><item>
            <title>SSH配置主机别名及指定认证私钥路径</title>
            <link>https://www.dhao2001.com/2021/12/04/ssh-config-specify-private-key-hostname/</link>
            <pubDate>Sat, 04 Dec 2021 21:06:43 +0800</pubDate>
            <guid>https://www.dhao2001.com/2021/12/04/ssh-config-specify-private-key-hostname/</guid>
            <description>&lt;p&gt;但有一个问题，有时候你可能拥有几个不同的SSH私钥（虽然没什么使用多个密钥对的必要性），或者私钥文件文件名不是默认的&lt;code&gt;~/.ssh/id_rsa&lt;/code&gt;，应该怎么指定需要使用的私钥文件路径呢？&lt;/p&gt;&#xA;&lt;p&gt;几种常见的情景如下所示，更多详细内容，和标准的定义，请参考&lt;a class=&#34;link&#34; href=&#34;https://man7.org/linux/man-pages/man5/ssh_config.5.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ssh_config手册&lt;/a&gt;，或在终端中键入&lt;code&gt;man ssh_config&lt;/code&gt;查看。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;使用命令行登录ssh&#34;&gt;&lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e7%99%bb%e5%bd%95ssh&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;使用命令行登录SSH&#xA;&lt;/h2&gt;&lt;p&gt;第一种，就是我们最常见的登录SSH服务器的方式。当你在终端中输入如下命令。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;ssh myname@my.host.addr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;SSH客户端会连接到该服务器，并尝试使用默认路径（见上述手册，IdentityFile部分）下的私钥，进行认证。如果私钥不在默认路径下，也未显式指定私钥文件，而服务器要求必须使用私钥认证，则认证失败。&lt;/p&gt;&#xA;&lt;p&gt;如果想显式指定私钥，可以使用&lt;code&gt;-i&lt;/code&gt;参数，指定私钥文件。例如。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;ssh myname@myhost -i /path/to/mykey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果是连接SSH服务器啥的，这就够用了。但缺点很明显，每次登录，都必须显式指定私钥文件。而如果是&lt;code&gt;git&lt;/code&gt;命令，则会因为没有&lt;code&gt;-i&lt;/code&gt;参数支持，命令执行失败。怎么改进呢？我们看下面。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用ssh_conifg文件&#34;&gt;&lt;a href=&#34;#%e4%bd%bf%e7%94%a8ssh_conifg%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;使用ssh_conifg文件&#xA;&lt;/h2&gt;&lt;h3 id=&#34;配置文件&#34;&gt;&lt;a href=&#34;#%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;配置文件&#xA;&lt;/h3&gt;&lt;p&gt;实际上，关于一个SSH连接，一些行为是可以在配置文件中定义的。你可以针对不同的目标服务器，配置不同的连接行为。&lt;/p&gt;&#xA;&lt;p&gt;对于Linux中的一个用户而言，SSH配置文件位于&lt;code&gt;~/.ssh/config&lt;/code&gt;。对于整个系统而言，SSH配置文件位于&lt;code&gt;/etc/ssh/ssh_config&lt;/code&gt;（注意区别&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;，&lt;code&gt;sshd_config&lt;/code&gt;是SSH服务器进程的配置文件，&lt;strong&gt;不用于客户端。&lt;/strong&gt;）&lt;/p&gt;&#xA;&lt;p&gt;我们用一个&lt;code&gt;~/.ssh/config&lt;/code&gt;的片段来说明。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Host myserver&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;Hostname 192.168.1.123&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;User root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;IdentityFile ~/mykey&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;上面这个配置文件非常好读懂。&lt;/p&gt;&#xA;&lt;p&gt;最开始的&lt;code&gt;Host&lt;/code&gt;，代表的是，你在&lt;code&gt;ssh&lt;/code&gt;命令中，给定的&lt;code&gt;host&lt;/code&gt;参数的值，常常就是你输入&lt;code&gt;username@host&lt;/code&gt;中&lt;code&gt;@&lt;/code&gt;后面那部分。如果匹配，则应用下面的规则。对于该Host的定义，在&lt;code&gt;config&lt;/code&gt;文件中持续到下一个&lt;code&gt;Host&lt;/code&gt;或者&lt;code&gt;Match&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;接下来是&lt;code&gt;Hostname&lt;/code&gt;指定了你服务器的真实地址，可以是ip，当然也可以是域名。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;User&lt;/code&gt;指定了登录的用户名。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;IdentityFile&lt;/code&gt;指定了登录该&lt;code&gt;Host&lt;/code&gt;使用的认证私钥文件路径。&lt;/p&gt;&#xA;&lt;h3 id=&#34;使用&#34;&gt;&lt;a href=&#34;#%e4%bd%bf%e7%94%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;使用&#xA;&lt;/h3&gt;&lt;p&gt;编写了配置文件，就可以使用了。现在，登录到你的服务器更加简单，只需要在终端中输入。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;ssh myserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;就可以应用&lt;code&gt;Host myserver&lt;/code&gt;块下的配置，自动使用指定的私钥文件进行认证。&lt;/p&gt;&#xA;&lt;h3 id=&#34;git&#34;&gt;&lt;a href=&#34;#git&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Git&#xA;&lt;/h3&gt;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;关于Git使用场景的提醒&lt;/strong&gt;&#xA;虽然大抵是简单的触类旁通：上面用于Git的案例，&lt;strong&gt;不仅适用于Github，也适用于其他Git平台&lt;/strong&gt;，甚至包括自己搭建的Git服务器，像本网站的生成部署脚本，就利用了这个方法达到一键部署的效果。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;我们可以用上述方法，解决&lt;code&gt;git&lt;/code&gt;命令没有&lt;code&gt;-i&lt;/code&gt;参数的不便之处。以Github为例，我们只需要向&lt;code&gt;~/.ssh/config&lt;/code&gt;添加如下一个段落。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Host github.com&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;HostName github.com&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;IdentityFile ~/mykey&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样，下次对远程仓库代码进行更改时候，就会使用你指定的SSH私钥了。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
