<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>HK&#39;s Blog</title>
  
  
  <link href="http://blog.212676.xyz/atom.xml" rel="self"/>
  
  <link href="http://blog.212676.xyz/"/>
  <updated>2024-11-20T02:56:47.518Z</updated>
  <id>http://blog.212676.xyz/</id>
  
  <author>
    <name>Daniel Niu</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>tmp1</title>
    <link href="http://blog.212676.xyz/2024/11/20/tmp1/"/>
    <id>http://blog.212676.xyz/2024/11/20/tmp1/</id>
    <published>2024-11-20T02:56:47.000Z</published>
    <updated>2024-11-20T02:56:47.518Z</updated>
    
    <content type="html"><![CDATA[<blockquote></blockquote><span id="more"></span>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>计算机网络</title>
    <link href="http://blog.212676.xyz/2024/10/23/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/"/>
    <id>http://blog.212676.xyz/2024/10/23/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/</id>
    <published>2024-10-23T04:17:53.000Z</published>
    <updated>2024-10-23T07:52:51.015Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>期中复习总结</p></blockquote><span id="more"></span><h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h1><h2 id="计算机网络在信息时代中的运用"><a href="#计算机网络在信息时代中的运用" class="headerlink" title="计算机网络在信息时代中的运用"></a>计算机网络在信息时代中的运用</h2><h2 id=""><a href="#" class="headerlink" title=""></a></h2>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;期中复习总结&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    <category term="计算机网络" scheme="http://blog.212676.xyz/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/"/>
    
    
  </entry>
  
  <entry>
    <title>python学习记录</title>
    <link href="http://blog.212676.xyz/2024/10/09/python%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/"/>
    <id>http://blog.212676.xyz/2024/10/09/python%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/</id>
    <published>2024-10-09T06:05:59.000Z</published>
    <updated>2024-10-09T06:07:16.690Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>记录部分笔记</p></blockquote><span id="more"></span><h2 id="生成requirements-txt"><a href="#生成requirements-txt" class="headerlink" title="生成requirements.txt"></a>生成requirements.txt</h2><figure class="highlight shell"><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">pip install pipreqs</span><br><span class="line">pipreqs ./ --encoding=utf8 --ignore .conda </span><br><span class="line">pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;记录部分笔记&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    <category term="python学习记录" scheme="http://blog.212676.xyz/categories/python%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/"/>
    
    
    <category term="python" scheme="http://blog.212676.xyz/tags/python/"/>
    
  </entry>
  
  <entry>
    <title>小米13装机指南</title>
    <link href="http://blog.212676.xyz/2024/09/30/%E5%B0%8F%E7%B1%B313%E8%A3%85%E6%9C%BA%E6%8C%87%E5%8D%97/"/>
    <id>http://blog.212676.xyz/2024/09/30/%E5%B0%8F%E7%B1%B313%E8%A3%85%E6%9C%BA%E6%8C%87%E5%8D%97/</id>
    <published>2024-09-30T04:54:48.000Z</published>
    <updated>2024-10-09T06:05:26.951Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>记录小米13在24&#x2F;09&#x2F;30重装</p></blockquote><span id="more"></span><h1 id="刷入官方包"><a href="#刷入官方包" class="headerlink" title="刷入官方包"></a>刷入官方包</h1><h1 id="刷入twrp"><a href="#刷入twrp" class="headerlink" title="刷入twrp"></a>刷入twrp</h1><h1 id="刷magisk以及安装模块"><a href="#刷magisk以及安装模块" class="headerlink" title="刷magisk以及安装模块"></a>刷magisk以及安装模块</h1><h1 id="sui配置"><a href="#sui配置" class="headerlink" title="sui配置"></a>sui配置</h1><h1 id="lsposed配置"><a href="#lsposed配置" class="headerlink" title="lsposed配置"></a>lsposed配置</h1><h1 id="基本软件"><a href="#基本软件" class="headerlink" title="基本软件"></a>基本软件</h1><h2 id="Databackup"><a href="#Databackup" class="headerlink" title="Databackup"></a>Databackup</h2><p>这个版本好用,没有必要升级</p><h2 id="miplayer"><a href="#miplayer" class="headerlink" title="miplayer"></a>miplayer</h2><p>作为相册内嵌播放工具，仅保留基本播放功能去除其他冗余功能：</p><ol><li>在thanox中找到Mi video -&gt; 活动管理 -&gt; 右上三个点:全不 -&gt; 搜索<code>player</code> 将<code>VideoPlusPlayerActivity</code>以及 <code>GalleryPlayerActivity</code>打开即可</li><li>系统设置中禁止其联网</li><li>设置智能冻结+活检解冻</li></ol><p>这下在相册中可以直接播放视频了</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;记录小米13在24&amp;#x2F;09&amp;#x2F;30重装&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    <category term="装机指南" scheme="http://blog.212676.xyz/categories/%E8%A3%85%E6%9C%BA%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="装机指南" scheme="http://blog.212676.xyz/tags/%E8%A3%85%E6%9C%BA%E6%8C%87%E5%8D%97/"/>
    
    <category term="小米13" scheme="http://blog.212676.xyz/tags/%E5%B0%8F%E7%B1%B313/"/>
    
  </entry>
  
  <entry>
    <title>博客编写技巧</title>
    <link href="http://blog.212676.xyz/2024/09/20/%E5%8D%9A%E5%AE%A2%E7%BC%96%E5%86%99%E6%8A%80%E5%B7%A7/"/>
    <id>http://blog.212676.xyz/2024/09/20/%E5%8D%9A%E5%AE%A2%E7%BC%96%E5%86%99%E6%8A%80%E5%B7%A7/</id>
    <published>2024-09-20T04:22:04.000Z</published>
    <updated>2024-09-27T10:36:42.203Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>记录一些博客的编写技巧</p></blockquote><span id="more"></span><h1 id="折叠代码段"><a href="#折叠代码段" class="headerlink" title="折叠代码段"></a>折叠代码段</h1><p>在md头中添加设置</p><figure class="highlight markdown"><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">article:</span><br><span class="line"><span class="code">    highlight:</span></span><br><span class="line"><span class="code">            fold: folded</span></span><br></pre></td></tr></table></figure><p>eg:</p><div style="display: flex; justify-content: center; align-items: center;">    <img class="same-height" src="https://cdn.jsdelivr.net/gh/NiuHK/Picstorage2@main/imgs/202409201226499.png" alt="头部更改" >    <img class="same-height" src="https://cdn.jsdelivr.net/gh/NiuHK/Picstorage2@main/imgs/202409201258866.png" alt="效果"></div><h1 id="图片并列排版"><a href="#图片并列排版" class="headerlink" title="图片并列排版"></a>图片并列排版</h1><p>在页面模板<code>themes &gt; icarus &gt; source &gt; css &gt; custom.styl</code>中添加以下代码:</p><figure class="highlight css"><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="selector-class">.same-height</span> &#123;</span><br><span class="line">    <span class="attribute">max-height</span>: <span class="number">5000px</span>; <span class="comment">/* 图片尽量紧密排列 */</span></span><br><span class="line">    <span class="attribute">width</span>: auto; <span class="comment">/* 自动调整宽度 */</span></span><br><span class="line">    <span class="attribute">object-fit</span>: contain; <span class="comment">/* 确保图片比例不变形 */</span></span><br><span class="line">    <span class="attribute">margin-right</span>: <span class="number">20px</span>; <span class="comment">/* 图片之间的间距 */</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.same-height</span><span class="selector-pseudo">:last-child</span> &#123;</span><br><span class="line">    <span class="attribute">margin-right</span>: <span class="number">0</span>; <span class="comment">/* 最后一个图片去掉右边距 */</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>默认为同一排中的图片尽量大,尽量密排列<br>若想针对某页单独更改图片排版,在页面中加入以下代码</p><figure class="highlight html"><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="tag">&lt;<span class="name">style</span>&gt;</span><span class="language-css"></span></span><br><span class="line"><span class="language-css">    <span class="selector-class">.same-height</span> &#123;</span></span><br><span class="line"><span class="language-css">        <span class="attribute">max-height</span>: <span class="number">5000px</span>; <span class="comment">/* 期望高度 */</span></span></span><br><span class="line"><span class="language-css">        <span class="attribute">width</span>: auto; <span class="comment">/* 自动调整宽度 */</span></span></span><br><span class="line"><span class="language-css">        <span class="attribute">object-fit</span>: contain; <span class="comment">/* 确保图片比例不变形 */</span></span></span><br><span class="line"><span class="language-css">        <span class="attribute">margin-right</span>: <span class="number">20px</span>; <span class="comment">/* 图片之间的间距 */</span></span></span><br><span class="line"><span class="language-css">    &#125;</span></span><br><span class="line"><span class="language-css"></span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br></pre></td></tr></table></figure><p>在用户代码段中添加以下代码:</p><blockquote><p>同时,设置markdown自动补齐(<code>editor.tabCompletion</code>)为on:</p></blockquote><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></pre></td><td class="code"><pre><span class="line">       <span class="attr">&quot;Image Container&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">       <span class="attr">&quot;prefix&quot;</span><span class="punctuation">:</span> <span class="string">&quot;img_mutiple&quot;</span><span class="punctuation">,</span></span><br><span class="line">       <span class="attr">&quot;body&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">           <span class="string">&quot;&lt;div style=\&quot;display: flex; justify-content: center; align-items: center;\&quot;&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">           <span class="string">&quot;    &lt;img class=\&quot;same-height\&quot; src=\&quot;$1\&quot; alt=\&quot;\&quot;&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">           <span class="string">&quot;    &lt;img class=\&quot;same-height\&quot; src=\&quot;$2\&quot; alt=\&quot;\&quot;&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">           <span class="string">&quot;&lt;/div&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">           <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">       <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Insert an image container with two images and CSS for same height.&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;Image single&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">       <span class="attr">&quot;prefix&quot;</span><span class="punctuation">:</span> <span class="string">&quot;img_single&quot;</span><span class="punctuation">,</span></span><br><span class="line">       <span class="attr">&quot;body&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">           <span class="string">&quot;&lt;div style=\&quot;display: flex; justify-content: center; \&quot;&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">           <span class="string">&quot;    &lt;img style=\&quot;max-height: 300px;  width: auto; object-fit: contain; margin-right: 20px;\&quot; src=\&quot;$1\&quot; alt=\&quot;\&quot;&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">           <span class="string">&quot;&lt;/div&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">           <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">       <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Insert an image container with two images and CSS for same height.&quot;</span></span><br><span class="line">   <span class="punctuation">&#125;</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>在setting.json中插入以启用代码段预览:</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></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;[markdown]&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;editor.quickSuggestions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;other&quot;</span><span class="punctuation">:</span> <span class="string">&quot;on&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;comments&quot;</span><span class="punctuation">:</span> <span class="string">&quot;on&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;strings&quot;</span><span class="punctuation">:</span> <span class="string">&quot;on&quot;</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></pre></td></tr></table></figure><ul><li>图片最大为<code>min(原始大小,能保持并列的最大值)</code></li></ul><p>在添加图片时,使用<code>img</code>补全,或在以下代码中插入链接</p><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">style</span>=<span class="string">&quot;display: flex; justify-content: center; align-items: center;&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">img</span> <span class="attr">class</span>=<span class="string">&quot;same-height&quot;</span> <span class="attr">src</span>=<span class="string">&quot;&quot;</span> <span class="attr">alt</span>=<span class="string">&quot;&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">img</span> <span class="attr">class</span>=<span class="string">&quot;same-height&quot;</span> <span class="attr">src</span>=<span class="string">&quot;&quot;</span> <span class="attr">alt</span>=<span class="string">&quot;&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">style</span>=<span class="string">&quot;display: flex; justify-content: center; align-items: center;&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">img</span> <span class="attr">style</span>=<span class="string">&quot;max-height: 300px;  width: auto; object-fit: contain; margin-right: 20px;&quot;</span> <span class="attr">src</span>=<span class="string">&quot;&quot;</span> <span class="attr">alt</span>=<span class="string">&quot;&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><blockquote><p>justify-content 为水平方向对齐 ,align-items为竖直方向对齐 </p></blockquote><h1 id="置顶"><a href="#置顶" class="headerlink" title="置顶"></a>置顶</h1><div style="display: flex; justify-content: center; align-items: center;">    <img class="same-height" src="https://cdn.jsdelivr.net/gh/NiuHK/Picstorage2@main/imgs/202409201226499.png" alt="头部更改" ></div><p><code>top</code>值越大,越靠前</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;记录一些博客的编写技巧&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    <category term="博客编写记录" scheme="http://blog.212676.xyz/categories/%E5%8D%9A%E5%AE%A2%E7%BC%96%E5%86%99%E8%AE%B0%E5%BD%95/"/>
    
    
  </entry>
  
  <entry>
    <title>ubuntu 18.04 虚拟机初始化</title>
    <link href="http://blog.212676.xyz/2024/06/30/ubuntu-18-04-%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%9D%E5%A7%8B%E5%8C%96/"/>
    <id>http://blog.212676.xyz/2024/06/30/ubuntu-18-04-%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%9D%E5%A7%8B%E5%8C%96/</id>
    <published>2024-06-30T11:12:52.000Z</published>
    <updated>2024-06-30T11:15:52.649Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>初始化ubuntu conda环境、ssh、固定ip</p></blockquote><span id="more"></span><h2 id="安装系统"><a href="#安装系统" class="headerlink" title="安装系统"></a>安装系统</h2><p>安装的时候需要关闭虚拟机网络</p><h2 id="设置固定ip"><a href="#设置固定ip" class="headerlink" title="设置固定ip"></a>设置固定ip</h2><h3 id="编辑网络配置文件"><a href="#编辑网络配置文件" class="headerlink" title="编辑网络配置文件"></a>编辑网络配置文件</h3><p><code>sudo vim /etc/netplan/01-network-manager-all.yaml</code></p><p>原始的:</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Let NetworkManager manage all devices on this system</span></span><br><span class="line"><span class="attr">network:</span></span><br><span class="line">  <span class="attr">version:</span> <span class="number">2</span></span><br><span class="line">  <span class="attr">renderer:</span> <span class="string">NetworkManager</span></span><br></pre></td></tr></table></figure><p>添加固定ip,ipv4网关,dns服务器地址</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><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="comment"># Let NetworkManager manage all devices on this system</span></span><br><span class="line"><span class="attr">network:</span></span><br><span class="line">  <span class="attr">version:</span> <span class="number">2</span></span><br><span class="line">  <span class="attr">renderer:</span> <span class="string">NetworkManager</span></span><br><span class="line">  <span class="attr">ethernets:</span></span><br><span class="line">    <span class="attr">ens33:</span> </span><br><span class="line">      <span class="attr">addresses:</span> [<span class="number">192.168</span><span class="number">.10</span><span class="number">.10</span><span class="string">/24</span>]</span><br><span class="line">      <span class="attr">gateway4:</span> <span class="number">192.168</span><span class="number">.10</span><span class="number">.1</span></span><br><span class="line">      <span class="attr">dhcp4:</span> <span class="literal">no</span></span><br><span class="line">      <span class="attr">nameservers:</span></span><br><span class="line">        <span class="attr">addresses:</span> [<span class="number">8.8</span><span class="number">.8</span><span class="number">.8</span>,<span class="number">114.114</span><span class="number">.114</span><span class="number">.114</span>]       </span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="应用配置文件"><a href="#应用配置文件" class="headerlink" title="应用配置文件"></a>应用配置文件</h3><p><code>sudo netplan apply</code></p><h3 id="测试通断"><a href="#测试通断" class="headerlink" title="测试通断"></a>测试通断</h3><p><code>ping baidu.com</code></p><h2 id="ssh服务端安装"><a href="#ssh服务端安装" class="headerlink" title="ssh服务端安装"></a>ssh服务端安装</h2><p>安装ssh server</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get update</span><br><span class="line">sudo apt-get install openssh-server</span><br></pre></td></tr></table></figure><p>重启ssh服务<code>sudo service ssh start</code></p><h3 id="配置公钥"><a href="#配置公钥" class="headerlink" title="配置公钥"></a>配置公钥</h3><p>将公钥写入信任文件</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> ~/.ssh</span><br><span class="line"><span class="built_in">cat</span> my_key.pub &gt;&gt; authorized_keys</span><br></pre></td></tr></table></figure><p>如此便完成了公钥的安装。<br><br>此外，为了确保连接成功，输入如下指令以保证以下文件权限正确：</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> 600 authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br></pre></td></tr></table></figure><h2 id="miniconda安装"><a href="#miniconda安装" class="headerlink" title="miniconda安装"></a>miniconda安装</h2><h3 id="安装miniconda"><a href="#安装miniconda" class="headerlink" title="安装miniconda"></a>安装miniconda</h3><p>下载安装文件(之后可删除)</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> miniconda</span><br><span class="line"><span class="built_in">cd</span> miniconda</span><br><span class="line">wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh</span><br></pre></td></tr></table></figure><p>执行安装程序<code>bash Miniconda3-latest-Linux-x86_64.sh </code></p><p>重启终端之后，就可以使用miniconda了。但先换源，将conda和pip的软件源修改成清华的源，下载安装软件会快很多：</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/</span><br><span class="line">conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/</span><br><span class="line">conda config --<span class="built_in">set</span> show_channel_urls <span class="built_in">yes</span> </span><br><span class="line">pip config <span class="built_in">set</span> global.index-url https://pypi.tuna.tsinghua.edu.cn/simple</span><br></pre></td></tr></table></figure><blockquote><p>最后一行命令在base环境下执行</p></blockquote><h3 id="取消终端自动启动base环境"><a href="#取消终端自动启动base环境" class="headerlink" title="取消终端自动启动base环境"></a>取消终端自动启动base环境</h3><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda config --<span class="built_in">set</span> auto_activate_base <span class="literal">false</span></span><br></pre></td></tr></table></figure><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><ul><li>在 Ubuntu 上查看当前所在路径，你可以使用 pwd（print working directory）命令。只需在终端中输入以下命令并按回车：<code>pwd</code></li></ul>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;初始化ubuntu conda环境、ssh、固定ip&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="ubuntu" scheme="http://blog.212676.xyz/tags/ubuntu/"/>
    
    <category term="linux" scheme="http://blog.212676.xyz/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>ffmpeg记录</title>
    <link href="http://blog.212676.xyz/2024/06/03/ffmpeg%E8%AE%B0%E5%BD%95/"/>
    <id>http://blog.212676.xyz/2024/06/03/ffmpeg%E8%AE%B0%E5%BD%95/</id>
    <published>2024-06-03T10:51:37.000Z</published>
    <updated>2024-06-26T04:57:15.806Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>ffmppeg 使用笔记</p></blockquote><span id="more"></span><h1 id="基础操作"><a href="#基础操作" class="headerlink" title="基础操作"></a>基础操作</h1><h2 id="查看基本信息"><a href="#查看基本信息" class="headerlink" title="查看基本信息"></a>查看基本信息</h2><p>ffmpeg -i</p><h2 id="压缩视频"><a href="#压缩视频" class="headerlink" title="压缩视频"></a>压缩视频</h2><h3 id="使用amd显卡加速"><a href="#使用amd显卡加速" class="headerlink" title="使用amd显卡加速"></a>使用amd显卡加速</h3><p>ffmpeg -i C0072.MP4 -c:v h264_amf -preset slow -crf 20 -c:a copy out2.mp4</p><blockquote><p>-crf 20 是压缩参数，建议值18-25，越低压缩越狠</p></blockquote><h2 id="更改视频中的音频编码为mp3（便于设备兼容）"><a href="#更改视频中的音频编码为mp3（便于设备兼容）" class="headerlink" title="更改视频中的音频编码为mp3（便于设备兼容）"></a>更改视频中的音频编码为mp3（便于设备兼容）</h2><p>ffmpeg -i 2-out1.mp4 -c:v copy -c:a libmp3lame -b:a 192k 1-out2.mp4</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;ffmppeg 使用笔记&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="ffmpeg" scheme="http://blog.212676.xyz/tags/ffmpeg/"/>
    
  </entry>
  
  <entry>
    <title>YOLOv5参数解析</title>
    <link href="http://blog.212676.xyz/2024/05/06/YOLOv5%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90/"/>
    <id>http://blog.212676.xyz/2024/05/06/YOLOv5%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90/</id>
    <published>2024-05-06T14:40:08.000Z</published>
    <updated>2024-09-20T06:26:16.607Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>YOLOv5参数解析，主要解析源码中train.py文件中包含的参数。</p></blockquote><span id="more"></span><h1 id="5000字多图长文预警！手把手带你调参Yolo-v5（二）"><a href="#5000字多图长文预警！手把手带你调参Yolo-v5（二）" class="headerlink" title="5000字多图长文预警！手把手带你调参Yolo v5（二）"></a>5000字多图长文预警！手把手带你调参Yolo v5（二）</h1><ul><li>1.1’–weights’</li><li>1.2’–cfg’</li><li>1.3’–data’</li><li>1.4’–hyp’</li><li>1.5’–epochs’</li><li>1.6’–batch-size’</li><li>1.7’–imgsz’, ‘–img’, ‘–img-size’</li><li>1.8’–rect’🍀</li><li>1.9’–resume’🍀10’–nosave’</li><li>1.11’–noval’</li><li>1.12’–noautoanchor’🍀</li><li>1.13’–evolve’🍀</li><li>1.14’–bucket’</li><li>1.15’–cache’</li><li>1.16’–image-weights’</li><li>1.17’–device’</li><li>1.18’–multi-scale’🍀</li><li>1.19’–single-cls’</li><li>1.20’–optimizer’</li><li>1.21’–sync-bn’</li><li>1.22’–workers’</li><li>1.23’–project’</li><li>1.24’–name’</li><li>1.25’–exist-ok’</li><li>1.26’–quad’</li><li>1.27’–cos-lr’🍀</li><li>1.28’–label-smoothing’🍀</li><li>1.29’–patience’</li><li>1.30’–freeze’🍀</li><li>1.31’–save-period’</li><li>1.32’–local_rank’</li><li>1.33’–entity’</li><li>1.34’–upload_dataset’</li><li>1.35’–bbox_interval’</li><li>1.36’–artifact_alias’</li></ul><h1 id="0-首次运行常见错误🍀"><a href="#0-首次运行常见错误🍀" class="headerlink" title="0.首次运行常见错误🍀"></a>0.首次运行常见错误🍀</h1><p>刚拿到代码可以运行train.py文件看看，一般都会出现这个错误：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That <span class="keyword">is</span> dangerous, since it can degrade performance <span class="keyword">or</span> cause incorrect results. The best thing to do <span class="keyword">is</span> to ensure that only a single OpenMP runtime <span class="keyword">is</span> linked into the process, e.g. by avoiding static linking of the OpenMP runtime <span class="keyword">in</span> <span class="built_in">any</span> library. As an unsafe, unsupported, undocumented workaround you can <span class="built_in">set</span> the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to <span class="keyword">continue</span> to execute, but that may cause crashes <span class="keyword">or</span> silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.</span><br></pre></td></tr></table></figure><p>解决方案：在train.py文件里加入以下代码：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line">os.environ[<span class="string">&#x27;KMP_DUPLICATE_LIB_OK&#x27;</span>]=<span class="string">&#x27;TRUE&#x27;</span></span><br></pre></td></tr></table></figure><h1 id="1-train-py参数解析🚀"><a href="#1-train-py参数解析🚀" class="headerlink" title="1.train.py参数解析🚀"></a>1.train.py参数解析🚀</h1><p>首先还是打开根目录下的 <code>train.py</code>，直接看 <code>parse_opt()</code></p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202405081554905.png"></p><h1 id="1-1’–weights’"><a href="#1-1’–weights’" class="headerlink" title="1.1’–weights’"></a>1.1’–weights’</h1><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">parser.add_argument(&quot;--weights&quot;, type=str, default=ROOT / &quot;yolov5s.pt&quot;, help=&quot;initial weights path&quot;)</span><br></pre></td></tr></table></figure><p>指定预训练权重路径；如果这里设置为空的话，就是自己从头开始进行训练；下图是官方提供的预训练权重</p><div style="display: flex; justify-content: left; align-items: center;">    <img style="max-height: 350px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202405081601543.avif" alt=""></div><h1 id="1-2’–cfg’"><a href="#1-2’–cfg’" class="headerlink" title="1.2’–cfg’"></a>1.2’–cfg’</h1><p>指定模型配置文件路径的；源码里面提供了以上这5个配置文件，配置文件里面指定了一些参数信息和backbone的结构信息。</p><div style="display: flex; justify-content: left; align-items: center;">    <img style="max-height: 300px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202405081605447.webp" alt="列表"></div><div style="display: flex; justify-content: left; align-items: center;">    <img style="max-height: 500px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202405081605903.avif" alt=""></div><h1 id="1-3’–data’"><a href="#1-3’–data’" class="headerlink" title="1.3’–data’"></a>1.3’–data’</h1><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">parser.add_argument(&quot;--data&quot;, type=str, default=ROOT / &quot;data/coco128.yaml&quot;, help=&quot;dataset.yaml path&quot;)</span><br></pre></td></tr></table></figure><p>数据集对应的参数文件；里面主要存放数据集的类别和路径信息。</p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202405081607768.webp"></p><p>yolo源码里面提供了9种数据集的配置文件</p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202405081607903.avif"></p><h1 id="1-4’–hyp’"><a href="#1-4’–hyp’" class="headerlink" title="1.4’–hyp’"></a>1.4’–hyp’</h1><p>指定超参数文件的路径；超参数里面包含了大量的参数信息，同样提供了5个</p><div style="display: flex; justify-content: left; ">    <img style="max-height: 500px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202405081607773.webp" alt=""></div><p><img src="https://blog.212676.xyz/Picstorage/imgs/202405081607780.avif"></p><h1 id="1-5’–epochs’"><a href="#1-5’–epochs’" class="headerlink" title="1.5’–epochs’"></a>1.5’–epochs’</h1><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">parser.add_argument(&quot;--epochs&quot;, type=int, default=100, help=&quot;total training epochs&quot;)</span><br></pre></td></tr></table></figure><p>训练的轮数；默认为300轮，显示效果是0-299</p><h1 id="1-6’–batch-size’"><a href="#1-6’–batch-size’" class="headerlink" title="1.6’–batch-size’"></a>1.6’–batch-size’</h1><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">parser.add_argument(&quot;--batch-size&quot;, type=int, default=16, help=&quot;total batch size for all GPUs, -1 for autobatch&quot;)</span><br></pre></td></tr></table></figure><p>每批次的输入数据量；<code>default=-1</code>将时自动调节 <code>batchsize</code>大小。</p><p>❝ 这里说一下epoch、batchsize、iteration三者之间的联系</p><blockquote><p>1、batchsize是批次大小，假如取batchsize&#x3D;24，则表示每次训练时在训练集中取24个训练样本进行训练。</p><p>2、iteration是迭代次数，1个iteration就等于一次使用24（batchsize大小）个样本进行训练。</p><p>3、epoch：1个epoch就等于使用训练集中全部样本训练1次。</p></blockquote><h1 id="1-7’–imgsz’-‘–img’-‘–img-size’"><a href="#1-7’–imgsz’-‘–img’-‘–img-size’" class="headerlink" title="1.7’–imgsz’, ‘–img’, ‘–img-size’"></a>1.7’–imgsz’, ‘–img’, ‘–img-size’</h1><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">parser.add_argument(&quot;--imgsz&quot;, &quot;--img&quot;, &quot;--img-size&quot;, type=int, default=640, help=&quot;train, val image size (pixels)&quot;)</span><br></pre></td></tr></table></figure><p>训练集和测试集图片的像素大小；输入默认640*640，这个参数在你选择yolov5l那些大一点的权重的时候，要进行适当的调整，这样才能达到好的效果。</p><h1 id="1-8’–rect’🍀"><a href="#1-8’–rect’🍀" class="headerlink" title="1.8’–rect’🍀"></a>1.8’–rect’🍀</h1><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">parser.add_argument(&quot;--rect&quot;, action=&quot;store_true&quot;, help=&quot;rectangular training&quot;)</span><br></pre></td></tr></table></figure><p>是否采用矩阵推理的方式去训练模型；</p><p>❝ 所谓矩阵推理就是不再要求你训练的图片是正方形了；矩阵推理会加速模型的推理过程，减少一些冗余信息。</p><p>下图分别是方形推理方式和矩阵推理方式</p><div style="display: flex; justify-content: center; ">    <img style="max-height: 200px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202405081609878.avif" alt=""></div><div style="display: flex; justify-content: center; ">    <img style="max-height: 200px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202405081610261.avif" alt=""></div><h1 id="1-9’–resume’🍀"><a href="#1-9’–resume’🍀" class="headerlink" title="1.9’–resume’🍀"></a>1.9’–resume’🍀</h1><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">parser.add_argument(&quot;--resume&quot;, nargs=&quot;?&quot;, const=True, default=False, help=&quot;resume most recent training&quot;)</span><br></pre></td></tr></table></figure><p>断点续训：即是否在之前训练的一个模型基础上继续训练，default 值默认是 false；如果想采用断点续训的方式，这里我推荐一种写法，即首先将default&#x3D;False 改为 default&#x3D;True 随后在终端中键入如下指令</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python train.py --resume D:\Pycharm_Projects\yolov5-<span class="number">6.1</span>-<span class="number">4_23</span>\runs\train\exp19\weights\last.pt</span><br></pre></td></tr></table></figure><p>  <code>D:\Pycharm_Projects\yolov5-6.1-4_23\runs\train\exp19\weights\last.pt </code>为你上一次中断时保存的pt文件路径</p><p>输入指令后就可以看到模型是继续从上次结束时开始训练的</p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202405081611730.webp"></p><h1 id="1-10’–nosave’"><a href="#1-10’–nosave’" class="headerlink" title="1.10’–nosave’"></a>1.10’–nosave’</h1><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">parser.add_argument(&quot;--nosave&quot;, action=&quot;store_true&quot;, help=&quot;only save final checkpoint&quot;)</span><br></pre></td></tr></table></figure><p>是否只保存最后一轮的pt文件；我们默认是保存best.pt和last.pt两个的</p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202405081612361.avif"></p><h1 id="1-11’–noval’"><a href="#1-11’–noval’" class="headerlink" title="1.11’–noval’"></a>1.11’–noval’</h1><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">parser.add_argument(&quot;--noval&quot;, action=&quot;store_true&quot;, help=&quot;only validate final epoch&quot;)</span><br></pre></td></tr></table></figure><p>只在最后一轮测试；正常情况下每个epoch都会计算mAP，但如果开启了这个参数，那么就只在最后一轮上进行测试，不建议开启</p><h1 id="1-12’–noautoanchor’🍀"><a href="#1-12’–noautoanchor’🍀" class="headerlink" title="1.12’–noautoanchor’🍀"></a>1.12’–noautoanchor’🍀</h1><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">parser.add_argument(&quot;--noautoanchor&quot;, action=&quot;store_true&quot;, help=&quot;disable AutoAnchor&quot;)</span><br></pre></td></tr></table></figure><p>是否禁用自动锚框；默认是开启的，自动锚点的好处是可以简化训练过程；</p><blockquote><p>yolov5中预先设定了一下锚定框，这些锚框是针对coco数据集的，其他目标检测也适用，可以在models&#x2F;yolov5.文件中查看，例如如图所示，这些框针对的图片大小是640640。这是默认的anchor大小。需要注意的是在目标检测任务中，一般使用大特征图上去检测小目标，因为大特征图含有更多小目标信息，因此大特征图上的anchor数值通常设置为小数值，小特征图检测大目标，因此小特征图上anchor数值设置较大。</p></blockquote><p><img src="https://blog.212676.xyz/Picstorage/imgs/202405081612943.avif"></p><blockquote><p>在yolov5 中自动锚定框选项，训练开始前，会自动计算数据集标注信息针对默认锚定框的最佳召回率，当最佳召回率大于等于0.98时，则不需要更新锚定框；如果最佳召回率小于0.98，则需要重新计算符合此数据集的锚定框。在parse_opt设置了默认自动计算锚框选项，如果不想自动计算，可以设置这个，建议不要改动。</p></blockquote><h1 id="1-13’–evolve’🍀"><a href="#1-13’–evolve’🍀" class="headerlink" title="1.13’–evolve’🍀"></a>1.13’–evolve’🍀</h1><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">parser.add_argument(&quot;--evolve&quot;, type=int, nargs=&quot;?&quot;, const=300, help=&quot;evolve hyperparameters for x generations&quot;)</span><br></pre></td></tr></table></figure><p>遗传超参数进化；yolov5使用遗传超参数进化，提供的默认参数是通过在COCO数据集上使用超参数进化得来的（也就是下图这些参数）。由于超参数进化会耗费大量的资源和时间，所以建议大家不要动这个参数。</p><blockquote><p>遗传算法是利用种群搜索技术将种群作为一组问题解，通过对当前种群施加类似生物遗传环境因素的选择、交叉、变异等一系列的遗传操作来产生新一代的种群，并逐步使种群优化到包含近似最优解的状态，遗传算法调优能够求出优化问题的全局最优解，优化结果与初始条件无关，算法独立于求解域，具有较强的鲁棒性，适合于求解复杂的优化问题，应用较为广泛。</p></blockquote><div style="display: flex; justify-content: left; ">    <img style="max-height: 550px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202405081613897.avif" alt=""></div><h1 id="1-14’–bucket’"><a href="#1-14’–bucket’" class="headerlink" title="1.14’–bucket’"></a>1.14’–bucket’</h1><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">parser.add_argument(&quot;--bucket&quot;, type=str, default=&quot;&quot;, help=&quot;gsutil bucket&quot;)</span><br></pre></td></tr></table></figure><p>谷歌云盘；通过这个参数可以下载谷歌云盘上的一些东西，但是现在没必要使用了</p><h1 id="1-15’–cache’"><a href="#1-15’–cache’" class="headerlink" title="1.15’–cache’"></a>1.15’–cache’</h1><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">parser.add_argument(&quot;--cache&quot;, type=str, nargs=&quot;?&quot;, const=&quot;ram&quot;, help=&quot;image --cache ram/disk&quot;)</span><br></pre></td></tr></table></figure><p>是否提前缓存图片到内存，以加快训练速度，默认False；开启这个参数就会对图片进行缓存，从而更好的训练模型。</p><h1 id="1-16’–image-weights’"><a href="#1-16’–image-weights’" class="headerlink" title="1.16’–image-weights’"></a>1.16’–image-weights’</h1><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">parser.add_argument(&quot;--image-weights&quot;, action=&quot;store_true&quot;, help=&quot;use weighted image selection for training&quot;)</span><br></pre></td></tr></table></figure><p>是否启用加权图像策略，默认是不开启的；主要是为了解决样本不平衡问题；开启后会对于上一轮训练效果不好的图片，在下一轮中增加一些权重；</p><h1 id="1-17’–device’"><a href="#1-17’–device’" class="headerlink" title="1.17’–device’"></a>1.17’–device’</h1><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">parser.add_argument(&quot;--device&quot;, default=&quot;&quot;, help=&quot;cuda device, i.e. 0 or 0,1,2,3 or cpu&quot;)</span><br></pre></td></tr></table></figure><p>设备选择；这个参数就是指定硬件设备的，系统会自己判断的</p><h1 id="1-18’–multi-scale’🍀"><a href="#1-18’–multi-scale’🍀" class="headerlink" title="1.18’–multi-scale’🍀"></a>1.18’–multi-scale’🍀</h1><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">parser.add_argument(&quot;--multi-scale&quot;, action=&quot;store_true&quot;, help=&quot;vary img-size +/- 50%%&quot;)</span><br></pre></td></tr></table></figure><p>是否启用多尺度训练，默认是不开启的；多尺度训练是指设置几种不同的图片输入尺度，训练时每隔一定iterations随机选取一种尺度训练，这样训练出来的模型鲁棒性更强。</p><blockquote><p>多尺度训练在比赛中经常可以看到他身影，是被证明了有效提高性能的方式。输入图片的尺寸对检测模型的性能影响很大，在基础网络部分常常会生成比原图小数十倍的特征图，导致小物体的特征描述不容易被检测网络捕捉。通过输入更大、更多尺寸的图片进行训练，能够在一定程度上提高检测模型对物体大小的鲁棒性。</p></blockquote><h1 id="1-19’–single-cls’"><a href="#1-19’–single-cls’" class="headerlink" title="1.19’–single-cls’"></a>1.19’–single-cls’</h1><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">parser.add_argument(&quot;--single-cls&quot;, action=&quot;store_true&quot;, help=&quot;train multi-class data as single-class&quot;)</span><br></pre></td></tr></table></figure><p>设定训练数据集是单类别还是多类别；默认为 false多类别</p><h1 id="1-20’–optimizer’"><a href="#1-20’–optimizer’" class="headerlink" title="1.20’–optimizer’"></a>1.20’–optimizer’</h1><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">parser.add_argument(&quot;--optimizer&quot;, type=str, choices=[&quot;SGD&quot;, &quot;Adam&quot;, &quot;AdamW&quot;], default=&quot;SGD&quot;, help=&quot;optimizer&quot;)</span><br></pre></td></tr></table></figure><p>选择优化器；默认为SGD，可选SGD，Adam，AdamW</p><h1 id="1-21’–sync-bn’"><a href="#1-21’–sync-bn’" class="headerlink" title="1.21’–sync-bn’"></a>1.21’–sync-bn’</h1><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">parser.add_argument(&quot;--sync-bn&quot;, action=&quot;store_true&quot;, help=&quot;use SyncBatchNorm, only available in DDP mode&quot;)</span><br></pre></td></tr></table></figure><p>是否开启跨卡同步BN；开启参数后即可使用 SyncBatchNorm多 GPU 进行分布式训练</p><h1 id="1-22’–workers’"><a href="#1-22’–workers’" class="headerlink" title="1.22’–workers’"></a>1.22’–workers’</h1><p><img src="/"></p><p>最大worker数量；这里经常出问题，建议设置成0</p><h1 id="1-23’–project’"><a href="#1-23’–project’" class="headerlink" title="1.23’–project’"></a>1.23’–project’</h1><p><img src="/"></p><p>指定训练好的模型的保存路径；默认在runs&#x2F;train</p><p><img src="/"></p><h1 id="1-24’–name’"><a href="#1-24’–name’" class="headerlink" title="1.24’–name’"></a>1.24’–name’</h1><p><img src="/"></p><p>设定保存的模型文件夹名，默认在exp；</p><h1 id="1-25’–exist-ok’"><a href="#1-25’–exist-ok’" class="headerlink" title="1.25’–exist-ok’"></a>1.25’–exist-ok’</h1><p><img src="/"></p><p>每次预测模型的结果是否保存在原来的文件夹；如果指定了这个参数的话，那么本次预测的结果还是保存在上一次保存的文件夹里；如果不指定就是每次预测结果保存一个新的文件夹下。</p><h1 id="1-26’–quad’"><a href="#1-26’–quad’" class="headerlink" title="1.26’–quad’"></a>1.26’–quad’</h1><p><img src="/"></p><p>官方给出的开启这个功能后的实际效果：</p><ul><li>好处是在比默认 640 大的数据集上训练效果更好</li><li>副作用是在 640 大小的数据集上训练效果可能会差一些</li></ul><h1 id="1-27’–cos-lr’🍀"><a href="#1-27’–cos-lr’🍀" class="headerlink" title="1.27’–cos-lr’🍀"></a>1.27’–cos-lr’🍀</h1><p><img src="/"></p><p>是否开启余弦学习率；</p><p><img src="/"></p><p>这是我不采用cos-lr时学习率的曲线：</p><p><img src="/"></p><p>开启后的学习率应该是这样子：</p><p><img src="/"></p><h1 id="1-28’–label-smoothing’🍀"><a href="#1-28’–label-smoothing’🍀" class="headerlink" title="1.28’–label-smoothing’🍀"></a>1.28’–label-smoothing’🍀</h1><p><img src="/"></p><p>是否对标签进行平滑处理，默认是不启用的；</p><blockquote><p>在训练样本中，我们并不能保证所有sample都标注正确，如果某个样本标注错误，就可能产生负面印象，如果我们有办法“告诉”模型，样本的标签不一定正确，那么训练出来的模型对于少量的样本错误就会有“免疫力”采用随机化的标签作为训练数据时，损失函数有1-ε的概率与上面的式子相同，比如说告诉模型只有0.95概率是那个标签。</p></blockquote><h1 id="1-29’–patience’"><a href="#1-29’–patience’" class="headerlink" title="1.29’–patience’"></a>1.29’–patience’</h1><p><img src="/"></p><p>早停；如果模型在default值轮数里没有提升，则停止训练模型</p><h1 id="1-30’–freeze’🍀"><a href="#1-30’–freeze’🍀" class="headerlink" title="1.30’–freeze’🍀"></a>1.30’–freeze’🍀</h1><p><img src="/"></p><p>指定冻结层数量；可以在yolov5s.yaml中查看主干网络层数。</p><blockquote><p>冻结训练是迁移学习常用的方法，当我们在使用数据量不足的情况下，通常我们会选择公共数据集提供权重作为预训练权重，我们知道网络的backbone主要是用来提取特征用的，一般大型数据集训练好的权重主干特征提取能力是比较强的，这个时候我们只需要冻结主干网络，fine-tune后面层就可以了，不需要从头开始训练，大大减少了实践而且还提高了性能。</p></blockquote><p><img src="/"></p><p>例如如下指令，代表冻结前8层，因为只有9层，注意不要超过9</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python train.py --freeze <span class="number">8</span></span><br></pre></td></tr></table></figure><p>这里分享一个对比冻结效果的项目</p><p>这里是项目的部分截图</p><p><img src="/"></p><h1 id="1-31’–save-period’"><a href="#1-31’–save-period’" class="headerlink" title="1.31’–save-period’"></a>1.31’–save-period’</h1><p><img src="/"></p><p>用于设置多少个epoch保存一下checkpoint；</p><h1 id="1-32’–local-rank’"><a href="#1-32’–local-rank’" class="headerlink" title="1.32’–local_rank’"></a>1.32’–local_rank’</h1><p><img src="/"></p><p>DistributedDataParallel 单机多卡训练，单GPU设备不需要设置；</p><h1 id="1-33’–entity’"><a href="#1-33’–entity’" class="headerlink" title="1.33’–entity’"></a>1.33’–entity’</h1><p><img src="/"></p><p>在线可视化工具，类似于tensorboard</p><h1 id="1-34’–upload-dataset’"><a href="#1-34’–upload-dataset’" class="headerlink" title="1.34’–upload_dataset’"></a>1.34’–upload_dataset’</h1><p><img src="/"></p><p>是否上传dataset到wandb tabel(将数据集作为交互式 dsviz表 在浏览器中查看、查询、筛选和分析数据集) 默认False</p><h1 id="1-35’–bbox-interval’"><a href="#1-35’–bbox-interval’" class="headerlink" title="1.35’–bbox_interval’"></a>1.35’–bbox_interval’</h1><p><img src="/"></p><p>设置界框图像记录间隔 Set bounding-box image logging interval for W&amp;B 默认-1</p><h1 id="1-36’–artifact-alias’"><a href="#1-36’–artifact-alias’" class="headerlink" title="1.36’–artifact_alias’"></a>1.36’–artifact_alias’</h1><p><img src="/"></p><p>功能作者还未实现</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;YOLOv5参数解析，主要解析源码中train.py文件中包含的参数。&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>ununtu_shell_tools</title>
    <link href="http://blog.212676.xyz/2024/04/13/ununtu-shell-tools/"/>
    <id>http://blog.212676.xyz/2024/04/13/ununtu-shell-tools/</id>
    <published>2024-04-13T13:40:33.000Z</published>
    <updated>2024-06-26T04:57:15.806Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>ubuntu 常用的shell命令合集</p></blockquote><span id="more"></span><h1 id="Linux终端命令"><a href="#Linux终端命令" class="headerlink" title="Linux终端命令"></a>Linux终端命令</h1><h6 id="ubuntu安装插件命令"><a href="#ubuntu安装插件命令" class="headerlink" title="ubuntu安装插件命令"></a>ubuntu安装插件命令</h6><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">sudo apt-get install 插件名称(tree)</span><br><span class="line">1</span><br></pre></td></tr></table></figure><h6 id="查看硬盘容量信息"><a href="#查看硬盘容量信息" class="headerlink" title="查看硬盘容量信息"></a>查看硬盘容量信息</h6><figure class="highlight shell"><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">df -h</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">查看当前目录文件夹占用磁盘空间</span></span><br><span class="line">du -sh *</span><br><span class="line">123</span><br></pre></td></tr></table></figure><h6 id="查看内存使用情况"><a href="#查看内存使用情况" class="headerlink" title="查看内存使用情况"></a>查看内存使用情况</h6><figure class="highlight shell"><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">cat /proc/meminfo</span><br><span class="line">free -h</span><br><span class="line">12</span><br></pre></td></tr></table></figure><h6 id="查看当前目录"><a href="#查看当前目录" class="headerlink" title="查看当前目录"></a>查看当前目录</h6><figure class="highlight shell"><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">pwd</span><br><span class="line">1</span><br></pre></td></tr></table></figure><h6 id="创建文件-创建file-txt文件"><a href="#创建文件-创建file-txt文件" class="headerlink" title="创建文件(创建file.txt文件)"></a>创建文件(创建file.txt文件)</h6><figure class="highlight shell"><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">touch file.txt</span><br><span class="line">1</span><br></pre></td></tr></table></figure><h6 id="查看帮助文档"><a href="#查看帮助文档" class="headerlink" title="查看帮助文档"></a>查看帮助文档</h6><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">command --help</span><br><span class="line"></span><br><span class="line">man command</span><br><span class="line">123</span><br></pre></td></tr></table></figure><h6 id="ls命令"><a href="#ls命令" class="headerlink" title="ls命令"></a>ls命令</h6><table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td>-a</td><td>显示隐藏文件（以.开头的文件）</td></tr><tr><td>-l</td><td>显示文件详细信息</td></tr><tr><td>-h</td><td>显示文件大小 需要配合-l选项使用</td></tr></tbody></table><h6 id="ls通配符"><a href="#ls通配符" class="headerlink" title="ls通配符"></a>ls通配符</h6><table><thead><tr><th>通配符</th><th>说明</th></tr></thead><tbody><tr><td>*</td><td>代表任意个数字符</td></tr><tr><td>?</td><td>代表一个字符</td></tr><tr><td>[]</td><td>标识匹配字符数组中的任意一个</td></tr><tr><td>[abc]</td><td>匹配a、b、c中任意一个字符</td></tr><tr><td>[a-f] [0-9]</td><td>匹配a到f范围内的任意一个字符</td></tr></tbody></table><h6 id="mkdir递归创建文件夹"><a href="#mkdir递归创建文件夹" class="headerlink" title="mkdir递归创建文件夹"></a>mkdir递归创建文件夹</h6><figure class="highlight shell"><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">mkdir -p dir1/dir2/dir3</span><br><span class="line">1</span><br></pre></td></tr></table></figure><h6 id="rm命令"><a href="#rm命令" class="headerlink" title="rm命令"></a>rm命令</h6><table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td>-r</td><td>递归删除</td></tr><tr><td>-f</td><td>强制删除。忽略不存在的文件，不提示确认</td></tr><tr><td>-d</td><td>删除空目录</td></tr></tbody></table><h6 id="拷贝和移动文件"><a href="#拷贝和移动文件" class="headerlink" title="拷贝和移动文件"></a>拷贝和移动文件</h6><h6 id="1、tree-目录名-以树状图列出文件目录结构"><a href="#1、tree-目录名-以树状图列出文件目录结构" class="headerlink" title="1、tree [目录名]: 以树状图列出文件目录结构"></a>1、tree [目录名]: 以树状图列出文件目录结构</h6><table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td>-d</td><td>只显示目录</td></tr></tbody></table><h6 id="2、cp-源文件-目标文件-复制文件或者目录"><a href="#2、cp-源文件-目标文件-复制文件或者目录" class="headerlink" title="2、cp 源文件 目标文件: 复制文件或者目录"></a>2、cp 源文件 目标文件: 复制文件或者目录</h6><table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td>-i</td><td>覆盖文件前提示</td></tr><tr><td>-r</td><td>递归复制该目录下所有子目录和文件，目标文件必须是一个目录名</td></tr></tbody></table><h6 id="3、mv-源文件-目标文件"><a href="#3、mv-源文件-目标文件" class="headerlink" title="3、mv 源文件 目标文件:"></a>3、mv 源文件 目标文件:</h6><table><thead><tr><th><strong>选项</strong></th><th><strong>说明</strong></th></tr></thead><tbody><tr><td>-i</td><td>覆盖文件前提示</td></tr></tbody></table><h6 id="查看文件内容"><a href="#查看文件内容" class="headerlink" title="查看文件内容"></a>查看文件内容</h6><h6 id="1、cat-文件名-查看文件内容、创建文件、文件合并、追加文件内容等功能（一次完整显示）"><a href="#1、cat-文件名-查看文件内容、创建文件、文件合并、追加文件内容等功能（一次完整显示）" class="headerlink" title="1、cat 文件名: 查看文件内容、创建文件、文件合并、追加文件内容等功能（一次完整显示）"></a>1、cat 文件名: 查看文件内容、创建文件、文件合并、追加文件内容等功能（一次完整显示）</h6><table><thead><tr><th><strong>选项</strong></th><th><strong>说明</strong></th></tr></thead><tbody><tr><td>-b</td><td>对非空行编号</td></tr><tr><td>-n</td><td>对所有行编号</td></tr></tbody></table><h6 id="2、more-文件名-分屏显示文件内容（分屏显示）"><a href="#2、more-文件名-分屏显示文件内容（分屏显示）" class="headerlink" title="2、more 文件名: 分屏显示文件内容（分屏显示）"></a>2、more 文件名: 分屏显示文件内容（分屏显示）</h6><table><thead><tr><th>操作键</th><th><strong>说明</strong></th></tr></thead><tbody><tr><td>空格</td><td>下一屏</td></tr><tr><td>enter</td><td>下一行</td></tr><tr><td>b</td><td>回滚一屏</td></tr><tr><td>f</td><td>前滚一屏</td></tr><tr><td>q</td><td>退出</td></tr><tr><td>&#x2F;搜索字符串</td><td>搜索</td></tr></tbody></table><h6 id="3、grep-搜索内容（搜索内容有关键词、空格需要加上双引号）-文件名-搜索文本文件内容"><a href="#3、grep-搜索内容（搜索内容有关键词、空格需要加上双引号）-文件名-搜索文本文件内容" class="headerlink" title="3、grep 搜索内容（搜索内容有关键词、空格需要加上双引号） 文件名: 搜索文本文件内容"></a>3、grep 搜索内容（搜索内容有关键词、空格需要加上双引号） 文件名: 搜索文本文件内容</h6><table><thead><tr><th><strong>选项</strong></th><th><strong>说明</strong></th></tr></thead><tbody><tr><td>-n</td><td>显示行号</td></tr><tr><td>-v</td><td>显示不包含匹配文本的所有行</td></tr><tr><td>-i</td><td>忽略大小写</td></tr></tbody></table><p>常用的两种模式查找</p><p>^a：行首，搜索以a开头的行</p><p>d$：行尾，搜索以d结尾的行</p><h6 id="其他命令"><a href="#其他命令" class="headerlink" title="其他命令"></a>其他命令</h6><h6 id="1、echo-文字内容"><a href="#1、echo-文字内容" class="headerlink" title="1、echo 文字内容"></a>1、echo 文字内容</h6><p> echo会在终端中显示参数指定的文字,通常会和<strong>重定向</strong>联合使用</p><h6 id="2、重定向-和"><a href="#2、重定向-和" class="headerlink" title="2、重定向&gt;和&gt;&gt;"></a>2、重定向&gt;和&gt;&gt;</h6><blockquote><p>表示输出，会覆盖文件原有的内容 （将终端中输入的内容输出到文件中）</p></blockquote><p><img src="https://img-blog.csdnimg.cn/76d8eb74b3cb4641a422a2db5b9f1db7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASlBBX3NvdWw=,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"></p><blockquote><blockquote><p>表示追加，会将内容追加到已有文件的末尾（将终端中输入的内容追加到文件末尾）</p></blockquote></blockquote><p><img src="https://img-blog.csdnimg.cn/1e10cdd410cf42fcada0f5eae81eff44.png" alt="在这里插入图片描述"></p><p> 所有命令终端输出结果都可以使用&gt;和&gt;&gt;重定向到文件中例如</p><p><img src="https://img-blog.csdnimg.cn/c4800182349d44c09cc3673a31f7a482.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASlBBX3NvdWw=,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"></p><h6 id="3、管道"><a href="#3、管道" class="headerlink" title="3、管道|"></a>3、管道|</h6><p> Linux允许将一个命令的输出可以通过管道做为另一个命令的输入</p><p> 可以理解现实生活中的管子，管子的一头塞东西进去，另一头取出来，这里的左右分为两端，左端塞东西(写)，右端取东西(读)</p><p> 常用的管道命令有:</p><p> more: 分屏显示内容</p><p> grep: 在<a href="https://so.csdn.net/so/search?q=%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C&spm=1001.2101.3001.7020">命令执行</a>结果的基础上查询指定的文本</p><p><img src="https://img-blog.csdnimg.cn/61529556cb154f9aacfd00397feffcac.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASlBBX3NvdWw=,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"></p><h6 id="远程管理常用命令"><a href="#远程管理常用命令" class="headerlink" title="远程管理常用命令"></a>远程管理常用命令</h6><h6 id="关机重启"><a href="#关机重启" class="headerlink" title="关机重启"></a>关机重启</h6><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></pre></td><td class="code"><pre><span class="line">shutdown [选项] [时间]</span><br><span class="line"># 选项 -r 重新启动</span><br><span class="line">showdown -t now </span><br><span class="line">shutdown 20:10</span><br><span class="line">shutdown +10 #10分钟后关机</span><br><span class="line">shutdown -c  #取消关机</span><br><span class="line">123456</span><br></pre></td></tr></table></figure><h6 id="查看网卡信息"><a href="#查看网卡信息" class="headerlink" title="查看网卡信息"></a>查看网卡信息</h6><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">ip a</span><br><span class="line">ip address</span><br><span class="line">ifconfig</span><br><span class="line">123</span><br></pre></td></tr></table></figure><h6 id="ssh命令-远程连接"><a href="#ssh命令-远程连接" class="headerlink" title="ssh命令(远程连接)"></a>ssh命令(远程连接)</h6><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">ssh [-p 端口号]  用户名@ip(或者域名)</span><br><span class="line">ssh root@ip</span><br><span class="line">12</span><br></pre></td></tr></table></figure><h6 id="scp-远程复制文件"><a href="#scp-远程复制文件" class="headerlink" title="scp(远程复制文件)"></a>scp(远程复制文件)</h6><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">scp [-P 端口号] 文件名称或路径 用户名@ip(或者域名):路径 # 复制本地文件到远程服务器</span><br><span class="line"># 选项 -r 若给出的源文件是目录文件 则scp将递归复制该目录下的所有子目录和文件，目标文件必须为一个目录名</span><br><span class="line">scp D:\dir\s.txt root@ip:/tmp</span><br><span class="line">123</span><br></pre></td></tr></table></figure><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">scp [-p 端口号]  用户名@ip(或者域名):文件名称或路径 路径 # 复制远程服务器文件到本地</span><br><span class="line">scp zhaosc@192.168.174.129:/home/zhaosc/demo/demo.txt  D:\</span><br><span class="line">12</span><br></pre></td></tr></table></figure><p>注：要确认安装ssh服务端和客户端</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">sudo apt-get install openssh-server</span><br><span class="line"># 安装服务端</span><br><span class="line">12</span><br></pre></td></tr></table></figure><h6 id="ssh高级"><a href="#ssh高级" class="headerlink" title="ssh高级"></a>ssh高级</h6><h6 id="免密码登录"><a href="#免密码登录" class="headerlink" title="免密码登录"></a>免密码登录</h6><p> home目录下 .ssh隐藏文件夹</p><p>known_<a href="https://so.csdn.net/so/search?q=hosts%E6%96%87%E4%BB%B6&spm=1001.2101.3001.7020">hosts文件</a>存储授权信息</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">1、配置公钥</span><br><span class="line">执行ssh-keygen即可生成SSH钥匙，一路回车即可</span><br><span class="line">12</span><br></pre></td></tr></table></figure><p>id_rsa 和 id_rsa.pub 远程登陆时用来加密使用的文件</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">2、上传公钥到服务器(id_rsa.pub)</span><br><span class="line">执行ssh-copy-id -p port user@remote ，可以让远程服务器记住我们的公钥</span><br><span class="line">ssh-copy-id -p 22 root@47.117.64.2</span><br><span class="line">123</span><br></pre></td></tr></table></figure><p>本地使用私钥对数据进行加密&#x2F;解密 服务器使用公钥对数据进行加密</p><p><strong>以上命令在本地客户端执行 需要将本地客户端公钥（id_rsa.pub）添加到远程服务端的 ~&#x2F;.ssh&#x2F;authorized_keys中（可以手动添加，注意单行添加）</strong></p><h6 id="配置别名（在本地客服端创建-ssh-config）"><a href="#配置别名（在本地客服端创建-ssh-config）" class="headerlink" title="配置别名（在本地客服端创建 .ssh&#x2F;config）"></a>配置别名（在本地客服端创建 .ssh&#x2F;config）</h6><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></pre></td><td class="code"><pre><span class="line">.ssh/config配置信息如下</span><br><span class="line">---------------------------------</span><br><span class="line">Host aly # 别名</span><br><span class="line">HostName ip # ip/域名</span><br><span class="line">User root # 用户名</span><br><span class="line">Port 22 # 端口号</span><br><span class="line">----------------------------------</span><br><span class="line">登录</span><br><span class="line">ssh aly</span><br><span class="line">复制文件</span><br><span class="line">scp -r aly:/usr/local/tomcat/webapps D:\</span><br><span class="line">---------------------------------</span><br><span class="line">123456789101112</span><br></pre></td></tr></table></figure><h6 id="用户和权限"><a href="#用户和权限" class="headerlink" title="用户和权限"></a>用户和权限</h6><p>ls -l</p><p>权限信息：</p><p> 文件 -开头； 文件夹 d开头 ；r可读w可写x可执行 权限列为三列(三个一组) 依次是 用户权限 组权限 其他用户权限</p><p>用户和组信息：</p><p> 前面为用户后面为组</p><h6 id="chmod命令"><a href="#chmod命令" class="headerlink" title="chmod命令"></a>chmod命令</h6><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">chmod +/- rwx</span><br><span class="line">1</span><br></pre></td></tr></table></figure><h6 id="用户组管理"><a href="#用户组管理" class="headerlink" title="用户组管理"></a>用户组管理</h6><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">groupadd 组名 # 添加组</span><br><span class="line">groupdel 组名 # 删除组</span><br><span class="line">12</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;ubuntu 常用的shell命令合集&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="环境配置" scheme="http://blog.212676.xyz/tags/%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/"/>
    
    <category term="ubuntu" scheme="http://blog.212676.xyz/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>ununtu安装node.js_LTS</title>
    <link href="http://blog.212676.xyz/2024/04/13/ununtu%E5%AE%89%E8%A3%85node-js-LTS/"/>
    <id>http://blog.212676.xyz/2024/04/13/ununtu%E5%AE%89%E8%A3%85node-js-LTS/</id>
    <published>2024-04-13T13:31:45.000Z</published>
    <updated>2024-06-26T04:57:15.806Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>ubuntu 安装 LTS 版本 Node.js</p></blockquote><span id="more"></span><h1 id="ubuntu-安装-LTS-版本-Node-js"><a href="#ubuntu-安装-LTS-版本-Node-js" class="headerlink" title="ubuntu 安装 LTS 版本 Node.js"></a>ubuntu 安装 LTS 版本 Node.js</h1><p>今天在服务器上安装 Node.js ，用了下面的命令：</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">$ sudo apt-get update</span><br><span class="line">$ sudo apt-get install nodejs</span><br></pre></td></tr></table></figure><p>结果看了下安装的版本居然是 <code>10.x</code> 的，现在 LTS 版本都是 <code>14.x</code> 了，怎么才能安装 LTS 版本呢？网上搜了下可以在安装的时候指定版本：</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">$ sudo apt install nodejs=14.18.1</span><br></pre></td></tr></table></figure><p>但是执行却提示找不到版本：</p><blockquote><p>Version ‘14.18.1’ for ‘nodejs’ was not found</p></blockquote><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">$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -</span><br></pre></td></tr></table></figure><blockquote><p>这里添加的是 14.x 的版本，如果安装其他版本，只需要修改添加源地址的数字即可</p></blockquote><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">$ sudo apt-get install -y nodejs</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">$ node -v <span class="comment"># v14.18.1</span></span><br><span class="line">$ npm -v <span class="comment"># 6.14.15</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;ubuntu 安装 LTS 版本 Node.js&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="环境配置" scheme="http://blog.212676.xyz/tags/%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/"/>
    
    <category term="ubuntu" scheme="http://blog.212676.xyz/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>Vmware 无ui启动/停止 虚拟机</title>
    <link href="http://blog.212676.xyz/2024/04/13/Vmware-UbuntuServer-noui-install/"/>
    <id>http://blog.212676.xyz/2024/04/13/Vmware-UbuntuServer-noui-install/</id>
    <published>2024-04-13T13:28:36.000Z</published>
    <updated>2024-09-27T09:35:24.256Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>Vmware 无ui启动&#x2F;停止 虚拟机 , 并优化启动速度</p></blockquote><span id="more"></span><p>虚拟机设置中 3d加速-&gt; 关闭（没有图形界面打开这个会导致加载很慢）</p><p>windows(win10)批处理脚本</p><p>打开vm虚拟机的服务,并且开启无界面虚拟机</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></pre></td><td class="code"><pre><span class="line">@echo off</span><br><span class="line"></span><br><span class="line">net start &quot;vds&quot;</span><br><span class="line"></span><br><span class="line">net start &quot;VMAuthdService&quot;</span><br><span class="line"></span><br><span class="line">net start &quot;VMnetDHCP&quot;</span><br><span class="line"></span><br><span class="line">net start &quot;VMware NAT Service&quot;</span><br><span class="line"></span><br><span class="line">net start &quot;VMUSBArbService&quot;</span><br><span class="line"></span><br><span class="line">net start &quot;VMwareHostd&quot;</span><br><span class="line"></span><br><span class="line">&quot;D:\ApplicationFiles\System\VMware Workstation\vmrun.exe&quot; start &quot;F:\virtualMachine\ubuntu15.1X64\ubuntu15.1X64.vmx&quot; nogui</span><br></pre></td></tr></table></figure><p>保存为startvm.bat</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></pre></td><td class="code"><pre><span class="line">@echo off</span><br><span class="line"></span><br><span class="line">&quot;D:\ApplicationFiles\System\VMware Workstation\vmrun.exe&quot; stop &quot;F:\virtualMachine\ubuntu15.1X64\ubuntu15.1X64.vmx&quot; nogui</span><br><span class="line"></span><br><span class="line">net stop &quot;vds&quot;</span><br><span class="line"></span><br><span class="line">net stop &quot;VMnetDHCP&quot;</span><br><span class="line"></span><br><span class="line">net stop &quot;VMware NAT Service&quot;</span><br><span class="line"></span><br><span class="line">net stop &quot;VMwareHostd&quot;</span><br><span class="line"></span><br><span class="line">net stop &quot;VMUSBArbService&quot;</span><br><span class="line"></span><br><span class="line">net stop &quot;VMAuthdService&quot;</span><br><span class="line"></span><br><span class="line">保存为shutdownvm.bat</span><br></pre></td></tr></table></figure><p>说明:</p><p>D:\ApplicationFiles\System\VMware Workstation\vmrun.exe  为虚拟机安装目录&#x2F;ps:如果你把vmrun路径加入了环境变量path后,可以直接使用命令vmrun</p><p>F:\virtualMachine\ubuntu15.1X64\ubuntu15.1X64.vmx           为虚拟机文件位置</p><p>生成的文件创建快捷方式,右键-属性-高级,设置下<strong>管理员权限</strong>运行,以后双击即可执行</p><p>打开还要等个一分钟左右启动好,具体看你的系统性能</p><p>接下来就可以正常ssh连接了</p><hr><p>下面重点说一下用到的知识点原理</p><p><strong>一,首先说一下,window上面如何操作服务(win10 x64)</strong></p><p>windows上使用sc命令net命令设置操作服务,批处理关闭服务命令 开启服务命令</p><p>使用sc命令：</p><p>1 修改服务启动类型</p><p>sc config 服务名 start&#x3D; demand (设置服务为手动启动)</p><blockquote><p>start&#x3D; auto (设置服务为自动启动)</p></blockquote><pre><code>start= disabled (设置服务为禁用)</code></pre><p>2 安装服务：sc create 服务名</p><p>3 停止服务：sc stop 服务名</p><p>4 启动服务 : sc start 服务名</p><p>5 卸载服务：sc delete 服务名（卸载前先停止服务）</p><p>使用net命令</p><p>查看运行的服务： net start</p><p>启动服务： net start 服务名</p><p>停止服务： net stop 服务名</p><p>卸载服务： 服务名 -uninstall （卸载前先停止服务）</p><p>注意注意注意:</p><p><strong>start后面不能有空格   &#x3D;后面的参数需要有一个空格</strong></p><p><strong>不是一个单词（含空格）的服务名字,需要用引号</strong></p><p>综上所述我们可以使用:</p><p>启动服务： net start 服务名  或者     sc start 服务名</p><p>停止服务： net stop 服务名  或者     sc stop 服务名</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;Vmware 无ui启动&amp;#x2F;停止 虚拟机 , 并优化启动速度&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="环境配置" scheme="http://blog.212676.xyz/tags/%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/"/>
    
    <category term="ubuntu" scheme="http://blog.212676.xyz/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>计算机组成原理笔记</title>
    <link href="http://blog.212676.xyz/2024/04/01/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0/"/>
    <id>http://blog.212676.xyz/2024/04/01/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0/</id>
    <published>2024-04-01T13:34:05.000Z</published>
    <updated>2024-09-20T06:21:05.456Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>计算机组成原理笔记</p></blockquote><span id="more"></span><h1 id="Chapter4-指令系统"><a href="#Chapter4-指令系统" class="headerlink" title="Chapter4 指令系统"></a>Chapter4 指令系统</h1><h2 id="指令格式设计"><a href="#指令格式设计" class="headerlink" title="指令格式设计"></a>指令格式设计</h2><h3 id="基本结构"><a href="#基本结构" class="headerlink" title="基本结构"></a>基本结构</h3><ol><li>操作码</li><li>源操作数&#x2F;其地址or立即数：储存单元地址&#x2F;寄存器编号&#x2F;io端口</li><li>结果的地址：储存单元地址&#x2F;寄存器编号&#x2F;io端口</li><li>下条地址：通常隐含在PC中（按顺序执行时，下条地址为PC+地址长度）转移指令则跳转到给出的地址。</li></ol><blockquote><p>根据给出的地址个数，分为三、二、单、零地址指令</p><ol><li>三：双目运算符两个源操作数地址和一个结果地址</li><li>二：双目运算符两个源操作数，其中一个作为结果地址</li><li>一：（取反&#x2F;负）既是操作数地址也是结果地址</li><li>零地址：一种是无需，or栈型指令的操作数在栈顶，故不需要</li></ol></blockquote><h3 id="指令格式设计原则"><a href="#指令格式设计原则" class="headerlink" title="指令格式设计原则"></a>指令格式设计原则</h3><ol><li>指令尽量短</li><li>足够操作码位数</li><li>指令长度是字节的整数倍</li><li>合理选择地址字段个数</li><li>指令应尽量规整</li></ol><h2 id="指令系统设计"><a href="#指令系统设计" class="headerlink" title="指令系统设计"></a>指令系统设计</h2><ol><li>完备性完整性（指令的操作类型）</li><li>兼容性（兼容以前机器的指令）</li><li>均匀性（多种数据类型eg：三种整型，两种浮点）</li><li>可扩充性（预留一定编码空间，方便扩充）</li></ol><h3 id="基本设计问题"><a href="#基本设计问题" class="headerlink" title="基本设计问题"></a>基本设计问题</h3><h3 id="操作数类型"><a href="#操作数类型" class="headerlink" title="操作数类型"></a>操作数类型</h3><ol><li>指针以及地址</li><li>数值数据</li><li>位、位串、字符以及字符串</li></ol><h3 id="寻址方式"><a href="#寻址方式" class="headerlink" title="*寻址方式"></a>*寻址方式</h3><blockquote><p>注意，一条指令若有两个或两个以上的地址码时，各地址码可采用不同的寻址方式。例如，源地址采用一种寻址方式，而目的地址采用另一种寻址方式。</p></blockquote><ol><li><p>立即寻址：指令直接给出操作数本身</p></li><li><p>直接寻址：指令中给出操作数的有效地址（直接&#x2F;绝对地址）</p></li><li><p>间接寻址：给出操作数的地址的地址（可多重）<img src="https://blog.212676.xyz/Picstorage/imgs/202404012159712.png"></p></li><li><p>寄存器寻址：地址码是操作数所在寄存器编号</p><blockquote><ol><li>寄存器地址断，故寄存器寻址指令短</li><li>操作数已经在cpu，不访存，速度快</li></ol></blockquote></li><li><p>寄存器间接寻址：寄存器中存放操作数的有效地址，需要访存</p><div style="display: flex; justify-content: left; "> <img style="max-height: 200px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202404021407789.png" alt=""></div></li><li><p>变址寻址：线性表等，给出基准地址，（变址寄存器 I ）给出偏移量</p><div style="display: flex; justify-content: left; "> <img style="max-height: 200px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202404021407053.png" alt=""></div><blockquote><p>把变址寄存器Rx的内容与指令中给出的形式地址A相加，形成操作数有效地址，即EA&#x3D;(Rx)+A。Rx的内容称为变址值。<br>S&#x3D;((Rx)+A)</p></blockquote></li><li><p>相对寻址：相对寻址是基址寻址的一种变通，由程序计数器PC提供基准地址，指令中的地址码字段作为位移量D，两者相加后得到操作数的有效地址，即 <code>EA=(PC)+D</code>。位移量指出的是操作数和现行指令之间的相对位置。</p></li></ol><blockquote><p>相对寻址方式的特点：</p><ol><li>操作数的地址不是固定的，它随着PC值的变化而变化，并且与指令地址之间总是相差一个固定值±D。当指令地址改变时，由于其位移量不变，使得操作数与指令在可用的存储区内一起移动，所以仍能保证程序的正确执行。采用PC相对寻址方式编写的程序可在主存中任意浮动，它放在主存的任何地方，所执行的效果都是一样的。</li><li>由于指令中给出的位移量可正、可负，所以对于指令地址而言，操作数地址可能在指令地址之前或之后。</li></ol></blockquote><div style="display: flex; justify-content: left; ">    <img style="max-height: 200px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202404021407995.png" alt=""></div><ol start="8"><li>基址寻址：基址寄存器Rb的内容与指令中给出的位移量D相加，形成操作数有效地址，即EA&#x3D;(Rb)+D。基址寄存器的内容称为基址值。指令的地址码字段是一个位移量，位移量可正、可负。</li></ol><blockquote><p>S&#x3D;((Rb)+D)</p></blockquote><div style="display: flex; justify-content: left; ">    <img style="max-height: 200px;  width: auto; object-fit: contain; margin-right: 20px;" src="https://blog.212676.xyz/Picstorage/imgs/202404021407208.png" alt=""></div><h4 id="Conclution"><a href="#Conclution" class="headerlink" title="Conclution"></a>Conclution</h4><p>寻址方式指如何在指令中表示要访问的内存地址。表2.4列出了计算机中常用的寻址方式，其中数组mem表示存储器，数组regs表示寄存器，mem[regs[Rn]]表示由寄存器Rn的值作为存储器地址所访问的存储器值。</p><p>表 2.4: 常用寻址方式</p><table><thead><tr><th><strong>寻址方式</strong></th><th><strong>格式</strong></th><th><strong>含义</strong></th></tr></thead><tbody><tr><td><strong>寄存器寻址（Register）</strong></td><td><strong>ADD R1,R2</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+regs[R2]</strong></td></tr><tr><td><strong>立即数寻址（Immediate）</strong></td><td><strong>ADD R1,#2</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+2</strong></td></tr><tr><td><strong>偏移量寻址（Displacement）</strong></td><td><strong>ADD R1,100(R2)</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+mem[100+regs[R2]]</strong></td></tr><tr><td><strong>寄存器间接寻址（Reg.Indirect）</strong></td><td><strong>ADD R1,(R2)</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+mem[regs[R2]]</strong></td></tr><tr><td><strong>变址寻址（Indexed）</strong></td><td><strong>ADD R1,(R2+R3)</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+mem[regs[R2]+regs[R3]]</strong></td></tr><tr><td><strong>绝对寻址（Absolute）</strong></td><td><strong>ADD R1,(100)</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+mem[100]</strong></td></tr><tr><td><strong>存储器间接寻址（Mem.Indirect）</strong></td><td><strong>ADD R1,@(R2)</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+mem[mem[regs[R2]]]</strong></td></tr><tr><td><strong>自增量寻址（Autoincrement）</strong></td><td><strong>ADD R1,(R2)+</strong></td><td><strong>regs[R1]&#x3D;regs[R1]+mem[regs[R2]],regs[R2]&#x3D;regs[R2]+d</strong></td></tr><tr><td><strong>自减量寻址（Autodecrement）</strong></td><td><strong>ADD R1,-(R2)</strong></td><td><strong>regs[R2]&#x3D;regs[R2]-d,regs[R1]&#x3D;regs[R1]+mem[regs[R2]]</strong></td></tr><tr><td><strong>比例变址寻址（Scaled）</strong></td><td><strong>ADD R1,100(R2)(R3)</strong></td><td>*<em>regs[R1]&#x3D;regs[R1]+mem[100+regs[R2]+regs[R3]<em>d]</em></em></td></tr></tbody></table><h3 id="操作类型"><a href="#操作类型" class="headerlink" title="操作类型"></a>操作类型</h3><ol><li>算数和逻辑运算指令：加减乘除&#x2F;比较&#x2F;加一减一&#x2F;位运算</li><li>移位指令</li><li>传送指令</li><li>串指令</li><li>顺序控制指令：转移、跳转、跳步、调用、返回</li><li>CPU控制指令</li><li>输入输出指令</li></ol><h3 id="操作码编码"><a href="#操作码编码" class="headerlink" title="操作码编码"></a>操作码编码</h3><ol><li>定长操作码编码：</li></ol><blockquote><p>长度固定，译码方便，执行指令速度快，但有信息冗余。</p></blockquote><ol><li>扩展操作码编码：</li></ol><blockquote><p>几种固定长度的格式，4-8-12，3-6-9等，多用于非规整性指令集</p></blockquote><h3 id="异常以及中断处理"><a href="#异常以及中断处理" class="headerlink" title="异常以及中断处理"></a>异常以及中断处理</h3><h4 id="异常-exception："><a href="#异常-exception：" class="headerlink" title="异常 exception："></a>异常 exception：</h4><p>也称为例外，执行时cpu内部发生的。</p><ol><li>故障：遇到终止程序执行。</li><li>自陷：人为埋设，例如断点、单步追踪，处理结束返回下条继续执行。</li><li>终止：特殊事件，每条指令执行完都检查有无中断指令，有则将 <code>下条指令</code>作为断点保存，并转到相应断点服务执行，结束后返回断点继续。<blockquote><p>终止与指令执行无关，由CPU外部的I&#x2F;O部件通过专门的中断请求线向CPU请求</p></blockquote></li></ol><h2 id="程序的机器级表示"><a href="#程序的机器级表示" class="headerlink" title="程序的机器级表示"></a>程序的机器级表示</h2><p>略</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;计算机组成原理笔记&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="计算机组成原理" scheme="http://blog.212676.xyz/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/"/>
    
    <category term="笔记" scheme="http://blog.212676.xyz/tags/%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>基于quatrus的verilog学习</title>
    <link href="http://blog.212676.xyz/2024/03/28/%E5%9F%BA%E4%BA%8Equatrus%E7%9A%84verilog%E5%AD%A6%E4%B9%A0/"/>
    <id>http://blog.212676.xyz/2024/03/28/%E5%9F%BA%E4%BA%8Equatrus%E7%9A%84verilog%E5%AD%A6%E4%B9%A0/</id>
    <published>2024-03-28T13:42:53.000Z</published>
    <updated>2024-06-26T04:57:15.810Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>quartus是一个配置麻烦的硬件编程平台，本文包括安装配置到常见问题解答，环境优化。</p></blockquote><span id="more"></span><h1 id="quatrus安装以及modelsim配置"><a href="#quatrus安装以及modelsim配置" class="headerlink" title="quatrus安装以及modelsim配置"></a>quatrus安装以及modelsim配置</h1><ol><li>quatrus 不操作</li><li><code>modism.exe </code>的文件夹加入到path</li><li><code>modism</code>文件夹下，<code>win64</code>下 <code>LISCENSE.TXT</code> 加入到 <code>path（user）</code></li></ol><p><code>tools-&gt;options-&gt;general-&gt;eda tools</code> 中设置<code>modelsim</code>路径<code>D:\Program\modeltech64_10.4\win64</code>（exe路径文件夹）</p><h1 id="常见问题解决以及优化"><a href="#常见问题解决以及优化" class="headerlink" title="常见问题解决以及优化"></a>常见问题解决以及优化</h1><h2 id="设置编译器件库位置（新项目都需要）"><a href="#设置编译器件库位置（新项目都需要）" class="headerlink" title="设置编译器件库位置（新项目都需要）"></a>设置编译器件库位置（新项目都需要）</h2><p>同时也解决了  Quartus Prime18.0 中解决仿真报错<code> Error: (vsim-19) Failed to access library</code> 的问题</p><ol><li>点击<code>Tools-&gt;Launch Simulation Library Compile</code>;</li><li>设置<code>“Output directory&quot;</code>为：<code>&#123;项目文件夹&#125;/simulation/qsim</code>，在进行编译,如此设置以后，波形图<code>simulation-&gt;simulation settings</code>中的路径直接默认就行</li></ol><blockquote><p>（主要是这里编译的器件库路径要匹配波形图<code>simulation-&gt;simulation settings</code>中的路径）</p></blockquote><h2 id="联合vscode开发"><a href="#联合vscode开发" class="headerlink" title="联合vscode开发"></a>联合vscode开发</h2><p>点击<code>tools</code>中的<code>options</code>，点击其中的 <code>preferred text editor</code>，在 <code>textx editor</code>栏中选择<code>custom</code>，在<code>command-line</code>中添加如下的信息<code>&quot;E:\Microsoft VS Code\Code.exe&quot; -r -g %f:%l</code></p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;quartus是一个配置麻烦的硬件编程平台，本文包括安装配置到常见问题解答，环境优化。&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="环境配置" scheme="http://blog.212676.xyz/tags/%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/"/>
    
    <category term="verilog" scheme="http://blog.212676.xyz/tags/verilog/"/>
    
    <category term="vscode" scheme="http://blog.212676.xyz/tags/vscode/"/>
    
    <category term="破解软件" scheme="http://blog.212676.xyz/tags/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6/"/>
    
    <category term="quartus" scheme="http://blog.212676.xyz/tags/quartus/"/>
    
    <category term="modelsim" scheme="http://blog.212676.xyz/tags/modelsim/"/>
    
  </entry>
  
  <entry>
    <title>MS_Office精简下载安装激活</title>
    <link href="http://blog.212676.xyz/2024/03/24/MS-Office%E7%B2%BE%E7%AE%80%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85%E6%BF%80%E6%B4%BB/"/>
    <id>http://blog.212676.xyz/2024/03/24/MS-Office%E7%B2%BE%E7%AE%80%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85%E6%BF%80%E6%B4%BB/</id>
    <published>2024-03-24T11:20:49.000Z</published>
    <updated>2024-06-26T05:05:35.456Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>基于VL版本office的MS_Office精简下载安装激活</p></blockquote><span id="more"></span><p><a href="https://www.youtube.com/watch?v=VSjRx7Hoa60">YouTube视频</a></p><h1 id="下载官方部署器"><a href="#下载官方部署器" class="headerlink" title="下载官方部署器"></a>下载官方部署器</h1><p>访问官方部署器地址：<br><a href="https://www.microsoft.com/en-us/download/details.aspx?id=49117">https://www.microsoft.com/en-us/download/details.aspx?id=49117</a></p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202403241859813.png"></p><p>直接点击download，下载，并运行。</p><p>选择一空文件夹，完成程序。</p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202403241901381.png"></p><h1 id="下载部署自定义文件"><a href="#下载部署自定义文件" class="headerlink" title="下载部署自定义文件"></a>下载部署自定义文件</h1><p>访问自定义网址：<br><a href="https://config.office.com/deploymentsettings">https://config.office.com/deploymentsettings</a></p><p><img src="https://blog.212676.xyz/Picstorage/imgs/202403241902791.png"></p><p>选择: 64位 批量许可证版本的office套件，对应的visio、project（这俩还看起来挺有用的，不用的话选择无）其他产品选择 语言包</p><p>应用-&gt;选择需要的项目</p><p>语言-&gt;选择中文</p><p>剩下的全部默认</p><p>导出-&gt;保留当前设置，命名为config</p><p>下载该文件，并导入当刚刚的文件夹中</p><h1 id="下载、安装"><a href="#下载、安装" class="headerlink" title="下载、安装"></a>下载、安装</h1><p>管理员cmd，cd到刚刚的文件夹</p><p>运行 setup &#x2F;download config.xml</p><p>等待命令运行完毕（没有提示，等待弹出下一个输入框）</p><p>运行 setup &#x2F;configure config.xml</p><p>等待安装完成，重启，看是否激活</p><p>未激活就管理员cmd格式下cd C:\Program Files\Microsoft Office\Office16 重启并查看激活状态</p><p>还不行直接使用网上搜的kms激活VL版本office方法。</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;基于VL版本office的MS_Office精简下载安装激活&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="环境配置" scheme="http://blog.212676.xyz/tags/%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/"/>
    
  </entry>
  
  <entry>
    <title>【UltraISO】中文破解版</title>
    <link href="http://blog.212676.xyz/2024/03/23/%E3%80%90UltraISO%E3%80%91%E4%B8%AD%E6%96%87%E7%A0%B4%E8%A7%A3%E7%89%88/"/>
    <id>http://blog.212676.xyz/2024/03/23/%E3%80%90UltraISO%E3%80%91%E4%B8%AD%E6%96%87%E7%A0%B4%E8%A7%A3%E7%89%88/</id>
    <published>2024-03-23T12:43:27.000Z</published>
    <updated>2024-06-26T04:57:15.810Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>UltraISO 中文破解版 下载链接以及激活码</p></blockquote><span id="more"></span><p>下载链接：<br><a href="https://cn.ultraiso.net/uiso9_cn.exe">https://cn.ultraiso.net/uiso9_cn.exe</a></p><p>简体中文版专用：</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">注册名：Guanjiu</span><br><span class="line">注册码：A06C-83A7-701D-6CFC</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><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">注册名: Home</span><br><span class="line">注册码: 4BA9-0D54-214A-C938</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;UltraISO 中文破解版 下载链接以及激活码&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="破解软件" scheme="http://blog.212676.xyz/tags/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6/"/>
    
  </entry>
  
  <entry>
    <title>c++ &amp; Linux 操作系统进程相关操作</title>
    <link href="http://blog.212676.xyz/2024/03/22/linux-cpp-progress/"/>
    <id>http://blog.212676.xyz/2024/03/22/linux-cpp-progress/</id>
    <published>2024-03-22T11:42:28.000Z</published>
    <updated>2024-06-26T04:57:15.810Z</updated>
    
    <content type="html"><![CDATA[<p>实现进程管理协同</p><span id="more"></span><h1 id="fork"><a href="#fork" class="headerlink" title="fork()"></a>fork()</h1><h1 id="pipe-实现进程通信"><a href="#pipe-实现进程通信" class="headerlink" title="pipe() 实现进程通信"></a>pipe() 实现进程通信</h1><blockquote><p>每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到，所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。</p></blockquote><h2 id="API函数的使用以及注意点"><a href="#API函数的使用以及注意点" class="headerlink" title="API函数的使用以及注意点"></a>API函数的使用以及注意点</h2><figure class="highlight c++"><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="meta">#<span class="keyword">include</span> <span class="string">&lt;unistd.h&gt;</span></span></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">pipe</span><span class="params">(<span class="type">int</span> pipefd[<span class="number">2</span>])</span></span>;</span><br></pre></td></tr></table></figure><p><strong>参数说明：</strong></p><ul><li>fd为文件描述符数组，其中fd[0]表示读端，fd[1] 表示写端</li></ul><p><strong>返回值：</strong></p><ul><li>成功返回0，失败返回-1，并且设置errno。</li></ul><p><strong>注意点：</strong></p><ol><li>管道内 <code>没有数据</code>时，<code>读端（read）</code>发生 <code>阻塞</code>，等待有效数据进行读取</li><li>管道容量被 <code>数据填满</code>时，<code>写端（write）发生阻塞</code>，等待进程将数据读走再进行写入</li><li>如果所有管道 <code>写端对应的文件描述符被关闭</code>，<code>read返回0</code>，但会将之前管道里的数据读完</li><li>如果所有管道的 <code>读端对应的文件描述符被关闭</code>，<code>write操作会产生信号，SIGPIPE</code>,进而导致write进程退出</li><li>当要写入的数据量不大于管道的容量（PIPE_BUF）时，linux将保证写入的原子性</li><li>当要写入的数据量大于管道容量(PIPE_BUF)时，linux将不再保证写入的原子性</li></ol><h2 id="fork子进程并使用pipe通信"><a href="#fork子进程并使用pipe通信" class="headerlink" title="fork子进程并使用pipe通信"></a>fork子进程并使用pipe通信</h2><figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><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"></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;unistd.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;sys/types.h&gt;</span></span></span><br><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 class="meta">#<span class="keyword">include</span> <span class="string">&lt;string&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;sys/wait.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> pipe_fd[<span class="number">2</span>]; <span class="comment">// 0 for reading, 1 for writing</span></span><br><span class="line">    <span class="type">pid_t</span> cpid;</span><br><span class="line">    <span class="type">char</span> buf;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 创建管道</span></span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">pipe</span>(pipe_fd) == <span class="number">-1</span>) &#123;</span><br><span class="line">        <span class="built_in">perror</span>(<span class="string">&quot;pipe&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">4</span>; ++i) &#123;</span><br><span class="line">        cpid = fork();</span><br><span class="line">        <span class="keyword">if</span> (cpid == <span class="number">-1</span>) &#123;</span><br><span class="line">            <span class="built_in">perror</span>(<span class="string">&quot;fork&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (cpid == <span class="number">0</span>) &#123; <span class="comment">// 子进程</span></span><br><span class="line">            <span class="built_in">close</span>(pipe_fd[<span class="number">0</span>]); <span class="comment">// 关闭读端</span></span><br><span class="line"></span><br><span class="line">            <span class="comment">// 发送消息</span></span><br><span class="line">            string message = <span class="string">&quot;Child &quot;</span> + <span class="built_in">to_string</span>(<span class="built_in">getpid</span>()) + <span class="string">&quot; is sending a message to parent!\n&quot;</span>;</span><br><span class="line">            <span class="built_in">write</span>(pipe_fd[<span class="number">1</span>], message.<span class="built_in">c_str</span>(), message.<span class="built_in">length</span>());</span><br><span class="line"></span><br><span class="line">            <span class="built_in">close</span>(pipe_fd[<span class="number">1</span>]); <span class="comment">// 发送完毕，关闭写端</span></span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="comment">// 父进程不立即关闭管道，等待所有子进程发送完毕</span></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="built_in">close</span>(pipe_fd[<span class="number">1</span>]); <span class="comment">// 关闭写端</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> (<span class="built_in">read</span>(pipe_fd[<span class="number">0</span>], &amp;buf, <span class="number">1</span>) &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="built_in">write</span>(STDOUT_FILENO, &amp;buf, <span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">close</span>(pipe_fd[<span class="number">0</span>]); <span class="comment">// 关闭读端</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// 等待所有子进程退出</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">4</span>; ++i) &#123;</span><br><span class="line">        <span class="built_in">wait</span>(<span class="literal">NULL</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="shmget-shmat-shmdt-shmctl-实现进程间数据同步"><a href="#shmget-shmat-shmdt-shmctl-实现进程间数据同步" class="headerlink" title="shmget() shmat() shmdt() shmctl() 实现进程间数据同步"></a>shmget() shmat() shmdt() shmctl() 实现进程间数据同步</h2><blockquote><p>int shmget(key_t key, size_t size, int shmflg);</p></blockquote><p>目的：用于创建新的共享内存段或访问一个已存在的共享内存段。</p><blockquote><p>void *shmat(int shmid, const void *shmaddr, int shmflg);</p></blockquote><p>目的：将共享内存段附加到调用进程的地址空间。</p><blockquote><p>int shmdt(const void *shmaddr);</p></blockquote><p>目的：将共享内存段从当前进程的地址空间分离。</p><blockquote><p>int shmctl(int shmid, int cmd, struct shmid_ds *buf);</p></blockquote><p>目的：对共享内存段执行各种控制操作。</p><h3 id="示例程序"><a href="#示例程序" class="headerlink" title="示例程序"></a>示例程序</h3><p>.&#x2F;2.cpp:</p><figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><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><br><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 class="meta">#<span class="keyword">include</span> <span class="string">&lt;sys/ipc.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;sys/shm.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;unistd.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> SHM_SIZE 512  <span class="comment">// 定义共享内存的大小</span></span></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> </span>&#123;</span><br><span class="line">    <span class="type">key_t</span> key = <span class="built_in">ftok</span>(<span class="string">&quot;shmfile&quot;</span>,<span class="number">65</span>);  <span class="comment">// 生成唯一键</span></span><br><span class="line">    <span class="type">int</span> shmid = <span class="built_in">shmget</span>(key, SHM_SIZE, <span class="number">0666</span>|IPC_CREAT);  <span class="comment">// 创建共享内存</span></span><br><span class="line">    <span class="keyword">if</span> (shmid == <span class="number">-1</span>) &#123;</span><br><span class="line">        <span class="built_in">perror</span>(<span class="string">&quot;shmget&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 将共享内存附加到进程的地址空间</span></span><br><span class="line">    <span class="type">char</span> *data = (<span class="type">char</span>*) <span class="built_in">shmat</span>(shmid, (<span class="type">void</span>*)<span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line">    <span class="keyword">if</span> (data == (<span class="type">char</span>*)(<span class="number">-1</span>)) &#123;</span><br><span class="line">        <span class="built_in">perror</span>(<span class="string">&quot;shmat&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 等待进程B写入数据</span></span><br><span class="line">    std::cout &lt;&lt; <span class="string">&quot;Waiting for process B to write data...\n&quot;</span>;</span><br><span class="line">    <span class="built_in">sleep</span>(<span class="number">5</span>);  <span class="comment">// 简单的同步机制，等待几秒</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// 显示共享内存中的数据</span></span><br><span class="line">    std::cout &lt;&lt; <span class="string">&quot;Data read from shared memory: &quot;</span> &lt;&lt; data &lt;&lt; std::endl;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 分离共享内存</span></span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">shmdt</span>(data) == <span class="number">-1</span>) &#123;</span><br><span class="line">        <span class="built_in">perror</span>(<span class="string">&quot;shmdt&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 删除共享内存</span></span><br><span class="line">    <span class="built_in">shmctl</span>(shmid, IPC_RMID, <span class="literal">NULL</span>);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>.&#x2F;2.1.cpp:</p><figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><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></pre></td><td class="code"><pre><span class="line"></span><br><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 class="meta">#<span class="keyword">include</span> <span class="string">&lt;sys/ipc.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;sys/shm.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> SHM_SIZE 512  <span class="comment">// 定义共享内存的大小</span></span></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> </span>&#123;</span><br><span class="line">    <span class="type">key_t</span> key = <span class="built_in">ftok</span>(<span class="string">&quot;shmfile&quot;</span>,<span class="number">65</span>);  <span class="comment">// 生成唯一键</span></span><br><span class="line">    <span class="type">int</span> shmid = <span class="built_in">shmget</span>(key, SHM_SIZE, <span class="number">0666</span>);  <span class="comment">// 访问共享内存</span></span><br><span class="line">    <span class="keyword">if</span> (shmid == <span class="number">-1</span>) &#123;</span><br><span class="line">        <span class="built_in">perror</span>(<span class="string">&quot;shmget&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 将共享内存附加到进程的地址空间</span></span><br><span class="line">    <span class="type">char</span> *data = (<span class="type">char</span>*) <span class="built_in">shmat</span>(shmid, (<span class="type">void</span>*)<span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line">    <span class="keyword">if</span> (data == (<span class="type">char</span>*)(<span class="number">-1</span>)) &#123;</span><br><span class="line">        <span class="built_in">perror</span>(<span class="string">&quot;shmat&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 向共享内存写入数据</span></span><br><span class="line">    std::cout &lt;&lt; <span class="string">&quot;Writing to shared memory\n&quot;</span>;</span><br><span class="line">    std::<span class="built_in">strncpy</span>(data, <span class="string">&quot;Hello from process B!&quot;</span>, SHM_SIZE);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 分离共享内存</span></span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">shmdt</span>(data) == <span class="number">-1</span>) &#123;</span><br><span class="line">        <span class="built_in">perror</span>(<span class="string">&quot;shmdt&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;实现进程管理协同&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>AcWing 796.子矩阵的和</title>
    <link href="http://blog.212676.xyz/2024/03/18/%E5%AD%90%E7%9F%A9%E9%98%B5%E7%9A%84%E5%92%8C/"/>
    <id>http://blog.212676.xyz/2024/03/18/%E5%AD%90%E7%9F%A9%E9%98%B5%E7%9A%84%E5%92%8C/</id>
    <published>2024-03-18T15:21:02.000Z</published>
    <updated>2024-06-26T05:05:35.448Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>AcWing 796.子矩阵的和</p></blockquote><span id="more"></span><p>第二层矩阵存当前（0，0）-（x，y）和，求x1yx1-x2y2类似于求面积<br><img src="https://blog.212676.xyz/Picstorage/imgs/20240318231648.jpg" height="200" width="200" /><br>可理解为坡度(大概)<br><img src="https://blog.212676.xyz/Picstorage/imgs/20240318231647.jpg" height="200" width="200" /></p><figure class="highlight cpp"><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></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 class="meta">#<span class="keyword">include</span><span class="string">&lt;cmath&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;string&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;iomanip&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;map&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;set&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="keyword">typedef</span> <span class="type">long</span> <span class="type">long</span> ll;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">100010</span>;</span><br><span class="line">ll v[N][<span class="number">1000</span>][<span class="number">2</span>]=&#123;<span class="number">0</span>&#125;;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> n,m,q;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m&gt;&gt;q;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">1</span>;j&lt;=n;j++)&#123;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=m;i++)&#123;</span><br><span class="line">                cin&gt;&gt;v[j][i][<span class="number">0</span>];</span><br><span class="line">                v[j][i][<span class="number">1</span>]=v[j<span class="number">-1</span>][i][<span class="number">1</span>]+v[j][i<span class="number">-1</span>][<span class="number">1</span>]-v[j<span class="number">-1</span>][i<span class="number">-1</span>][<span class="number">1</span>]+v[j][i][<span class="number">0</span>];</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> x1,y1,x2,y2,count;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;q;i++)&#123;</span><br><span class="line">        count=<span class="number">0</span>;</span><br><span class="line">        cin&gt;&gt;x1&gt;&gt;y1&gt;&gt;x2&gt;&gt;y2;</span><br><span class="line">        ll count=v[x2][y2][<span class="number">1</span>]-v[x2][y1<span class="number">-1</span>][<span class="number">1</span>]-v[x1<span class="number">-1</span>][y2][<span class="number">1</span>]+v[x1<span class="number">-1</span>][y1<span class="number">-1</span>][<span class="number">1</span>];</span><br><span class="line">        cout&lt;&lt;count&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;AcWing 796.子矩阵的和&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="c++" scheme="http://blog.212676.xyz/tags/c/"/>
    
  </entry>
  
  <entry>
    <title>费曼技巧</title>
    <link href="http://blog.212676.xyz/2024/03/17/%E8%B4%B9%E6%9B%BC%E6%8A%80%E5%B7%A7/"/>
    <id>http://blog.212676.xyz/2024/03/17/%E8%B4%B9%E6%9B%BC%E6%8A%80%E5%B7%A7/</id>
    <published>2024-03-17T16:16:20.000Z</published>
    <updated>2024-06-26T04:57:15.810Z</updated>
    
    <content type="html"><![CDATA[<blockquote><pre><code>所谓的“费曼技巧”，来源模糊，需要调查确认，在网上找到了两项证据，可以支持**【**  **通过向别人清楚地解说一件事，来确认自己真的弄懂了这件事。**  **】** ，但费曼本人是否提出过【费曼技巧】，尚未找到证据。无论如何，**上网时请不要轻信未经证实的信息。**</code></pre></blockquote><span id="more"></span><p><a href="https://www.zhihu.com/question/20576786">知乎原文</a></p><h1 id="费曼和他的老师曾经提倡过“以教促学”"><a href="#费曼和他的老师曾经提倡过“以教促学”" class="headerlink" title="费曼和他的老师曾经提倡过“以教促学”"></a>费曼和他的老师曾经提倡过“以教促学”</h1><blockquote><p>原文来自<a href="https://link.zhihu.com/?target=http://www.quora.com/Learning-New-Things/How-can-you-learn-faster/answer/Acaz-Pereira"> Quora: 如何才能学得快一些 (How can you learn faster)</a></p></blockquote><ul><li>第一步 - 选择一个你想要理解的概念选择一个你想要理解的概念, 然后拿出一张白纸, 把这个概念写在白纸的最上边.</li><li>第二步 - 设想一种场景，你正要向别人传授这个概念在白纸上写下你对这个概念的解释, 就好像你正在教导一位新接触这个概念的学生一样. 当你这样做的时候, 你会更清楚地意识到关于这个概念你理解了多少, 以及是否还存在理解不清的地方.</li><li>第三步 - 如果你感觉卡壳了, 就回顾一下学习资料无论何时你感觉卡壳了, 都要回到原始的学习资料并重新学习让你感到卡壳的那部分, 直到你领会得足够顺畅, 顺畅到可以在纸上解释这个部分为止.第四步 - 为了让你的讲解通俗易懂，简化语言表达最终的目的, 是用你自己的语言, 而不是学习资料中的语言来解释概念. 如果你的解释很冗长或者令人迷惑, 那就说明你对概念的理解可能并没有你自己想象得那么顺畅 – 你要努力简化语言表达, 或者与已有的知识建立一种类比关系, 以便更好地理解它。</li></ul>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;所谓的“费曼技巧”，来源模糊，需要调查确认，在网上找到了两项证据，可以支持**【**  **通过向别人清楚地解说一件事，来确认自己真的弄懂了这件事。**  **】** ，但费曼本人是否提出过【费曼技巧】，尚未找到证据。无论如何，**上网时请不要轻信未经证实的信息。**
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>LLM 学习笔记</title>
    <link href="http://blog.212676.xyz/2024/03/12/LLM%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <id>http://blog.212676.xyz/2024/03/12/LLM%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <published>2024-03-12T14:15:16.000Z</published>
    <updated>2024-06-26T05:05:35.452Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>大型语言模型（llm）是一种特殊的预训练语言模型，通过调整模型大小、预训练语料库和计算来获得。由于llm规模大，对大量文本数据进行预训练，表现出特殊的能力，能够在许多自然语言处理任务中不经过任何特定任务训练的情况下取得显著的性能。<br>llm的时代始于OpenAI的GPT-3模型，在ChatGPT和GPT4等模型的引入后，llm的流行程度呈指数级增长。<br>LLM 表现出根据相对较少量的提示或输入做出预测的非凡能力。LLM 可用于生成式人工智能，以根据采用人类语言的输入提示生成内容。</p></blockquote><span id="more"></span><h1 id="基于transformer架构的LLM："><a href="#基于transformer架构的LLM：" class="headerlink" title="基于transformer架构的LLM："></a>基于transformer架构的LLM：</h1><p>自注意力机制，关注词和当前输入序列的所有词的关系，提高训练速度</p><p><img src="https://blog.212676.xyz/Picstorage/imgs/20240312221224.png"></p><h2 id="文本token化"><a href="#文本token化" class="headerlink" title="文本token化"></a>文本token化</h2><p>每个被一个整数表示</p><p>传入嵌入层，每个token被一个向量表示（词向量），向量空间中可以表示更多相关性（多维度）</p><h2 id="位置编码"><a href="#位置编码" class="headerlink" title="位置编码"></a>位置编码</h2><p>代表词位置的位置向量与词向量组合，使模型同时理解词的意义以及在句中的关系</p><h2 id="编码器（多级串联-更深入了解）"><a href="#编码器（多级串联-更深入了解）" class="headerlink" title="编码器（多级串联-&gt;更深入了解）"></a>编码器（多级串联-&gt;更深入了解）</h2><p>多头自注意力机制-&gt; 词之间相关性表示权重</p><blockquote><p>有多头自注意力机制，用来关注文本不同特征方面（动词、名词），并行运算互不影响，每个头的权重是训练中调整的。</p></blockquote><p>位置编码的向量传入，加入自注意力机制的权重表示，输出（三种信息融合在向量里）向量。（同一个词，上下文不同表示不同）</p><p>前馈神经网络，增加模型表达能力</p><h2 id="解码器（生成）"><a href="#解码器（生成）" class="headerlink" title="解码器（生成）"></a>解码器（生成）</h2><p>一个特殊值（便于考虑之前已经生成的上文保持上下文连贯性）已生成的输出序列经过另一编码器，但使用 <code>带掩码的多头自注意力机制</code>，即自注意力头只关注当前词和其之前的词的关系权重，</p><blockquote><p>确保解码器生成文本遵循正确时间顺序</p></blockquote><p>编码器传出的向量（token的抽象表示）-&gt;多头自注意力</p><p>用来捕捉解码器即将产生成的输出以及编码器输入之间的关系，使输入序列信息融合到解码器输出中</p><p>前馈神经网络，增加模型表达能力</p><p><img src="https://blog.212676.xyz/Picstorage/imgs/20240312221223.png"></p><p>线性层，softmax层，转换解码器输出到词汇表概率分布（实现猜下一个词）</p><h2 id="扩展"><a href="#扩展" class="headerlink" title="扩展"></a>扩展</h2><p>仅解码器：掩码语言建模、情感分析 BERT</p><p>仅解码器：猜测上下文文本生成 GPT2、3</p><p>解码器解码器模型&#x2F; 序列到序列模型：翻译总结  T5、bart</p>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;大型语言模型（llm）是一种特殊的预训练语言模型，通过调整模型大小、预训练语料库和计算来获得。由于llm规模大，对大量文本数据进行预训练，表现出特殊的能力，能够在许多自然语言处理任务中不经过任何特定任务训练的情况下取得显著的性能。&lt;br&gt;llm的时代始于OpenAI的GPT-3模型，在ChatGPT和GPT4等模型的引入后，llm的流行程度呈指数级增长。&lt;br&gt;LLM 表现出根据相对较少量的提示或输入做出预测的非凡能力。LLM 可用于生成式人工智能，以根据采用人类语言的输入提示生成内容。&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="LLM" scheme="http://blog.212676.xyz/tags/LLM/"/>
    
    <category term="AI" scheme="http://blog.212676.xyz/tags/AI/"/>
    
    <category term="GPT" scheme="http://blog.212676.xyz/tags/GPT/"/>
    
  </entry>
  
  <entry>
    <title>Icarus主题的一些常用配置</title>
    <link href="http://blog.212676.xyz/2024/03/10/Icarus%E4%B8%BB%E9%A2%98%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E9%85%8D%E7%BD%AE/"/>
    <id>http://blog.212676.xyz/2024/03/10/Icarus%E4%B8%BB%E9%A2%98%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E9%85%8D%E7%BD%AE/</id>
    <published>2024-03-10T05:44:43.000Z</published>
    <updated>2024-09-27T09:35:15.884Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>常见的一些配置见_config.icarus.yml，英文不差都能看懂，或者去看icarus文档。本文主要就是一些网上很少的配置。</p></blockquote><span id="more"></span><p>Icarus: 4.0.0</p><h3 id="本地和部署更新不同步"><a href="#本地和部署更新不同步" class="headerlink" title="本地和部署更新不同步"></a>本地和部署更新不同步</h3><pre><code>删除public文件夹重新生成</code></pre><h3 id="文章页面两栏布局"><a href="#文章页面两栏布局" class="headerlink" title="文章页面两栏布局"></a>文章页面两栏布局</h3><p>在 <code>_config.icarus.yml</code>目录下，创建 <code>_config.post.yml</code>文件，该文件内容与 <code>_config.icarus.yml</code>文件一样，用于单独加载post界面布局。注意，双栏需要将widgets内容的position都设置为同一边。</p><figure class="highlight xml"><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></pre></td><td class="code"><pre><span class="line"># 单独文章界面布局</span><br><span class="line">widgets:</span><br><span class="line">    # 个人信息</span><br><span class="line">    -</span><br><span class="line">        position: left</span><br><span class="line">        type: profile</span><br><span class="line">        author: zhaommmmomo</span><br><span class="line">        author_title: fahaxiki!</span><br><span class="line">        location: Yantai,China</span><br><span class="line">        avatar: /img/logo.jpg</span><br><span class="line">        avatar_rounded: false</span><br><span class="line">        follow_link: &#x27;https://zhaommmmomo.cn&#x27;</span><br><span class="line">        social_links:</span><br><span class="line">            Github:</span><br><span class="line">                icon: fab fa-github</span><br><span class="line">                url: &#x27;https://github.com/zhaommmmomo&#x27;</span><br><span class="line">    # 文章目录</span><br><span class="line">    -</span><br><span class="line">        position: left</span><br><span class="line">        type: toc</span><br><span class="line">        # 目录序号</span><br><span class="line">        index: true</span><br><span class="line"># 侧边栏是否固定</span><br><span class="line">sidebar:</span><br><span class="line">    left:</span><br><span class="line">        sticky: false</span><br><span class="line">    right:</span><br><span class="line">        sticky: false</span><br></pre></td></tr></table></figure><h3 id="增加两栏布局下文章的宽度"><a href="#增加两栏布局下文章的宽度" class="headerlink" title="增加两栏布局下文章的宽度"></a>增加两栏布局下文章的宽度</h3><figure class="highlight jsx"><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></pre></td><td class="code"><pre><span class="line"># layout/layout.<span class="property">jsx</span></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = <span class="keyword">class</span> <span class="title class_">extends</span> <span class="title class_">Component</span> &#123;</span><br><span class="line">    <span class="title function_">render</span>(<span class="params"></span>) &#123;</span><br><span class="line">        ......</span><br><span class="line">            &lt;<span class="title class_">Head</span> site=&#123;site&#125; config=&#123;config&#125; helper=&#123;helper&#125; page=&#123;page&#125; /&gt;</span><br><span class="line">        </span><br><span class="line">            # &lt;body <span class="keyword">class</span>=&#123;<span class="string">`is-<span class="subst">$&#123;columnCount&#125;</span>-column`</span>&#125;&gt;修改为下面一行</span><br><span class="line">            &lt;body <span class="keyword">class</span>=&#123;<span class="string">`is-3-column`</span>&#125;&gt;</span><br><span class="line">                ......</span><br><span class="line">                                # <span class="string">&#x27;is-8-tablet is-8-desktop is-8-widescreen&#x27;</span>: columnCount === <span class="number">2</span></span><br><span class="line">            # 修改为下面一行</span><br><span class="line">                                <span class="string">&#x27;is-8-tablet is-8-desktop is-9-widescreen&#x27;</span>: columnCount === <span class="number">2</span>,</span><br><span class="line">                                <span class="string">&#x27;is-8-tablet is-8-desktop is-6-widescreen&#x27;</span>: columnCount === <span class="number">3</span></span><br><span class="line">                            &#125;)&#125; dangerouslySetInnerHTML=&#123;&#123; <span class="attr">__html</span>: body &#125;&#125;&gt;&lt;/div&gt;</span><br><span class="line">......</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"># layout/common/widgets.<span class="property">jsx</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">getColumnSizeClass</span>(<span class="params">columnCount</span>) &#123;</span><br><span class="line">    <span class="keyword">switch</span> (columnCount) &#123;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line">            # <span class="keyword">return</span> <span class="string">&#x27;is-4-tablet is-4-desktop is-4-widescreen&#x27;</span>;# 修改为下面一行</span><br><span class="line">            <span class="keyword">return</span> <span class="string">&#x27;is-4-tablet is-4-desktop is-3-widescreen&#x27;</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line">            <span class="keyword">return</span> <span class="string">&#x27;is-4-tablet is-4-desktop is-3-widescreen&#x27;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="只固定目录"><a href="#只固定目录" class="headerlink" title="只固定目录"></a>只固定目录</h3><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"># source/js/main.<span class="property">js</span></span><br><span class="line"><span class="keyword">const</span> $toc = $(<span class="string">&#x27;#toc&#x27;</span>);</span><br><span class="line"><span class="keyword">if</span> ($toc.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">    $toc.<span class="title function_">addClass</span>(<span class="string">&#x27;column-left is-sticky&#x27;</span>);# 添加</span><br><span class="line">    ......</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight styl"><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"># include/style/widget<span class="selector-class">.styl</span> 添加下面</span><br><span class="line"><span class="selector-id">#toc</span></span><br><span class="line">    <span class="attribute">max-height</span>: <span class="built_in">calc</span>(<span class="number">100vh</span> - <span class="number">22px</span>)</span><br><span class="line">    <span class="attribute">overflow-y</span>: scroll</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;常见的一些配置见_config.icarus.yml，英文不差都能看懂，或者去看icarus文档。本文主要就是一些网上很少的配置。&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    <category term="博客编写记录" scheme="http://blog.212676.xyz/categories/%E5%8D%9A%E5%AE%A2%E7%BC%96%E5%86%99%E8%AE%B0%E5%BD%95/"/>
    
    
    <category term="icarus" scheme="http://blog.212676.xyz/tags/icarus/"/>
    
    <category term="hexo" scheme="http://blog.212676.xyz/tags/hexo/"/>
    
  </entry>
  
</feed>
