<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>YJ&#39;s Blog</title>
  
  
  <link href="https://liuyuanjun.com/atom.xml" rel="self"/>
  
  <link href="https://liuyuanjun.com/"/>
  <updated>2023-10-31T02:51:57.000Z</updated>
  <id>https://liuyuanjun.com/</id>
  
  <author>
    <name>YJ Liu</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>QNAP威联通网络莫名断开备忘</title>
    <link href="https://liuyuanjun.com/qnap-network-memo/"/>
    <id>https://liuyuanjun.com/qnap-network-memo/</id>
    <published>2023-10-31T02:51:57.000Z</published>
    <updated>2023-10-31T02:51:57.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>突然发现通过cf的tunnel访问的威联通nas无法访问了，通过ssh登录nas发现网络断开，ping不通外网，但是内网可以ping通。</p><h2 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h2><p>上网随便查了下，手动添加了网关，问题解决。<br>不知道重启后会不会有问题，暂时记录下。</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><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></pre></td><td class="code"><pre><span class="line">cloudflared  | 2023-10-31T02:27:43Z INF Retrying connection <span class="keyword">in</span> up to 1m4s connIndex=0 event=0 ip=198.41.192.67</span><br><span class="line"><span class="comment"># ping 198.41.200.63</span></span><br><span class="line">PING 198.41.200.63 (198.41.200.63): 56 data bytes</span><br><span class="line">ping: sendto: Network is unreachable</span><br><span class="line"><span class="comment"># ping baidu.com</span></span><br><span class="line">PING baidu.com (39.156.66.10): 56 data bytes</span><br><span class="line">ping: sendto: Network is unreachable</span><br><span class="line"><span class="comment"># ping 192.168.2.1</span></span><br><span class="line">PING 192.168.2.1 (192.168.2.1): 56 data bytes</span><br><span class="line">64 bytes from 192.168.2.1: <span class="built_in">seq</span>=0 ttl=64 time=0.247 ms</span><br><span class="line">64 bytes from 192.168.2.1: <span class="built_in">seq</span>=1 ttl=64 time=0.288 ms</span><br><span class="line"><span class="comment"># route</span></span><br><span class="line">Kernel IP routing table</span><br><span class="line">Destination     Gateway         Genmask         Flags Metric Ref    Use Iface</span><br><span class="line">10.0.3.0        *               255.255.255.0   U     0      0        0 lxcbr0</span><br><span class="line">10.0.5.0        *               255.255.255.0   U     0      0        0 docker0</span><br><span class="line">10.0.7.0        *               255.255.255.0   U     0      0        0 lxdbr0</span><br><span class="line">127.0.0.0       *               255.0.0.0       U     0      0        0 lo</span><br><span class="line">172.29.0.0      *               255.255.252.0   U     0      0        0 br-24716c1a29aa</span><br><span class="line">172.29.4.0      *               255.255.252.0   U     0      0        0 br-c289739b34e0</span><br><span class="line">172.29.8.0      *               255.255.252.0   U     0      0        0 br-3366894659cb</span><br><span class="line">172.29.12.0     *               255.255.252.0   U     0      0        0 br-8ead73783fd8</span><br><span class="line">172.29.16.0     *               255.255.252.0   U     0      0        0 br-98fb6438c86a</span><br><span class="line">172.29.20.0     *               255.255.252.0   U     0      0        0 br-643339fca491</span><br><span class="line">172.29.24.0     *               255.255.252.0   U     0      0        0 br-f4308d77c332</span><br><span class="line">172.29.28.0     *               255.255.252.0   U     0      0        0 br-c4202cae4285</span><br><span class="line">172.29.32.0     *               255.255.252.0   U     0      0        0 br-7926f60bf5c4</span><br><span class="line">172.29.68.0     *               255.255.252.0   U     0      0        0 br-6afa60eff756</span><br><span class="line">172.30.0.0      *               255.255.252.0   U     0      0        0 br-ba18fe12dc39</span><br><span class="line">192.168.2.0     *               255.255.255.0   U     0      0        0 br0</span><br><span class="line"><span class="comment"># route add default gw 192.168.2.1</span></span><br><span class="line"><span class="comment"># route</span></span><br><span class="line">Kernel IP routing table</span><br><span class="line">Destination     Gateway         Genmask         Flags Metric Ref    Use Iface</span><br><span class="line">default         RT-AC86U        0.0.0.0         UG    0      0        0 br0</span><br><span class="line">10.0.3.0        *               255.255.255.0   U     0      0        0 lxcbr0</span><br><span class="line">10.0.5.0        *               255.255.255.0   U     0      0        0 docker0</span><br><span class="line">10.0.7.0        *               255.255.255.0   U     0      0        0 lxdbr0</span><br><span class="line">127.0.0.0       *               255.0.0.0       U     0      0        0 lo</span><br><span class="line">172.29.0.0      *               255.255.252.0   U     0      0        0 br-24716c1a29aa</span><br><span class="line">172.29.4.0      *               255.255.252.0   U     0      0        0 br-c289739b34e0</span><br><span class="line">172.29.8.0      *               255.255.252.0   U     0      0        0 br-3366894659cb</span><br><span class="line">172.29.12.0     *               255.255.252.0   U     0      0        0 br-8ead73783fd8</span><br><span class="line">172.29.16.0     *               255.255.252.0   U     0      0        0 br-98fb6438c86a</span><br><span class="line">172.29.20.0     *               255.255.252.0   U     0      0        0 br-643339fca491</span><br><span class="line">172.29.24.0     *               255.255.252.0   U     0      0        0 br-f4308d77c332</span><br><span class="line">172.29.28.0     *               255.255.252.0   U     0      0        0 br-c4202cae4285</span><br><span class="line">172.29.32.0     *               255.255.252.0   U     0      0        0 br-7926f60bf5c4</span><br><span class="line">172.29.68.0     *               255.255.252.0   U     0      0        0 br-6afa60eff756</span><br><span class="line">172.30.0.0      *               255.255.252.0   U     0      0        0 br-ba18fe12dc39</span><br><span class="line">192.168.2.0     *               255.255.255.0   U     0      0        0 br0</span><br><span class="line"><span class="comment"># ping baidu.com</span></span><br><span class="line">PING baidu.com (39.156.66.10): 56 data bytes</span><br><span class="line">64 bytes from 39.156.66.10: <span class="built_in">seq</span>=0 ttl=52 time=6.765 ms</span><br><span class="line">64 bytes from 39.156.66.10: <span class="built_in">seq</span>=1 ttl=52 time=6.822 ms</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;问题描述&quot;&gt;&lt;a href=&quot;#问题描述&quot; class=&quot;headerlink&quot; title=&quot;问题描述&quot;&gt;&lt;/a&gt;问题描述&lt;/h2&gt;&lt;p&gt;突然发现通过cf的tunnel访问的威联通nas无法访问了，通过ssh登录nas发现网络断开，ping不通外网，但是内网可以</summary>
      
    
    
    
    
    <category term="QNAP" scheme="https://liuyuanjun.com/tags/QNAP/"/>
    
    <category term="威联通" scheme="https://liuyuanjun.com/tags/%E5%A8%81%E8%81%94%E9%80%9A/"/>
    
    <category term="网络" scheme="https://liuyuanjun.com/tags/%E7%BD%91%E7%BB%9C/"/>
    
  </entry>
  
  <entry>
    <title>Cloudflare的WARP使用总结备忘</title>
    <link href="https://liuyuanjun.com/cloudflare-warp/"/>
    <id>https://liuyuanjun.com/cloudflare-warp/</id>
    <published>2023-04-26T05:26:21.000Z</published>
    <updated>2023-04-26T05:28:56.000Z</updated>
    
    <content type="html"><![CDATA[<p><a href="https://1.1.1.1/">Cloudflare WARP</a> 可以做什么就不赘述了，这里记录下使用过程中的一些问题。</p><h3 id="1-流量的获取"><a href="#1-流量的获取" class="headerlink" title="1. 流量的获取"></a>1. 流量的获取</h3><p>流量的获取有3种方法</p><ol><li>通过这个 <a href="https://t.me/generatewarpplusbot">TG机器人</a> 获取，按照这个机器人的提示操作即可，拿到Key后到WARP里换上，有24PB流量，几乎等于无限了。</li><li>使用 <a href="https://one.dash.cloudflare.com/">Zero Trust</a>， 开通Zero Trust，免费方案就可以，设置好团队域名，进入 My Team 设置邮箱后缀，然后在WARP里面登录账号即可。<br>一个团队可以免费50个成员，流量无限。<br>附：团队域名修改 <code>/settings/general</code>; 邮箱后缀修改 <code>/settings/devices/edit</code>;</li><li>用分享的方式来获得，这个量少且费劲。</li></ol><h3 id="2-客户端的使用"><a href="#2-客户端的使用" class="headerlink" title="2. 客户端的使用"></a>2. 客户端的使用</h3><p>WARP有安卓、IOS、Windows、MacOS、Linux、等客户端，目前试过 MacOS、IOS、安卓，前两者非常简单，直接设置使用即可，安卓麻烦点。</p><h4 id="安卓客户端遇到的问题"><a href="#安卓客户端遇到的问题" class="headerlink" title="安卓客户端遇到的问题"></a>安卓客户端遇到的问题</h4><ol><li>报错后无法连接<br>猜测是由于无法拉取配置信息导致的，网上看到解决方法是扶墙，首次打开时将WIFI的代理设置为电脑上的代理，然后再打开WARP，大家可以试下，我试过不行，虽然没再报错闪退，但一直卡在获取信息。<br>最终是改为使用 Zero Trust 的方式，然后就可以正常使用了。</li><li>无法使用YouTube，这个是WARP本身的限制，安卓版可以排除应用，YouTube属于软件固定写死被排除的，所以无法使用。<br>大家可以自行尝试使用三方客户端绕过限制。<br>这个问题IOS上没有，应该是因为IOS上的网络安全策略更高无法实现，反而少了这个限制。</li></ol><p>就这些。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;a href=&quot;https://1.1.1.1/&quot;&gt;Cloudflare WARP&lt;/a&gt; 可以做什么就不赘述了，这里记录下使用过程中的一些问题。&lt;/p&gt;
&lt;h3 id=&quot;1-流量的获取&quot;&gt;&lt;a href=&quot;#1-流量的获取&quot; class=&quot;headerlink&quot; tit</summary>
      
    
    
    
    
    <category term="cloudflare" scheme="https://liuyuanjun.com/tags/cloudflare/"/>
    
    <category term="WARP" scheme="https://liuyuanjun.com/tags/WARP/"/>
    
  </entry>
  
  <entry>
    <title>YII2使用备忘</title>
    <link href="https://liuyuanjun.com/yii2-memo/"/>
    <id>https://liuyuanjun.com/yii2-memo/</id>
    <published>2023-03-17T04:03:10.000Z</published>
    <updated>2023-03-17T04:03:35.000Z</updated>
    
    <content type="html"><![CDATA[<h3 id="Yii2-踩坑记录"><a href="#Yii2-踩坑记录" class="headerlink" title="Yii2 踩坑记录"></a>Yii2 踩坑记录</h3><h4 id="问题：Yii2-Model中的-findOne-和-findAll方法，当传入条件类似于-39-AND-39-39-id-39-gt-1-39-gt-39-39-num-39-3-这样时，会导致结果与预期不符，且不会报错"><a href="#问题：Yii2-Model中的-findOne-和-findAll方法，当传入条件类似于-39-AND-39-39-id-39-gt-1-39-gt-39-39-num-39-3-这样时，会导致结果与预期不符，且不会报错" class="headerlink" title="问题：Yii2 Model中的 findOne 和 findAll方法，当传入条件类似于 [&#39;AND&#39;, [&#39;id&#39; =&gt; 1], [&#39;&gt;&#39;, &#39;num&#39;, 3]] 这样时，会导致结果与预期不符，且不会报错"></a>问题：Yii2 Model中的 <code>findOne</code> 和 <code>findAll</code>方法，当传入条件类似于 <code>[&#39;AND&#39;, [&#39;id&#39; =&gt; 1], [&#39;&gt;&#39;, &#39;num&#39;, 3]]</code> 这样时，会导致结果与预期不符，且不会报错</h4><p>查找原因，这两个方法的 <code>$condition</code> 参数不可以与 <code>where</code> 方法的 <code>$condition</code> 视为等同，因为中间做了一层处理，代码如下：</p><figure class="highlight php"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (!<span class="title class_">ArrayHelper</span>::<span class="title function_ invoke__">isAssociative</span>(<span class="variable">$condition</span>) &amp;&amp; !<span class="variable">$condition</span> <span class="keyword">instanceof</span> ExpressionInterface) &#123;</span><br><span class="line">    <span class="comment">// query by primary key</span></span><br><span class="line">    <span class="variable">$primaryKey</span> = <span class="built_in">static</span>::<span class="title function_ invoke__">primaryKey</span>();</span><br><span class="line">    <span class="keyword">if</span> (<span class="keyword">isset</span>(<span class="variable">$primaryKey</span>[<span class="number">0</span>])) &#123;</span><br><span class="line">        <span class="comment">// if condition is scalar, search for a single primary key, if it is array, search for multiple primary key values</span></span><br><span class="line">        <span class="variable">$condition</span> = [<span class="variable">$primaryKey</span>[<span class="number">0</span>] =&gt; <span class="title function_ invoke__">is_array</span>(<span class="variable">$condition</span>) ? <span class="title function_ invoke__">array_values</span>(<span class="variable">$condition</span>) : <span class="variable">$condition</span>];</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">InvalidConfigException</span>(<span class="string">&#x27;&quot;&#x27;</span> . <span class="title function_ invoke__">get_called_class</span>() . <span class="string">&#x27;&quot; must have a primary key.&#x27;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>其中 <code>ArrayHelper::isAssociative($condition)</code> 这句就是判断 <code>$condition</code> 是否是关联数组(associative array，相当于其它语言中的Map)，如果不是关联数组，会再做处理，问题就出在这里。<br>由于条件中的 <code>AND</code> 是没有String Key的，<code>ArrayHelper::isAssociative</code> 判断为 <code>false</code>，所以会把条件处理成 <code>[&#39;id&#39; =&gt; [&#39;AND&#39;, [&#39;id&#39; =&gt; 1], [&#39;&gt;&#39;, &#39;num&#39;, 3]]]</code> ，最终导致结果与预期不符。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;Yii2-踩坑记录&quot;&gt;&lt;a href=&quot;#Yii2-踩坑记录&quot; class=&quot;headerlink&quot; title=&quot;Yii2 踩坑记录&quot;&gt;&lt;/a&gt;Yii2 踩坑记录&lt;/h3&gt;&lt;h4 id=&quot;问题：Yii2-Model中的-findOne-和-findAll方法，当</summary>
      
    
    
    
    
    <category term="Yii2" scheme="https://liuyuanjun.com/tags/Yii2/"/>
    
  </entry>
  
  <entry>
    <title>Nginx备忘</title>
    <link href="https://liuyuanjun.com/nginx-memo/"/>
    <id>https://liuyuanjun.com/nginx-memo/</id>
    <published>2023-03-09T01:38:10.000Z</published>
    <updated>2023-03-09T01:39:33.000Z</updated>
    
    <content type="html"><![CDATA[<h3 id="Nginx-使用注意事项"><a href="#Nginx-使用注意事项" class="headerlink" title="Nginx 使用注意事项"></a>Nginx 使用注意事项</h3><ul><li>Nginx 中有个配置 <code>underscores_in_headers on|off;</code> 用于允许 header 中出现下划线，这个配置默认是<code>off</code>，所以如果 header 中出现下划线，默认情况下是会丢失的，<font color="red">使用中如非必要，header 中不要出现下划线，否则会丢失。</font>实在需要下划线的话要记得改这项配置。</li></ul><blockquote><p>相关文档：<a href="http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers">http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;Nginx-使用注意事项&quot;&gt;&lt;a href=&quot;#Nginx-使用注意事项&quot; class=&quot;headerlink&quot; title=&quot;Nginx 使用注意事项&quot;&gt;&lt;/a&gt;Nginx 使用注意事项&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Nginx 中有个配置 &lt;code&gt;unders</summary>
      
    
    
    
    
    <category term="Nginx" scheme="https://liuyuanjun.com/tags/Nginx/"/>
    
  </entry>
  
  <entry>
    <title>Cloudflare内网穿透代理折腾备忘</title>
    <link href="https://liuyuanjun.com/cloudflare-memo/"/>
    <id>https://liuyuanjun.com/cloudflare-memo/</id>
    <published>2023-03-04T11:24:00.000Z</published>
    <updated>2023-03-06T03:30:54.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="用cloudflare尝试穿透中国移动宽带内网搭建外网可访问服务折腾记录"><a href="#用cloudflare尝试穿透中国移动宽带内网搭建外网可访问服务折腾记录" class="headerlink" title="用cloudflare尝试穿透中国移动宽带内网搭建外网可访问服务折腾记录"></a>用cloudflare尝试穿透中国移动宽带内网搭建外网可访问服务折腾记录</h2><p>移动宽带价格较便宜，但是没有公网IPv4地址，所以一般的DDNS服务难以解决外网访问问题，经过一番设置，设置了IPv6 DDNS，外网可以访问了，但是访问需要客户侧网络支持IPv6，所以还是不够完美，于是开始了cloudflare折腾之旅。</p><h3 id="1-用cloudflare的免费CDN服务解决IPv4用户访问问题"><a href="#1-用cloudflare的免费CDN服务解决IPv4用户访问问题" class="headerlink" title="1. 用cloudflare的免费CDN服务解决IPv4用户访问问题"></a>1. 用cloudflare的免费CDN服务解决IPv4用户访问问题</h3><p>这个很简单，只要把域名托管到cloudflare，然后在cloudflare的DNS设置里面添加一条A记录，指向服务器IP地址，然后在cloudflare的CDN设置里面开启CDN服务，就可以了。<br>折腾过程中有个坑，就是cloudflare的回源端口是有限制的，只支持几个固定的端口，如下：</p><table><thead><tr><th align="center"><strong>HTTP:</strong></th><th align="center">80</th><th align="center">8080</th><th align="center">8880</th><th align="center">2052</th><th align="center">2082</th><th align="center">2086</th><th align="center">2095</th></tr></thead><tbody><tr><td align="center"><strong>HTTPS:</strong></td><td align="center">443</td><td align="center">8443</td><td align="center"></td><td align="center">2053</td><td align="center">2083</td><td align="center">2087</td><td align="center">2096</td></tr></tbody></table><h3 id="2-尝试将服务端口转为正常的HTTPS服务端口-443"><a href="#2-尝试将服务端口转为正常的HTTPS服务端口-443" class="headerlink" title="2. 尝试将服务端口转为正常的HTTPS服务端口 443"></a>2. 尝试将服务端口转为正常的HTTPS服务端口 443</h3><p>国内的民用宽带80，443端口都是被封的，cloudflare CDN服务也是同端口访问，所以考虑到搞个反向代理，将服务端口转为正常的HTTPS服务端口 443。</p><h4 id="2-1-尝试使用cloudflare的Workers"><a href="#2-1-尝试使用cloudflare的Workers" class="headerlink" title="2.1 尝试使用cloudflare的Workers"></a>2.1 尝试使用cloudflare的Workers</h4><p>这里用到了 <a href="https://reflare.js.org/">reflare</a> 这个项目，这个项目是一个cloudflare的worker，一番折腾做好路由后，以失败告终。本次失败粗略得出两个结论（可能有误，求指正）：</p><ol><li>cloudflare的worker不支持访问IPv6</li><li>cloudflare的worker不支持访问cloudflare的CDN服务</li></ol><h4 id="2-2-使用cloudflare的Tunnel-推荐"><a href="#2-2-使用cloudflare的Tunnel-推荐" class="headerlink" title="2.2 使用cloudflare的Tunnel  (推荐)"></a>2.2 使用cloudflare的Tunnel  (推荐)</h4><p>没想到这个Tunnel居然非常顺利，而且速度感觉也比CDN快。<br>附上步骤链接：<a href="https://zhuanlan.zhihu.com/p/591320825">https://zhuanlan.zhihu.com/p/591320825</a><br>教程是群晖的，我直接用的docker-compose，大同小异自己理解下即可<br>还有一个差别就是cloudflare 的 Tunnel 入口有所改变，面板独立到这里<a href="https://one.dash.cloudflare.com/">https://one.dash.cloudflare.com/</a>了，但操作不影响</p><p><strong>注意点：</strong></p><ul><li>如果服务器内是用 nginx 的 server_name 区分服务，记得在nginx的配置里加入相应域名</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;用cloudflare尝试穿透中国移动宽带内网搭建外网可访问服务折腾记录&quot;&gt;&lt;a href=&quot;#用cloudflare尝试穿透中国移动宽带内网搭建外网可访问服务折腾记录&quot; class=&quot;headerlink&quot; title=&quot;用cloudflare尝试穿透中国移动宽</summary>
      
    
    
    
    
    <category term="cloudflare" scheme="https://liuyuanjun.com/tags/cloudflare/"/>
    
    <category term="内网穿透" scheme="https://liuyuanjun.com/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/"/>
    
    <category term="CDN" scheme="https://liuyuanjun.com/tags/CDN/"/>
    
    <category term="Tunnel" scheme="https://liuyuanjun.com/tags/Tunnel/"/>
    
    <category term="Workers" scheme="https://liuyuanjun.com/tags/Workers/"/>
    
  </entry>
  
  <entry>
    <title>Mac常用快捷键及命令备忘</title>
    <link href="https://liuyuanjun.com/my-mac-shortcut-memo/"/>
    <id>https://liuyuanjun.com/my-mac-shortcut-memo/</id>
    <published>2023-03-01T04:42:47.000Z</published>
    <updated>2023-03-01T04:56:14.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="个人常用快捷键备忘，只记录Mac"><a href="#个人常用快捷键备忘，只记录Mac" class="headerlink" title="个人常用快捷键备忘，只记录Mac"></a>个人常用快捷键备忘，只记录Mac</h2><h3 id="Chrome"><a href="#Chrome" class="headerlink" title="Chrome"></a>Chrome</h3><blockquote><p>Cmd+Shift+T 重新打开最后关闭的标签页<br>Alt+Cmd+L 打开下载列表</p></blockquote><h3 id="Shell"><a href="#Shell" class="headerlink" title="Shell"></a>Shell</h3><blockquote><p><code>time cmd</code> 显示命令执行时间<br>Ctrl+U 删除光标左边输入内容<br>Ctrl+K 删除光标右边输入内容</p></blockquote><h3 id="idea-IDE"><a href="#idea-IDE" class="headerlink" title="idea IDE"></a>idea IDE</h3><blockquote><p>Cmd+[   OR  Command+Alt+←  光标回到上一个位置<br>Ctrl+G 选择下一个一样的</p></blockquote><h3 id="Docker-命令"><a href="#Docker-命令" class="headerlink" title="Docker 命令"></a>Docker 命令</h3>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;个人常用快捷键备忘，只记录Mac&quot;&gt;&lt;a href=&quot;#个人常用快捷键备忘，只记录Mac&quot; class=&quot;headerlink&quot; title=&quot;个人常用快捷键备忘，只记录Mac&quot;&gt;&lt;/a&gt;个人常用快捷键备忘，只记录Mac&lt;/h2&gt;&lt;h3 id=&quot;Chrome&quot;&gt;&lt;</summary>
      
    
    
    
    
    <category term="shortcut" scheme="https://liuyuanjun.com/tags/shortcut/"/>
    
  </entry>
  
  <entry>
    <title>Docker 中 ENTRYPOINT 与 CMD 的执行关系</title>
    <link href="https://liuyuanjun.com/docker-how-to-use-entrypoint-cmd/"/>
    <id>https://liuyuanjun.com/docker-how-to-use-entrypoint-cmd/</id>
    <published>2023-02-28T11:51:36.000Z</published>
    <updated>2023-03-01T01:34:11.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="ENTRYPOINT-与-CMD-如何配合使用"><a href="#ENTRYPOINT-与-CMD-如何配合使用" class="headerlink" title="ENTRYPOINT 与 CMD 如何配合使用"></a>ENTRYPOINT 与 CMD 如何配合使用</h2><table><thead><tr><th></th><th>No ENTRYPOINT</th><th>ENTRYPOINT exec_entry p1_entry</th><th>ENTRYPOINT [“exec_entry”, “p1_entry”]</th></tr></thead><tbody><tr><td>No CMD</td><td>error, not allowed</td><td>&#x2F;bin&#x2F;sh -c exec_entry p1_entry</td><td>exec_entry p1_entry</td></tr><tr><td>CMD [“exec_cmd”, “p1_cmd”]</td><td>exec_cmd p1_cmd</td><td>&#x2F;bin&#x2F;sh -c exec_entry p1_entry</td><td>exec_entry p1_entry exec_cmd p1_cmd</td></tr><tr><td>CMD exec_cmd p1_cmd</td><td>&#x2F;bin&#x2F;sh -c exec_cmd p1_cmd</td><td>&#x2F;bin&#x2F;sh -c exec_entry p1_entry</td><td>exec_entry p1_entry &#x2F;bin&#x2F;sh -c exec_cmd p1_cmd</td></tr></tbody></table><p><strong>一句话抓重点：</strong> 如果 ENTRYPOINT 设置没有使用数组方式，CMD不会被执行</p><hr><hr><h2 id="ENTRYPOINT-与-CMD-的各种覆写情况"><a href="#ENTRYPOINT-与-CMD-的各种覆写情况" class="headerlink" title="ENTRYPOINT 与 CMD 的各种覆写情况"></a>ENTRYPOINT 与 CMD 的各种覆写情况</h2><h3 id="在同一-buildstage-覆写时"><a href="#在同一-buildstage-覆写时" class="headerlink" title="在同一 buildstage 覆写时"></a>在同一 buildstage 覆写时</h3><figure class="highlight dockerfile"><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="keyword">FROM</span> busybox</span><br><span class="line"></span><br><span class="line"><span class="keyword">CMD</span><span class="language-bash"> [<span class="string">&quot;foo %d bar\n&quot;</span>, <span class="string">&quot;1&quot;</span>] <span class="comment"># 被保留</span></span></span><br><span class="line"><span class="keyword">ENTRYPOINT</span><span class="language-bash"> [<span class="string">&quot;echo&quot;</span>] <span class="comment"># 被覆盖</span></span></span><br><span class="line"><span class="keyword">ENTRYPOINT</span><span class="language-bash"> [<span class="string">&quot;printf&quot;</span>] <span class="comment"># 被保留</span></span></span><br></pre></td></tr></table></figure><figure class="highlight sh"><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"><span class="comment"># 构建</span></span><br><span class="line">docker build --no-cache -t overridden .</span><br></pre></td></tr></table></figure><figure class="highlight sh"><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="comment"># 运行</span></span><br><span class="line">docker run overridden</span><br><span class="line">foo 1 bar</span><br></pre></td></tr></table></figure><p>运行镜像显示使用了：printf</p><h3 id="在运行时覆写-（-entrypoint"><a href="#在运行时覆写-（-entrypoint" class="headerlink" title="在运行时覆写 （--entrypoint)"></a>在运行时覆写 （<code>--entrypoint</code>)</h3><figure class="highlight sh"><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">docker run --entrypoint=<span class="string">&quot;echo&quot;</span> overridden</span><br><span class="line"><span class="comment"># 没有输出 (CMD已被重置)</span></span><br></pre></td></tr></table></figure><p>可以通过传参来设置新的CMD：</p><figure class="highlight sh"><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">docker run --entrypoint=<span class="string">&quot;echo&quot;</span> overridden thisisthenewcommand</span><br><span class="line">thisisthenewcommand</span><br></pre></td></tr></table></figure><span id="more"></span><h3 id="在子镜像覆写-（FROM"><a href="#在子镜像覆写-（FROM" class="headerlink" title="在子镜像覆写 （FROM ..)"></a>在子镜像覆写 （FROM ..)</h3><p>构建扩展新镜像时，将重置：CMD</p><figure class="highlight dockerfile"><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"><span class="keyword">FROM</span> overridden</span><br><span class="line"><span class="keyword">ENTRYPOINT</span><span class="language-bash"> [<span class="string">&quot;echo&quot;</span>]</span></span><br></pre></td></tr></table></figure><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker build --no-cache -t overridden2 .</span><br></pre></td></tr></table></figure><p>运行显示 已重置CMD</p><figure class="highlight sh"><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">docker run overridden2</span><br><span class="line"><span class="comment"># empty output (because CMD is reset)</span></span><br></pre></td></tr></table></figure><h3 id="在多阶段构建中覆盖"><a href="#在多阶段构建中覆盖" class="headerlink" title="在多阶段构建中覆盖"></a>在多阶段构建中覆盖</h3><p>在多阶段构建中，情况与构建扩展镜像时情况相同（只是在单个 Dockerfile 中完成）;</p><figure class="highlight dockerfile"><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="keyword">FROM</span> busybox AS stage1</span><br><span class="line"></span><br><span class="line"><span class="keyword">CMD</span><span class="language-bash"> [<span class="string">&quot;foo %d bar\n&quot;</span>, <span class="string">&quot;1&quot;</span>]</span></span><br><span class="line"><span class="keyword">ENTRYPOINT</span><span class="language-bash"> [<span class="string">&quot;echo&quot;</span>]</span></span><br><span class="line"><span class="keyword">ENTRYPOINT</span><span class="language-bash"> [<span class="string">&quot;printf&quot;</span>]</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">FROM</span> stage1</span><br><span class="line"><span class="keyword">ENTRYPOINT</span><span class="language-bash"> [<span class="string">&quot;echo&quot;</span>]</span></span><br></pre></td></tr></table></figure><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker build --no-cache -t overridden3 .</span><br></pre></td></tr></table></figure><p>运行镜像显示已使用，但已重置：<code>echo cmd</code></p><figure class="highlight sh"><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">docker run overridden3</span><br><span class="line"><span class="comment"># empty output (because CMD is reset)</span></span><br></pre></td></tr></table></figure><hr><p><strong>参考资料：</strong><br><a href="https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact">https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact</a><br><a href="https://github.com/docker/docs/issues/6142#issuecomment-370368332">https://github.com/docker/docs/issues/6142#issuecomment-370368332</a></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;ENTRYPOINT-与-CMD-如何配合使用&quot;&gt;&lt;a href=&quot;#ENTRYPOINT-与-CMD-如何配合使用&quot; class=&quot;headerlink&quot; title=&quot;ENTRYPOINT 与 CMD 如何配合使用&quot;&gt;&lt;/a&gt;ENTRYPOINT 与 CMD 如何配合使用&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;No ENTRYPOINT&lt;/th&gt;
&lt;th&gt;ENTRYPOINT exec_entry p1_entry&lt;/th&gt;
&lt;th&gt;ENTRYPOINT [“exec_entry”, “p1_entry”]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;No CMD&lt;/td&gt;
&lt;td&gt;error, not allowed&lt;/td&gt;
&lt;td&gt;&amp;#x2F;bin&amp;#x2F;sh -c exec_entry p1_entry&lt;/td&gt;
&lt;td&gt;exec_entry p1_entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD [“exec_cmd”, “p1_cmd”]&lt;/td&gt;
&lt;td&gt;exec_cmd p1_cmd&lt;/td&gt;
&lt;td&gt;&amp;#x2F;bin&amp;#x2F;sh -c exec_entry p1_entry&lt;/td&gt;
&lt;td&gt;exec_entry p1_entry exec_cmd p1_cmd&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD exec_cmd p1_cmd&lt;/td&gt;
&lt;td&gt;&amp;#x2F;bin&amp;#x2F;sh -c exec_cmd p1_cmd&lt;/td&gt;
&lt;td&gt;&amp;#x2F;bin&amp;#x2F;sh -c exec_entry p1_entry&lt;/td&gt;
&lt;td&gt;exec_entry p1_entry &amp;#x2F;bin&amp;#x2F;sh -c exec_cmd p1_cmd&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;一句话抓重点：&lt;/strong&gt; 如果 ENTRYPOINT 设置没有使用数组方式，CMD不会被执行&lt;/p&gt;
&lt;hr&gt;
&lt;hr&gt;
&lt;h2 id=&quot;ENTRYPOINT-与-CMD-的各种覆写情况&quot;&gt;&lt;a href=&quot;#ENTRYPOINT-与-CMD-的各种覆写情况&quot; class=&quot;headerlink&quot; title=&quot;ENTRYPOINT 与 CMD 的各种覆写情况&quot;&gt;&lt;/a&gt;ENTRYPOINT 与 CMD 的各种覆写情况&lt;/h2&gt;&lt;h3 id=&quot;在同一-buildstage-覆写时&quot;&gt;&lt;a href=&quot;#在同一-buildstage-覆写时&quot; class=&quot;headerlink&quot; title=&quot;在同一 buildstage 覆写时&quot;&gt;&lt;/a&gt;在同一 buildstage 覆写时&lt;/h3&gt;&lt;figure class=&quot;highlight dockerfile&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; busybox&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;language-bash&quot;&gt; [&lt;span class=&quot;string&quot;&gt;&amp;quot;foo %d bar\n&amp;quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;] &lt;span class=&quot;comment&quot;&gt;# 被保留&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;language-bash&quot;&gt; [&lt;span class=&quot;string&quot;&gt;&amp;quot;echo&amp;quot;&lt;/span&gt;] &lt;span class=&quot;comment&quot;&gt;# 被覆盖&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;language-bash&quot;&gt; [&lt;span class=&quot;string&quot;&gt;&amp;quot;printf&amp;quot;&lt;/span&gt;] &lt;span class=&quot;comment&quot;&gt;# 被保留&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;figure class=&quot;highlight sh&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 构建&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;docker build --no-cache -t overridden .&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;figure class=&quot;highlight sh&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 运行&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;docker run overridden&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;foo 1 bar&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;运行镜像显示使用了：printf&lt;/p&gt;
&lt;h3 id=&quot;在运行时覆写-（-entrypoint&quot;&gt;&lt;a href=&quot;#在运行时覆写-（-entrypoint&quot; class=&quot;headerlink&quot; title=&quot;在运行时覆写 （--entrypoint)&quot;&gt;&lt;/a&gt;在运行时覆写 （&lt;code&gt;--entrypoint&lt;/code&gt;)&lt;/h3&gt;&lt;figure class=&quot;highlight sh&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;docker run --entrypoint=&lt;span class=&quot;string&quot;&gt;&amp;quot;echo&amp;quot;&lt;/span&gt; overridden&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 没有输出 (CMD已被重置)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;可以通过传参来设置新的CMD：&lt;/p&gt;
&lt;figure class=&quot;highlight sh&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;docker run --entrypoint=&lt;span class=&quot;string&quot;&gt;&amp;quot;echo&amp;quot;&lt;/span&gt; overridden thisisthenewcommand&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;thisisthenewcommand&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</summary>
    
    
    
    
    <category term="docker" scheme="https://liuyuanjun.com/tags/docker/"/>
    
  </entry>
  
  <entry>
    <title>Github kex_exchange_identification 问题</title>
    <link href="https://liuyuanjun.com/github-connect-error-kex_exchange_identification-time_out/"/>
    <id>https://liuyuanjun.com/github-connect-error-kex_exchange_identification-time_out/</id>
    <published>2023-02-27T07:54:30.000Z</published>
    <updated>2023-02-27T11:20:44.000Z</updated>
    
    <content type="html"><![CDATA[<p><strong>Github 报错如下:</strong></p><blockquote><p>kex_exchange_identification: Connection closed by remote host<br>fatal: Could not read from remote repository.</p><p>Please make sure you have the correct access rights<br>and the repository exists.</p></blockquote><p><strong>解决方法如下：</strong></p><p>编辑 <code>~/.ssh/config</code> 文件</p><figure class="highlight plaintext"><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">Host github.com</span><br><span class="line"> Hostname ssh.github.com</span><br><span class="line"> Port 443</span><br></pre></td></tr></table></figure><p><strong>参考文档：</strong></p><blockquote><p><a href="https://stackoverflow.com/a/60994276">https://stackoverflow.com/a/60994276</a></p></blockquote><hr><p>后面频繁出现 time out，解决方法，加代理</p><figure class="highlight sh"><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"># 必须是 github.com</span></span><br><span class="line">Host github.com</span><br><span class="line">   HostName github.com</span><br><span class="line">   User git</span><br><span class="line">   <span class="comment"># 走 HTTP 代理</span></span><br><span class="line">   <span class="comment"># ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=8080</span></span><br><span class="line">   <span class="comment"># 走 socks5 代理（如小飞机 or V2xxx）</span></span><br><span class="line">   ProxyCommand nc -v -x 127.0.0.1:1080 %h %p</span><br></pre></td></tr></table></figure><p><strong>参考文档：</strong></p><blockquote><p><a href="https://blog.csdn.net/HD243608836/article/details/127869482">https://blog.csdn.net/HD243608836/article/details/127869482</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;strong&gt;Github 报错如下:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;kex_exchange_identification: Connection closed by remote host&lt;br&gt;fatal: Could not read </summary>
      
    
    
    
    
    <category term="github" scheme="https://liuyuanjun.com/tags/github/"/>
    
    <category term="ssh" scheme="https://liuyuanjun.com/tags/ssh/"/>
    
  </entry>
  
  <entry>
    <title>Hexo使用备忘</title>
    <link href="https://liuyuanjun.com/hexo-memo/"/>
    <id>https://liuyuanjun.com/hexo-memo/</id>
    <published>2023-02-27T07:51:19.000Z</published>
    <updated>2023-03-01T08:20:30.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="去除yilia主题中失效的统计访问"><a href="#去除yilia主题中失效的统计访问" class="headerlink" title="去除yilia主题中失效的统计访问"></a>去除yilia主题中失效的统计访问</h2><p>使用yilia主题打开网站会有个 <code>https://litten.me:9005/badjs/?id=1&amp;uin=xxxxxx</code> 的访问一直转圈，主题作者最后维护已经是N年前，这个统计链接也早已失效<br>查找了一下，代码在<code>themes/yilia/source-src/js/report.js</code>，但这里是源码，实际使用的是编译后的文件，所以更改这里并不能解决问题</p><h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><p>文件：<code>themes/yilia/source/main.0cf68a.js</code></p><p>查找</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">192</span>:<span class="keyword">function</span>(<span class="params">e,t,n</span>)&#123;<span class="string">&quot;use strict&quot;</span>;<span class="keyword">function</span> <span class="title function_">o</span>(<span class="params">e</span>)&#123;<span class="keyword">var</span> t=<span class="keyword">new</span> <span class="title class_">RegExp</span>(<span class="string">&quot;(^|&amp;)&quot;</span>+e+<span class="string">&quot;=([^&amp;]*)(&amp;|$)&quot;</span>,<span class="string">&quot;i&quot;</span>),n=<span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">search</span>.<span class="title function_">substr</span>(<span class="number">1</span>).<span class="title function_">match</span>(t);<span class="keyword">return</span> <span class="literal">null</span>!=n?<span class="built_in">unescape</span>(n[<span class="number">2</span>]):<span class="literal">null</span>&#125;<span class="keyword">var</span> r=<span class="title function_">n</span>(<span class="number">388</span>);<span class="keyword">if</span>(<span class="title function_">n</span>(<span class="number">197</span>),<span class="variable language_">window</span>.<span class="property">BJ_REPORT</span>)&#123;<span class="variable constant_">BJ_REPORT</span>.<span class="title function_">init</span>(&#123;<span class="attr">id</span>:<span class="number">1</span>&#125;),<span class="variable constant_">BJ_REPORT</span>.<span class="title function_">init</span>(&#123;<span class="attr">id</span>:<span class="number">1</span>,<span class="attr">uin</span>:<span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">origin</span>,<span class="attr">combo</span>:<span class="number">0</span>,<span class="attr">delay</span>:<span class="number">1e3</span>,<span class="attr">url</span>:<span class="string">&quot;//litten.me:9005/badjs/&quot;</span>,<span class="attr">ignore</span>:[<span class="regexp">/Script error/i</span>],<span class="attr">random</span>:<span class="number">1</span>,<span class="attr">repeat</span>:<span class="number">5e5</span>,<span class="attr">onReport</span>:<span class="keyword">function</span>(<span class="params">e,t</span>)&#123;&#125;,<span class="attr">ext</span>:&#123;&#125;&#125;);<span class="keyword">var</span> i=<span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">host</span>,a=top===<span class="variable language_">window</span>,u=!(<span class="regexp">/localhost/i</span>.<span class="title function_">test</span>(i)||<span class="regexp">/127.0.0.1/i</span>.<span class="title function_">test</span>(i)||<span class="regexp">/0.0.0.0/i</span>.<span class="title function_">test</span>(i));a&amp;&amp;u&amp;&amp;<span class="variable constant_">BJ_REPORT</span>.<span class="title function_">report</span>(<span class="string">&quot;yilia-&quot;</span>+<span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">host</span>);<span class="keyword">var</span> l=<span class="title function_">o</span>(<span class="string">&quot;f&quot;</span>),c=<span class="string">&quot;yilia-from&quot;</span>;l?(a&amp;&amp;<span class="variable constant_">BJ_REPORT</span>.<span class="title function_">report</span>(<span class="string">&quot;from-&quot;</span>+l),r.<span class="title function_">set</span>(c,l)):<span class="variable language_">document</span>.<span class="property">referrer</span>.<span class="title function_">indexOf</span>(<span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">host</span>)&gt;=<span class="number">0</span>?(l=r.<span class="title function_">get</span>(c),l&amp;&amp;a&amp;&amp;<span class="variable constant_">BJ_REPORT</span>.<span class="title function_">report</span>(<span class="string">&quot;from-&quot;</span>+l)):r.<span class="title function_">remove</span>(c)&#125;e.<span class="property">exports</span>=&#123;<span class="attr">init</span>:<span class="keyword">function</span>(<span class="params"></span>)&#123;&#125;&#125;&#125;,</span><br></pre></td></tr></table></figure><p>替换为</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">192</span>:<span class="keyword">function</span>(<span class="params">e,t,n</span>)&#123;&#125;,</span><br></pre></td></tr></table></figure><hr><hr><h2 id="yilia主题左侧作者名字（author）和-子标题（subtitle）的显示"><a href="#yilia主题左侧作者名字（author）和-子标题（subtitle）的显示" class="headerlink" title="yilia主题左侧作者名字（author）和 子标题（subtitle）的显示"></a>yilia主题左侧作者名字（author）和 子标题（subtitle）的显示</h2><p><img src="/assets/img/article/author_subtitle.png" alt="author-subtitle.png"></p><p>这个配置文件中没有介绍到，很简单，在 <code>themes/yilia/_config.yml</code> 中加入一下两项即可：</p><figure class="highlight yml"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 作者</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">&#x27;YJ.Liu&#x27;</span></span><br><span class="line"><span class="comment"># 子标题</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">&#x27;个人博客&#x27;</span></span><br></pre></td></tr></table></figure><hr><hr><h2 id="yilia主题bug，Front-matter中设置permalink『所有文章』列表的文章链接错误"><a href="#yilia主题bug，Front-matter中设置permalink『所有文章』列表的文章链接错误" class="headerlink" title="yilia主题bug，Front-matter中设置permalink『所有文章』列表的文章链接错误"></a>yilia主题bug，Front-matter中设置permalink『所有文章』列表的文章链接错误</h2><p>原因就是Front-matter中设置 <code>permalink</code> 后，<code>content.json</code> 返回的数据中 <code>path</code> 比没有设置的左边多了个 <code>/</code></p><h3 id="解决办法"><a href="#解决办法" class="headerlink" title="解决办法"></a>解决办法</h3><p>源文件位置 <code>themes/yilia/source-src/js/slider.js</code> 85行，代码修改如下，修改位置见注释</p><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></pre></td><td class="code"><pre><span class="line"><span class="attr">urlformat</span>: <span class="function">(<span class="params">str</span>) =&gt;</span> &#123;</span><br><span class="line">    str = str.<span class="title function_">replace</span>(<span class="regexp">/^\/+/</span>,<span class="string">&#x27;&#x27;</span>) <span class="comment">// &lt;= 增加了这一行</span></span><br><span class="line">    <span class="keyword">if</span> (<span class="variable language_">window</span>.<span class="property">yiliaConfig</span> &amp;&amp; <span class="variable language_">window</span>.<span class="property">yiliaConfig</span>.<span class="property">root</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="variable language_">window</span>.<span class="property">yiliaConfig</span>.<span class="property">root</span> + str</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">&#x27;/&#x27;</span> + str</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>同样的，这里是原始文件，修改这里是无法生效的，所以需要在编译文件中替换如下：</strong></p><p>文件位置：<code>themes/yilia/source/slider.e37972.js</code></p><p>查找</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">urlformat</span>:<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">return</span> <span class="variable language_">window</span>.<span class="property">yiliaConfig</span>&amp;&amp;<span class="variable language_">window</span>.<span class="property">yiliaConfig</span>.<span class="property">root</span>?<span class="variable language_">window</span>.<span class="property">yiliaConfig</span>.<span class="property">root</span>+<span class="attr">t</span>:<span class="string">&quot;/&quot;</span>+t&#125;</span><br></pre></td></tr></table></figure><p>替换为</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">urlformat</span>:<span class="keyword">function</span>(<span class="params">t</span>)&#123;t=t.<span class="title function_">replace</span>(<span class="regexp">/^\/+/</span>,<span class="string">&#x27;&#x27;</span>);<span class="keyword">return</span> <span class="variable language_">window</span>.<span class="property">yiliaConfig</span>&amp;&amp;<span class="variable language_">window</span>.<span class="property">yiliaConfig</span>.<span class="property">root</span>?<span class="variable language_">window</span>.<span class="property">yiliaConfig</span>.<span class="property">root</span>+<span class="attr">t</span>:<span class="string">&quot;/&quot;</span>+t&#125;</span><br></pre></td></tr></table></figure><hr><hr>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;去除yilia主题中失效的统计访问&quot;&gt;&lt;a href=&quot;#去除yilia主题中失效的统计访问&quot; class=&quot;headerlink&quot; title=&quot;去除yilia主题中失效的统计访问&quot;&gt;&lt;/a&gt;去除yilia主题中失效的统计访问&lt;/h2&gt;&lt;p&gt;使用yilia主题打</summary>
      
    
    
    
    
    <category term="Hexo" scheme="https://liuyuanjun.com/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="https://liuyuanjun.com/hello-world/"/>
    <id>https://liuyuanjun.com/hello-world/</id>
    <published>2023-02-24T11:11:35.000Z</published>
    <updated>2023-11-21T05:37:45.009Z</updated>
    
    <content type="html"><![CDATA[<p>年龄渐长，记忆衰退</p><p>构建了一个Blog，记一些东西备忘</p><p>希望我记的东西恰好也能帮到你</p><p>博客构建使用<a href="https://hexo.io/">Hexo</a>，部署于<a href="https://vercel.com/liuyuanjun">Vercel</a>，同时部署于<a href="https://liuyuanjun.github.io/">Github.io</a>备用</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;年龄渐长，记忆衰退&lt;/p&gt;
&lt;p&gt;构建了一个Blog，记一些东西备忘&lt;/p&gt;
&lt;p&gt;希望我记的东西恰好也能帮到你&lt;/p&gt;
&lt;p&gt;博客构建使用&lt;a href=&quot;https://hexo.io/&quot;&gt;Hexo&lt;/a&gt;，部署于&lt;a href=&quot;https://vercel.com/</summary>
      
    
    
    
    
    <category term="随笔" scheme="https://liuyuanjun.com/tags/%E9%9A%8F%E7%AC%94/"/>
    
  </entry>
  
</feed>
