<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Sogrey</title>
  
  <subtitle>必须努力，付出不亚于任何人的努力</subtitle>
  <link href="https://sogrey.github.io/atom.xml" rel="self"/>
  
  <link href="https://sogrey.github.io/"/>
  <updated>2026-05-20T18:33:18.027Z</updated>
  <id>https://sogrey.github.io/</id>
  
  <author>
    <name>Sogrey</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>VSCODE配置C/C++最小配置</title>
    <link href="https://sogrey.github.io/article/VSCODE%E9%85%8D%E7%BD%AEC-CPP%E6%9C%80%E5%B0%8F%E9%85%8D%E7%BD%AE/"/>
    <id>https://sogrey.github.io/article/VSCODE%E9%85%8D%E7%BD%AEC-CPP%E6%9C%80%E5%B0%8F%E9%85%8D%E7%BD%AE/</id>
    <published>2022-05-12T16:59:34.000Z</published>
    <updated>2026-05-20T18:33:18.027Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>准备工具：</p><ul><li><a href="https://code.visualstudio.com/">vscode</a> (自行安装)</li><li><a href="https://nuwen.net/mingw.html">MinGW</a> (C&#x2F;C++环境)</li></ul><h2 id="安装C-C-环境–MinGW"><a href="#安装C-C-环境–MinGW" class="headerlink" title="安装C&#x2F;C++环境–MinGW"></a>安装C&#x2F;C++环境–MinGW</h2><p>进入网站<a href="https://nuwen.net/mingw.html">MinGW</a>，点击如下图红框链接下载。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/mingw-01.png" alt="下载MinGW"></p><p>解压出来MinGW放到你已知的目录下，我放在<code>D:\Programs\</code>下。</p><p>需将<code>MinGW\bin</code>目录添加到环境变量中，这样就能在vscode中访问到G++和GCC。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/mingw-02.png" alt="配置MinGW环境变量"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/mingw-03.png" alt="测试g++"></p><figure class="highlight ps"><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="built_in">PS</span> G:\github\c\vscode<span class="literal">-cpp</span>&gt; g++ <span class="literal">--version</span></span><br><span class="line">g++.exe (GCC) <span class="number">11.2</span>.<span class="number">0</span></span><br><span class="line">Copyright (C) <span class="number">2021</span> Free Software Foundation, Inc.</span><br><span class="line">This is free software; see the source <span class="keyword">for</span> copying conditions.  There is NO      </span><br><span class="line">warranty; not even <span class="keyword">for</span> MERCHANTABILITY or FITNESS <span class="keyword">FOR</span> A PARTICULAR PURPOSE.     </span><br></pre></td></tr></table></figure><h2 id="vscode安装c-c-插件"><a href="#vscode安装c-c-插件" class="headerlink" title="vscode安装c&#x2F;c++插件"></a>vscode安装c&#x2F;c++插件</h2><ul><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools">C&#x2F;C++</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner">Code Runner</a></li></ul><h2 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h2><p>根据上面各项配置下来已经差不多了，写个简单c++程序测试一下。</p><p>test.cpp</p><figure class="highlight c++"><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="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">char</span> <span class="type">const</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;Hello world&quot;</span>;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>vscode终端（PowerShell）中执行：<code>if ($?) &#123; g++ test.cpp -o test &#125; ; if ($?) &#123; .\test &#125;</code></p><figure class="highlight ps"><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="built_in">PS</span> G:\github\c\vscode<span class="literal">-cpp</span>&gt; <span class="keyword">if</span> (<span class="variable">$</span>?) &#123; g++ test.cpp <span class="literal">-o</span> test &#125; ; <span class="keyword">if</span> (<span class="variable">$</span>?) &#123; .\test&#125;  </span><br><span class="line">Hello world</span><br></pre></td></tr></table></figure><p>成功生成<code>test.exe</code>并执行输出<code>Hello world</code>。</p><h2 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h2><p>为方便配置vscode中c&#x2F;c++环境配置，在根目录下创建<code>.vscode</code>。添加如下几个配置文件：</p><p><a href="https://github.com/Sogrey/vscode-cpp/blob/main/.vscode/settings.json">settings.json</a> 主要为解决中文乱码问题</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;editor.tabSize&quot;</span><span class="punctuation">:</span> <span class="number">2</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;editor.detectIndentation&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;[cpp]&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;editor.defaultFormatter&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ms-vscode.cpptools&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;files.encoding&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gbk&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;[c]&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;editor.defaultFormatter&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ms-vscode.cpptools&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;files.encoding&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gbk&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><a href="https://github.com/Sogrey/vscode-cpp/blob/main/.vscode/c_cpp_properties.json">c_cpp_properties.json</a></p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;configurations&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;GCC&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;includePath&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;$&#123;workspaceFolder&#125;/**&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;defines&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;_DEBUG&quot;</span><span class="punctuation">,</span> <span class="string">&quot;UNICODE&quot;</span><span class="punctuation">,</span> <span class="string">&quot;_UNICODE&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;windowsSdkVersion&quot;</span><span class="punctuation">:</span> <span class="string">&quot;10.0.18362.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;compilerPath&quot;</span><span class="punctuation">:</span> <span class="string">&quot;D:\\Programs\\MinGW\\bin\\g++.exe&quot;</span><span class="punctuation">,</span><span class="comment">//改路径！！MinGW中g++.exe路径</span></span><br><span class="line">        <span class="attr">&quot;cStandard&quot;</span><span class="punctuation">:</span> <span class="string">&quot;c17&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;cppStandard&quot;</span><span class="punctuation">:</span> <span class="string">&quot;c++17&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;intelliSenseMode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;windows-gcc-x64&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="number">4</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><a href="https://github.com/Sogrey/vscode-cpp/blob/main/.vscode/launch.json">launch.json</a></p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="string">&quot;0.2.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;configurations&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;g++.exe - Build and debug active file&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cppdbg&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;request&quot;</span><span class="punctuation">:</span> <span class="string">&quot;launch&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;program&quot;</span><span class="punctuation">:</span> <span class="string">&quot;$&#123;fileDirname&#125;\\$&#123;fileBasenameNoExtension&#125;.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;stopAtEntry&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;cwd&quot;</span><span class="punctuation">:</span> <span class="string">&quot;$&#123;fileDirname&#125;&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;environment&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;externalConsole&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;MIMode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gdb&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;miDebuggerPath&quot;</span><span class="punctuation">:</span> <span class="string">&quot;D:\\Programs\\MinGW\\bin\\gdb.exe&quot;</span><span class="punctuation">,</span><span class="comment">//改成你的mingw中gdb.exe的路径！！</span></span><br><span class="line">        <span class="attr">&quot;setupCommands&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Enable pretty-printing for gdb&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;text&quot;</span><span class="punctuation">:</span> <span class="string">&quot;-enable-pretty-printing&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;ignoreFailures&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">          <span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;preLaunchTask&quot;</span><span class="punctuation">:</span> <span class="string">&quot;C/C++: g++.exe build active file&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><a href="https://github.com/Sogrey/vscode-cpp/blob/main/.vscode/tasks.json">tasks.json</a></p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;tasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cppbuild&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;label&quot;</span><span class="punctuation">:</span> <span class="string">&quot;C/C++: g++.exe build active file&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;D:\\Programs\\MinGW\\bin\\g++.exe&quot;</span><span class="punctuation">,</span><span class="comment">//改为mingw中g++.exe路径</span></span><br><span class="line">        <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;-g&quot;</span><span class="punctuation">,</span> <span class="string">&quot;$&#123;file&#125;&quot;</span><span class="punctuation">,</span> <span class="string">&quot;-o&quot;</span><span class="punctuation">,</span> <span class="string">&quot;$&#123;fileDirname&#125;\\$&#123;fileBasenameNoExtension&#125;.exe&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;options&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;cwd&quot;</span><span class="punctuation">:</span> <span class="string">&quot;$&#123;fileDirname&#125;&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;problemMatcher&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;$gcc&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;group&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;kind&quot;</span><span class="punctuation">:</span> <span class="string">&quot;build&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;isDefault&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;detail&quot;</span><span class="punctuation">:</span> <span class="string">&quot;compiler: D:\\Programs\\MinGW\\bin\\g++.exe&quot;</span><span class="comment">//改为mingw中g++.exe路径</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2.0.0&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><a href="https://github.com/Sogrey/vscode-cpp">github</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="VS code" scheme="https://sogrey.github.io/categories/VS-code/"/>
    
    
    <category term="VS code" scheme="https://sogrey.github.io/tags/VS-code/"/>
    
    <category term="c" scheme="https://sogrey.github.io/tags/c/"/>
    
    <category term="c++" scheme="https://sogrey.github.io/tags/c/"/>
    
  </entry>
  
  <entry>
    <title>记录使用clash_for_windows订阅实现科学上网</title>
    <link href="https://sogrey.github.io/article/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash-for-windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    <id>https://sogrey.github.io/article/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash-for-windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/</id>
    <published>2022-04-10T01:46:22.000Z</published>
    <updated>2026-05-20T18:33:18.030Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>知乎上偶然看到一个《linux系统永久免费科学上网》（<a href="https://www.zhihu.com/zvideo/1496121708049965056">原视频在此</a>），我们做开发，也会遇到查询一些资料被墙的无助，赶紧来试试。</p><span id="more"></span><h2 id="1-准备"><a href="#1-准备" class="headerlink" title="1. 准备"></a>1. 准备</h2><ul><li>Windows 10 专业版</li><li>clash_for_windows v0.19.15 <a href="https://github.com/Fndroid/clash_for_windows_pkg">github</a></li></ul><h2 id="2-下载安装clash-for-windows"><a href="#2-下载安装clash-for-windows" class="headerlink" title="2. 下载安装clash_for_windows"></a>2. 下载安装clash_for_windows</h2><p>可到<a href="https://github.com/Fndroid/clash_for_windows_pkg/releases">releases</a>找到最新版本，根据你自己的设备选择安装。</p><h2 id="3-订阅"><a href="#3-订阅" class="headerlink" title="3. 订阅"></a>3. 订阅</h2><p>打开<a href="https://v2rayse.com/">https://v2rayse.com/</a>找到第一项点击【进入】。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-01.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-02.png"></p><p>进入后访问需要输入密码，密码可通过电报、油管直播来获取 <a href="https://t.me/changfengshare">「Telegram」</a> <a href="https://www.youtube.com/channel/UC-q1OwxWpoX4Ywou47xWM_w">「YouTube」</a> 来获取，BUT,这两个网站都在外域，我是访问不了，在此被劝退了，有可以访问的朋友可以跟着文头视频继续。</p><p>但幸好站长在下方评论给出了他的网站可以拿到免费节点数据，而且是每天更新，地址是<a href="https://cfmem.com/">https://cfmem.com</a>。进入网站找到最新日期文章进入拉到最下面找到<strong>订阅链接</strong>中<strong>clash订阅链接</strong>，复制下来。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-03.png"></p><p>打开刚安装的clash_for_windows,点击左侧菜单<strong>Profiles</strong>,输入框中填入刚复制的订阅地址，点击<strong>Download</strong>，等待下载完成即可，如果长时间下载不成，可通过浏览器或下载工具下载，文件拖入clash_for_windows也行。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-04.png"></p><p>点击[General]按照如图打开相应开关，如果需要局域网支持打开<strong>Allow LAN</strong>开关。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-05.png"></p><p>原视频最后还提到需要设置代理，<code>127.0.0.1</code> 端口: <code>7890</code>。勾选<code>System Proxy</code>即可。试试效果吧。</p><p>访问<a href="https://www.youtube.com/">https://www.youtube.com/</a>真的可以打开了，视频播放也很流畅。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-06.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-07.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/picgo/%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8clash_for_windows%E8%AE%A2%E9%98%85%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-08.png"></p><h2 id="4-警告"><a href="#4-警告" class="headerlink" title="4. 警告"></a>4. 警告</h2><p>《计算机信息网络国际联网管理暂行规定》第六条、第十四条：</p><pre><code>第六条 计算机信息网络直接进行国际联网，必须使用邮电部国家公用电信网提供的国际出入口信道。任何单位和个人不得自行建立或者使用其他信道进行国际联网。第十四条 违反本规定第六条、第八条和第十条的规定的，由公安机关责令停止联网，给予警告，可以并处 15000 元以下的罚款；有违法所得的，没收违法所得。</code></pre><p>《计算机信息网络国际联网安全保护管理办法》第五条、第二十条进行处罚。因为多数翻墙者会浏览色情、赌博、暴力、危害国家安全等违法内容。</p><pre><code>第五条任何单位和个人不得利用国际联网制作、复制、查阅和传播下列信息:(一)煽动抗拒、破坏宪法和法律、行政法规实施的；(二)煽动颠覆国家政权，推翻社会主义制度的；(三)煽动分裂国家、破坏国家统一的；(四)煽动民族仇恨、民族歧视，破坏民族团结的；(五)捏造或者歪曲事实，散布谣言，扰乱社会秩序的；(六)宣扬封建迷信、淫秽、色情、赌博、暴力、凶杀、恐怖，教唆犯罪的；(七)公然侮辱他人或者捏造事实诽谤他人的；(八)损害国家机关信誉的；(九)其他违反宪法和法律、行政法规的。第二十条 违反法律、行政法规，有本办法第五条、第六条所列行为之一的，由公安机关给予警告，有违法所得的，没收违法所得，对个人可以并处五千元以下的罚款，对单位可以并处一万五千元以下的罚款。</code></pre><p>如确因正常的工作、学习需要，可以在采取规范的信息安全技术措施情况下，偶尔翻墙，但是绝对不能向他人提供翻墙软件、账号，更不能发表、传播危害国家安全等非法内容。</p><p>珍惜资源，请勿用于从事非法活动。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;知乎上偶然看到一个《linux系统永久免费科学上网》（&lt;a href=&quot;https://www.zhihu.com/zvideo/1496121708049965056&quot;&gt;原视频在此&lt;/a&gt;），我们做开发，也会遇到查询一些资料被墙的无助，赶紧来试试。&lt;/p&gt;</summary>
    
    
    
    <category term="科学上网" scheme="https://sogrey.github.io/categories/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
    
    <category term="科学上网" scheme="https://sogrey.github.io/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
  </entry>
  
  <entry>
    <title>将Nodejs程序发布为windows服务</title>
    <link href="https://sogrey.github.io/article/%E5%B0%86Nodejs%E7%A8%8B%E5%BA%8F%E5%8F%91%E5%B8%83%E4%B8%BAwindows%E6%9C%8D%E5%8A%A1/"/>
    <id>https://sogrey.github.io/article/%E5%B0%86Nodejs%E7%A8%8B%E5%BA%8F%E5%8F%91%E5%B8%83%E4%B8%BAwindows%E6%9C%8D%E5%8A%A1/</id>
    <published>2022-03-23T15:41:30.000Z</published>
    <updated>2026-05-20T18:33:18.030Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>利用<a href="https://www.npmjs.com/package/node-windows">node-windows</a>，将nodejs程序发布为windows服务。</p><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><p>安装 node-windows 的推荐方法是使用 npm，使用全局标志：</p><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">npm install -g node-windows</span><br></pre></td></tr></table></figure><p>然后，在您的项目根目录中，运行：</p><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">npm <span class="built_in">link</span> node-windows</span><br></pre></td></tr></table></figure><h2 id="生成文件"><a href="#生成文件" class="headerlink" title="生成文件"></a>生成文件</h2><p>npm库介绍上有段说明。</p><p>node-windows 有一个实用程序可以将 Node.js 脚本作为 Windows 服务运行。请注意，像所有 Windows 服务一样，创建一个需要管理权限。要使用节点窗口创建服务，请准备如下类似脚本：</p><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> <span class="title class_">Service</span> = <span class="built_in">require</span>(<span class="string">&#x27;node-windows&#x27;</span>).<span class="property">Service</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> svc = <span class="keyword">new</span> <span class="title class_">Service</span>(&#123;</span><br><span class="line">  <span class="attr">name</span>: <span class="string">&#x27;myservice&#x27;</span>,</span><br><span class="line">  <span class="attr">description</span>: <span class="string">&#x27;this is my windows service&#x27;</span>,</span><br><span class="line">  <span class="attr">script</span>: <span class="built_in">require</span>(<span class="string">&#x27;path&#x27;</span>).<span class="title function_">join</span>(__dirname, <span class="string">&#x27;client.js&#x27;</span>),</span><br><span class="line">  <span class="attr">nodeOptions</span>: [</span><br><span class="line">    <span class="string">&#x27;--harmony&#x27;</span>,</span><br><span class="line">    <span class="string">&#x27;--max_old_space_size=4096&#x27;</span></span><br><span class="line">  ]</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">svc.<span class="title function_">on</span>(<span class="string">&#x27;install&#x27;</span>, <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">  svc.<span class="title function_">start</span>();</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">svc.<span class="title function_">on</span>(<span class="string">&#x27;uninstall&#x27;</span>, <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;Uninstall complete.&#x27;</span>);</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;The service exists: &#x27;</span>, svc.<span class="property">exists</span>);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">svc.<span class="title function_">on</span>(<span class="string">&#x27;error &#x27;</span>, <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line"></span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line">svc.<span class="title function_">install</span>();</span><br></pre></td></tr></table></figure><p>该Service对象发出以下事件：</p><ul><li><code>install</code> - 当脚本作为服务安装时触发。</li><li><code>alreadyinstalled</code> - 如果脚本已知是服务则触发。</li><li><code>invalidinstallation</code> - 如果检测到安装但缺少所需文件则触发。</li><li><code>uninstall</code> - 卸载完成时触发。</li><li><code>alreadyuninstalled</code> - 请求卸载但不存在安装时触发。</li><li><code>start</code> - 新服务启动时触发。</li><li><code>stop</code> - 服务停止时触发。</li><li><code>error</code> - 在某些情况下发生错误时触发。</li></ul><h2 id="管理服务"><a href="#管理服务" class="headerlink" title="管理服务"></a>管理服务</h2><p>安装</p><figure class="highlight cmd"><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">sc.exe create qqian binpath=&#x27;./deamon/myservice.exe&#x27;  <span class="built_in">start</span>=auto</span><br><span class="line">[SC] CreateService 成功</span><br></pre></td></tr></table></figure><p>删除</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sc.exe delete &quot;myservice.exe&quot;</span><br></pre></td></tr></table></figure><p>启动</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">net</span> <span class="built_in">start</span> myservice</span><br></pre></td></tr></table></figure><p>停止</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">net</span> stop myservice</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="node.js" scheme="https://sogrey.github.io/categories/node-js/"/>
    
    
    <category term="node.js" scheme="https://sogrey.github.io/tags/node-js/"/>
    
    <category term="Windows" scheme="https://sogrey.github.io/tags/Windows/"/>
    
  </entry>
  
  <entry>
    <title>封装axios网络请求</title>
    <link href="https://sogrey.github.io/article/%E5%B0%81%E8%A3%85axios%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82/"/>
    <id>https://sogrey.github.io/article/%E5%B0%81%E8%A3%85axios%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82/</id>
    <published>2022-03-22T16:26:47.000Z</published>
    <updated>2026-05-20T18:33:18.030Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>记录一次Vue中使用axios进行网络请求。起初封装很简单，只包含<code>get</code>和<code>post</code>两种请求接口：</p><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="comment">// http.js</span></span><br><span class="line"><span class="keyword">import</span> axios <span class="keyword">from</span> <span class="string">&#x27;axios&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * get方法，对应get请求</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> &#123;<span class="type">String</span>&#125; url [请求的url地址]</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> &#123;<span class="type">Object</span>&#125; params [请求时携带的参数]</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">get</span>(<span class="params">url, params</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =&gt;</span> &#123;</span><br><span class="line">        axios.<span class="title function_">get</span>(url, &#123;</span><br><span class="line">            <span class="attr">params</span>: params</span><br><span class="line">        &#125;).<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> &#123;</span><br><span class="line">            <span class="title function_">resolve</span>(res);</span><br><span class="line">        &#125;).<span class="title function_">catch</span>(<span class="function"><span class="params">err</span> =&gt;</span> &#123;</span><br><span class="line">            <span class="title function_">reject</span>(err)</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">/** </span></span><br><span class="line"><span class="comment"> * post方法，对应post请求 </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> &#123;<span class="type">String</span>&#125; url [请求的url地址] </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> &#123;<span class="type">Object</span>&#125; params [请求时携带的参数] </span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">post</span>(<span class="params">url, params</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =&gt;</span> &#123;</span><br><span class="line">        axios.<span class="title function_">post</span>(url, <span class="variable constant_">QS</span>.<span class="title function_">stringify</span>(params))</span><br><span class="line">            .<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> &#123;</span><br><span class="line">                <span class="title function_">resolve</span>(res);</span><br><span class="line">            &#125;)</span><br><span class="line">            .<span class="title function_">catch</span>(<span class="function"><span class="params">err</span> =&gt;</span> &#123;</span><br><span class="line">                <span class="title function_">reject</span>(err)</span><br><span class="line">            &#125;)</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使用时：</p><figure class="highlight js"><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="keyword">import</span> &#123; get, post &#125; <span class="keyword">from</span> <span class="string">&#x27;./http/http&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> url = <span class="string">&#x27;http://localhost:10119/idiom/queryStoryByWord?word=%E6%9C%9D%E4%B8%89%E6%9A%AE%E5%9B%9B&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="title function_">get</span>(url).<span class="title function_">then</span>(<span class="function">(<span class="params">response</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(response)</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><p>后经过一次更新升级：</p><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="comment">// request.js</span></span><br><span class="line"><span class="keyword">import</span> axios <span class="keyword">from</span> <span class="string">&#x27;axios&#x27;</span> </span><br><span class="line"><span class="comment">//axios响应头，直接copy官方文档</span></span><br><span class="line">axios.<span class="property">defaults</span>.<span class="property">headers</span>.<span class="property">post</span>[<span class="string">&#x27;Content-Type&#x27;</span>] = <span class="string">&#x27;application/x-www-form-urlencoded&#x27;</span></span><br><span class="line"><span class="comment">//axios接口地址 本地就是localhost,使用时替换成后端的地址就行了</span></span><br><span class="line">axios.<span class="property">defaults</span>.<span class="property">baseURL</span> = <span class="string">&#x27;//localhost:10119&#x27;</span> </span><br><span class="line"> </span><br><span class="line"><span class="comment">//声明一个function request 用于封装axios，他接受一个url，type和data</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="keyword">function</span> <span class="title function_">request</span>(<span class="params">url, type = <span class="string">&#x27;GET&#x27;</span>, data = &#123;&#125;</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">let</span> option = &#123;</span><br><span class="line">      url,</span><br><span class="line">      <span class="attr">method</span>: type,</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//tolowercase转换成小写===get的话</span></span><br><span class="line">    <span class="keyword">if</span>(type.<span class="title function_">toLowerCase</span>() === <span class="string">&#x27;get&#x27;</span>) &#123;</span><br><span class="line">        <span class="comment">//`params` 是即将与请求一起发送的 URL 参数</span></span><br><span class="line">      option.<span class="property">params</span> = data</span><br><span class="line">      <span class="comment">//否则的话就等于自己输入的data</span></span><br><span class="line">    &#125;<span class="keyword">else</span> &#123;</span><br><span class="line">      option.<span class="property">data</span> = data</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//如果有token</span></span><br><span class="line">    <span class="keyword">if</span>(<span class="variable language_">localStorage</span>.<span class="property">token</span>) &#123;</span><br><span class="line">      axios.<span class="property">defaults</span>.<span class="property">headers</span>.<span class="property">common</span>[<span class="string">&#x27;Authorization&#x27;</span>]  = <span class="variable language_">localStorage</span>.<span class="property">token</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="title function_">axios</span>(option).<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> &#123;</span><br><span class="line">      <span class="comment">// console.log(res.data);</span></span><br><span class="line">      </span><br><span class="line">      <span class="comment">//如果res.data.status的状态为ok且本地的token和res.data.token一样那么就resolve</span></span><br><span class="line">      <span class="keyword">if</span>(res.<span class="property">status</span>===<span class="number">200</span> &amp;&amp; res.<span class="property">data</span>.<span class="property">code</span> === <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span>(res.<span class="property">data</span>.<span class="property">token</span>) &#123;</span><br><span class="line">          <span class="variable language_">localStorage</span>.<span class="property">token</span> = res.<span class="property">data</span>.<span class="property">token</span></span><br><span class="line">        &#125;</span><br><span class="line">        <span class="title function_">resolve</span>(res.<span class="property">data</span>)</span><br><span class="line">        <span class="comment">//否则的话就message错误然后reject</span></span><br><span class="line">      &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="title function_">reject</span>(res.<span class="property">data</span>)</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="comment">//捕获异常，如果什么都不是那就网络异常</span></span><br><span class="line">    &#125;).<span class="title function_">catch</span>(<span class="function"><span class="params">err</span> =&gt;</span> &#123;</span><br><span class="line">      <span class="title function_">reject</span>(&#123; <span class="attr">msg</span>: <span class="string">&#x27;网络异常:&#x27;</span>+err &#125;)</span><br><span class="line">    &#125;)</span><br><span class="line">  &#125;)</span><br><span class="line">&#125; </span><br><span class="line"><span class="comment">//使用方式  </span></span><br><span class="line"><span class="comment">// request(&#x27;/auth/login&#x27;, &#x27;POST&#x27;, &#123;username: &#x27;hunger&#x27;, password: &#x27;123456&#x27;&#125;)</span></span><br><span class="line"><span class="comment">//   .then(data=&gt;&#123;</span></span><br><span class="line"><span class="comment">//     console.log(data) </span></span><br><span class="line"><span class="comment">//   &#125;) </span></span><br></pre></td></tr></table></figure><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="comment">// api.js</span></span><br><span class="line"><span class="keyword">import</span> request <span class="keyword">from</span> <span class="string">&#x27;./request.js&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//直接声明一个URL存储接口地址</span></span><br><span class="line"><span class="keyword">const</span> <span class="variable constant_">URL</span> = &#123;</span><br><span class="line">    <span class="attr">GET_IDIOM_BY_ID</span>: <span class="string">&#x27;/idiom/queryById&#x27;</span></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> &#123;</span><br><span class="line">    <span class="title function_">queryById</span>(<span class="params">&#123; id &#125;</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="title function_">request</span>(<span class="variable constant_">URL</span>.<span class="property">GET_IDIOM_BY_ID</span>, <span class="string">&#x27;GET&#x27;</span>, &#123; id &#125;);</span><br><span class="line">    &#125;,</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>使用时：</p><figure class="highlight js"><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">import</span> api <span class="keyword">from</span> <span class="string">&#x27;./http/api.js&#x27;</span></span><br><span class="line"></span><br><span class="line">api.<span class="title function_">queryById</span>(&#123;<span class="attr">id</span>:<span class="number">3506</span>&#125;).<span class="title function_">then</span>(<span class="function"><span class="params">data</span> =&gt;</span> &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(data);</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><p>这样做的好处是后续只需要维护好业务访问接口<code>api.js</code>就好。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="http" scheme="https://sogrey.github.io/categories/http/"/>
    
    
    <category term="http" scheme="https://sogrey.github.io/tags/http/"/>
    
    <category term="api" scheme="https://sogrey.github.io/tags/api/"/>
    
  </entry>
  
  <entry>
    <title>如何使mysql生成.db文件</title>
    <link href="https://sogrey.github.io/article/%E5%A6%82%E4%BD%95%E4%BD%BFmysql%E7%94%9F%E6%88%90-db%E6%96%87%E4%BB%B6/"/>
    <id>https://sogrey.github.io/article/%E5%A6%82%E4%BD%95%E4%BD%BFmysql%E7%94%9F%E6%88%90-db%E6%96%87%E4%BB%B6/</id>
    <published>2022-03-20T04:52:01.000Z</published>
    <updated>2026-05-20T18:33:18.029Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="1-下载sqllite数据库"><a href="#1-下载sqllite数据库" class="headerlink" title="1. 下载sqllite数据库"></a>1. 下载sqllite数据库</h2><p>在本机中安装sqlite数据库。下载地址为（<a href="http://www.sqlite.org/download.html">http://www.sqlite.org/download.html</a>）。windows下载<a href="https://www.sqlite.org/2022/sqlite-tools-win32-x86-3380100.zip">sqlite-tools-win32-x86-3380100.zip</a></p><p>加载完成后解压并添加到环境变量<code>path</code>中，<code>cmd</code>输入<code>sqlite3</code>，会有提示SQLite version等等的提示，表示安装成功；</p><figure class="highlight cmd"><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">Microsoft Windows [版本 <span class="number">10</span>.<span class="number">0</span>.<span class="number">19043</span>.<span class="number">1586</span>]</span><br><span class="line">(c) Microsoft Corporation。保留所有权利。</span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">C:\<span class="title">Users</span>\<span class="title">Administrator</span>&gt;<span class="title">sqlite3</span></span></span><br><span class="line"><span class="function"><span class="title">SQLite</span> <span class="title">version</span> 3.38.1 2022-03-12 13:37:29</span></span><br><span class="line"><span class="function"><span class="title">Enter</span> &quot;.<span class="title">help</span>&quot; <span class="title">for</span> <span class="title">usage</span> <span class="title">hints</span>.</span></span><br><span class="line"><span class="function"><span class="title">Connected</span> <span class="title">to</span> <span class="title">a</span> <span class="title">transient</span> <span class="title">in</span>-<span class="title">memory</span> <span class="title">database</span>.</span></span><br><span class="line"><span class="function"><span class="title">Use</span> &quot;.<span class="title">open</span> <span class="title">FILENAME</span>&quot; <span class="title">to</span> <span class="title">reopen</span> <span class="title">on</span> <span class="title">a</span> <span class="title">persistent</span> <span class="title">database</span>.</span></span><br><span class="line"><span class="function"><span class="title">sqlite</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="2-创建准备装载数据的sqlite数据库（xxx-db）"><a href="#2-创建准备装载数据的sqlite数据库（xxx-db）" class="headerlink" title="2. 创建准备装载数据的sqlite数据库（xxx.db）"></a>2. 创建准备装载数据的sqlite数据库（xxx.db）</h2><p>进入指定文件夹，在此文件夹中运行<code>cmd</code>，输入命令<code>sqlite3 chinese-idiom.db</code>回车，然后输入<code>.database</code>，就会自动创建一个数据库（chinese-idiom.db）；</p><figure class="highlight cmd"><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></pre></td><td class="code"><pre><span class="line"><span class="function">C:\<span class="title">Users</span>\<span class="title">Administrator</span>\<span class="title">Documents</span>\<span class="title">dumps</span>\<span class="title">Chinese</span>-<span class="title">idiom</span>&gt;<span class="title">sqlite3</span> <span class="title">chinese</span>-<span class="title">idiom.db</span></span></span><br><span class="line"><span class="function"><span class="title">SQLite</span> <span class="title">version</span> 3.38.1 2022-03-12 13:37:29</span></span><br><span class="line"><span class="function"><span class="title">Enter</span> &quot;.<span class="title">help</span>&quot; <span class="title">for</span> <span class="title">usage</span> <span class="title">hints</span>.</span></span><br><span class="line"><span class="function"><span class="title">sqlite</span>&gt; .<span class="title">database</span></span></span><br><span class="line"><span class="function"><span class="title">main</span>: <span class="title">C</span>:\<span class="title">Users</span>\<span class="title">Administrator</span>\<span class="title">Documents</span>\<span class="title">dumps</span>\<span class="title">Chinese</span>-<span class="title">idiom</span>\<span class="title">chinese</span>-<span class="title">idiom.db</span> <span class="title">r</span>/<span class="title">w</span></span></span><br><span class="line"><span class="function"><span class="title">sqlite</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="3-使用navicat连接sqlite数据库"><a href="#3-使用navicat连接sqlite数据库" class="headerlink" title="3. 使用navicat连接sqlite数据库"></a>3. 使用navicat连接sqlite数据库</h2><p>点击<code>连接</code>，选中<code>sqlite</code>，连接名填写<code>chinese-idiom.db</code>，选择‘现有数据库文件’，选中数据库（chinese-idiom.db）的路径，连接测试。</p><h2 id="4-使用navicat把mysql数据传输数据到chinese-idiom-db中"><a href="#4-使用navicat把mysql数据传输数据到chinese-idiom-db中" class="headerlink" title="4. 使用navicat把mysql数据传输数据到chinese-idiom.db中"></a>4. 使用navicat把mysql数据传输数据到chinese-idiom.db中</h2><p>用navicat连接mysql数据库，选中需要转移的数据库，右键选择<code>数据传输</code>。<code>常规</code>选项中的<code>源</code>，就是准备转移的数据源mysql。<code>目标</code>就是sqlite数据库，选中<code>chinese-idiom.db</code>，选中一个数据库（main）,然后点击开始传输。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="Mysql" scheme="https://sogrey.github.io/categories/Mysql/"/>
    
    
    <category term="Mysql" scheme="https://sogrey.github.io/tags/Mysql/"/>
    
    <category term="sqlite" scheme="https://sogrey.github.io/tags/sqlite/"/>
    
  </entry>
  
  <entry>
    <title>使用java8中Stream轻松遍历树形结构</title>
    <link href="https://sogrey.github.io/article/%E4%BD%BF%E7%94%A8java8%E4%B8%ADStream%E8%BD%BB%E6%9D%BE%E9%81%8D%E5%8E%86%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84/"/>
    <id>https://sogrey.github.io/article/%E4%BD%BF%E7%94%A8java8%E4%B8%ADStream%E8%BD%BB%E6%9D%BE%E9%81%8D%E5%8E%86%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84/</id>
    <published>2022-03-18T14:23:55.000Z</published>
    <updated>2026-05-20T18:33:18.029Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>之前发过一篇<a href="https://sogrey.top/article/json%E8%BD%AC%E6%A0%91%E7%8A%B6%E7%BB%93%E6%9E%84%EF%BC%88%E6%94%B6%E9%9B%86%EF%BC%89/">json转树状结构（收集）</a>以处理id-pid结构形式json数据转为树形结构，多年来再次看到同样问题却有了新的想法。</p><span id="more"></span><p>可能平常会遇到一些需求，比如构建菜单，构建树形结构，数据库一般就使用父id来表示，为了降低数据库的查询压力，我们可以使用Java8中的Stream流一次性把数据查出来，然后通过流式处理.</p><p>先看实体实现类：</p><p>Menu.java</p><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> top.sogrey.mulMenu;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Menu</span> &#123;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * id</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> Integer id;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 名称</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> String name;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 父id ，根节点为0</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> Integer parentId;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 子节点信息</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> List&lt;Menu&gt; childList;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="title function_">Menu</span><span class="params">(Integer id, String name, Integer parentId)</span> &#123;</span><br><span class="line"><span class="built_in">this</span>.id = id;</span><br><span class="line"><span class="built_in">this</span>.name = name;</span><br><span class="line"><span class="built_in">this</span>.parentId = parentId;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="title function_">Menu</span><span class="params">(Integer id, String name, Integer parentId, List&lt;Menu&gt; childList)</span> &#123;</span><br><span class="line"><span class="built_in">this</span>.id = id;</span><br><span class="line"><span class="built_in">this</span>.name = name;</span><br><span class="line"><span class="built_in">this</span>.parentId = parentId;</span><br><span class="line"><span class="built_in">this</span>.childList = childList;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> Integer <span class="title function_">getId</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="keyword">return</span> id;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setId</span><span class="params">(Integer id)</span> &#123;</span><br><span class="line"><span class="built_in">this</span>.id = id;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> String <span class="title function_">getName</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="keyword">return</span> name;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setName</span><span class="params">(String name)</span> &#123;</span><br><span class="line"><span class="built_in">this</span>.name = name;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> Integer <span class="title function_">getParentId</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="keyword">return</span> parentId;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setParentId</span><span class="params">(Integer parentId)</span> &#123;</span><br><span class="line"><span class="built_in">this</span>.parentId = parentId;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> List&lt;Menu&gt; <span class="title function_">getChildList</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="keyword">return</span> childList;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setChildList</span><span class="params">(List&lt;Menu&gt; childList)</span> &#123;</span><br><span class="line"><span class="built_in">this</span>.childList = childList;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>java 8 中的 Stream 递归组装树形结构：</p><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> top.sogrey.mulMenu;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.util.Arrays;</span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"><span class="keyword">import</span> java.util.Objects;</span><br><span class="line"><span class="keyword">import</span> java.util.stream.Collectors;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> com.alibaba.fastjson.JSON;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">MulMenu</span> &#123;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span> &#123;</span><br><span class="line">testtree();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">testtree</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="comment">// 模拟从数据库查询出来</span></span><br><span class="line">List&lt;Menu&gt; menus = Arrays.asList(</span><br><span class="line">            <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">1</span>, <span class="string">&quot;根节点&quot;</span>, <span class="number">0</span>), <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">2</span>, <span class="string">&quot;子节点1&quot;</span>, <span class="number">1</span>), <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">3</span>, <span class="string">&quot;子节点1.1&quot;</span>, <span class="number">2</span>),</span><br><span class="line"><span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">4</span>, <span class="string">&quot;子节点1.2&quot;</span>, <span class="number">2</span>), <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">5</span>, <span class="string">&quot;根节点1.3&quot;</span>, <span class="number">2</span>), <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">6</span>, <span class="string">&quot;根节点2&quot;</span>, <span class="number">1</span>),</span><br><span class="line">            <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">7</span>, <span class="string">&quot;根节点2.1&quot;</span>, <span class="number">6</span>),<span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">8</span>, <span class="string">&quot;根节点2.2&quot;</span>, <span class="number">6</span>), <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">9</span>, <span class="string">&quot;根节点2.2.1&quot;</span>, <span class="number">7</span>),</span><br><span class="line">            <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">10</span>, <span class="string">&quot;根节点2.2.2&quot;</span>, <span class="number">7</span>), <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">11</span>, <span class="string">&quot;根节点3&quot;</span>, <span class="number">1</span>), <span class="keyword">new</span> <span class="title class_">Menu</span>(<span class="number">12</span>, <span class="string">&quot;根节点3.1&quot;</span>, <span class="number">11</span>));</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获取父节点</span></span><br><span class="line">List&lt;Menu&gt; collect = menus.stream().filter(m -&gt; m.getParentId() == <span class="number">0</span>).map((m) -&gt; &#123;</span><br><span class="line">m.setChildList(getChildrens(m, menus));</span><br><span class="line"><span class="keyword">return</span> m;</span><br><span class="line">&#125;).collect(Collectors.toList());</span><br><span class="line">System.out.println(JSON.toJSON(collect));</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="comment"> * 递归查询子节点</span></span><br><span class="line"><span class="comment"> * </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> root 根节点</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> all  所有节点</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return</span> 根节点信息</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">static</span> List&lt;Menu&gt; <span class="title function_">getChildrens</span><span class="params">(Menu root, List&lt;Menu&gt; all)</span> &#123;</span><br><span class="line">List&lt;Menu&gt; children = all.stream().filter(m -&gt; &#123;</span><br><span class="line"><span class="keyword">return</span> Objects.equals(m.getParentId(), root.getId());</span><br><span class="line">&#125;).map((m) -&gt; &#123;</span><br><span class="line">m.setChildList(getChildrens(m, all));</span><br><span class="line"><span class="keyword">return</span> m;</span><br><span class="line">&#125;).collect(Collectors.toList());</span><br><span class="line"><span class="keyword">return</span> children;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>输出结构如下：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点&quot;</span><span class="punctuation">,</span> </span><br><span class="line">        <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="punctuation">&#123;</span></span><br><span class="line">                <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;子节点1&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                    <span class="punctuation">&#123;</span></span><br><span class="line">                        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;子节点1.1&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span> <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">3</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">2</span></span><br><span class="line">                    <span class="punctuation">&#125;</span><span class="punctuation">,</span> </span><br><span class="line">                    <span class="punctuation">&#123;</span></span><br><span class="line">                        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;子节点1.2&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span> <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">4</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">2</span></span><br><span class="line">                    <span class="punctuation">&#125;</span><span class="punctuation">,</span> </span><br><span class="line">                    <span class="punctuation">&#123;</span></span><br><span class="line">                        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点1.3&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span> <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">5</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">2</span></span><br><span class="line">                    <span class="punctuation">&#125;</span></span><br><span class="line">                <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">2</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">1</span></span><br><span class="line">            <span class="punctuation">&#125;</span><span class="punctuation">,</span> </span><br><span class="line">            <span class="punctuation">&#123;</span></span><br><span class="line">                <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点2&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                    <span class="punctuation">&#123;</span></span><br><span class="line">                        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点2.1&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                            <span class="punctuation">&#123;</span></span><br><span class="line">                                <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点2.2.1&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                                <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span> <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                                <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">9</span><span class="punctuation">,</span> </span><br><span class="line">                                <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">7</span></span><br><span class="line">                            <span class="punctuation">&#125;</span><span class="punctuation">,</span> </span><br><span class="line">                            <span class="punctuation">&#123;</span></span><br><span class="line">                                <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点2.2.2&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                                <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span> <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                                <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">10</span><span class="punctuation">,</span> </span><br><span class="line">                                <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">7</span></span><br><span class="line">                            <span class="punctuation">&#125;</span></span><br><span class="line">                        <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">7</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">6</span></span><br><span class="line">                    <span class="punctuation">&#125;</span><span class="punctuation">,</span> </span><br><span class="line">                    <span class="punctuation">&#123;</span></span><br><span class="line">                        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点2.2&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span> <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">8</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">6</span></span><br><span class="line">                    <span class="punctuation">&#125;</span></span><br><span class="line">                <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">6</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">1</span></span><br><span class="line">            <span class="punctuation">&#125;</span><span class="punctuation">,</span> </span><br><span class="line">            <span class="punctuation">&#123;</span></span><br><span class="line">                <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点3&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                    <span class="punctuation">&#123;</span></span><br><span class="line">                        <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;根节点3.1&quot;</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;childList&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span> <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">12</span><span class="punctuation">,</span> </span><br><span class="line">                        <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">11</span></span><br><span class="line">                    <span class="punctuation">&#125;</span></span><br><span class="line">                <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">11</span><span class="punctuation">,</span> </span><br><span class="line">                <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">1</span></span><br><span class="line">            <span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span> </span><br><span class="line">        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="number">1</span><span class="punctuation">,</span> </span><br><span class="line">        <span class="attr">&quot;parentId&quot;</span><span class="punctuation">:</span> <span class="number">0</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">]</span></span><br></pre></td></tr></table></figure><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://mp.weixin.qq.com/s/obki4XsMKf-nZfScWVR6vA">别再写一堆的 for 循环了！Java 8 中的 Stream 轻松遍历树形结构，是真的牛逼！</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;之前发过一篇&lt;a href=&quot;https://sogrey.top/article/json%E8%BD%AC%E6%A0%91%E7%8A%B6%E7%BB%93%E6%9E%84%EF%BC%88%E6%94%B6%E9%9B%86%EF%BC%89/&quot;&gt;json转树状结构（收集）&lt;/a&gt;以处理id-pid结构形式json数据转为树形结构，多年来再次看到同样问题却有了新的想法。&lt;/p&gt;</summary>
    
    
    
    <category term="JavaScript" scheme="https://sogrey.github.io/categories/JavaScript/"/>
    
    
    <category term="JavaScript" scheme="https://sogrey.github.io/tags/JavaScript/"/>
    
    <category term="JSON" scheme="https://sogrey.github.io/tags/JSON/"/>
    
  </entry>
  
  <entry>
    <title>加油2021，期盼2022</title>
    <link href="https://sogrey.github.io/article/2021-2022/"/>
    <id>https://sogrey.github.io/article/2021-2022/</id>
    <published>2021-12-21T15:43:49.000Z</published>
    <updated>2026-05-20T18:33:18.026Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><ul><li><a href="https://sogrey.top/article/2021-2022/">致敬2020，重启2021</a></li><li><a href="https://sogrey.top/article/zj2019-zw2020/">总结2019，展望2020</a></li><li><a href="https://sogrey.top/article/%E5%86%8D%E8%A7%812018%EF%BC%8C%E4%BD%A0%E5%A5%BD2019/">再见2018，你好2019</a></li></ul><hr><p>写这篇总结时，正是西安疫情最紧张的时候，就今天公司所在大厦物业通知将关闭，即日起就要居家办公了，上次居家办公就是新冠疫情刚刚爆发时。现在看着每天新增病例，心情不是一般的沉重,扶好键盘准备写些什么，却也没了主意，就只能简单的总述下吧，多的也没心思写了。只“西”望你我都“安”然无恙，西安加油。</p><span id="more"></span><h2 id="工作上"><a href="#工作上" class="headerlink" title="工作上"></a>工作上</h2><p>今年年初是的工作重心还在CAD渲染引擎上，逐步实现LOD方式加载，合并渲染着色器参数到texture中去采样。CAD渲染引擎逐步趋于稳定，逐步减慢开发，着重结合客户反馈，修复和优化。年中，重回BIM引擎组，主要的工作重心在引擎上层引用接口和功能的开发，开发了独立插件模块立方导航、剖面框系统、光源等，虽然截止至今，光源模块中的锯齿问题还在，由于底层原因，比较难以解决。</p><p>由于在BIM引擎开发中，已有部分开发力量转向UE4,将来会遇到更多BIM引擎的客户反馈，我相信自己可以做好。</p><p>入公司已多年，见证公司自14年以来发展历程，也发展得越来越好，相信今后会更好。</p><h2 id="个人提升"><a href="#个人提升" class="headerlink" title="个人提升"></a>个人提升</h2><p>虽然今年全年的工作重心都在引擎开发上，不论是CAD引擎（three.js开发）还是BIM引擎（Cesium开发），在三维世界中，遇到很多与旋转矩阵计算相关的内容，这块是我所欠缺的，每次计算旋转矩阵都会很头疼，但是还好，不论是自己摸索还是技穷时请教同事们，最终有圆满解决，在三维空间各矩阵计算能力有所提升，但还不够，有时任然会毫无头绪。</p><h2 id="生活上"><a href="#生活上" class="headerlink" title="生活上"></a>生活上</h2><p>疫情爆发以来，陆陆续续会有不安的因素，每天出门都习惯口罩，还是希望能早日安心的呼吸。</p><p>一直嘴上说要考的驾考，成功通过科目二，科目三 两次都未通过，看来又要往后拖了。</p>]]></content>
    
    
    <summary type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sogrey.top/article/2021-2022/&quot;&gt;致敬2020，重启2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sogrey.top/article/zj2019-zw2020/&quot;&gt;总结2019，展望2020&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sogrey.top/article/%E5%86%8D%E8%A7%812018%EF%BC%8C%E4%BD%A0%E5%A5%BD2019/&quot;&gt;再见2018，你好2019&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;写这篇总结时，正是西安疫情最紧张的时候，就今天公司所在大厦物业通知将关闭，即日起就要居家办公了，上次居家办公就是新冠疫情刚刚爆发时。现在看着每天新增病例，心情不是一般的沉重,扶好键盘准备写些什么，却也没了主意，就只能简单的总述下吧，多的也没心思写了。只“西”望你我都“安”然无恙，西安加油。&lt;/p&gt;</summary>
    
    
    
    <category term="年终总结" scheme="https://sogrey.github.io/categories/%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/"/>
    
    
    <category term="年终总结" scheme="https://sogrey.github.io/tags/%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/"/>
    
  </entry>
  
  <entry>
    <title>JS操作iframe元素</title>
    <link href="https://sogrey.github.io/article/JS%E6%93%8D%E4%BD%9Ciframe%E5%85%83%E7%B4%A0/"/>
    <id>https://sogrey.github.io/article/JS%E6%93%8D%E4%BD%9Ciframe%E5%85%83%E7%B4%A0/</id>
    <published>2021-12-14T15:39:03.000Z</published>
    <updated>2026-05-20T18:33:18.026Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>本文主要给大家介绍了关于利用JS对iframe父子（内外）页面进行操作的方法.</p><span id="more"></span><h2 id="1-获得iframe的window对象"><a href="#1-获得iframe的window对象" class="headerlink" title="1. 获得iframe的window对象"></a>1. 获得iframe的window对象</h2><p>存在跨域访问限制。</p><ul><li>chrome：iframeElement. contentWindow</li><li>firefox：iframeElement.contentWindow</li><li>ie6：iframeElement.contentWindow</li></ul><p>一些浏览器可以通过iframeElement.contentDocument.parentWindow获得iframe的window对象。但经过测试firefox、chrome的element.contentDocument对象没有parentWindow属性。</p><figure class="highlight js"><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="keyword">function</span> <span class="title function_">getIframeWindow</span>(<span class="params">element</span>)&#123;</span><br><span class="line">    <span class="keyword">return</span>  element.<span class="property">contentWindow</span>;</span><br><span class="line">    <span class="comment">//return  element.contentWindow || element.contentDocument.parentWindow;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="2-获得iframe的document对象"><a href="#2-获得iframe的document对象" class="headerlink" title="2. 获得iframe的document对象"></a>2. 获得iframe的document对象</h2><p>存在跨域访问限制。</p><ul><li>chrome：iframeElement.contentDocument</li><li>firefox：iframeElement.contentDocument</li><li>ie：element.contentWindow.document</li></ul><blockquote><p>备注：ie没有iframeElement.contentDocument属性。</p></blockquote><figure class="highlight js"><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="keyword">var</span> getIframeDocument = <span class="keyword">function</span>(<span class="params">element</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span>  element.<span class="property">contentDocument</span> || element.<span class="property">contentWindow</span>.<span class="property">document</span>;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="3-iframe中获得父页面的window对象"><a href="#3-iframe中获得父页面的window对象" class="headerlink" title="3. iframe中获得父页面的window对象"></a>3. iframe中获得父页面的window对象</h2><p>存在跨域访问限制。</p><ul><li>父页面：window.parent</li><li>顶层页面：window.top</li></ul><blockquote><p>适用于所有浏览器</p></blockquote><h2 id="4-获得iframe在父页面中的html标签"><a href="#4-获得iframe在父页面中的html标签" class="headerlink" title="4. 获得iframe在父页面中的html标签"></a>4. 获得iframe在父页面中的html标签</h2><p>存在跨域访问限制。</p><p>window.frameElement（类型：HTMLElement）</p><blockquote><p>适用于所有浏览器</p></blockquote><h2 id="5-iframe的onload事件"><a href="#5-iframe的onload事件" class="headerlink" title="5. iframe的onload事件"></a>5. iframe的onload事件</h2><p>非ie浏览器都提供了onload事件。例如下面代码在ie中是不会有弹出框的。</p><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ifr = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;iframe&#x27;</span>);</span><br><span class="line">ifr.<span class="property">src</span> = <span class="string">&#x27;http://www.b.com/index.php&#x27;</span>;</span><br><span class="line">ifr.<span class="property">onload</span> = <span class="keyword">function</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="title function_">alert</span>(<span class="string">&#x27;loaded&#x27;</span>);</span><br><span class="line">&#125;;</span><br><span class="line"><span class="variable language_">document</span>.<span class="property">body</span>.<span class="title function_">appendChild</span>(ifr);</span><br></pre></td></tr></table></figure><p>但是ie却又似乎提供了onload事件，下面两种方法都会触发onload</p><p>方法一：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">iframe</span>  <span class="attr">onload</span>=<span class="string">&quot;alert(&#x27;loaded&#x27;);&quot;</span>  <span class="attr">src</span>=<span class="string">&quot;http://www.b.com/index.php&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">iframe</span>&gt;</span></span><br></pre></td></tr></table></figure><p>方法二：</p><figure class="highlight js"><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">//只有ie才支持为createElement传递这样的参数</span></span><br><span class="line"><span class="keyword">var</span> ifr = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;&lt;iframe  onload=&quot;alert(&#x27;</span>loaded<span class="string">&#x27;);&quot; src=&quot;http://www.b.com/index.php&quot;&gt;&lt;/iframe&gt;&#x27;</span>);</span><br><span class="line"><span class="variable language_">document</span>.<span class="property">body</span>.<span class="title function_">appendChild</span>(ifr);</span><br></pre></td></tr></table></figure><p>由于iframe元素包含于父级页面中，因此以上方法均不存在跨域问题。</p><p>实际上IE提供了onload事件，但必须使用attachEvent进行绑定。</p><figure class="highlight js"><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">var</span> ifr = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;iframe&#x27;</span>);</span><br><span class="line">ifr.<span class="property">src</span> = <span class="string">&#x27;http://b.a.com/b.php&#x27;</span>;</span><br><span class="line"><span class="keyword">if</span> (ifr.<span class="property">attachEvent</span>) &#123;</span><br><span class="line">    ifr.<span class="title function_">attachEvent</span>(<span class="string">&#x27;onload&#x27;</span>,  <span class="keyword">function</span>(<span class="params"></span>)&#123; <span class="title function_">alert</span>(<span class="string">&#x27;loaded&#x27;</span>); &#125;);</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    ifr.<span class="property">onload</span>  = <span class="keyword">function</span>(<span class="params"></span>) &#123; <span class="title function_">alert</span>(<span class="string">&#x27;loaded&#x27;</span>); &#125;;</span><br><span class="line">&#125;</span><br><span class="line"><span class="variable language_">document</span>.<span class="property">body</span>.<span class="title function_">appendChild</span>(ifr);</span><br></pre></td></tr></table></figure><h2 id="6-frames"><a href="#6-frames" class="headerlink" title="6. frames"></a>6. frames</h2><p>window.frames可以取到页面中的帧(iframe、frame等)，需要注意的是取到的是window对象，而不是HTMLElement。</p><figure class="highlight js"><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="keyword">var</span> ifr1 = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">&#x27;ifr1&#x27;</span>);</span><br><span class="line"><span class="keyword">var</span> ifr1win = <span class="variable language_">window</span>.<span class="property">frames</span>[<span class="number">0</span>];</span><br><span class="line">ifr1win.<span class="property">frameElement</span> === ifr1;   <span class="comment">// true</span></span><br><span class="line">ifr1win === ifr1;    <span class="comment">// false</span></span><br></pre></td></tr></table></figure><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://www.cnblogs.com/rainman/archive/2011/02/16/1956431.html">JS操作iframe</a></li><li><a href="https://www.cnblogs.com/html55/p/10163631.html">JS操作iframe元素</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文主要给大家介绍了关于利用JS对iframe父子（内外）页面进行操作的方法.&lt;/p&gt;</summary>
    
    
    
    <category term="JS" scheme="https://sogrey.github.io/categories/JS/"/>
    
    
    <category term="JS" scheme="https://sogrey.github.io/tags/JS/"/>
    
  </entry>
  
  <entry>
    <title>Linux上安装部署nginx</title>
    <link href="https://sogrey.github.io/article/Linux%E4%B8%8A%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2nginx/"/>
    <id>https://sogrey.github.io/article/Linux%E4%B8%8A%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2nginx/</id>
    <published>2021-12-02T13:17:24.000Z</published>
    <updated>2026-05-20T18:33:18.026Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="1-安装依赖包"><a href="#1-安装依赖包" class="headerlink" title="1 安装依赖包"></a>1 安装依赖包</h2><p>安装Nginx需要依赖下面几个包：</p><ol><li><code>gzip</code> 模块需要 <code>zlib</code> 库 ( 下载: <a href="http://www.zlib.net/">http://www.zlib.net/</a> )</li><li><code>rewrite</code> 模块需要 <code>pcre</code> 库 ( 下载: <a href="http://www.pcre.org/">http://www.pcre.org/</a> )</li><li><code>ssl</code> 功能需要 <code>openssl</code> 库 ( 下载: <a href="http://www.openssl.org/">http://www.openssl.org/</a> )</li></ol><p>依赖包安装顺序依次为:openssl、zlib、pcre, 然后安装Nginx包</p><p>在线安装执行以下命令：</p><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">yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel</span><br></pre></td></tr></table></figure><h2 id="2-下载Nginx并解压安装包"><a href="#2-下载Nginx并解压安装包" class="headerlink" title="2 下载Nginx并解压安装包"></a>2 下载Nginx并解压安装包</h2><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="built_in">cd</span> /usr/local </span><br><span class="line"><span class="built_in">mkdir</span> nginx <span class="comment"># 创建一个文件夹</span></span><br><span class="line"><span class="built_in">cd</span> nginx</span><br><span class="line">wget http://nginx.org/download/nginx-1.13.7.tar.gz <span class="comment"># 下载tar包</span></span><br><span class="line">tar -xvf nginx-1.13.7.tar.gz <span class="comment"># 解压</span></span><br></pre></td></tr></table></figure><h2 id="3-安装nginx"><a href="#3-安装nginx" class="headerlink" title="3 安装nginx"></a>3 安装nginx</h2><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="built_in">cd</span> /usr/local/nginx <span class="comment"># 进入nginx目录</span></span><br><span class="line"><span class="built_in">cd</span> nginx-1.13.7</span><br><span class="line">./configure <span class="comment"># 执行命令</span></span><br><span class="line">make <span class="comment"># 执行make命令</span></span><br><span class="line">make install <span class="comment"># 执行make install命令</span></span><br></pre></td></tr></table></figure><h2 id="4-配置nginx-conf"><a href="#4-配置nginx-conf" class="headerlink" title="4 配置nginx.conf"></a>4 配置nginx.conf</h2><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">vi /usr/local/nginx/conf/nginx.conf <span class="comment"># 打开配置文件</span></span><br></pre></td></tr></table></figure><p>&#x2F;&#x2F; TODO</p><h2 id="5-启动nginx"><a href="#5-启动nginx" class="headerlink" title="5 启动nginx"></a>5 启动nginx</h2><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">/usr/local/nginx/sbin/nginx -s reload</span><br></pre></td></tr></table></figure><p>查看nginx进程是否启动：</p><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">ps -ef | grep nginx</span><br></pre></td></tr></table></figure><h2 id="6-访问服务器ip查看"><a href="#6-访问服务器ip查看" class="headerlink" title="6 访问服务器ip查看"></a>6 访问服务器ip查看</h2><h2 id="7-一般常用命令"><a href="#7-一般常用命令" class="headerlink" title="7 一般常用命令"></a>7 一般常用命令</h2><p>进入安装目录中，命令：</p><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"><span class="built_in">cd</span> /usr/local/nginx/sbin</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line">./nginx           <span class="comment"># 启动</span></span><br><span class="line">./nginx -s stop   <span class="comment"># 关闭</span></span><br><span class="line">./nginx -s reload <span class="comment"># 重启</span></span><br></pre></td></tr></table></figure><h2 id="常见异常处理"><a href="#常见异常处理" class="headerlink" title="常见异常处理"></a>常见异常处理</h2><h3 id="1-nginx-error-open-＂-usr-local-nginx-logs-nginx-pid＂-failed"><a href="#1-nginx-error-open-＂-usr-local-nginx-logs-nginx-pid＂-failed" class="headerlink" title="1. nginx: [error] open() ＂&#x2F;usr&#x2F;local&#x2F;nginx&#x2F;logs&#x2F;nginx.pid＂ failed"></a>1. nginx: [error] open() ＂&#x2F;usr&#x2F;local&#x2F;nginx&#x2F;logs&#x2F;nginx.pid＂ failed</h3><p>如果出现报错：<code>nginx: [error] open() ＂/usr/local/nginx/logs/nginx.pid＂ failed</code></p><p>则运行： </p><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">/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf</span><br></pre></td></tr></table></figure><p>重新启动即可！</p><h3 id="2-外部主机访问虚拟机连接异常"><a href="#2-外部主机访问虚拟机连接异常" class="headerlink" title="2. 外部主机访问虚拟机连接异常"></a>2. 外部主机访问虚拟机连接异常</h3><p>若想使用外部主机连接上虚拟机访问端口192.168.131.2，需要关闭虚拟机的防火墙：</p><p>centOS6及以前版本使用命令： </p><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">systemctl stop iptables.service</span><br></pre></td></tr></table></figure><p>centOS7关闭防火墙命令： </p><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">systemctl stop firewalld.service</span><br></pre></td></tr></table></figure><p>随后访问该ip即可看到nginx界面。</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://blog.csdn.net/t8116189520/article/details/81909574">LINUX安装nginx详细步骤</a></li><li><a href="https://blog.csdn.net/grhlove123/article/details/47834673">Linux 安装Nginx详细图解教程</a></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="Linux" scheme="https://sogrey.github.io/categories/Linux/"/>
    
    
    <category term="Linux" scheme="https://sogrey.github.io/tags/Linux/"/>
    
    <category term="nginx" scheme="https://sogrey.github.io/tags/nginx/"/>
    
  </entry>
  
  <entry>
    <title>Windows 10 之设置URL汇总</title>
    <link href="https://sogrey.github.io/article/Windows%2010%20%E4%B9%8B%E8%AE%BE%E7%BD%AEURL%E6%B1%87%E6%80%BB/"/>
    <id>https://sogrey.github.io/article/Windows%2010%20%E4%B9%8B%E8%AE%BE%E7%BD%AEURL%E6%B1%87%E6%80%BB/</id>
    <published>2021-11-17T16:32:45.000Z</published>
    <updated>2026-05-20T18:33:18.028Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>在Win10系统中系统设置其实也是一个Modern应用，它与ms-settings:协议进行了关联，在设置应用中的每一个具体的设置页面都有一个URI（统一资源标识符）与之对应，通过这些URI就可以直达某个具体的设置页面。</p><h2 id="如何使用这些URI"><a href="#如何使用这些URI" class="headerlink" title="如何使用这些URI"></a>如何使用这些URI</h2><ol><li>可以按Win+R打开运行，直接将URI粘贴到运行输入框回车即可；</li><li>可以新建快捷方式，将URI作为对象位置键入；</li><li>HTML a标签href；</li></ol><h2 id="分类设置页面URI"><a href="#分类设置页面URI" class="headerlink" title="分类设置页面URI"></a>分类设置页面URI</h2><table><thead><tr><th>设置页面</th><th>URL</th><th>a标签示例</th></tr></thead><tbody><tr><td>设置页</td><td><code>ms-settings:</code></td><td><a class="a-win" href="ms-settings:">设置页</a></td></tr><tr><td>系统显示</td><td><code>ms-settings:display</code> <code>ms-settings:screenrotation</code></td><td><a class="a-win" href="ms-settings:display">系统显示</a></td></tr><tr><td>通知</td><td><code>ms-settings:notifications</code></td><td><a class="a-win" href="ms-settings:notifications">通知</a></td></tr><tr><td>存储</td><td><code>ms-settings:storagesense</code></td><td><a class="a-win" href="ms-settings:storagesense">存储</a></td></tr><tr><td>节电模式</td><td><code>ms-settings:batterysaver</code></td><td><a class="a-win" href="ms-settings:batterysaver">节电模式</a></td></tr><tr><td>节电模式—设置</td><td><code>ms-settings:batterysaver-settings</code></td><td><a class="a-win" href="ms-settings:batterysaver-settings">节电模式—设置</a></td></tr><tr><td>电池使用情况</td><td><code>ms-settings:batterysaver-usagedetails</code></td><td><a class="a-win" href="ms-settings:batterysaver-usagedetails">电池使用情况</a></td></tr><tr><td>脱机地图</td><td><code>ms-settings:maps</code></td><td><a class="a-win" href="ms-settings:maps">脱机地图</a></td></tr><tr><td>设备蓝牙</td><td><code>ms-settings:bluetooth</code></td><td><a class="a-win" href="ms-settings:bluetooth">设备蓝牙</a></td></tr><tr><td>已连接设备</td><td><code>ms-settings:connecteddevices</code></td><td><a class="a-win" href="ms-settings:connecteddevices">已连接设备</a></td></tr><tr><td>鼠标和触摸版</td><td><code>ms-settings:mousetouchpad</code></td><td><a class="a-win" href="ms-settings:mousetouchpad">鼠标和触摸版</a></td></tr><tr><td>电源和睡眠</td><td><code>ms-settings:powersleep</code></td><td><a class="a-win" href="ms-settings:powersleep">电源和睡眠</a></td></tr><tr><td>飞行模式</td><td><code>ms-settings:network-airplanemode</code></td><td><a class="a-win" href="ms-settings:network-airplanemode">飞行模式</a></td></tr><tr><td>拨号网络</td><td><code>ms-settings:network-dialup</code></td><td><a class="a-win" href="ms-settings:network-dialup">拨号网络</a></td></tr><tr><td>以太网</td><td><code>ms-settings:network-ethernet</code></td><td><a class="a-win" href="ms-settings:network-ethernet">以太网</a></td></tr><tr><td>VPN</td><td><code>ms-settings:network-vpn</code></td><td><a class="a-win" href="ms-settings:network-vpn">VPN</a></td></tr><tr><td>代理</td><td><code>ms-settings:network-proxy</code></td><td><a class="a-win" href="ms-settings:network-proxy">代理</a></td></tr><tr><td>数据使用量</td><td><code>ms-settings:datausage</code></td><td><a class="a-win" href="ms-settings:datausage">数据使用量</a></td></tr><tr><td>Wi-Fi</td><td><code>ms-settings:network-wifi</code></td><td><a class="a-win" href="ms-settings:network-wifi">Wi-Fi</a></td></tr><tr><td>Mobile Hotspot</td><td><code>ms-settings:network-mobilehotspot</code></td><td><a class="a-win" href="ms-settings:network-mobilehotspot">Mobile Hotspot </a></td></tr><tr><td>开始</td><td><code>ms-settings:personalization-start</code></td><td><a class="a-win" href="ms-settings:personalization-start">开始</a></td></tr><tr><td>个性化锁屏</td><td><code>ms-settings:lockscreen</code></td><td><a class="a-win" href="ms-settings:lockscreen">个性化锁屏</a></td></tr><tr><td>个性化</td><td><code>ms-settings:personalization</code></td><td><a class="a-win" href="ms-settings:personalization">个性化</a></td></tr><tr><td>你的账户</td><td><code>ms-settings:emailandaccounts</code></td><td><a class="a-win" href="ms-settings:emailandaccounts">你的账户</a></td></tr><tr><td>工作单位访问</td><td><code>ms-settings:workplace</code></td><td><a class="a-win" href="ms-settings:workplace">工作单位访问</a></td></tr><tr><td>日期和时间</td><td><code>ms-settings:dateandtime</code></td><td><a class="a-win" href="ms-settings:dateandtime">日期和时间</a></td></tr><tr><td>区域和语言</td><td><code>ms-settings:regionlanguage</code></td><td><a class="a-win" href="ms-settings:regionlanguage">区域和语言</a></td></tr><tr><td>语音</td><td><code>ms-settings:speech</code></td><td><a class="a-win" href="ms-settings:speech">语音</a></td></tr><tr><td>隐私日历</td><td><code>ms-settings:privacy-calendar</code></td><td><a class="a-win" href="ms-settings:privacy-calendar">隐私日历</a></td></tr><tr><td>联系人</td><td><code>ms-settings:privacy-contacts</code></td><td><a class="a-win" href="ms-settings:privacy-contacts">联系人</a></td></tr><tr><td>反馈和诊断</td><td><code>ms-settings:privacy-feedback</code></td><td><a class="a-win" href="ms-settings:privacy-feedback">反馈和诊断</a></td></tr><tr><td>位置</td><td><code>ms-settings:privacy-location</code></td><td><a class="a-win" href="ms-settings:privacy-location">位置</a></td></tr><tr><td>消息传送</td><td><code>ms-settings:privacy-messaging</code></td><td><a class="a-win" href="ms-settings:privacy-messaging">消息传送</a></td></tr><tr><td>麦克风</td><td><code>ms-settings:privacy-microphone</code></td><td><a class="a-win" href="ms-settings:privacy-microphone">麦克风</a></td></tr><tr><td>其他设备</td><td><code>ms-settings:privacy-customdevices</code></td><td><a class="a-win" href="ms-settings:privacy-customdevices">其他设备</a></td></tr><tr><td>无线电收发器</td><td><code>ms-settings:privacy-radios</code></td><td><a class="a-win" href="ms-settings:privacy-radios">无线电收发器</a></td></tr><tr><td>语音、默迹书写和键入</td><td><code>ms-settings:privacy-speechtyping</code></td><td><a class="a-win" href="ms-settings:privacy-speechtyping">语音、默迹书写和键入</a></td></tr><tr><td>相机</td><td><code>ms-settings:privacy-webcam</code></td><td><a class="a-win" href="ms-settings:privacy-webcam">相机</a></td></tr><tr><td>隐藏式字幕</td><td><code>ms-settings:easeofaccess-closedcaptioning</code></td><td><a class="a-win" href="ms-settings:easeofaccess-closedcaptioning">隐藏式字幕</a></td></tr><tr><td>高对比度</td><td><code>ms-settings:easeofaccess-highcontrast</code></td><td><a class="a-win" href="ms-settings:easeofaccess-highcontrast">高对比度</a></td></tr><tr><td>放大镜</td><td><code>ms-settings:easeofaccess-magnifier</code></td><td><a class="a-win" href="ms-settings:easeofaccess-magnifier">放大镜</a></td></tr><tr><td>讲述人</td><td><code>ms-settings:easeofaccess-narrator</code></td><td><a class="a-win" href="ms-settings:easeofaccess-narrator">讲述人</a></td></tr><tr><td>键盘</td><td><code>ms-settings:easeofaccess-keyboard</code></td><td><a class="a-win" href="ms-settings:easeofaccess-keyboard">键盘</a></td></tr><tr><td>鼠标</td><td><code>ms-settings:easeofaccess-mouse</code></td><td><a class="a-win" href="ms-settings:easeofaccess-mouse">鼠标</a></td></tr><tr><td>其他选项</td><td><code>ms-settings:easeofaccess-otheroptions</code></td><td><a class="a-win" href="ms-settings:easeofaccess-otheroptions">其他选项</a></td></tr></tbody></table><style>a.a-win{color: #fff;    background: #fe7300;padding: 6px 20px;    font-weight: 500;    line-height: 24px;    font-size: 18px;    margin: 5px auto;    border-radius: 2px;-webkit-box-shadow: 0px 0em 0px 0px rgb(39 41 43 / 15%) inset;    box-shadow: 0px 0em 0px 0px rgb(39 41 43 / 15%) inset;text-shadow: none;cursor: pointer;    display: inline-block;    min-height: 1em;    outline: none;    border: none;    vertical-align: baseline;}</style>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="Windows" scheme="https://sogrey.github.io/categories/Windows/"/>
    
    
    <category term="Windows 10" scheme="https://sogrey.github.io/tags/Windows-10/"/>
    
  </entry>
  
  <entry>
    <title>OpenEuler安装UKUI</title>
    <link href="https://sogrey.github.io/article/OpenEuler%E5%AE%89%E8%A3%85UKUI/"/>
    <id>https://sogrey.github.io/article/OpenEuler%E5%AE%89%E8%A3%85UKUI/</id>
    <published>2021-09-28T13:15:03.000Z</published>
    <updated>2026-05-20T18:33:18.027Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>9 月 23 日-25 日，华为全联接 2021 在线上举办。近日，华为在全联接大会上发布了全新操作系统“openEuler 欧拉”。openEuler 是一个开源、免费的 Linux 发行版平台，将通过开放的社区形式与全球的开发者共同构建软件生态体系。同时，openEuler 也是一个创新的平台，鼓励任何人在该平台上提出新想法、开拓新思路、实践新方案。</p><span id="more"></span><ul><li><a href="https://openeuler.org/">openEuler官网</a> <a href="https://openeuler.org/">https://openeuler.org/</a></li></ul><p>下载地址：<a href="https://openeuler.org/zh/mirror/list/">https://openeuler.org/zh/mirror/list/</a></p><p>怀着对国产操作系统的支持，下载安装来体验一把。</p><p>安装过程其实也并不复杂，这里一笔带过。安装完成后重启看到下面界面：</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FopenEuler-01.png"></p><p>登入root账户:</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FopenEuler-02.png"></p><p>对于熟悉linux系统的资深linuxer,到这已经够用了。但对于我，命令行显然并不友好，下面安装GUI，GUI选择华为为OpenEuler研发的<a href="https://www.ukui.org/index.php?lang=cn">UKUI</a>。</p><p><a href="https://www.ukui.org/index.php?lang=cn">UKUI官网</a>有文<a href="https://www.ukui.org/news/shownews.php?id=96&lang=cn">UKUI for openEuler 发布！</a>,文末记录了如何安装UKUI。</p><p>开始安装UKUI,可直接使用<code>yum install</code>安装：</p><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">yum install ukui</span><br></pre></td></tr></table></figure><p>期间需要输入几次<code>y</code>已确认安装。</p><p>安装字体库：</p><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">yum groupinstall fonts -y</span><br></pre></td></tr></table></figure><p>确认以上安装完成后，输入：</p><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">systemctl set-default graphical.target</span><br></pre></td></tr></table></figure><p>重启(<code>reboot</code>)之后即可启动图形界面。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FopenEuler-03.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FopenEuler-04.png"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;9 月 23 日-25 日，华为全联接 2021 在线上举办。近日，华为在全联接大会上发布了全新操作系统“openEuler 欧拉”。openEuler 是一个开源、免费的 Linux 发行版平台，将通过开放的社区形式与全球的开发者共同构建软件生态体系。同时，openEuler 也是一个创新的平台，鼓励任何人在该平台上提出新想法、开拓新思路、实践新方案。&lt;/p&gt;</summary>
    
    
    
    <category term="Linux" scheme="https://sogrey.github.io/categories/Linux/"/>
    
    
    <category term="Linux" scheme="https://sogrey.github.io/tags/Linux/"/>
    
    <category term="OpenEuler" scheme="https://sogrey.github.io/tags/OpenEuler/"/>
    
    <category term="UKUI" scheme="https://sogrey.github.io/tags/UKUI/"/>
    
  </entry>
  
  <entry>
    <title>windows下修改vscode默认终端为git bash</title>
    <link href="https://sogrey.github.io/article/windows%E4%B8%8B%E4%BF%AE%E6%94%B9vscode%E9%BB%98%E8%AE%A4%E7%BB%88%E7%AB%AF%E4%B8%BAgit-bash/"/>
    <id>https://sogrey.github.io/article/windows%E4%B8%8B%E4%BF%AE%E6%94%B9vscode%E9%BB%98%E8%AE%A4%E7%BB%88%E7%AB%AF%E4%B8%BAgit-bash/</id>
    <published>2021-09-13T15:31:20.000Z</published>
    <updated>2026-05-20T18:33:18.028Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>最近我的Windows 10系统提示需要更新，而且是到了最后时间，将来将不会再为我推送更新提醒，我一般不愿意更新系统，浪费时间还老是出问题，这次看来非更新不可了，这或许又是微软的套路吧。</p><p>果然更新后，微软无耻的把自己的<code>Powershell</code>推上了舞台，这个工具好不好用不知道，我一般就用<code>CMD</code>和<code>Git Bash</code>,使用<code>Git Bash</code>会更多一些。</p><p>目前我做前端多一些，VSCode则是必不可少的编辑器了。自从系统更新后，VSCode终端就默认使用<code>Powershell</code>（如下图）,这让我一些<code>Bash</code>脚本无法执行，今天就来修改VSCode默认终端为<code>Git Bash</code>。</p><span id="more"></span><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fvscode-git-bash-01.png"></p><p>点击VSCode左下角的齿轮，展开点击[设置]</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fvscode-git-bash-02.png"></p><p>搜索关键词<code>shell</code>,选择<code>终端</code> &gt; <code>Terminal › Integrated › Automation Shell: Windows</code> &gt; <code>在 settings.json 中编辑</code></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fvscode-git-bash-03.png"></p><p>我之前配置的是下面这个，已经不能用了（具体可参考 <a href="https://code.visualstudio.com/docs/editor/integrated-terminal#_configuration">Integrated Terminal</a>）：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;terminal.integrated.profiles.windows&quot;</span><span class="punctuation">:</span> <span class="string">&quot;C:\\Program Files\\Git\\bin\\bash.exe&quot;</span><span class="punctuation">,</span></span><br></pre></td></tr></table></figure><p>将以下内容加到配置文件大括弧内：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;terminal.integrated.profiles.windows&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;PowerShell -NoProfile&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;source&quot;</span><span class="punctuation">:</span> <span class="string">&quot;PowerShell&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="string">&quot;-NoProfile&quot;</span></span><br><span class="line">      <span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;Git-Bash&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;C:\\Program Files\\Git\\bin\\bash.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;terminal.integrated.defaultProfile.windows&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Git-Bash&quot;</span><span class="punctuation">,</span></span><br></pre></td></tr></table></figure><p>我的 <code>Git bash</code> 安装在C盘就写C盘路径。</p><p>关闭配置，回到终端，点击下拉箭头，可以看到很多可选终端，并且<code>Git bash</code>设为默认，新建一个终端默认使用<code>Git Bash</code>。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fvscode-git-bash-04.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fvscode-git-bash-05.png"></p><p>终于我的<code>Bash</code>脚本又飞起来了。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fvscode-git-bash-06.png"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;最近我的Windows 10系统提示需要更新，而且是到了最后时间，将来将不会再为我推送更新提醒，我一般不愿意更新系统，浪费时间还老是出问题，这次看来非更新不可了，这或许又是微软的套路吧。&lt;/p&gt;
&lt;p&gt;果然更新后，微软无耻的把自己的&lt;code&gt;Powershell&lt;/code&gt;推上了舞台，这个工具好不好用不知道，我一般就用&lt;code&gt;CMD&lt;/code&gt;和&lt;code&gt;Git Bash&lt;/code&gt;,使用&lt;code&gt;Git Bash&lt;/code&gt;会更多一些。&lt;/p&gt;
&lt;p&gt;目前我做前端多一些，VSCode则是必不可少的编辑器了。自从系统更新后，VSCode终端就默认使用&lt;code&gt;Powershell&lt;/code&gt;（如下图）,这让我一些&lt;code&gt;Bash&lt;/code&gt;脚本无法执行，今天就来修改VSCode默认终端为&lt;code&gt;Git Bash&lt;/code&gt;。&lt;/p&gt;</summary>
    
    
    
    <category term="VSCode" scheme="https://sogrey.github.io/categories/VSCode/"/>
    
    
    <category term="VSCode" scheme="https://sogrey.github.io/tags/VSCode/"/>
    
    <category term="Git" scheme="https://sogrey.github.io/tags/Git/"/>
    
    <category term="Bash" scheme="https://sogrey.github.io/tags/Bash/"/>
    
  </entry>
  
  <entry>
    <title>玩转Windows子系统Linux之安装Kali Linux</title>
    <link href="https://sogrey.github.io/article/%E7%8E%A9%E8%BD%ACWindows%E5%AD%90%E7%B3%BB%E7%BB%9FLinux%E4%B9%8B%E5%AE%89%E8%A3%85Kali-Linux/"/>
    <id>https://sogrey.github.io/article/%E7%8E%A9%E8%BD%ACWindows%E5%AD%90%E7%B3%BB%E7%BB%9FLinux%E4%B9%8B%E5%AE%89%E8%A3%85Kali-Linux/</id>
    <published>2021-09-09T13:29:58.000Z</published>
    <updated>2026-05-20T18:33:18.030Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>准备工作可阅读前一篇<a href="http://sogrey.top/article/%E7%8E%A9%E8%BD%ACWindows%E5%AD%90%E7%B3%BB%E7%BB%9FLinux%E4%B9%8B%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/">玩转Windows子系统Linux之准备工作</a></p><h2 id="操作环境"><a href="#操作环境" class="headerlink" title="操作环境"></a>操作环境</h2><ul><li>主系统 ： Windows 10 专业版64位 [需要开启：开发者模式和Windows功能（适用于Linux的Windows子系统）]</li><li>子系统 ： Kali Linux</li></ul><span id="more"></span><h2 id="安装Kali-Linux子系统"><a href="#安装Kali-Linux子系统" class="headerlink" title="安装Kali Linux子系统"></a>安装Kali Linux子系统</h2><p>准备工作完成后，在 Windows 10 的软件商店中搜索<code>WSL</code>找到<code>Kali Linux</code>,点击 “获取” 之后系统会自动下载安装, 安装完成后会出现”启动”按钮。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl06.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl07.png"></p><p>点击“启动”，第一次正常启动子系统时会开始安装，安装完成之后会要求设置系统用户名和用户密码，用户名最好用小写英文，密码不要忘记，后面要用到。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl08.png"></p><p>至此, 子系统就安装完成了。类似的步骤也可以安装其他Linux，比如 Ubuntu Linux 。</p><h2 id="Win10子系统kali-linux安装图形化界面"><a href="#Win10子系统kali-linux安装图形化界面" class="headerlink" title="Win10子系统kali linux安装图形化界面"></a>Win10子系统kali linux安装图形化界面</h2><p>按<code>Ctrl+D</code>退出登录，并打开Windows命令行（<code>WIN+R</code> 输入<code>CMD</code>）输入如下命令:</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></pre></td><td class="code"><pre><span class="line">kali config --default-user root</span><br><span class="line"></span><br><span class="line">net stop LxssManager</span><br><span class="line">net start LxssManager</span><br></pre></td></tr></table></figure><p>从<code>开始</code>找到刚安装的<code>Kali Linux</code>打开就默认位<code>root</code>用户了。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl09.png"></p><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></pre></td><td class="code"><pre><span class="line">┌──(root💀DESKTOP-10KKBKG)-[~]</span><br><span class="line">└─# passwd root</span><br><span class="line">New password:</span><br><span class="line">Retype new password:</span><br><span class="line">passwd: password updated successfully</span><br></pre></td></tr></table></figure><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl10.png"></p><h3 id="换中科大Kali源"><a href="#换中科大Kali源" class="headerlink" title="换中科大Kali源"></a>换中科大Kali源</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></pre></td><td class="code"><pre><span class="line">┌──(root💀DESKTOP-10KKBKG)-[~]</span><br><span class="line">└─# <span class="built_in">mv</span> /etc/apt/sources.list /etc/apt/sources.list.bak</span><br></pre></td></tr></table></figure><p>创建新的<code>/etc/apt/sources.list</code>输入以下内容:</p><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">deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib</span><br><span class="line">deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib</span><br></pre></td></tr></table></figure><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl11.png"></p><p>输入完以上内容 按<code>Ctrl+X</code> 退出，提示是否保存 ，按键<code>Y</code>确认保存。</p><p>执行以下命令update一下：</p><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">┌──(root💀DESKTOP-10KKBKG)-[~]</span><br><span class="line">└─# apt-get update</span><br></pre></td></tr></table></figure><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl12.png"></p><h3 id="安装图形界面"><a href="#安装图形界面" class="headerlink" title="安装图形界面"></a>安装图形界面</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></pre></td><td class="code"><pre><span class="line">┌──(root💀DESKTOP-10KKBKG)-[~]</span><br><span class="line">└─# apt-get install kali-desktop-xfce</span><br></pre></td></tr></table></figure><p>需要输入<code>Y(es)</code>,一会儿出现下面界面，选择第一项就好，按<code>↑↓</code>键移动到第一项点击空格选中，点击<code>Tab</code>键切换到<code>OK</code>按钮回车确认。后面就是漫长等待…</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl13.png"></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">┌──(root💀DESKTOP-10KKBKG)-[~]</span><br><span class="line">└─# apt-get install xorg</span><br><span class="line"></span><br><span class="line">┌──(root💀DESKTOP-10KKBKG)-[~]</span><br><span class="line">└─# apt-get install xfce4</span><br><span class="line"></span><br><span class="line">┌──(root💀DESKTOP-10KKBKG)-[~]</span><br><span class="line">└─# apt-get install xrdp</span><br></pre></td></tr></table></figure><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"><span class="built_in">sudo</span> sed -i <span class="string">&#x27;s/port=3389/port=3390/g&#x27;</span> /etc/xrdp/xrdp.ini</span><br><span class="line"><span class="built_in">sudo</span> <span class="built_in">echo</span> xfce4-session &gt; ~/.xsession</span><br><span class="line"><span class="built_in">sudo</span> service xrdp restart</span><br></pre></td></tr></table></figure><p>接着<code>win+R</code>打开运行栏，输入<code>cmd</code>，输入命令<code>ipconfig</code>查看自己<code>ip</code>。注意你用的网线就是以太网适配器ipv4，用的无线就是无线局域网适配器WLAN下的ipv4。</p><p>再次<code>win+R</code>打开运行栏，输入<code>mstsc</code>，打开远程桌面，输入自己的ip地址<code>xxx.xxx.xxx.xxx:3390</code>，点击连接，打开远程连接对话框。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl14.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl15.png"></p><p>输入上面第一步时添加的用户和密码登录，或者后面我们修改过密码的root用户登录。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl16.png"></p><p>进入到kali的图形化界面。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;准备工作可阅读前一篇&lt;a href=&quot;http://sogrey.top/article/%E7%8E%A9%E8%BD%ACWindows%E5%AD%90%E7%B3%BB%E7%BB%9FLinux%E4%B9%8B%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/&quot;&gt;玩转Windows子系统Linux之准备工作&lt;/a&gt;&lt;/p&gt;
&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;ul&gt;
&lt;li&gt;主系统 ： Windows 10 专业版64位 [需要开启：开发者模式和Windows功能（适用于Linux的Windows子系统）]&lt;/li&gt;
&lt;li&gt;子系统 ： Kali Linux&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="Linux" scheme="https://sogrey.github.io/categories/Linux/"/>
    
    
    <category term="Linux" scheme="https://sogrey.github.io/tags/Linux/"/>
    
    <category term="Windows" scheme="https://sogrey.github.io/tags/Windows/"/>
    
    <category term="WSL" scheme="https://sogrey.github.io/tags/WSL/"/>
    
  </entry>
  
  <entry>
    <title>玩转Windows子系统Linux之准备工作</title>
    <link href="https://sogrey.github.io/article/%E7%8E%A9%E8%BD%ACWindows%E5%AD%90%E7%B3%BB%E7%BB%9FLinux%E4%B9%8B%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/"/>
    <id>https://sogrey.github.io/article/%E7%8E%A9%E8%BD%ACWindows%E5%AD%90%E7%B3%BB%E7%BB%9FLinux%E4%B9%8B%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/</id>
    <published>2021-09-09T12:57:52.000Z</published>
    <updated>2026-05-20T18:33:18.030Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>WSL 全称为 Windows Subsystem for Linux (Windows 下的 Linux 子系统)。是一个在Windows 10上能够运行原生Linux二进制可执行文件（ELF格式）的兼容层。 Windows 下的 Linux 子系统并不包含 Linux 内核, 所以这严格上讲并不是一个真正的 Linux 系统。</p><span id="more"></span><h2 id="操作环境"><a href="#操作环境" class="headerlink" title="操作环境"></a>操作环境</h2><ul><li>Windows 10 专业版64位</li></ul><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><p><code>开始</code> &gt; <code>设置</code> &gt; <code>应用</code><br><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl01.png"></p><p>点击 <code>程序和功能</code> 打开 程序和功能窗口。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl02.png"></p><p>点击 <code>启用或关闭Windows功能</code> 选中 <code>适用于Linux的Windows子系统</code>，点击确定，等待安装完成。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl03.png"></p><p>安装完成后需要重启计算机。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl04.png"></p><p>完成上面一系列操作，准备工作就做完了，现在去Windows10软件商店搜索<code>WSL</code>即可找到Linux。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fwsl05.png"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;WSL 全称为 Windows Subsystem for Linux (Windows 下的 Linux 子系统)。是一个在Windows 10上能够运行原生Linux二进制可执行文件（ELF格式）的兼容层。 Windows 下的 Linux 子系统并不包含 Linux 内核, 所以这严格上讲并不是一个真正的 Linux 系统。&lt;/p&gt;</summary>
    
    
    
    <category term="Linux" scheme="https://sogrey.github.io/categories/Linux/"/>
    
    
    <category term="Linux" scheme="https://sogrey.github.io/tags/Linux/"/>
    
    <category term="Windows" scheme="https://sogrey.github.io/tags/Windows/"/>
    
    <category term="WSL" scheme="https://sogrey.github.io/tags/WSL/"/>
    
  </entry>
  
  <entry>
    <title>使用SSH连接到GitHub</title>
    <link href="https://sogrey.github.io/article/%E4%BD%BF%E7%94%A8SSH%E8%BF%9E%E6%8E%A5%E5%88%B0GitHub/"/>
    <id>https://sogrey.github.io/article/%E4%BD%BF%E7%94%A8SSH%E8%BF%9E%E6%8E%A5%E5%88%B0GitHub/</id>
    <published>2021-08-21T12:50:49.000Z</published>
    <updated>2026-05-20T18:33:18.029Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>据悉，GitHub防黑客新措施：弃用账密验证Git操作，改用token或SSH密钥，8月14号0点（8月13日9:00 PST）开始，在GitHub上执行Git操作就会导致失败。</p><p>GitHub官方表示，这一举措是为了提高Git操作的安全性，防止密码撞库等事情发生。</p><p>现在，GitHub开始强制用户采用token或SSH密钥进行身份验证。相比于账密，这两者的安全性显然更高：</p><ul><li>唯一性：仅限GitHub使用，根据设备&#x2F;使用次数生成</li><li>可撤销性：可随时被单独撤销，其他凭证不受影响</li><li>区域性：使用范围可控，只允许在部分访问活动中执行</li><li>随机性：不受撞库影响，比账密复杂度更高</li></ul><p>虽然目前GitHub官方推荐的是token，因为它设置更为简单，不过相比之下，SSH密钥的安全性要更高一些。</p><span id="more"></span><h2 id="本地生成新的-SSH-密钥"><a href="#本地生成新的-SSH-密钥" class="headerlink" title="本地生成新的 SSH 密钥"></a>本地生成新的 SSH 密钥</h2><h3 id="设置git的user-name和email"><a href="#设置git的user-name和email" class="headerlink" title="设置git的user name和email"></a>设置git的user name和email</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></pre></td><td class="code"><pre><span class="line">git config --global user.name <span class="string">&quot;&lt;Your Name&gt;&quot;</span></span><br><span class="line">git config --global user.email <span class="string">&quot;&lt;Your Email&gt;&quot;</span></span><br></pre></td></tr></table></figure><blockquote><p>Tips:</p><p><code>git config --list</code> 查看当前Git环境所有配置，还可以配置一些命令别名之类的。</p></blockquote><h3 id="检查是否存在SSH-Key"><a href="#检查是否存在SSH-Key" class="headerlink" title="检查是否存在SSH Key"></a>检查是否存在SSH Key</h3><p>打开Git Bash,输入：</p><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"><span class="built_in">ls</span> -al ~/.ssh</span><br></pre></td></tr></table></figure><p>来查看是否有ssh key存在。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FChecking%20for%20existing%20SSH%20keys.png"></p><p>如图，提示不存在，下面准备生成新的SSH。</p><h3 id="生成一个新的SSH-key并添加到ssh-agent"><a href="#生成一个新的SSH-key并添加到ssh-agent" class="headerlink" title="生成一个新的SSH key并添加到ssh-agent"></a>生成一个新的SSH key并添加到ssh-agent</h3><p>打开Git Bash,输入：</p><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">ssh-keygen -t rsa -b 4096 -C <span class="string">&quot;your_email@example.com&quot;</span></span><br></pre></td></tr></table></figure><blockquote><p>**注意：**如果您使用的是不支持 Ed25519 算法的旧系统，请使用：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;</span><br></pre></td></tr></table></figure></blockquote><p>生成一个新的ssh key，使用填入的邮箱地址作为ssh key的标签，并生成RSA密钥对。</p><p>看到如下提示时按下回车，表示把ssh key放在默认地址：</p><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">Enter file <span class="keyword">in</span> <span class="built_in">which</span> to save the key (/c/Users/Administrator/.ssh/id_rsa):</span><br></pre></td></tr></table></figure><p>然后为ssh key设置密码</p><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">Enter passphrase (empty <span class="keyword">for</span> no passphrase):</span><br><span class="line">Enter same passphrase again:</span><br></pre></td></tr></table></figure><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FGenerating%20a%20new%20SSH%20key%20and%20adding%20it%20to%20the%20ssh-agent.png"></p><p>创建完ssh key后，你需要把它添加到ssh-agent中去。</p><p>首先保证ssh-agent启用了：</p><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"><span class="built_in">eval</span> <span class="string">&quot;<span class="subst">$(ssh-agent -s)</span>&quot;</span></span><br></pre></td></tr></table></figure><p>该指令返回进程id则表示已经启用ssh-agent</p><p>使用如下指令把ssh key添加到ssh-agent中:</p><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">ssh-add ~/.ssh/id_rsa</span><br></pre></td></tr></table></figure><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2Fadding%20ssh%20to%20the%20ssh-agent.png"></p><h3 id="为你的github账号添加SSH-key"><a href="#为你的github账号添加SSH-key" class="headerlink" title="为你的github账号添加SSH key"></a>为你的github账号添加SSH key</h3><p>在把ssh key添加到ssh-agent后，你需要把ssh key添加到你的github账号中。</p><p>打开Git Bash，使用指令把ssh key复制到剪贴板：</p><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">clip &lt; ~/.ssh/id_rsa.pub</span><br></pre></td></tr></table></figure><p>登录Github,依次点击<code>Settings</code> &gt; <code>SSH and GPG keys</code> &gt; <code>New SSH key</code>,在<code>Key</code>一栏输入刚刚复制的ssh key, Title一栏随便填写：</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FAdding%20a%20new%20SSH%20key%20to%20your%20GitHub%20account.png"></p><p>填写完成点击<code>Add SSH key</code>后需要输入github密码验证即可。</p><h3 id="测试你的SSH连接"><a href="#测试你的SSH连接" class="headerlink" title="测试你的SSH连接"></a>测试你的SSH连接</h3><p>操作完以上一系列操作，是时候测试下刚配置的SSH是否成功。</p><p>打开Git Bash，输入以下指令：</p><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">ssh -T git@github.com</span><br></pre></td></tr></table></figure><p>尝试去用ssh连接github，看到一些警告信息</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">The authenticity of host &#x27;github.com (140.82.113.3)&#x27; can&#x27;t be established.</span><br><span class="line">RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>只管输入<code>yes</code>就好。你将会看到如下信息：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Hi Sogrey! You&#x27;ve successfully authenticated, but GitHub does not provide shell access.</span><br></pre></td></tr></table></figure><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FTesting%20your%20SSH%20connection.png"></p><p>则表示ssh连接成功了。如果收到<code>access denied</code>,可参考<a href="https://help.github.com/articles/error-permission-denied-publickey/">这里</a>。</p><h3 id="改变远程仓库的URL"><a href="#改变远程仓库的URL" class="headerlink" title="改变远程仓库的URL"></a>改变远程仓库的URL</h3><p>SSH配置完成后，需要把远程仓库URL由HTTPS改为SSH。</p><p>打开Git Bash，转到工作目录下，先查看远程仓库地址：</p><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">git remote -v</span><br></pre></td></tr></table></figure><p>更改远程仓库的url:</p><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">git remote set-url origin git@github.com:USERNAME/OTHERREPOSITORY.git</span><br></pre></td></tr></table></figure><p>origin为仓库名，后面接的是ssh仓库地址。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FChanging%20a%20remote's%20URL.png"></p><p>到此Github的SSH key配置大功告成。</p><h2 id="为TortoiseGit添加SSH"><a href="#为TortoiseGit添加SSH" class="headerlink" title="为TortoiseGit添加SSH"></a>为TortoiseGit添加SSH</h2><p>我比较喜欢使用可视化工具，TortoiseGit就是其中之一，Github这次强制用户采用token或SSH密钥进行身份验证也影响到了TortoiseGit的使用，下面进行TortoiseGit的SSH配置。</p><p>找到TortoiseGit自带的PuTTYgen工具，打开后点击Generate(<strong>生成的过程中记得移动鼠标</strong>)</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FCreate%20SSH%20key%20by%20PuTTY%20Key%20Generator.png"></p><p>PuTTYgen工具窗口先不要关闭，将框中显示的公钥复制下来依照<a href="#%E4%B8%BA%E4%BD%A0%E7%9A%84github%E8%B4%A6%E5%8F%B7%E6%B7%BB%E5%8A%A0SSH-key">之前提到的</a>添加到github的ssh。</p><p>点击PuTTYgen工具窗口<code>Save private key</code>保存一个<code>.ppk</code>文件，适当命名找个目录存档。</p><p>找到TortoiseGit自带的<code>Pageant Key List</code>工具,点击<code>Add Key</code>添加刚刚保存的<code>.ppk</code>文件即可。</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FAdd%20ppk%20file%20into%20Pageant%20Key%20List.png"></p><h2 id="异常处理"><a href="#异常处理" class="headerlink" title="异常处理"></a>异常处理</h2><h3 id="1-git报错ssh-connect-to-host-github-com-port-22-Connection-timed-out"><a href="#1-git报错ssh-connect-to-host-github-com-port-22-Connection-timed-out" class="headerlink" title="1. git报错ssh: connect to host github.com port 22: Connection timed out"></a>1. git报错ssh: connect to host github.com port 22: Connection timed out</h3><p>参考<a href="https://blog.csdn.net/nightwishh/article/details/99647545">这里</a>成功解决</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://docs.github.com/cn/github/authenticating-to-github/connecting-to-github-with-ssh">使用SSH 连接到 GitHub - GitHub Docs</a></li><li><a href="https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token">Creating a personal access token - GitHub Docs</a></li><li><a href="https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent">Generating a new SSH key and adding it to the ssh-agent - GitHub Docs</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;据悉，GitHub防黑客新措施：弃用账密验证Git操作，改用token或SSH密钥，8月14号0点（8月13日9:00 PST）开始，在GitHub上执行Git操作就会导致失败。&lt;/p&gt;
&lt;p&gt;GitHub官方表示，这一举措是为了提高Git操作的安全性，防止密码撞库等事情发生。&lt;/p&gt;
&lt;p&gt;现在，GitHub开始强制用户采用token或SSH密钥进行身份验证。相比于账密，这两者的安全性显然更高：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;唯一性：仅限GitHub使用，根据设备&amp;#x2F;使用次数生成&lt;/li&gt;
&lt;li&gt;可撤销性：可随时被单独撤销，其他凭证不受影响&lt;/li&gt;
&lt;li&gt;区域性：使用范围可控，只允许在部分访问活动中执行&lt;/li&gt;
&lt;li&gt;随机性：不受撞库影响，比账密复杂度更高&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;虽然目前GitHub官方推荐的是token，因为它设置更为简单，不过相比之下，SSH密钥的安全性要更高一些。&lt;/p&gt;</summary>
    
    
    
    <category term="SSH" scheme="https://sogrey.github.io/categories/SSH/"/>
    
    
    <category term="Github" scheme="https://sogrey.github.io/tags/Github/"/>
    
    <category term="SSH" scheme="https://sogrey.github.io/tags/SSH/"/>
    
  </entry>
  
  <entry>
    <title>Linux安装与卸载JDK</title>
    <link href="https://sogrey.github.io/article/Linux%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BDJDK/"/>
    <id>https://sogrey.github.io/article/Linux%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BDJDK/</id>
    <published>2021-08-19T13:14:03.000Z</published>
    <updated>2026-05-20T18:33:18.026Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>Linux上安装JDK,动手记录不迷路。</p><span id="more"></span><h2 id="安装JDK"><a href="#安装JDK" class="headerlink" title="安装JDK"></a>安装JDK</h2><h3 id="Ubuntu"><a href="#Ubuntu" class="headerlink" title="Ubuntu"></a>Ubuntu</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></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> apt-get update</span><br><span class="line"><span class="built_in">sudo</span> apt-get install default-jre</span><br><span class="line"><span class="built_in">sudo</span> apt-get install default-jdk</span><br></pre></td></tr></table></figure><p>以上是默认的安装版本。如果想安装特定的版本：</p><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"><span class="built_in">sudo</span> apt-get install openjdk-7-jre</span><br><span class="line"><span class="built_in">sudo</span> apt-get install openjdk-7-jdk</span><br></pre></td></tr></table></figure><p>离线安装。</p><p>下载jdk压缩包， 创建一个目录来存放jdk,并解压tar ：</p><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"><span class="built_in">sudo</span> <span class="built_in">mkdir</span> /usr/lib/jvm</span><br><span class="line"><span class="built_in">sudo</span> tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm</span><br></pre></td></tr></table></figure><p>解压后可删除压缩包：</p><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"><span class="built_in">rm</span> -rf jdk-7u79-linux-x64.tar.gz</span><br></pre></td></tr></table></figure><p>修改环境变量</p><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"><span class="built_in">sudo</span> vim ~/.bashrc</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line"><span class="comment">#set oracle jdk environment</span></span><br><span class="line"><span class="built_in">export</span> JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181  <span class="comment">## 这里要注意目录要换成自己解压的jdk 目录</span></span><br><span class="line"><span class="built_in">export</span> JRE_HOME=<span class="variable">$&#123;JAVA_HOME&#125;</span>/jre  </span><br><span class="line"><span class="built_in">export</span> CLASSPATH=.:<span class="variable">$&#123;JAVA_HOME&#125;</span>/lib:<span class="variable">$&#123;JRE_HOME&#125;</span>/lib  </span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$&#123;JAVA_HOME&#125;</span>/bin:<span class="variable">$PATH</span>  </span><br></pre></td></tr></table></figure><p>使环境变量生效</p><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"><span class="built_in">source</span> ~/.bashrc</span><br></pre></td></tr></table></figure><p>设置默认jdk</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></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_181/bin/java 300  </span><br><span class="line"><span class="built_in">sudo</span> update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_181/bin/javac 300  </span><br><span class="line"><span class="built_in">sudo</span> update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_181/bin/jar 300   </span><br><span class="line"><span class="built_in">sudo</span> update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_181/bin/javah 300   </span><br><span class="line"><span class="built_in">sudo</span> update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_181/bin/javap 300 </span><br></pre></td></tr></table></figure><p>执行</p><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"><span class="built_in">sudo</span> update-alternatives --config java</span><br></pre></td></tr></table></figure><p>测试是否安装成功</p><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">java -version</span><br><span class="line">javac -version</span><br></pre></td></tr></table></figure><h2 id="卸载JDK"><a href="#卸载JDK" class="headerlink" title="卸载JDK"></a>卸载JDK</h2><h3 id="Ubuntu-1"><a href="#Ubuntu-1" class="headerlink" title="Ubuntu"></a>Ubuntu</h3><p>要删除 OpenJDK (如果已安装的话)。首先，检查是安装的哪个 OpenJDK包。</p><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"><span class="comment"># dpkg --list | grep -i jdk</span></span><br></pre></td></tr></table></figure><p>移除 openjdk包:</p><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"><span class="comment"># apt-get purge openjdk*</span></span><br></pre></td></tr></table></figure><p>卸载 OpenJDK 相关包：</p><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"><span class="comment"># apt-get purge icedtea-* openjdk-*</span></span><br></pre></td></tr></table></figure><p>检查所有 OpenJDK包是否都已卸载完毕：</p><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"><span class="comment"># dpkg --list | grep -i jdk</span></span><br></pre></td></tr></table></figure><p>完毕。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Linux上安装JDK,动手记录不迷路。&lt;/p&gt;</summary>
    
    
    
    <category term="Linux" scheme="https://sogrey.github.io/categories/Linux/"/>
    
    
    <category term="Linux" scheme="https://sogrey.github.io/tags/Linux/"/>
    
    <category term="JDK" scheme="https://sogrey.github.io/tags/JDK/"/>
    
  </entry>
  
  <entry>
    <title>Oracle VM VirtualBox 中为 CentOS 安装增强工具</title>
    <link href="https://sogrey.github.io/article/Oracle%20VM%20VirtualBox%20%E4%B8%AD%E4%B8%BA%20CentOS%20%E5%AE%89%E8%A3%85%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7/"/>
    <id>https://sogrey.github.io/article/Oracle%20VM%20VirtualBox%20%E4%B8%AD%E4%B8%BA%20CentOS%20%E5%AE%89%E8%A3%85%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7/</id>
    <published>2021-05-22T16:26:09.000Z</published>
    <updated>2026-05-20T18:33:18.027Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>最近需要在linux上测试程序，Oracle VM VirtualBox上安装了CentOS，但是增强工具安装不成功，导致共享文件夹不能使用，主机与虚拟机之间不能文件交换，特此记录解决方案，以备后用。</p><span id="more"></span><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FOracle%20VM%20VirtualBox%20%E4%B8%AD%E4%B8%BA%20CentOS%20%E5%AE%89%E8%A3%85%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FOracle%20VM%20VirtualBox%20%E4%B8%AD%E4%B8%BA%20CentOS%20%E5%AE%89%E8%A3%85%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7%E5%87%BA%E9%94%99.png"></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></pre></td><td class="code"><pre><span class="line">Verifying archive integrity... All good.</span><br><span class="line">Uncompressing VirtualBox 6.1.20 Guest Additions <span class="keyword">for</span> Linux........</span><br><span class="line">VirtualBox Guest Additions installer</span><br><span class="line">Removing installed version 6.1.16 of VirtualBox Guest Additions...</span><br><span class="line">Copying additional installer modules ...</span><br><span class="line">Installing additional modules ...</span><br><span class="line">VirtualBox Guest Additions: Starting.</span><br><span class="line">VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel </span><br><span class="line">modules.  This may take a <span class="keyword">while</span>.</span><br><span class="line">VirtualBox Guest Additions: To build modules <span class="keyword">for</span> other installed kernels, run</span><br><span class="line">VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup &lt;version&gt;</span><br><span class="line">VirtualBox Guest Additions: or</span><br><span class="line">VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all</span><br><span class="line">VirtualBox Guest Additions: Building the modules <span class="keyword">for</span> kernel </span><br><span class="line">4.18.0-240.1.1.el8_3.x86_64.</span><br><span class="line"></span><br><span class="line">VirtualBox Guest Additions: Look at /var/log/vboxadd-setup.log to find out what </span><br><span class="line">went wrong</span><br><span class="line">modprobe vboxguest failed</span><br><span class="line">The <span class="built_in">log</span> file /var/log/vboxadd-setup.log may contain further information.</span><br><span class="line">Press Return to close this window...</span><br></pre></td></tr></table></figure><p>查看错误日志<code>/var/log/vboxadd-setup.log</code>:</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FOracle%20VM%20VirtualBox%20%E4%B8%AD%E4%B8%BA%20CentOS%20%E5%AE%89%E8%A3%85%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7-%E6%9F%A5%E7%9C%8B%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97.png"></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></pre></td><td class="code"><pre><span class="line">[sogrey@localhost ~]$ <span class="built_in">sudo</span> <span class="built_in">cat</span> /var/log/vboxadd-setup.log</span><br><span class="line">[<span class="built_in">sudo</span>] sogrey 的密码：</span><br><span class="line">Building the main Guest Additions 6.1.20 module <span class="keyword">for</span> kernel 4.18.0-240.1.1.el8_3.x86_64.</span><br><span class="line">Error building the module.  Build output follows.</span><br><span class="line">make V=1 CONFIG_MODULE_SIG= CONFIG_MODULE_SIG_ALL= -C /lib/modules/4.18.0-240.1.1.el8_3.x86_64/build M=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j2 modules</span><br><span class="line">make[1]: warning: -jN forced <span class="keyword">in</span> submake: disabling jobserver mode.</span><br><span class="line">Makefile:978: *** <span class="string">&quot;Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel&quot;</span>.  Stop.</span><br><span class="line">make: *** [/tmp/vbox.0/Makefile-footer.gmk:117: vboxguest] Error 2</span><br><span class="line">modprobe vboxguest failed</span><br><span class="line">[sogrey@localhost ~]$</span><br></pre></td></tr></table></figure><p>提示我们<code>Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel</code>.</p><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><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></pre></td><td class="code"><pre><span class="line">[sogrey@localhost ~]$ <span class="built_in">sudo</span> yum install elfutils-libelf-devel</span><br><span class="line">[<span class="built_in">sudo</span>] sogrey 的密码：</span><br><span class="line">CentOS Linux 8 - BaseOS                                143  B/s | 3.9 kB     00:27    </span><br><span class="line">CentOS Linux 8 - Extras                                2.7 kB/s | 1.5 kB     00:00    </span><br><span class="line">CentOS Linux 8 - PowerTools                            6.9 kB/s | 4.3 kB     00:00    </span><br><span class="line">Docker CE Stable - x86_64                              6.1 kB/s | 3.5 kB     00:00    </span><br><span class="line">Extra Packages <span class="keyword">for</span> Enterprise Linux Modular 8 - x86_64  32 kB/s | 9.9 kB     00:00    </span><br><span class="line">Extra Packages <span class="keyword">for</span> Enterprise Linux Modular 8 - x86_64 482 kB/s | 612 kB     00:01    </span><br><span class="line">Extra Packages <span class="keyword">for</span> Enterprise Linux 8 - x86_64          30 kB/s |  11 kB     00:00    </span><br><span class="line">Extra Packages <span class="keyword">for</span> Enterprise Linux 8 - x86_64         1.3 MB/s | 9.4 MB     00:07    </span><br><span class="line">packages-microsoft-com-prod                             10 kB/s | 3.0 kB     00:00    </span><br><span class="line">packages-microsoft-com-prod                             80 kB/s | 2.9 MB     00:37    </span><br><span class="line">依赖关系解决。</span><br><span class="line">=======================================================================================</span><br><span class="line"> 软件包                        架构           版本                仓库            大小</span><br><span class="line">=======================================================================================</span><br><span class="line">安装:</span><br><span class="line"> elfutils-libelf-devel         x86_64         0.180-1.el8         baseos          58 k</span><br><span class="line"></span><br><span class="line">事务概要</span><br><span class="line">=======================================================================================</span><br><span class="line">安装  1 软件包</span><br><span class="line"></span><br><span class="line">总下载：58 k</span><br><span class="line">安装大小：34 k</span><br><span class="line">确定吗？[y/N]： y</span><br><span class="line">下载软件包：</span><br><span class="line">[MIRROR] elfutils-libelf-devel-0.180-1.el8.x86_64.rpm: Curl error (28): Timeout was reached <span class="keyword">for</span> http://mirrors.cqu.edu.cn/CentOS/8.3.2011/BaseOS/x86_64/os/Packages/elfutils-libelf-devel-0.180-1.el8.x86_64.rpm [Connection timed out after 30000 milliseconds]</span><br><span class="line">elfutils-libelf-devel-0.180-1.el8.x86_64.rpm           1.9 kB/s |  58 kB     00:30    </span><br><span class="line">---------------------------------------------------------------------------------------</span><br><span class="line">总计                                                   1.9 kB/s |  58 kB     00:30     </span><br><span class="line">运行事务检查</span><br><span class="line">事务检查成功。</span><br><span class="line">运行事务测试</span><br><span class="line">事务测试成功。</span><br><span class="line">运行事务</span><br><span class="line">  准备中  :                                                                        1/1 </span><br><span class="line">  安装    : elfutils-libelf-devel-0.180-1.el8.x86_64                               1/1 </span><br><span class="line">  运行脚本: elfutils-libelf-devel-0.180-1.el8.x86_64                               1/1 </span><br><span class="line">  验证    : elfutils-libelf-devel-0.180-1.el8.x86_64                               1/1 </span><br><span class="line">Installed products updated.</span><br><span class="line"></span><br><span class="line">已安装:</span><br><span class="line">  elfutils-libelf-devel-0.180-1.el8.x86_64                                             </span><br><span class="line"></span><br><span class="line">完毕！</span><br><span class="line">[sogrey@localhost ~]$ </span><br></pre></td></tr></table></figure><p>安装完成后移出增强工具虚拟盘，重新挂载安装增强工具，遗憾，仍然失败：</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FOracle%20VM%20VirtualBox%20%E4%B8%AD%E4%B8%BA%20CentOS%20%E5%AE%89%E8%A3%85%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7-%E7%A7%BB%E9%99%A4%E8%99%9A%E6%8B%9F%E7%9B%98.png"></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></pre></td><td class="code"><pre><span class="line">Verifying archive integrity... All good.</span><br><span class="line">Uncompressing VirtualBox 6.1.20 Guest Additions <span class="keyword">for</span> Linux........</span><br><span class="line">VirtualBox Guest Additions installer</span><br><span class="line">Removing installed version 6.1.20 of VirtualBox Guest Additions...</span><br><span class="line">Copying additional installer modules ...</span><br><span class="line">Installing additional modules ...</span><br><span class="line">VirtualBox Guest Additions: Starting.</span><br><span class="line">VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel </span><br><span class="line">modules.  This may take a <span class="keyword">while</span>.</span><br><span class="line">VirtualBox Guest Additions: To build modules <span class="keyword">for</span> other installed kernels, run</span><br><span class="line">VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup &lt;version&gt;</span><br><span class="line">VirtualBox Guest Additions: or</span><br><span class="line">VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all</span><br><span class="line">VirtualBox Guest Additions: Building the modules <span class="keyword">for</span> kernel </span><br><span class="line">4.18.0-240.1.1.el8_3.x86_64.</span><br><span class="line">ValueError: File context <span class="keyword">for</span> /opt/VBoxGuestAdditions-6.1.20/other/mount.vboxsf already defined</span><br><span class="line">Press Return to close this window...</span><br></pre></td></tr></table></figure><p>注意提示<code>ValueError: File context for /opt/VBoxGuestAdditions-6.1.20/other/mount.vboxsf already defined</code>,说这个文件已经存在，网上找到这个帖子<a href="https://www.virtualbox.org/ticket/19756">ValueError: mount.vboxsf already defined</a> ,帖子末尾给出两句命令：</p><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"><span class="comment"># semanage fcontext -d /opt/VBoxGuestAdditions-&lt;VERSION&gt;/other/mount.vboxsf</span></span><br><span class="line"><span class="comment"># restorecon /opt/VBoxGuestAdditions-&lt;VERSION&gt;/other/mount.vboxsf</span></span><br></pre></td></tr></table></figure><p>在终端依次执行，注意需要root权限执行，替换<code>&lt;VERSION&gt;</code> 为你当前安装的增强工具版本号，前面截图中有标识<code>6.1.20</code>。</p><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><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></pre></td><td class="code"><pre><span class="line">Verifying archive integrity... All good.</span><br><span class="line">Uncompressing VirtualBox 6.1.20 Guest Additions <span class="keyword">for</span> Linux........</span><br><span class="line">VirtualBox Guest Additions installer</span><br><span class="line">Removing installed version 6.1.20 of VirtualBox Guest Additions...</span><br><span class="line">Copying additional installer modules ...</span><br><span class="line">Installing additional modules ...</span><br><span class="line">VirtualBox Guest Additions: Starting.</span><br><span class="line">VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel </span><br><span class="line">modules.  This may take a <span class="keyword">while</span>.</span><br><span class="line">VirtualBox Guest Additions: To build modules <span class="keyword">for</span> other installed kernels, run</span><br><span class="line">VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup &lt;version&gt;</span><br><span class="line">VirtualBox Guest Additions: or</span><br><span class="line">VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all</span><br><span class="line">VirtualBox Guest Additions: Building the modules <span class="keyword">for</span> kernel </span><br><span class="line">4.18.0-240.1.1.el8_3.x86_64.</span><br><span class="line">VirtualBox Guest Additions: Running kernel modules will not be replaced <span class="keyword">until</span> </span><br><span class="line">the system is restarted</span><br><span class="line">Press Return to close this window...</span><br></pre></td></tr></table></figure><p>ok，成功了（可能需要重启），可以尽情使用共享文件夹功能了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;最近需要在linux上测试程序，Oracle VM VirtualBox上安装了CentOS，但是增强工具安装不成功，导致共享文件夹不能使用，主机与虚拟机之间不能文件交换，特此记录解决方案，以备后用。&lt;/p&gt;</summary>
    
    
    
    <category term="虚拟机" scheme="https://sogrey.github.io/categories/%E8%99%9A%E6%8B%9F%E6%9C%BA/"/>
    
    
    <category term="CentOS" scheme="https://sogrey.github.io/tags/CentOS/"/>
    
    <category term="VirtualBox" scheme="https://sogrey.github.io/tags/VirtualBox/"/>
    
  </entry>
  
  <entry>
    <title>Redis踩坑记</title>
    <link href="https://sogrey.github.io/article/Redis%E8%B8%A9%E5%9D%91%E8%AE%B0/"/>
    <id>https://sogrey.github.io/article/Redis%E8%B8%A9%E5%9D%91%E8%AE%B0/</id>
    <published>2021-04-10T15:50:25.000Z</published>
    <updated>2026-05-20T18:33:18.027Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>记录Redis开发中遇到的填坑经历。</p><span id="more"></span><h2 id="配置连接远程ip的Redis"><a href="#配置连接远程ip的Redis" class="headerlink" title="配置连接远程ip的Redis"></a>配置连接远程ip的Redis</h2><ol><li>修改redis服务器的配置文件redis.windows.conf<br>注释绑定的主机地址</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"># bind 127.0.0.1</span><br></pre></td></tr></table></figure><p>修改为远程连接的IP地址</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bind 192.168.1.12</span><br></pre></td></tr></table></figure><ol start="2"><li>在Redis根目录下，以管理员身份打开CMD命令窗口<br>输入<code>redis-server redis.windows.conf</code>，启动服务</li><li>在Redis根目录下尝试远程连接并查看</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">redis-cli -h ip地址 -p 6379 能够连接</span><br></pre></td></tr></table></figure><p>输入<code>info</code> 能够输出信息</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;记录Redis开发中遇到的填坑经历。&lt;/p&gt;</summary>
    
    
    
    <category term="Redis" scheme="https://sogrey.github.io/categories/Redis/"/>
    
    
    <category term="踩坑记" scheme="https://sogrey.github.io/tags/%E8%B8%A9%E5%9D%91%E8%AE%B0/"/>
    
    <category term="Redis" scheme="https://sogrey.github.io/tags/Redis/"/>
    
  </entry>
  
  <entry>
    <title>Mysql踩坑记</title>
    <link href="https://sogrey.github.io/article/Mysql%E8%B8%A9%E5%9D%91%E8%AE%B0/"/>
    <id>https://sogrey.github.io/article/Mysql%E8%B8%A9%E5%9D%91%E8%AE%B0/</id>
    <published>2021-04-10T15:49:48.000Z</published>
    <updated>2026-05-20T18:33:18.027Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>记录MySQL开发中遇到的填坑经历。</p><span id="more"></span><h2 id="1-局域网访问报错-message-from-server-“Host-‘xxx’-is-not-allowed-to-connect-to-this-MySQL-server"><a href="#1-局域网访问报错-message-from-server-“Host-‘xxx’-is-not-allowed-to-connect-to-this-MySQL-server" class="headerlink" title="1.局域网访问报错 message from server: “Host ‘xxx’ is not allowed to connect to this MySQL server"></a>1.局域网访问报错 message from server: “Host ‘xxx’ is not allowed to connect to this MySQL server</h2><ul><li><strong>改表法 (亲测)</strong></li></ul><p>可能是你的帐号不允许从远程登陆，只能在localhost。这个时候只要在localhost的那台电脑，登入mysql后，更改 “mysql” 数据库里的 “user” 表里的 “host” 项，从”localhost”改称”%” </p><figure class="highlight cmd"><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></pre></td><td class="code"><pre><span class="line"><span class="function">D:\<span class="title">Programs</span>\<span class="title">mysql</span>-8.0.23-<span class="title">winx64</span>\<span class="title">bin</span>&gt;<span class="title">mysql</span> -<span class="title">u</span> <span class="title">root</span> -<span class="title">p</span> </span></span><br><span class="line"><span class="function"><span class="title">Enter</span> <span class="title">password</span>: *******</span></span><br><span class="line"><span class="function"><span class="title">Welcome</span> <span class="title">to</span> <span class="title">the</span> <span class="title">MySQL</span> <span class="title">monitor</span>.  <span class="title">Commands</span> <span class="title">end</span> <span class="title">with</span> ; <span class="title">or</span> \<span class="title">g</span>.</span></span><br><span class="line"><span class="function"><span class="title">Your</span> <span class="title">MySQL</span> <span class="title">connection</span> <span class="title">id</span> <span class="title">is</span> 33</span></span><br><span class="line"><span class="function"><span class="title">Server</span> <span class="title">version</span>: 8.0.23 <span class="title">MySQL</span> <span class="title">Community</span> <span class="title">Server</span> - <span class="title">GPL</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Copyright</span> (<span class="title">c</span>) 2000, 2021, <span class="title">Oracle</span> <span class="title">and</span>/<span class="title">or</span> <span class="title">its</span> <span class="title">affiliates</span>.</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Oracle</span> <span class="title">is</span> <span class="title">a</span> <span class="title">registered</span> <span class="title">trademark</span> <span class="title">of</span> <span class="title">Oracle</span> <span class="title">Corporation</span> <span class="title">and</span>/<span class="title">or</span> <span class="title">its</span></span></span><br><span class="line"><span class="function"><span class="title">affiliates</span>. <span class="title">Other</span> <span class="title">names</span> <span class="title">may</span> <span class="title">be</span> <span class="title">trademarks</span> <span class="title">of</span> <span class="title">their</span> <span class="title">respective</span></span></span><br><span class="line"><span class="function"><span class="title">owners</span>.</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Type</span> &#x27;<span class="title">help</span>;&#x27; <span class="title">or</span> &#x27;\<span class="title">h</span>&#x27; <span class="title">for</span> <span class="title">help</span>. <span class="title">Type</span> &#x27;\<span class="title">c</span>&#x27; <span class="title">to</span> <span class="title">clear</span> <span class="title">the</span> <span class="title">current</span> <span class="title">input</span> <span class="title">statement</span>.</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">use</span> <span class="title">mysql</span>;</span></span><br><span class="line"><span class="function"><span class="title">Database</span> <span class="title">changed</span></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">select</span> <span class="title">host</span>, <span class="title">user</span> <span class="title">from</span> <span class="title">user</span>;</span></span><br><span class="line"><span class="function">+-----------+------------------+</span></span><br><span class="line"><span class="function">| <span class="title">host</span>      | <span class="title">user</span>             |</span></span><br><span class="line"><span class="function">+-----------+------------------+</span></span><br><span class="line"><span class="function">| <span class="title">localhost</span> | <span class="title">mysql.infoschema</span> |</span></span><br><span class="line"><span class="function">| <span class="title">localhost</span> | <span class="title">mysql.session</span>    |</span></span><br><span class="line"><span class="function">| <span class="title">localhost</span> | <span class="title">mysql.sys</span>        |</span></span><br><span class="line"><span class="function">| <span class="title">localhost</span> | <span class="title">root</span>             |</span></span><br><span class="line"><span class="function">+-----------+------------------+</span></span><br><span class="line"><span class="function">4 <span class="title">rows</span> <span class="title">in</span> <span class="title">set</span> (0.00 <span class="title">sec</span>)</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">update</span> <span class="title">user</span> <span class="title">set</span> <span class="title">host</span> = &#x27;%&#x27; <span class="title">where</span> <span class="title">user</span> = &#x27;<span class="title">root</span>&#x27;;</span></span><br><span class="line"><span class="function"><span class="title">Query</span> <span class="title">OK</span>, 1 <span class="title">row</span> <span class="title">affected</span> (0.00 <span class="title">sec</span>)</span></span><br><span class="line"><span class="function"><span class="title">Rows</span> <span class="title">matched</span>: 1  <span class="title">Changed</span>: 1  <span class="title">Warnings</span>: 0</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">select</span> <span class="title">host</span>, <span class="title">user</span> <span class="title">from</span> <span class="title">user</span>;</span></span><br><span class="line"><span class="function">+-----------+------------------+</span></span><br><span class="line"><span class="function">| <span class="title">host</span>      | <span class="title">user</span>             |</span></span><br><span class="line"><span class="function">+-----------+------------------+</span></span><br><span class="line"><span class="function">| %         | <span class="title">root</span>             |</span></span><br><span class="line"><span class="function">| <span class="title">localhost</span> | <span class="title">mysql.infoschema</span> |</span></span><br><span class="line"><span class="function">| <span class="title">localhost</span> | <span class="title">mysql.session</span>    |</span></span><br><span class="line"><span class="function">| <span class="title">localhost</span> | <span class="title">mysql.sys</span>        |</span></span><br><span class="line"><span class="function">+-----------+------------------+</span></span><br><span class="line"><span class="function">4 <span class="title">rows</span> <span class="title">in</span> <span class="title">set</span> (0.00 <span class="title">sec</span>)</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt;</span></span><br></pre></td></tr></table></figure><ul><li><strong>授权法</strong></li></ul><p>例如，你想myuser使用mypassword从任何主机连接到mysql服务器的话。 </p><figure class="highlight cmd"><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">GRANT ALL PRIVILEGES ON *.* TO &#x27;myuser&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;mypassword&#x27; WITH GRANT OPTION; </span><br><span class="line"> </span><br><span class="line">FLUSH   PRIVILEGES; </span><br></pre></td></tr></table></figure><p>如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器，并使用mypassword作为密码 </p><figure class="highlight cmd"><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">GRANT ALL PRIVILEGES ON *.* TO &#x27;myuser&#x27;@&#x27;<span class="number">192</span>.<span class="number">168</span>.<span class="number">1</span>.<span class="number">3</span>&#x27; IDENTIFIED BY &#x27;mypassword&#x27; WITH GRANT OPTION;   www.<span class="number">2</span>cto.com  </span><br><span class="line"> </span><br><span class="line">FLUSH   PRIVILEGES; </span><br></pre></td></tr></table></figure><p>如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库，并使用mypassword作为密码 </p><figure class="highlight cmd"><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">GRANT ALL PRIVILEGES ON dk.* TO &#x27;myuser&#x27;@&#x27;<span class="number">192</span>.<span class="number">168</span>.<span class="number">1</span>.<span class="number">3</span>&#x27; IDENTIFIED BY &#x27;mypassword&#x27; WITH GRANT OPTION; </span><br><span class="line"> </span><br><span class="line">FLUSH   PRIVILEGES; </span><br></pre></td></tr></table></figure><ul><li><strong>另外一种方法</strong></li></ul><p>在安装mysql的机器上运行：   </p><ol><li><code>d:\mysql\bin\&gt;mysql   -h   localhost   -u   root</code>这样应该可以进入MySQL服务器</li><li><code>mysql&gt;GRANT   ALL   PRIVILEGES   ON   *.*   TO   &#39;root&#39;@&#39;%&#39;   WITH   GRANT   OPTION</code> 赋予任何主机访问数据的权限 </li><li><code>mysql&gt;FLUSH   PRIVILEGES</code>修改生效 </li><li><code>mysql&gt;EXIT</code> 退出MySQL服务器</li></ol><p>这样就可以在其它任何的主机上以root身份登录啦！ </p><h2 id="2-链接MySQL提示“Too-many-connections”"><a href="#2-链接MySQL提示“Too-many-connections”" class="headerlink" title="2. 链接MySQL提示“Too many connections”"></a>2. 链接MySQL提示“Too many connections”</h2><p>字面意思就是连接数过多，超限了。那么现在就查下当前限制多少连接数，并且修改最大连接数。</p><figure class="highlight cmd"><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></pre></td><td class="code"><pre><span class="line">Microsoft Windows [版本 <span class="number">10</span>.<span class="number">0</span>.<span class="number">19043</span>.<span class="number">1348</span>]</span><br><span class="line">(c) Microsoft Corporation。保留所有权利。</span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">D:\<span class="title">Programs</span>\<span class="title">mysql</span>-8.0.23-<span class="title">winx64</span>&gt;<span class="title">cd</span> <span class="title">bin</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">D</span>:\<span class="title">Programs</span>\<span class="title">mysql</span>-8.0.23-<span class="title">winx64</span>\<span class="title">bin</span>&gt;<span class="title">mysql</span> -<span class="title">u</span> <span class="title">root</span> -<span class="title">p</span> # 使用<span class="title">root</span>用户登录<span class="title">mysql</span></span></span><br><span class="line"><span class="function"><span class="title">Enter</span> <span class="title">password</span>: *******</span></span><br><span class="line"><span class="function"><span class="title">Welcome</span> <span class="title">to</span> <span class="title">the</span> <span class="title">MySQL</span> <span class="title">monitor</span>.  <span class="title">Commands</span> <span class="title">end</span> <span class="title">with</span> ; <span class="title">or</span> \<span class="title">g</span>.</span></span><br><span class="line"><span class="function"><span class="title">Your</span> <span class="title">MySQL</span> <span class="title">connection</span> <span class="title">id</span> <span class="title">is</span> 8</span></span><br><span class="line"><span class="function"><span class="title">Server</span> <span class="title">version</span>: 8.0.23 <span class="title">MySQL</span> <span class="title">Community</span> <span class="title">Server</span> - <span class="title">GPL</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Copyright</span> (<span class="title">c</span>) 2000, 2021, <span class="title">Oracle</span> <span class="title">and</span>/<span class="title">or</span> <span class="title">its</span> <span class="title">affiliates</span>.</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Oracle</span> <span class="title">is</span> <span class="title">a</span> <span class="title">registered</span> <span class="title">trademark</span> <span class="title">of</span> <span class="title">Oracle</span> <span class="title">Corporation</span> <span class="title">and</span>/<span class="title">or</span> <span class="title">its</span></span></span><br><span class="line"><span class="function"><span class="title">affiliates</span>. <span class="title">Other</span> <span class="title">names</span> <span class="title">may</span> <span class="title">be</span> <span class="title">trademarks</span> <span class="title">of</span> <span class="title">their</span> <span class="title">respective</span></span></span><br><span class="line"><span class="function"><span class="title">owners</span>.</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Type</span> &#x27;<span class="title">help</span>;&#x27; <span class="title">or</span> &#x27;\<span class="title">h</span>&#x27; <span class="title">for</span> <span class="title">help</span>. <span class="title">Type</span> &#x27;\<span class="title">c</span>&#x27; <span class="title">to</span> <span class="title">clear</span> <span class="title">the</span> <span class="title">current</span> <span class="title">input</span> <span class="title">statement</span>.</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">show</span> <span class="title">processlist</span>; # 查询<span class="title">mysql</span>的所有连接</span></span><br><span class="line"><span class="function">+----+-----------------+-----------------+------+---------+------+------------------------+------------------+</span></span><br><span class="line"><span class="function">| <span class="title">Id</span> | <span class="title">User</span>            | <span class="title">Host</span>            | <span class="title">db</span>   | <span class="title">Command</span> | <span class="title">Time</span> | <span class="title">State</span>                  | <span class="title">Info</span>             |</span></span><br><span class="line"><span class="function">+----+-----------------+-----------------+------+---------+------+------------------------+------------------+</span></span><br><span class="line"><span class="function">|  5 | <span class="title">event_scheduler</span> | <span class="title">localhost</span>       | <span class="title">NULL</span> | <span class="title">Daemon</span>  | 4304 | <span class="title">Waiting</span> <span class="title">on</span> <span class="title">empty</span> <span class="title">queue</span> | <span class="title">NULL</span>             |</span></span><br><span class="line"><span class="function">|  8 | <span class="title">root</span>            | <span class="title">localhost</span>:55747 | <span class="title">NULL</span> | <span class="title">Query</span>   |    0 | <span class="title">init</span>                   | <span class="title">show</span> <span class="title">processlist</span> |</span></span><br><span class="line"><span class="function">+----+-----------------+-----------------+------+---------+------+------------------------+------------------+</span></span><br><span class="line"><span class="function">2 <span class="title">rows</span> <span class="title">in</span> <span class="title">set</span> (0.00 <span class="title">sec</span>)</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">show</span> <span class="title">variables</span> <span class="title">like</span> &#x27;%<span class="title">max_connections</span>%&#x27;; # 查询最大连接数，看到只有 20</span></span><br><span class="line"><span class="function">+------------------------+-------+</span></span><br><span class="line"><span class="function">| <span class="title">Variable_name</span>          | <span class="title">Value</span> |</span></span><br><span class="line"><span class="function">+------------------------+-------+</span></span><br><span class="line"><span class="function">| <span class="title">max_connections</span>        | 20    |</span></span><br><span class="line"><span class="function">| <span class="title">mysqlx_max_connections</span> | 100   |</span></span><br><span class="line"><span class="function">+------------------------+-------+</span></span><br><span class="line"><span class="function">2 <span class="title">rows</span> <span class="title">in</span> <span class="title">set</span>, 1 <span class="title">warning</span> (0.01 <span class="title">sec</span>)</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">set</span> <span class="title">GLOBAL</span> <span class="title">max_connections</span>=1000; # 设置最大连接数 1000</span></span><br><span class="line"><span class="function"><span class="title">Query</span> <span class="title">OK</span>, 0 <span class="title">rows</span> <span class="title">affected</span> (0.00 <span class="title">sec</span>)</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">show</span> <span class="title">variables</span> <span class="title">like</span> &#x27;%<span class="title">max_connections</span>%&#x27;; # 再次查询最大连接数，看到已经是设置好的 1000 了</span></span><br><span class="line"><span class="function">+------------------------+-------+</span></span><br><span class="line"><span class="function">| <span class="title">Variable_name</span>          | <span class="title">Value</span> |</span></span><br><span class="line"><span class="function">+------------------------+-------+</span></span><br><span class="line"><span class="function">| <span class="title">max_connections</span>        | 1000  |</span></span><br><span class="line"><span class="function">| <span class="title">mysqlx_max_connections</span> | 100   |</span></span><br><span class="line"><span class="function">+------------------------+-------+</span></span><br><span class="line"><span class="function">2 <span class="title">rows</span> <span class="title">in</span> <span class="title">set</span>, 1 <span class="title">warning</span> (0.00 <span class="title">sec</span>)</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">mysql</span>&gt; <span class="title">exit</span> # 退出<span class="title">mysql</span>命令行</span></span><br><span class="line"><span class="function"><span class="title">Bye</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">D</span>:\<span class="title">Programs</span>\<span class="title">mysql</span>-8.0.23-<span class="title">winx64</span>\<span class="title">bin</span>&gt;</span></span><br></pre></td></tr></table></figure><p>超过连接数的原因，是mysql的连接数保持时间太长。可以修改一下保活机制<code>show global variables like &#39;wait_timeout&#39;</code> ，就是最大睡眠时间。</p><p>修改一下<code>set global wait_timeout=300;</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><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></pre></td><td class="code"><pre><span class="line">mysql&gt; show global variables like &#x27;wait_timeout&#x27;;</span><br><span class="line">+---------------+-------+</span><br><span class="line">| Variable_name | Value |</span><br><span class="line">+---------------+-------+</span><br><span class="line">| wait_timeout  | 28800 |</span><br><span class="line">+---------------+-------+</span><br><span class="line">1 row in set, 1 warning (0.01 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; set global wait_timeout=300;</span><br><span class="line">Query OK, 0 rows affected (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; show global variables like &#x27;wait_timeout&#x27;;</span><br><span class="line">+---------------+-------+</span><br><span class="line">| Variable_name | Value |</span><br><span class="line">+---------------+-------+</span><br><span class="line">| wait_timeout  | 300   |</span><br><span class="line">+---------------+-------+</span><br><span class="line">1 row in set, 1 warning (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt;</span><br></pre></td></tr></table></figure><p>刚刚的配置是临时修改，重启mysql会失效。可以通过修改mysql的配置&#x2F;etc&#x2F;my.cnf。</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><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">max_connections = 1024</span><br><span class="line">group_concat_max_len = 1024</span><br><span class="line"># 最大睡眠时间</span><br><span class="line">wait_timeout=300</span><br><span class="line"># 超时时间设置</span><br><span class="line">interactive_timeout = 500</span><br></pre></td></tr></table></figure><p>修改完毕后，重启mysql即可。</p><h2 id="3-Loading-class-com-mysql-jdbc-Driver-This-is-deprecated-The-new-driver-class-is-com-mysql-cj-jdbc-Driver-The-driver-is-automatically-registered-via-the-SPI-and-manual-loading-of-the-driver-class-is-generally-unnecessary"><a href="#3-Loading-class-com-mysql-jdbc-Driver-This-is-deprecated-The-new-driver-class-is-com-mysql-cj-jdbc-Driver-The-driver-is-automatically-registered-via-the-SPI-and-manual-loading-of-the-driver-class-is-generally-unnecessary" class="headerlink" title="3. Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary."></a>3. Loading class <code>com.mysql.jdbc.Driver</code>. This is deprecated. The new driver class is <code>com.mysql.cj.jdbc.Driver</code>. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.</h2><p>因为连接mysql8版本的数据库需要新的驱动。</p><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"><span class="comment"># spring.datasource.driver-class-name=com.mysql.jdbc.Driver</span></span><br><span class="line">spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver</span><br></pre></td></tr></table></figure><h2 id="4-MySQL-Workbench-连接不上mysql问题"><a href="#4-MySQL-Workbench-连接不上mysql问题" class="headerlink" title="4. MySQL Workbench 连接不上mysql问题"></a>4. MySQL Workbench 连接不上mysql问题</h2><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FMySQL%20Workbench%20%E8%BF%9E%E6%8E%A5%E4%B8%8D%E4%B8%8Amysql%E9%97%AE%E9%A2%98-1.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FMySQL%20Workbench%20%E8%BF%9E%E6%8E%A5%E4%B8%8D%E4%B8%8Amysql%E9%97%AE%E9%A2%98-2.png"></p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FMySQL%20Workbench%20%E8%BF%9E%E6%8E%A5%E4%B8%8D%E4%B8%8Amysql%E9%97%AE%E9%A2%98-3.png"></p><p>加入host的范围</p><figure class="highlight sql"><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></pre></td><td class="code"><pre><span class="line">mysql<span class="operator">&gt;</span> <span class="keyword">update</span> <span class="keyword">user</span> <span class="keyword">set</span> host <span class="operator">=</span> <span class="string">&#x27;%&#x27;</span> <span class="keyword">where</span> <span class="keyword">user</span> <span class="operator">=</span> <span class="string">&#x27;root&#x27;</span>;</span><br><span class="line"></span><br><span class="line">mysql<span class="operator">&gt;</span> <span class="keyword">select</span> <span class="keyword">user</span>,host <span class="keyword">from</span> mysql.user;</span><br><span class="line"><span class="operator">+</span><span class="comment">------------------+-----------+</span></span><br><span class="line"><span class="operator">|</span> <span class="keyword">user</span>             <span class="operator">|</span> host      <span class="operator">|</span></span><br><span class="line"><span class="operator">+</span><span class="comment">------------------+-----------+</span></span><br><span class="line"><span class="operator">|</span> root             <span class="operator">|</span> <span class="operator">%</span>         <span class="operator">|</span></span><br><span class="line"><span class="operator">|</span> mysql.infoschema <span class="operator">|</span> localhost <span class="operator">|</span></span><br><span class="line"><span class="operator">|</span> mysql.session    <span class="operator">|</span> localhost <span class="operator">|</span></span><br><span class="line"><span class="operator">|</span> mysql.sys        <span class="operator">|</span> localhost <span class="operator">|</span></span><br><span class="line"><span class="operator">+</span><span class="comment">------------------+-----------+</span></span><br><span class="line"><span class="number">4</span> <span class="keyword">rows</span> <span class="keyword">in</span> <span class="keyword">set</span> (<span class="number">0.00</span> sec)</span><br><span class="line"></span><br><span class="line">mysql<span class="operator">&gt;</span>  flush privileges;</span><br><span class="line">Query OK, <span class="number">0</span> <span class="keyword">rows</span> affected (<span class="number">0.01</span> sec)</span><br></pre></td></tr></table></figure><p>终于成功。记得权限类的要<code>flush privileges</code>!</p><p><img src="https://cdn-1258560072.cos.ap-shanghai.myqcloud.com/imgs%2FMySQL%20Workbench%20%E8%BF%9E%E6%8E%A5%E4%B8%8D%E4%B8%8Amysql%E9%97%AE%E9%A2%98-4.png"></p><h2 id="5-设置expire-logs-days自动过期清理binlog"><a href="#5-设置expire-logs-days自动过期清理binlog" class="headerlink" title="5. 设置expire_logs_days自动过期清理binlog"></a>5. 设置expire_logs_days自动过期清理binlog</h2><p>最近发现磁盘满了，saomiaoxia该分区发现mysql&#x2F;data下大量<code>binlog.000xxx</code>文件，每个都几乎1G多，这是mysql二进制日志文件用于日志记录与操作恢复的，从没清理过，导致占用很大空间。</p><p>查看binlog过期时间，设置的时间为90天，这个值默认是0天，也就是说不自动清理，可以根据生产情况修改，本例修改为7天</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><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></pre></td><td class="code"><pre><span class="line">mysql&gt; show variables like &#x27;expire_logs_days&#x27;;</span><br><span class="line">+------------------+-------+</span><br><span class="line">| Variable_name    | Value |</span><br><span class="line">+------------------+-------+</span><br><span class="line">| expire_logs_days | 0     |</span><br><span class="line">+------------------+-------+</span><br><span class="line">1 row in set, 1 warning (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; set global expire_logs_days=7;</span><br><span class="line">ERROR 3683 (HY000): The option expire_logs_days and binlog_expire_logs_seconds cannot be used together. Please use binlog_expire_logs_seconds to set the expire time (expire_logs_days is deprecated)</span><br><span class="line">mysql&gt; set global  binlog_expire_logs_seconds=60*60*24*7;</span><br><span class="line">Query OK, 0 rows affected (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; show variables like &#x27;%expire%&#x27;;</span><br><span class="line">+--------------------------------+--------+</span><br><span class="line">| Variable_name                  | Value  |</span><br><span class="line">+--------------------------------+--------+</span><br><span class="line">| binlog_expire_logs_seconds     | 604800 |</span><br><span class="line">| disconnect_on_expired_password | ON     |</span><br><span class="line">| expire_logs_days               | 0      |</span><br><span class="line">+--------------------------------+--------+</span><br><span class="line">3 rows in set, 1 warning (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt;</span><br></pre></td></tr></table></figure><p>设置之后不会立即清除，触发条件是：</p><ul><li>binlog大小超过max_binlog_size</li><li>手动执行flush logs</li><li>重新启动时(MySQL将会new一个新文件用于记录binlog)</li></ul><p>我们执行<code>flush logs;</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><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt;  flush logs;</span><br><span class="line">Query OK, 0 rows affected (0.30 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt;</span><br></pre></td></tr></table></figure><p>删除指定日期之前的 binlog ：</p><figure class="highlight plaintext"><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">mysql&gt; PURGE MASTER LOGS BEFORE &#x27;2020-11-11 11:11:11&#x27;;</span><br><span class="line">Query OK, 0 rows affected (0.19 sec)</span><br></pre></td></tr></table></figure><p>清空所有 binlog</p><figure class="highlight plaintext"><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">mysql&gt; RESET MASTER;</span><br><span class="line">Query OK, 0 rows affected (0.09 sec)</span><br></pre></td></tr></table></figure><p>配置自动清理</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; set global expire_logs_days=7;</span><br></pre></td></tr></table></figure><p>设置过期时长。过期自动删除，上面我刚试了，但提示：</p><blockquote><p> The option expire_logs_days and binlog_expire_logs_seconds cannot be used together. Please use binlog_expire_logs_seconds to set the expire time (expire_logs_days is deprecated)</p></blockquote><p>大意是 <code>expire_logs_days</code> 与 <code>binlog_expire_logs_seconds</code> 不能同时使用，让我们使用 <code>binlog_expire_logs_seconds</code>, 因为 <code>expire_logs_days</code> 已经过时了。 <code>binlog_expire_logs_seconds</code> 设置的过期时长单位是秒，设置7天过期：</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><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">mysql&gt; set global  binlog_expire_logs_seconds=60*60*24*7;</span><br><span class="line">Query OK, 0 rows affected (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; show variables like &#x27;%expire%&#x27;;</span><br><span class="line">+--------------------------------+--------+</span><br><span class="line">| Variable_name                  | Value  |</span><br><span class="line">+--------------------------------+--------+</span><br><span class="line">| binlog_expire_logs_seconds     | 604800 |</span><br><span class="line">| disconnect_on_expired_password | ON     |</span><br><span class="line">| expire_logs_days               | 0      |</span><br><span class="line">+--------------------------------+--------+</span><br><span class="line">3 rows in set, 1 warning (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt;</span><br></pre></td></tr></table></figure><h2 id="附录"><a href="#附录" class="headerlink" title="附录"></a>附录</h2><ul><li><a href="https://www.cnblogs.com/childking/p/12695588.html">MySQL优化之配置文件</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;记录MySQL开发中遇到的填坑经历。&lt;/p&gt;</summary>
    
    
    
    <category term="Mysql" scheme="https://sogrey.github.io/categories/Mysql/"/>
    
    
    <category term="Mysql" scheme="https://sogrey.github.io/tags/Mysql/"/>
    
    <category term="踩坑记" scheme="https://sogrey.github.io/tags/%E8%B8%A9%E5%9D%91%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>提高国内访问GitHub的速度</title>
    <link href="https://sogrey.github.io/article/%E6%8F%90%E9%AB%98%E5%9B%BD%E5%86%85%E8%AE%BF%E9%97%AEGitHub%E7%9A%84%E9%80%9F%E5%BA%A6/"/>
    <id>https://sogrey.github.io/article/%E6%8F%90%E9%AB%98%E5%9B%BD%E5%86%85%E8%AE%BF%E9%97%AEGitHub%E7%9A%84%E9%80%9F%E5%BA%A6/</id>
    <published>2021-03-16T15:26:16.000Z</published>
    <updated>2026-05-20T18:33:18.030Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>因为某些原因，github访问速度确实太慢,于是就出现了很多提高github访问速度的方案。在此记录几种。</p><span id="more"></span><h2 id="GitHub-镜像访问"><a href="#GitHub-镜像访问" class="headerlink" title="GitHub 镜像访问"></a>GitHub 镜像访问</h2><p>这里提供两个最常用的镜像地址：</p><ul><li><a href="https://github.com.cnpmjs.org/">https://github.com.cnpmjs.org</a></li><li><a href="https://hub.fastgit.org/">https://hub.fastgit.org</a></li></ul><p>也就是说上面的镜像就是一个克隆版的 GitHub，你可以访问上面的镜像网站，网站的内容跟 GitHub 是完整同步的镜像，然后在这个网站里面进行下载克隆等操作。</p><blockquote><p>不要在克隆站上登录你的github账号</p></blockquote><h2 id="GitHub-文件加速"><a href="#GitHub-文件加速" class="headerlink" title="GitHub 文件加速"></a>GitHub 文件加速</h2><p>利用 Cloudflare Workers 对 github release 、archive 以及项目文件进行加速，部署无需服务器且自带CDN.</p><ul><li><a href="https://gh.api.99988866.xyz/">https://gh.api.99988866.xyz</a></li><li><a href="https://g.ioiox.com/">https://g.ioiox.com</a></li></ul><p>以上网站为演示站点，如无法打开可以查看开源项目：<a href="https://hunsh.net/archives/23/">gh-proxy-GitHub</a> 文件加速自行部署。</p><h2 id="Github-加速下载"><a href="#Github-加速下载" class="headerlink" title="Github 加速下载"></a>Github 加速下载</h2><p>只需要复制当前 GitHub 地址粘贴到输入框中就可以代理加速下载！</p><p>地址：<a href="http://toolwa.com/github/">http://toolwa.com/github/</a></p><h2 id="加速你的-Github"><a href="#加速你的-Github" class="headerlink" title="加速你的 Github"></a>加速你的 Github</h2><p><a href="https://github.zhlh6.cn/">https://github.zhlh6.cn</a></p><p>输入 Github 仓库地址，使用生成的地址进行 git ssh 等操作</p><h2 id="GitHub-raw-加速"><a href="#GitHub-raw-加速" class="headerlink" title="GitHub raw 加速"></a>GitHub raw 加速</h2><p>GitHub raw 域名并非 <code>github.com</code> 而是 <code>raw.githubusercontent.com</code>，上方的 GitHub 加速如果不能加速这个域名，那么可以使用 Static CDN 提供的反代服务。</p><p>将 <code>raw.githubusercontent.com</code> 替换为 <code>raw.staticdn.net</code> 即可加速。</p><h2 id="GitHub-Jsdelivr"><a href="#GitHub-Jsdelivr" class="headerlink" title="GitHub + Jsdelivr"></a>GitHub + Jsdelivr</h2><p>jsdelivr 唯一美中不足的就是它不能获取 exe 文件以及 Release 处附加的 exe 和 dmg 文件。</p><p>也就是说如果 exe 文件是附加在 Release 处但是没有在 code 里面的话是无法获取的。所以只能当作静态文件 cdn 用途，而不能作为 Release 加速下载的用途。</p><h2 id="通过-Gitee-中转-fork-仓库下载"><a href="#通过-Gitee-中转-fork-仓库下载" class="headerlink" title="通过 Gitee 中转 fork 仓库下载"></a>通过 Gitee 中转 fork 仓库下载</h2><p>网上有很多相关的教程，就是将github的仓库克隆同步到gitee上</p><h2 id="通过修改-HOSTS-文件进行加速"><a href="#通过修改-HOSTS-文件进行加速" class="headerlink" title="通过修改 HOSTS 文件进行加速"></a>通过修改 HOSTS 文件进行加速</h2><p>手动把cdn和ip地址绑定。</p><ul><li>获取 github 的 <code>global.ssl.fastly</code> 地址访问：<a href="http://github.global.ssl.fastly.net.ipaddress.com/#ipinfo">http://github.global.ssl.fastly.net.ipaddress.com/#ipinfo</a> 获取cdn和ip域名：</li></ul><p>得到：199.232.69.194 <a href="https://github.global.ssl.fastly.net/">https://github.global.ssl.fastly.net</a></p><ul><li>获取github.com地址</li></ul><p>访问：<a href="https://github.com.ipaddress.com/#ipinfo">https://github.com.ipaddress.com/#ipinfo</a> 获取cdn和ip：</p><p>得到：140.82.114.4 <a href="http://github.com/">http://github.com</a></p><ul><li>修改 host 文件映射上面查找到的 IP</li></ul><p>windows系统：</p><ul><li>修改C:WindowsSystem32driversetchosts文件的权限，指定可写入：右击-&gt;hosts-&gt;属性-&gt;安全-&gt;编辑-&gt;点击Users-&gt;在Users的权限“写入”后面打勾。然后点击确定。</li><li>右击-&gt;hosts-&gt;打开方式-&gt;选定记事本（或者你喜欢的编辑器）-&gt;在末尾处添加以下内容：<figure class="highlight plaintext"><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">199.232.69.194 github.global.ssl.fastly.net</span><br><span class="line">140.82.114.4 github.com</span><br></pre></td></tr></table></figure></li></ul><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://mp.weixin.qq.com/s/xc7wvTDcM4kTS_qILIlg2w">提高国内访问 GitHub 的速度的 9 种方案</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;因为某些原因，github访问速度确实太慢,于是就出现了很多提高github访问速度的方案。在此记录几种。&lt;/p&gt;</summary>
    
    
    
    <category term="科学上网" scheme="https://sogrey.github.io/categories/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
    
    <category term="Github" scheme="https://sogrey.github.io/tags/Github/"/>
    
    <category term="科学上网" scheme="https://sogrey.github.io/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
  </entry>
  
</feed>
