<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>GZH</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://love.gzh-czy.cc.cd/</id>
  <link href="https://love.gzh-czy.cc.cd/" rel="alternate"/>
  <link href="https://love.gzh-czy.cc.cd/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, GZH</rights>
  <subtitle>生活明朗，万物可爱</subtitle>
  <title>子涵のblog</title>
  <updated>2026-08-04T02:05:20.400Z</updated>
  <entry>
    <author>
      <name>GZH</name>
    </author>
    <category term="外挂标签" scheme="https://love.gzh-czy.cc.cd/categories/%E5%A4%96%E6%8C%82%E6%A0%87%E7%AD%BE/"/>
    <content>
      <![CDATA[<div class="tag link"><a class="link-card" title="糖果屋教程贴" href="https://akilar.top/posts/615e2dec/"><div class="left"><img src="https://imgbed.gzh-czy.cc.cd/20260801125650147.jfif"/></div><div class="right"><p class="text">糖果屋教程贴</p><p class="url">https://akilar.top/posts/615e2dec/</p></div></a></div><div class="btns circle grid5">            <a class="button" href='https://xaoxuu.com' title='xaoxuu'><img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png'>xaoxuu</a><a class="button" href='https://xaoxuu.com' title='xaoxuu'><img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png'>xaoxuu</a><a class="button" href='https://xaoxuu.com' title='xaoxuu'><img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png'>xaoxuu</a><a class="button" href='https://xaoxuu.com' title='xaoxuu'><img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png'>xaoxuu</a><a class="button" href='https://xaoxuu.com' title='xaoxuu'><img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png'>xaoxuu</a>          </div><div class="btns rounded grid5">            <a class="button" href='https://imgbed.gzh-czy.cc.cd/20260801125650147.jfif' title='下载源码'><i class='fas fa-download'></i>下载源码</a><a class="button" href='/' title='查看文档'><i class='fas fa-book-open'></i>查看文档</a>          </div>    <a class="my-link" href="https://github.com" target="_blank" rel="noopener noreferrer" title="GitHub" data-url="https://github.com">      <div class="my-link-placeholder"></div>      <span class="my-link-tip">前往以下网站，不保证安全性哦喵～</span>      <div class="my-link-divider"></div>      <img class="my-link-img" alt="GitHub" src="https://github.com/favicon.ico" onerror="this.style.display='none'">      <div class="my-link-content">        <div class="my-link-top">          <span class="my-link-title">GitHub</span>          <span class="my-link-subtitle">代码托管平台</span>        </div>        <div class="my-link-signal-row">          <span class="my-link-signal">            <i class="fas fa-spinner fa-spin"></i>          </span>        </div>      </div>    </a>      <a class="my-link" href="https://love.gzh-czy.cc.cd" target="_blank" rel="noopener noreferrer" title="我的博客" data-url="https://love.gzh-czy.cc.cd">      <div class="my-link-placeholder"></div>      <span class="my-link-tip">前往以下网站，不保证安全性哦喵～</span>      <div class="my-link-divider"></div>      <img class="my-link-img" alt="我的博客" src="https://picx.zhimg.com/80/v2-5cad506ea105dd3da8f4000b0f9bd3c0_720w.webp?source=1def8aca" onerror="this.style.display='none'">      <div class="my-link-content">        <div class="my-link-top">          <span class="my-link-title">我的博客</span>          <span class="my-link-subtitle">个人博客</span>        </div>        <div class="my-link-signal-row">          <span class="my-link-signal">            <i class="fas fa-spinner fa-spin"></i>          </span>        </div>      </div>    </a>      <a class="my-link" href="https://bilibili.com" target="_blank" rel="noopener noreferrer" title="哔哩哔哩" data-url="https://bilibili.com">      <div class="my-link-placeholder"></div>      <span class="my-link-tip">前往以下网站，不保证安全性哦喵～</span>      <div class="my-link-divider"></div>      <img class="my-link-img" alt="哔哩哔哩" src="https://bilibili.com/favicon.ico" onerror="this.onerror=null;if(this.src==='https://bilibili.com/favicon.ico'){this.src='https://www.google.com/s2/favicons?domain=bilibili.com&sz=64';} else if(this.src==='https://www.google.com/s2/favicons?domain=bilibili.com&sz=64'){this.src='https://icons.duckduckgo.com/ip3/bilibili.com.ico';} else if(this.src==='https://icons.duckduckgo.com/ip3/bilibili.com.ico'){this.src='https://api.faviconkit.com/bilibili.com/64';} else if(this.src==='https://api.faviconkit.com/bilibili.com/64'){this.src='https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=bilibili.com';} else {this.style.display='none';}">      <div class="my-link-content">        <div class="my-link-top">          <span class="my-link-title">哔哩哔哩</span>          <span class="my-link-subtitle">视频网站</span>        </div>        <div class="my-link-signal-row">          <span class="my-link-signal">            <i class="fas fa-spinner fa-spin"></i>          </span>        </div>      </div>    </a>      <a class="my-link" href="https://haowallpaper.com/" target="_blank" rel="noopener noreferrer" title="壁纸" data-url="https://haowallpaper.com/">      <div class="my-link-placeholder"></div>      <span class="my-link-tip">前往以下网站，不保证安全性哦喵～</span>      <div class="my-link-divider"></div>      <img class="my-link-img" alt="壁纸" src="https://haowallpaper.com/favicon.ico" onerror="this.onerror=null;if(this.src==='https://haowallpaper.com/favicon.ico'){this.src='https://www.google.com/s2/favicons?domain=haowallpaper.com&sz=64';} else if(this.src==='https://www.google.com/s2/favicons?domain=haowallpaper.com&sz=64'){this.src='https://icons.duckduckgo.com/ip3/haowallpaper.com.ico';} else if(this.src==='https://icons.duckduckgo.com/ip3/haowallpaper.com.ico'){this.src='https://api.faviconkit.com/haowallpaper.com/64';} else if(this.src==='https://api.faviconkit.com/haowallpaper.com/64'){this.src='https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=haowallpaper.com';} else {this.style.display='none';}">      <div class="my-link-content">        <div class="my-link-top">          <span class="my-link-title">壁纸</span>          <span class="my-link-subtitle">壁纸网站</span>        </div>        <div class="my-link-signal-row">          <span class="my-link-signal">            <i class="fas fa-spinner fa-spin"></i>          </span>        </div>      </div>    </a>      <a class="my-link" href="http://192.168.5.14:8080/s/XoZW7AWFF4aW9B7" target="_blank" rel="noopener noreferrer" title="下载链接" data-url="http://192.168.5.14:8080/s/XoZW7AWFF4aW9B7">      <div class="my-link-placeholder"></div>      <span class="my-link-tip">前往以下网站，不保证安全性哦喵～</span>      <div class="my-link-divider"></div>      <img class="my-link-img" alt="下载链接" src="https://192.168.5.14/favicon.ico" onerror="this.onerror=null;if(this.src==='https://192.168.5.14/favicon.ico'){this.src='https://www.google.com/s2/favicons?domain=192.168.5.14&sz=64';} else if(this.src==='https://www.google.com/s2/favicons?domain=192.168.5.14&sz=64'){this.src='https://icons.duckduckgo.com/ip3/192.168.5.14.ico';} else if(this.src==='https://icons.duckduckgo.com/ip3/192.168.5.14.ico'){this.src='https://api.faviconkit.com/192.168.5.14/64';} else if(this.src==='https://api.faviconkit.com/192.168.5.14/64'){this.src='https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=192.168.5.14';} else {this.style.display='none';}">      <div class="my-link-content">        <div class="my-link-top">          <span class="my-link-title">下载链接</span>          <span class="my-link-subtitle">点击这里</span>        </div>        <div class="my-link-signal-row">          <span class="my-link-signal">            <i class="fas fa-spinner fa-spin"></i>          </span>        </div>      </div>    </a>]]>
    </content>
    <id>https://love.gzh-czy.cc.cd/posts/2faa635d.html</id>
    <link href="https://love.gzh-czy.cc.cd/posts/2faa635d.html"/>
    <published>2026-08-04T02:05:20.400Z</published>
    <summary>
      <![CDATA[<div class="tag link"><a class="link-card" title="糖果屋教程贴" href="https://akilar.top/posts/615e2dec/"><div class="left"><img src="https://imgb]]>
    </summary>
    <title>外挂标签4</title>
    <updated>2026-08-04T02:05:20.400Z</updated>
  </entry>
  <entry>
    <author>
      <name>GZH</name>
    </author>
    <category term="插件" scheme="https://love.gzh-czy.cc.cd/categories/%E6%8F%92%E4%BB%B6/"/>
    <category term="Hexo" scheme="https://love.gzh-czy.cc.cd/tags/Hexo/"/>
    <category term="Butterfly" scheme="https://love.gzh-czy.cc.cd/tags/Butterfly/"/>
    <category term="特效" scheme="https://love.gzh-czy.cc.cd/tags/%E7%89%B9%E6%95%88/"/>
    <category term="雪花" scheme="https://love.gzh-czy.cc.cd/tags/%E9%9B%AA%E8%8A%B1/"/>
    <category term="Canvas" scheme="https://love.gzh-czy.cc.cd/tags/Canvas/"/>
    <category term="美化" scheme="https://love.gzh-czy.cc.cd/tags/%E7%BE%8E%E5%8C%96/"/>
    <content>
      <![CDATA[<blockquote><p>在 Hexo Butterfly 主题中添加一个完全透明的 Canvas 下雪特效，雪花带有柔和光晕，能避开鼠标，且数量根据屏幕大小自适应。</p></blockquote><hr><h2 id="一、效果特点"><a href="#一、效果特点" class="headerlink" title="一、效果特点"></a>一、效果特点</h2><ul><li><strong>完全透明背景</strong>：不影响博客内容，仅显示雪花</li><li><strong>无拖尾</strong>：雪花独立飘落，没有残影</li><li><strong>自适应数量</strong>：根据屏幕面积自动调整雪花数量（手机 ≈ 45 个，桌面 ≈ 150 个）</li><li><strong>鼠标交互</strong>：雪花会避开以鼠标为圆心的圆形区域</li><li><strong>光晕效果</strong>：雪花带有柔和的外发光，视觉更立体</li><li><strong>纯色雪花</strong>：默认白色，可自定义颜色</li></ul><hr><h2 id="二、完整代码（snow-js）"><a href="#二、完整代码（snow-js）" class="headerlink" title="二、完整代码（snow.js）"></a>二、完整代码（<code>snow.js</code>）</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// snow.js - 透明背景无拖尾光晕雪花（自适应屏幕）</span></span><br><span class="line">(<span class="keyword">function</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// 创建画布（透明背景）</span></span><br><span class="line">    <span class="keyword">const</span> canvas = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;canvas&#x27;</span>);</span><br><span class="line">    canvas.<span class="property">id</span> = <span class="string">&#x27;snowCanvas&#x27;</span>;</span><br><span class="line">    canvas.<span class="property">style</span>.<span class="property">cssText</span> = <span class="string">&#x27;position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;&#x27;</span>;</span><br><span class="line">    <span class="variable language_">document</span>.<span class="property">body</span>.<span class="title function_">appendChild</span>(canvas);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">const</span> ctx = canvas.<span class="title function_">getContext</span>(<span class="string">&#x27;2d&#x27;</span>);</span><br><span class="line">    <span class="keyword">let</span> width, height;</span><br><span class="line">    <span class="keyword">let</span> mouseX = -<span class="number">9999</span>, mouseY = -<span class="number">9999</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// ----- 自适应配置 -----</span></span><br><span class="line">    <span class="comment">// 基准：1920x1080 桌面下雪花数量为 150</span></span><br><span class="line">    <span class="keyword">const</span> <span class="variable constant_">BASE_COUNT</span> = <span class="number">150</span>;</span><br><span class="line">    <span class="keyword">const</span> <span class="variable constant_">BASE_WIDTH</span> = <span class="number">1920</span>;</span><br><span class="line">    <span class="keyword">const</span> <span class="variable constant_">BASE_HEIGHT</span> = <span class="number">1080</span>;</span><br><span class="line">    <span class="keyword">const</span> <span class="variable constant_">BASE_AREA</span> = <span class="variable constant_">BASE_WIDTH</span> * <span class="variable constant_">BASE_HEIGHT</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 雪花配置（部分参数也可以根据屏幕微调）</span></span><br><span class="line">    <span class="keyword">const</span> <span class="variable constant_">CONFIG</span> = &#123;</span><br><span class="line">        <span class="attr">minSize</span>: <span class="number">3</span>,</span><br><span class="line">        <span class="attr">maxSize</span>: <span class="number">10</span>,</span><br><span class="line">        <span class="attr">speed</span>: <span class="number">0.5</span>,</span><br><span class="line">        <span class="attr">wind</span>: <span class="number">0.3</span>,</span><br><span class="line">        <span class="attr">color</span>: <span class="string">&#x27;rgba(255, 255, 255, 0.9)&#x27;</span>,</span><br><span class="line">        <span class="attr">glowColor</span>: <span class="string">&#x27;rgba(180, 210, 255, 0.3)&#x27;</span>,</span><br><span class="line">        <span class="attr">glowBlur</span>: <span class="number">15</span>,</span><br><span class="line">        <span class="attr">mouseRadius</span>: <span class="number">100</span>,</span><br><span class="line">    &#125;;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// ----- 根据屏幕面积计算雪花数量 -----</span></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">getSnowflakeCount</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="keyword">const</span> area = width * height;</span><br><span class="line">        <span class="keyword">let</span> count = <span class="title class_">Math</span>.<span class="title function_">round</span>((area / <span class="variable constant_">BASE_AREA</span>) * <span class="variable constant_">BASE_COUNT</span>);</span><br><span class="line">        <span class="keyword">return</span> <span class="title class_">Math</span>.<span class="title function_">min</span>(<span class="number">200</span>, <span class="title class_">Math</span>.<span class="title function_">max</span>(<span class="number">30</span>, count));</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">let</span> snowflakes = [];</span><br><span class="line"></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">resizeCanvas</span>(<span class="params"></span>) &#123;</span><br><span class="line">        width = <span class="variable language_">window</span>.<span class="property">innerWidth</span>;</span><br><span class="line">        height = <span class="variable language_">window</span>.<span class="property">innerHeight</span>;</span><br><span class="line">        canvas.<span class="property">width</span> = width;</span><br><span class="line">        canvas.<span class="property">height</span> = height;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">const</span> newCount = <span class="title function_">getSnowflakeCount</span>();</span><br><span class="line">        <span class="keyword">while</span> (snowflakes.<span class="property">length</span> &lt; newCount) &#123;</span><br><span class="line">            snowflakes.<span class="title function_">push</span>(<span class="title function_">createSnowflake</span>());</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (snowflakes.<span class="property">length</span> &gt; newCount) &#123;</span><br><span class="line">            <span class="keyword">const</span> idx = <span class="title class_">Math</span>.<span class="title function_">floor</span>(<span class="title class_">Math</span>.<span class="title function_">random</span>() * snowflakes.<span class="property">length</span>);</span><br><span class="line">            snowflakes.<span class="title function_">splice</span>(idx, <span class="number">1</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;resize&#x27;</span>, resizeCanvas);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 鼠标跟踪</span></span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;mousemove&#x27;</span>, <span class="function">(<span class="params">e</span>) =&gt;</span> &#123;</span><br><span class="line">        mouseX = e.<span class="property">clientX</span>;</span><br><span class="line">        mouseY = e.<span class="property">clientY</span>;</span><br><span class="line">    &#125;);</span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;mouseleave&#x27;</span>, <span class="function">() =&gt;</span> &#123;</span><br><span class="line">        mouseX = -<span class="number">9999</span>;</span><br><span class="line">        mouseY = -<span class="number">9999</span>;</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">createSnowflake</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> &#123;</span><br><span class="line">            <span class="attr">x</span>: <span class="title class_">Math</span>.<span class="title function_">random</span>() * width,</span><br><span class="line">            <span class="attr">y</span>: <span class="title class_">Math</span>.<span class="title function_">random</span>() * height - height,</span><br><span class="line">            <span class="attr">radius</span>: <span class="variable constant_">CONFIG</span>.<span class="property">minSize</span> + <span class="title class_">Math</span>.<span class="title function_">random</span>() * (<span class="variable constant_">CONFIG</span>.<span class="property">maxSize</span> - <span class="variable constant_">CONFIG</span>.<span class="property">minSize</span>),</span><br><span class="line">            <span class="attr">speed</span>: <span class="variable constant_">CONFIG</span>.<span class="property">speed</span> + <span class="title class_">Math</span>.<span class="title function_">random</span>() * <span class="number">0.6</span>,</span><br><span class="line">            <span class="attr">opacity</span>: <span class="number">0.5</span> + <span class="title class_">Math</span>.<span class="title function_">random</span>() * <span class="number">0.5</span>,</span><br><span class="line">            <span class="attr">phase</span>: <span class="title class_">Math</span>.<span class="title function_">random</span>() * <span class="title class_">Math</span>.<span class="property">PI</span> * <span class="number">2</span>,</span><br><span class="line">        &#125;;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="title function_">resizeCanvas</span>();</span><br><span class="line"></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">drawSnowflake</span>(<span class="params">s</span>) &#123;</span><br><span class="line">        <span class="comment">// 鼠标排斥</span></span><br><span class="line">        <span class="keyword">let</span> dx = <span class="number">0</span>, dy = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">const</span> distX = s.<span class="property">x</span> - mouseX;</span><br><span class="line">        <span class="keyword">const</span> distY = s.<span class="property">y</span> - mouseY;</span><br><span class="line">        <span class="keyword">const</span> dist = <span class="title class_">Math</span>.<span class="title function_">sqrt</span>(distX * distX + distY * distY);</span><br><span class="line">        <span class="keyword">if</span> (dist &lt; <span class="variable constant_">CONFIG</span>.<span class="property">mouseRadius</span> &amp;&amp; dist &gt; <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">const</span> angle = <span class="title class_">Math</span>.<span class="title function_">atan2</span>(distY, distX);</span><br><span class="line">            <span class="keyword">const</span> force = (<span class="variable constant_">CONFIG</span>.<span class="property">mouseRadius</span> - dist) / <span class="variable constant_">CONFIG</span>.<span class="property">mouseRadius</span> * <span class="number">8</span>;</span><br><span class="line">            dx = <span class="title class_">Math</span>.<span class="title function_">cos</span>(angle) * force;</span><br><span class="line">            dy = <span class="title class_">Math</span>.<span class="title function_">sin</span>(angle) * force;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 更新位置</span></span><br><span class="line">        s.<span class="property">x</span> += <span class="title class_">Math</span>.<span class="title function_">sin</span>(s.<span class="property">phase</span> + <span class="title class_">Date</span>.<span class="title function_">now</span>() * <span class="number">0.001</span>) * <span class="variable constant_">CONFIG</span>.<span class="property">wind</span> + dx * <span class="number">0.1</span>;</span><br><span class="line">        s.<span class="property">y</span> += s.<span class="property">speed</span> * <span class="number">0.8</span> + dy * <span class="number">0.1</span>;</span><br><span class="line">        s.<span class="property">phase</span> += <span class="number">0.01</span>;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (s.<span class="property">y</span> &gt; height + <span class="number">50</span>) &#123;</span><br><span class="line">            <span class="title class_">Object</span>.<span class="title function_">assign</span>(s, <span class="title function_">createSnowflake</span>());</span><br><span class="line">            s.<span class="property">y</span> = -<span class="number">20</span>;</span><br><span class="line">            s.<span class="property">x</span> = <span class="title class_">Math</span>.<span class="title function_">random</span>() * width;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="property">x</span> &lt; -<span class="number">50</span>) s.<span class="property">x</span> = width + <span class="number">50</span>;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="property">x</span> &gt; width + <span class="number">50</span>) s.<span class="property">x</span> = -<span class="number">50</span>;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 绘制（光晕 + 核心）</span></span><br><span class="line">        ctx.<span class="title function_">save</span>();</span><br><span class="line">        ctx.<span class="property">shadowColor</span> = <span class="variable constant_">CONFIG</span>.<span class="property">glowColor</span>;</span><br><span class="line">        ctx.<span class="property">shadowBlur</span> = <span class="variable constant_">CONFIG</span>.<span class="property">glowBlur</span> * (s.<span class="property">radius</span> / <span class="number">8</span>);</span><br><span class="line">        ctx.<span class="property">globalAlpha</span> = s.<span class="property">opacity</span> * <span class="number">0.85</span>;</span><br><span class="line">        ctx.<span class="property">fillStyle</span> = <span class="variable constant_">CONFIG</span>.<span class="property">color</span>;</span><br><span class="line">        ctx.<span class="title function_">beginPath</span>();</span><br><span class="line">        ctx.<span class="title function_">arc</span>(s.<span class="property">x</span>, s.<span class="property">y</span>, s.<span class="property">radius</span>, <span class="number">0</span>, <span class="title class_">Math</span>.<span class="property">PI</span> * <span class="number">2</span>);</span><br><span class="line">        ctx.<span class="title function_">fill</span>();</span><br><span class="line"></span><br><span class="line">        ctx.<span class="property">shadowBlur</span> = <span class="number">0</span>;</span><br><span class="line">        ctx.<span class="property">globalAlpha</span> = s.<span class="property">opacity</span> * <span class="number">0.4</span>;</span><br><span class="line">        ctx.<span class="property">fillStyle</span> = <span class="string">&#x27;rgba(255, 255, 255, 0.9)&#x27;</span>;</span><br><span class="line">        ctx.<span class="title function_">beginPath</span>();</span><br><span class="line">        ctx.<span class="title function_">arc</span>(s.<span class="property">x</span>, s.<span class="property">y</span>, s.<span class="property">radius</span> * <span class="number">0.3</span>, <span class="number">0</span>, <span class="title class_">Math</span>.<span class="property">PI</span> * <span class="number">2</span>);</span><br><span class="line">        ctx.<span class="title function_">fill</span>();</span><br><span class="line">        ctx.<span class="title function_">restore</span>();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">animate</span>(<span class="params"></span>) &#123;</span><br><span class="line">        ctx.<span class="title function_">clearRect</span>(<span class="number">0</span>, <span class="number">0</span>, width, height);</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">const</span> s <span class="keyword">of</span> snowflakes) &#123;</span><br><span class="line">            <span class="title function_">drawSnowflake</span>(s);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="title function_">requestAnimationFrame</span>(animate);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="title function_">animate</span>();</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure><h2 id="三、集成到-Hexo-Butterfly-主题"><a href="#三、集成到-Hexo-Butterfly-主题" class="headerlink" title="三、集成到 Hexo Butterfly 主题"></a>三、集成到 Hexo Butterfly 主题</h2><p>保存文件：将上述代码保存为 /source/js/snow.js。</p><p>注入配置：在 _config.butterfly.yml 的 inject.bottom 中添加：<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">inject:</span></span><br><span class="line">  <span class="attr">bottom:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/js/snow.js&quot;&gt;&lt;/script&gt;</span></span><br></pre></td></tr></table></figure></p>]]>
    </content>
    <id>https://love.gzh-czy.cc.cd/posts/1.html</id>
    <link href="https://love.gzh-czy.cc.cd/posts/1.html"/>
    <published>2026-07-24T16:00:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>在 Hexo Butterfly 主题中添加一个完全透明的 Canvas 下雪特效，雪花带有柔和光晕，能避开鼠标，且数量根据屏幕大小自适应。</p>
</blockquote>
<hr>
<h2 id="一、效果特点"><a href="#一、效果]]>
    </summary>
    <title>Butterfly 下雪特效（透明背景 + 光晕 + 自适应）</title>
    <updated>2026-08-04T02:05:13.661Z</updated>
  </entry>
  <entry>
    <author>
      <name>GZH</name>
    </author>
    <category term="爱人" scheme="https://love.gzh-czy.cc.cd/categories/%E7%88%B1%E4%BA%BA/"/>
    <category term="日记" scheme="https://love.gzh-czy.cc.cd/tags/%E6%97%A5%E8%AE%B0/"/>
    <category term="测试" scheme="https://love.gzh-czy.cc.cd/tags/%E6%B5%8B%E8%AF%95/"/>
    <content>
      <![CDATA[<h1 id="写给软阮的信"><a href="#写给软阮的信" class="headerlink" title="写给软阮的信"></a>写给软阮的信</h1><p>亲爱的软阮：</p><p>见字如面。</p><p>提笔时窗外天色正好，风轻轻吹过窗帘，像你指尖的温度。想说的话太多，落到纸上，反倒不知从何说起。</p><p>认识你之后，日子好像变得柔软了许多。那些细碎的、不值一提的小事，因为有你分享，都成了值得记住的瞬间。你笑起来的样子，总让我觉得这个世界其实很温柔。</p><p>有时候我在想，一个人能遇到另一个让自己心甘情愿变得更好的人，是多幸运的事。你就是那个人。</p><p>谢谢你出现在我的生命里。谢谢你包容我的笨拙和固执，也谢谢你让我看到自己身上那些被忽略的美好。</p><p>往后的日子，我想和你一起走。春日看花，夏夜听雨，秋天捡落叶，冬天窝在沙发上喝热茶。不需要多轰轰烈烈，平平淡淡的陪伴，就是我想要的未来。</p><p>等你忙完，我们一起吃顿饭吧。我做菜，你洗碗。</p><p>想你了。</p><p>此致<br>爱你</p><hr><p><em>写于一个想你的午后</em><br>Simplicity is the ultimate form of sophistication.</p>]]>
    </content>
    <id>https://love.gzh-czy.cc.cd/posts/b29fc968.html</id>
    <link href="https://love.gzh-czy.cc.cd/posts/b29fc968.html"/>
    <published>2026-07-21T11:46:06.000Z</published>
    <summary>想说的话</summary>
    <title>写给软阮的信</title>
    <updated>2026-07-21T11:46:06.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>GZH</name>
    </author>
    <category term="知识库" scheme="https://love.gzh-czy.cc.cd/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="Docker" scheme="https://love.gzh-czy.cc.cd/tags/Docker/"/>
    <category term="Ubuntu" scheme="https://love.gzh-czy.cc.cd/tags/Ubuntu/"/>
    <category term="Nextcloud" scheme="https://love.gzh-czy.cc.cd/tags/Nextcloud/"/>
    <category term="容器" scheme="https://love.gzh-czy.cc.cd/tags/%E5%AE%B9%E5%99%A8/"/>
    <category term="知识库" scheme="https://love.gzh-czy.cc.cd/tags/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <content>
      <![CDATA[<h2 id="一、安装-Docker-Ubuntu-22-04"><a href="#一、安装-Docker-Ubuntu-22-04" class="headerlink" title="一、安装 Docker (Ubuntu 22.04)"></a>一、安装 Docker (Ubuntu 22.04)</h2><h3 id="1-安装依赖"><a href="#1-安装依赖" class="headerlink" title="1. 安装依赖"></a>1. 安装依赖</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt update</span><br><span class="line">sudo apt install ca-certificates curl -y</span><br></pre></td></tr></table></figure><h3 id="2-添加-Docker-软件源（清华镜像）"><a href="#2-添加-Docker-软件源（清华镜像）" class="headerlink" title="2. 添加 Docker 软件源（清华镜像）"></a>2. 添加 Docker 软件源（清华镜像）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建密钥存储目录</span></span><br><span class="line">sudo install -m 0755 -d /etc/apt/keyrings</span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载 Docker GPG 密钥</span></span><br><span class="line">sudo curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc</span><br><span class="line">sudo <span class="built_in">chmod</span> a+r /etc/apt/keyrings/docker.asc</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加 Docker 源</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;deb [arch=<span class="subst">$(dpkg --print-architecture)</span> signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu <span class="subst">$(. /etc/os-release &amp;&amp; echo <span class="string">&quot;<span class="variable">$VERSION_CODENAME</span>&quot;</span>)</span> stable&quot;</span> | sudo <span class="built_in">tee</span> /etc/apt/sources.list.d/docker.list &gt; /dev/null</span><br></pre></td></tr></table></figure><h3 id="3-安装-Docker"><a href="#3-安装-Docker" class="headerlink" title="3. 安装 Docker"></a>3. 安装 Docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 更新软件源</span></span><br><span class="line">sudo apt update</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装 Docker</span></span><br><span class="line">sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y</span><br></pre></td></tr></table></figure><h3 id="4-启动并配置"><a href="#4-启动并配置" class="headerlink" title="4. 启动并配置"></a>4. 启动并配置</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 启动 Docker 服务</span></span><br><span class="line">sudo systemctl start docker</span><br><span class="line">sudo systemctl <span class="built_in">enable</span> docker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 将当前用户加入 docker 组（免 sudo 运行）</span></span><br><span class="line">sudo usermod -aG docker <span class="variable">$USER</span></span><br><span class="line">newgrp docker   <span class="comment"># 立即生效</span></span><br></pre></td></tr></table></figure><h3 id="5-配置镜像加速器（可选，但强烈推荐）"><a href="#5-配置镜像加速器（可选，但强烈推荐）" class="headerlink" title="5. 配置镜像加速器（可选，但强烈推荐）"></a>5. 配置镜像加速器（可选，但强烈推荐）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建配置文件</span></span><br><span class="line">sudo <span class="built_in">mkdir</span> -p /etc/docker</span><br><span class="line">sudo <span class="built_in">tee</span> /etc/docker/daemon.json &lt;&lt;<span class="string">EOF</span></span><br><span class="line"><span class="string">&#123;</span></span><br><span class="line"><span class="string">  &quot;registry-mirrors&quot;: [</span></span><br><span class="line"><span class="string">    &quot;https://docker.mirrors.tuna.tsinghua.edu.cn&quot;,</span></span><br><span class="line"><span class="string">    &quot;https://docker.m.daocloud.io&quot;</span></span><br><span class="line"><span class="string">  ]</span></span><br><span class="line"><span class="string">&#125;</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 Docker</span></span><br><span class="line">sudo systemctl daemon-reload</span><br><span class="line">sudo systemctl restart docker</span><br></pre></td></tr></table></figure><h3 id="6-验证安装"><a href="#6-验证安装" class="headerlink" title="6. 验证安装"></a>6. 验证安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">docker --version</span><br><span class="line">docker compose version</span><br><span class="line">docker run hello-world</span><br></pre></td></tr></table></figure><p>看到 <code>Hello from Docker!</code> 即表示安装成功。</p><hr><h2 id="二、安装-Docker-可视化管理界面-Portainer"><a href="#二、安装-Docker-可视化管理界面-Portainer" class="headerlink" title="二、安装 Docker 可视化管理界面 (Portainer)"></a>二、安装 Docker 可视化管理界面 (Portainer)</h2><h3 id="1-存储卷（Volume）操作"><a href="#1-存储卷（Volume）操作" class="headerlink" title="1. 存储卷（Volume）操作"></a>1. 存储卷（Volume）操作</h3><p>存储卷是 Docker 用来保存数据的“硬盘”，即使更新或重建容器，数据也不会丢失。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看所有数据卷</span></span><br><span class="line">docker volume <span class="built_in">ls</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个名为 my_data 的卷</span></span><br><span class="line">docker volume create my_data</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看某个卷的详细信息（如存储路径）</span></span><br><span class="line">docker volume inspect my_data</span><br></pre></td></tr></table></figure><h3 id="2-安装-Portainer"><a href="#2-安装-Portainer" class="headerlink" title="2. 安装 Portainer"></a>2. 安装 Portainer</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce</span><br></pre></td></tr></table></figure><ul><li>访问地址：<code>http://192.168.5.14:9000</code></li><li>通过浏览器访问使用图形化管理工具<h3 id="3-注册-Portainer"><a href="#3-注册-Portainer" class="headerlink" title="3. 注册 Portainer"></a>3. 注册 Portainer</h3></li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启容器生成新令牌</span></span><br><span class="line">sudo docker restart portainer</span><br><span class="line"></span><br><span class="line"><span class="comment"># 获取最新令牌</span></span><br><span class="line">sudo docker logs portainer 2&gt;&amp;1 | grep <span class="string">&quot;setup_token=&quot;</span> | <span class="built_in">tail</span> -1</span><br></pre></td></tr></table></figure><p>用新令牌在网页上继续初始化即可。</p><hr><h2 id="三、部署-Nextcloud-个人网盘"><a href="#三、部署-Nextcloud-个人网盘" class="headerlink" title="三、部署 Nextcloud 个人网盘"></a>三、部署 Nextcloud 个人网盘</h2><h3 id="1-在-Portainer-中创建容器"><a href="#1-在-Portainer-中创建容器" class="headerlink" title="1. 在 Portainer 中创建容器"></a>1. 在 Portainer 中创建容器</h3><pre><code>姓名图片输入一样的即可</code></pre><ul><li><strong>端口映射</strong>：主机 <code>8080</code> → 容器 <code>80</code></li><li><strong>数据持久化</strong>：<code>/var/www/html</code> → <code>/home/guzihan/Downloads/NextCloud</code></li><li><strong>重启策略</strong>：选择 <code>always</code><h3 id="2-更新-DNS-配置"><a href="#2-更新-DNS-配置" class="headerlink" title="2. 更新 DNS 配置"></a>2. 更新 DNS 配置</h3></li></ul><p>访问 <code>ip:9000</code>，修改 <code>config/config.php</code>，添加完成后重启即可。</p><hr><h2 id="四、Nextcloud-文件同步管理"><a href="#四、Nextcloud-文件同步管理" class="headerlink" title="四、Nextcloud 文件同步管理"></a>四、Nextcloud 文件同步管理</h2><h3 id="1-手动执行文件扫描"><a href="#1-手动执行文件扫描" class="headerlink" title="1. 手动执行文件扫描"></a>1. 手动执行文件扫描</h3><p>如果新文件未在网页端显示，需要进入容器执行扫描。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 进入 Nextcloud 容器</span></span><br><span class="line">sudo docker <span class="built_in">exec</span> -it nextcloud bash</span><br><span class="line"><span class="comment"># 如果容器名字不同，先用 docker ps 查一下</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行文件扫描命令,同步新文件到数据库</span></span><br><span class="line">php occ files:scan --all</span><br><span class="line"></span><br><span class="line"><span class="comment"># 退出容器</span></span><br><span class="line"><span class="built_in">exit</span></span><br></pre></td></tr></table></figure><h3 id="2-添加自动扫描任务（一劳永逸）"><a href="#2-添加自动扫描任务（一劳永逸）" class="headerlink" title="2. 添加自动扫描任务（一劳永逸）"></a>2. 添加自动扫描任务（一劳永逸）</h3><p>如果不想每次手动扫描，可以设置定时任务让 Nextcloud 自动扫描。<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 进入容器</span></span><br><span class="line">sudo docker <span class="built_in">exec</span> -it nextcloud bash</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装 cron 并添加定时任务（每5分钟扫描一次）</span></span><br><span class="line">apt-get update &amp;&amp; apt-get install -y cron</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;*/5 * * * * php /var/www/html/occ files:scan --all&quot;</span> | crontab -</span><br><span class="line">service cron start</span><br></pre></td></tr></table></figure><br>这样设置后，系统会每 5 分钟自动扫描一次，新文件会在 5 分钟内同步到网页端。</p><hr><h2 id="五、权限修复"><a href="#五、权限修复" class="headerlink" title="五、权限修复"></a>五、权限修复</h2><h3 id="Nextcloud-无法删除文件（宿主机直接复制文件）"><a href="#Nextcloud-无法删除文件（宿主机直接复制文件）" class="headerlink" title="Nextcloud 无法删除文件（宿主机直接复制文件）"></a>Nextcloud 无法删除文件（宿主机直接复制文件）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 进入容器检查文件所有权</span></span><br><span class="line">sudo docker <span class="built_in">exec</span> -it nextcloud-app-1 bash</span><br><span class="line"><span class="built_in">ls</span> -la /var/www/html/data/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 确保用户和组是 www-data，如果不对则修复</span></span><br><span class="line"><span class="built_in">chown</span> -R www-data:www-data /var/www/html/data</span><br><span class="line"><span class="built_in">exit</span></span><br></pre></td></tr></table></figure><hr><h2 id="六、常用命令速查"><a href="#六、常用命令速查" class="headerlink" title="六、常用命令速查"></a>六、常用命令速查</h2><div class="table-container"><table><thead><tr><th style="text-align:left">用途</th><th style="text-align:left">命令</th></tr></thead><tbody><tr><td style="text-align:left">查看容器状态</td><td style="text-align:left"><code>docker ps</code></td></tr><tr><td style="text-align:left">进入容器终端</td><td style="text-align:left"><code>sudo docker exec -it &lt;容器名&gt; bash</code></td></tr><tr><td style="text-align:left">查看容器日志</td><td style="text-align:left"><code>docker logs &lt;容器名&gt;</code></td></tr><tr><td style="text-align:left">重启容器</td><td style="text-align:left"><code>docker restart &lt;容器名&gt;</code></td></tr><tr><td style="text-align:left">查看所有卷</td><td style="text-align:left"><code>docker volume ls</code></td></tr><tr><td style="text-align:left">查看卷详情</td><td style="text-align:left"><code>docker volume inspect &lt;卷名&gt;</code></td></tr><tr><td style="text-align:left">停止容器</td><td style="text-align:left"><code>docker stop &lt;容器名&gt;</code></td></tr><tr><td style="text-align:left">删除容器</td><td style="text-align:left"><code>docker rm &lt;容器名&gt;</code></td></tr><tr><td style="text-align:left">删除卷</td><td style="text-align:left"><code>docker volume rm &lt;卷名&gt;</code></td></tr></tbody></table></div>]]>
    </content>
    <id>https://love.gzh-czy.cc.cd/posts/0.html</id>
    <link href="https://love.gzh-czy.cc.cd/posts/0.html"/>
    <published>2026-07-15T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="一、安装-Docker-Ubuntu-22-04"><a href="#一、安装-Docker-Ubuntu-22-04" class="headerlink" title="一、安装 Docker (Ubuntu 22.04)"></a>一、安装 Docker]]>
    </summary>
    <title>Docker 与 Nextcloud 部署完整指南(个人网盘)</title>
    <updated>2026-08-04T02:05:11.254Z</updated>
  </entry>
  <entry>
    <author>
      <name>GZH</name>
    </author>
    <category term="生活" scheme="https://love.gzh-czy.cc.cd/tags/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt"     data-hbe-format="4"     data-wpm="Oh, 密码错了，检查一下好吗～"     data-whm="Oh, 密码错了，检查一下好吗～"     data-salt="aa1f8129e00b6db3134a01cc3c473c6aa3a12c0a2dfb772625cc0463d1b97cac"     data-nonce="44635a3d98eeb3dc2e856730"     data-kdf-iterations="600000"     data-auto-save="false">  <script id="hbeData" type="hbeData">    5b4c8b7e79802a71774c1740e6c10202a392c103c22991cb89054919e24081a7f180e63d2443b36c5f5ddf5604caf2b6e21cf6c1d06bbccc878c2b6cbc122adfad1f99d0a0ce826129a3d1371d98325365ebf0db5b3a4778e3b64ef9eedcc717f2e0a095872545f109ad3cfa40011e6acd3608f454d1203eb3fb5bd2  </script>  <div class="hbe hbe-content">    <form id="hbeForm" class="hbe hbe-form" onsubmit="return false">      <div class="hbe hbe-input hbe-input-shrink">      <input class="hbe hbe-input-field hbe-input-field-shrink" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-shrink" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-shrink">Hey, 这篇文章被加密了，请输入密码！</span>      </label>    </div>      <button class="hbe hbe-button" type="submit">解密</button>      <div class="hbe hbe-error" role="alert" aria-live="polite"></div>    </form>  </div></div><script data-pjax src="/lib/hbe.9e70f1e1d2.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]>
    </content>
    <id>https://love.gzh-czy.cc.cd/posts/60cbaead.html</id>
    <link href="https://love.gzh-czy.cc.cd/posts/60cbaead.html"/>
    <published>2025-06-19T13:55:57.000Z</published>
    <summary>有东西被加密了, 请输入密码查看.</summary>
    <title>阮宝宝专属</title>
    <updated>2026-08-04T02:05:17.330Z</updated>
  </entry>
  <entry>
    <author>
      <name>GZH</name>
    </author>
    <category term="生活" scheme="https://love.gzh-czy.cc.cd/tags/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<div class="note primary flat"><p>晨雾未散时，玻璃瓶里的桂花蜜已凝成琥珀。她习惯性将温水注入瓷杯，金属壶口与杯沿相碰的清响惊醒了看报人。老花镜片映着秋阳，在皱纹里折出细碎的光。</p><p>雨突至的午后，墨绿伞柄上缠绕的医用胶布洇着水痕。她摸到衣袋里发潮的姜糖，想起出门时玄关处重叠的鞋刷声与挂钟滴答。</p><p>烧得混沌的深夜，额间温毛巾像永不融化的雪。朦胧间听见冰袋碰撞声，如同二十年前月台上绿皮火车的汽笛——那时他攥着连夜排队买的站票，军大衣口袋里藏着捂化的桂花糕。</p><p>此刻晨光漫过床头药盒，她忽然看清那些散落在岁月里的碎片：总在充电宝满格的手机，永远提前十分钟的早餐，深夜里留着缝的防盗链。原来爱从未隐身，只是化作氧气般的寻常。</p><p>楼下的桂花又开了，甜香漫过二十年晨昏，在相扣的指缝里酿成永恒的金色。</p></div>]]>
    </content>
    <id>https://love.gzh-czy.cc.cd/posts/eec2a1c9.html</id>
    <link href="https://love.gzh-czy.cc.cd/posts/eec2a1c9.html"/>
    <published>2025-04-15T04:16:57.000Z</published>
    <summary>
      <![CDATA[<div class="note primary flat"><p>晨雾未散时，玻璃瓶里的桂花蜜已凝成琥珀。她习惯性将温水注入瓷杯，金属壶口与杯沿相碰的清响惊醒了看报人。老花镜片映着秋阳，在皱纹里折出细碎的光。</p>
<p>雨突至的午后，墨绿伞柄上缠绕的医用胶布洇着水痕。她摸到]]>
    </summary>
    <title>有时候我们看不见爱，只是因为一直在爱里</title>
    <updated>2026-08-04T02:05:29.127Z</updated>
  </entry>
  <entry>
    <author>
      <name>GZH</name>
    </author>
    <category term="生活" scheme="https://love.gzh-czy.cc.cd/tags/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<div class="note primary flat"><p>一生时间很短<br>短到不过是两颗心之间的距离<br>一生的时间也很长<br>不如我们试着走走看</p></div>]]>
    </content>
    <id>https://love.gzh-czy.cc.cd/posts/65847e45.html</id>
    <link href="https://love.gzh-czy.cc.cd/posts/65847e45.html"/>
    <published>2025-04-12T10:01:12.000Z</published>
    <summary>
      <![CDATA[<div class="note primary flat"><p>一生时间很短<br>短到不过是两颗心之间的距离<br>一生的时间也很长<br>不如我们试着走走看</p>
</div>]]>
    </summary>
    <title>阳光不噪，微风正好</title>
    <updated>2026-08-04T02:05:25.039Z</updated>
  </entry>
</feed>
